mirror of
https://github.com/fabianonline/telegram_backup.git
synced 2024-11-22 16:56:16 +00:00
The code is now compiling, but still largely untested. So it's still kinda WIP.
This commit is contained in:
parent
77efde1136
commit
ec4097e777
@ -41,7 +41,6 @@ class CommandLineController(val options: CommandLineOptions) {
|
|||||||
val handler: TelegramUpdateHandler
|
val handler: TelegramUpdateHandler
|
||||||
var client: TelegramClient
|
var client: TelegramClient
|
||||||
val user_manager: UserManager
|
val user_manager: UserManager
|
||||||
val inisettings: IniSettings
|
|
||||||
val settings: Settings
|
val settings: Settings
|
||||||
val database: Database
|
val database: Database
|
||||||
logger.info("CommandLineController started. App version {}", Config.APP_APPVER)
|
logger.info("CommandLineController started. App version {}", Config.APP_APPVER)
|
||||||
@ -63,7 +62,7 @@ class CommandLineController(val options: CommandLineOptions) {
|
|||||||
|
|
||||||
// Setup file_base
|
// Setup file_base
|
||||||
logger.debug("Target dir from Config: {}", Config.TARGET_DIR.anonymize())
|
logger.debug("Target dir from Config: {}", Config.TARGET_DIR.anonymize())
|
||||||
target_dir = options.values.get("target")?.last() ?: Config.TARGET_DIR
|
target_dir = options.values.get("target") ?: Config.TARGET_DIR
|
||||||
logger.debug("Target dir after options: {}", target_dir)
|
logger.debug("Target dir after options: {}", target_dir)
|
||||||
println("Base directory for files: ${target_dir.anonymize()}")
|
println("Base directory for files: ${target_dir.anonymize()}")
|
||||||
|
|
||||||
@ -73,16 +72,16 @@ class CommandLineController(val options: CommandLineOptions) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (options.booleans.contains("login")) {
|
if (options.booleans.contains("login")) {
|
||||||
cmd_login(app, target_dir, options.values.get("account")?.last())
|
cmd_login(app, target_dir, options.values.get("account"))
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.trace("Checking accounts")
|
logger.trace("Checking accounts")
|
||||||
phone_number = try { selectAccount(target_dir, options.values.get("account")?.last())
|
phone_number = try { selectAccount(target_dir, options.values.get("account"))
|
||||||
} catch(e: AccountNotFoundException) {
|
} catch(e: AccountNotFoundException) {
|
||||||
show_error("The specified account could not be found.")
|
show_error("The specified account could not be found.")
|
||||||
} catch(e: NoAccountsException) {
|
} catch(e: NoAccountsException) {
|
||||||
println("No accounts found. Starting login process...")
|
println("No accounts found. Starting login process...")
|
||||||
cmd_login(app, target_dir, options.values.get("account")?.last())
|
cmd_login(app, target_dir, options.values.get("account"))
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Create a new TelegramApp if the user set his/her own TelegramApp credentials
|
// TODO: Create a new TelegramApp if the user set his/her own TelegramApp credentials
|
||||||
@ -124,7 +123,7 @@ class CommandLineController(val options: CommandLineOptions) {
|
|||||||
System.exit(0)
|
System.exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
val export = options.values.get("export")?.last()
|
val export = options.values["export"]
|
||||||
logger.debug("options.val_export: {}", export)
|
logger.debug("options.val_export: {}", export)
|
||||||
if (export != null) {
|
if (export != null) {
|
||||||
if (export.toLowerCase() == "html") {
|
if (export.toLowerCase() == "html") {
|
||||||
@ -138,7 +137,7 @@ class CommandLineController(val options: CommandLineOptions) {
|
|||||||
println("You are logged in as ${user_manager.toString().anonymize()}")
|
println("You are logged in as ${user_manager.toString().anonymize()}")
|
||||||
|
|
||||||
logger.info("Initializing Download Manager")
|
logger.info("Initializing Download Manager")
|
||||||
val d = DownloadManager(client, CommandLineDownloadProgress(), database, user_manager, inisettings)
|
val d = DownloadManager(client, CommandLineDownloadProgress(), database, user_manager, settings, file_base)
|
||||||
|
|
||||||
if (options.booleans.contains("list_channels")) {
|
if (options.booleans.contains("list_channels")) {
|
||||||
val chats = d.getChats()
|
val chats = d.getChats()
|
||||||
@ -147,7 +146,7 @@ class CommandLineController(val options: CommandLineOptions) {
|
|||||||
var download: Boolean
|
var download: Boolean
|
||||||
|
|
||||||
println("Channels:")
|
println("Channels:")
|
||||||
download = inisettings.download_channels
|
download = settings.download_channels
|
||||||
if (!download) println("Download of channels is disabled - see download_channels in config.ini")
|
if (!download) println("Download of channels is disabled - see download_channels in config.ini")
|
||||||
print_header(download)
|
print_header(download)
|
||||||
for (c in chats.channels) {
|
for (c in chats.channels) {
|
||||||
@ -155,7 +154,7 @@ class CommandLineController(val options: CommandLineOptions) {
|
|||||||
}
|
}
|
||||||
println()
|
println()
|
||||||
println("Supergroups:")
|
println("Supergroups:")
|
||||||
download = inisettings.download_supergroups
|
download = settings.download_supergroups
|
||||||
if (!download) println("Download of supergroups is disabled - see download_supergroups in config.ini")
|
if (!download) println("Download of supergroups is disabled - see download_supergroups in config.ini")
|
||||||
print_header(download)
|
print_header(download)
|
||||||
for (c in chats.supergroups) {
|
for (c in chats.supergroups) {
|
||||||
@ -166,17 +165,17 @@ class CommandLineController(val options: CommandLineOptions) {
|
|||||||
|
|
||||||
logger.debug("Calling DownloadManager.downloadMessages with limit {}", options.values.get("limit_messages")?.last())
|
logger.debug("Calling DownloadManager.downloadMessages with limit {}", options.values.get("limit_messages")?.last())
|
||||||
d.downloadMessages(options.values.get("limit_messages")?.last()?.toInt())
|
d.downloadMessages(options.values.get("limit_messages")?.last()?.toInt())
|
||||||
logger.debug("IniSettings#download_media: {}", inisettings.download_media)
|
logger.debug("IniSettings#download_media: {}", settings.download_media)
|
||||||
if (inisettings.download_media) {
|
if (settings.download_media) {
|
||||||
logger.debug("Calling DownloadManager.downloadMedia")
|
logger.debug("Calling DownloadManager.downloadMedia")
|
||||||
d.downloadMedia()
|
d.downloadMedia()
|
||||||
} else {
|
} else {
|
||||||
println("Skipping media download because download_media is set to false.")
|
println("Skipping media download because download_media is set to false.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.boolean.contains("daemon")) {
|
if (options.booleans.contains("daemon")) {
|
||||||
logger.info("Initializing TelegramUpdateHandler")
|
logger.info("Initializing TelegramUpdateHandler")
|
||||||
handler = TelegramUpdateHandler(user_manager, database)
|
handler = TelegramUpdateHandler(user_manager, database, file_base, settings)
|
||||||
client.close()
|
client.close()
|
||||||
logger.info("Creating new client")
|
logger.info("Creating new client")
|
||||||
client = Kotlogram.getDefaultClient(app, storage, Kotlogram.PROD_DC4, handler)
|
client = Kotlogram.getDefaultClient(app, storage, Kotlogram.PROD_DC4, handler)
|
||||||
@ -203,7 +202,7 @@ class CommandLineController(val options: CommandLineOptions) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun selectAccount(file_base: String, requested_account: String?): String {
|
private fun selectAccount(file_base: String, requested_account: String?): String {
|
||||||
var found_account: String? = null
|
var found_account: String?
|
||||||
val accounts = Utils.getAccounts(file_base)
|
val accounts = Utils.getAccounts(file_base)
|
||||||
if (requested_account != null) {
|
if (requested_account != null) {
|
||||||
logger.debug("Account requested: {}", requested_account.anonymize())
|
logger.debug("Account requested: {}", requested_account.anonymize())
|
||||||
@ -218,7 +217,6 @@ class CommandLineController(val options: CommandLineOptions) {
|
|||||||
show_error(("You have more than one account but didn't specify which one to use.\n" +
|
show_error(("You have more than one account but didn't specify which one to use.\n" +
|
||||||
"Use '--account <x>' to use account <x>.\n" +
|
"Use '--account <x>' to use account <x>.\n" +
|
||||||
"Use '--list-accounts' to see all available accounts."))
|
"Use '--list-accounts' to see all available accounts."))
|
||||||
System.exit(1)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (found_account == null) {
|
if (found_account == null) {
|
||||||
|
@ -17,27 +17,24 @@ package de.fabianonline.telegram_backup
|
|||||||
|
|
||||||
class CommandLineOptions(args: Array<String>) {
|
class CommandLineOptions(args: Array<String>) {
|
||||||
val booleans = mutableListOf<String>()
|
val booleans = mutableListOf<String>()
|
||||||
val values = mutableMapOf<String, MutableList<String>>()
|
val values = mutableMapOf<String, String>()
|
||||||
var last_key: String? = null
|
var last_key: String? = null
|
||||||
|
|
||||||
init {
|
init {
|
||||||
for(arg in args) {
|
for(arg in args) {
|
||||||
if (arg.starts_with("--")) {
|
if (arg.startsWith("--")) {
|
||||||
if (last_key!=null) {
|
if (last_key!=null) {
|
||||||
booleans.add(last_key)
|
booleans.add(last_key!!)
|
||||||
}
|
}
|
||||||
last_key = arg.substr(2)
|
last_key = arg.substring(2)
|
||||||
} else {
|
} else {
|
||||||
if (last_key==null) throw RuntimeException("Unexpected parameter without switch: $arg")
|
if (last_key==null) {
|
||||||
var list = values.get(last_key)
|
throw RuntimeException("Unexpected unnamed parameter ${arg}")
|
||||||
if (list==null) {
|
|
||||||
list = mutableListOf<String>()
|
|
||||||
values.add(last_key, list)
|
|
||||||
}
|
}
|
||||||
list.add(arg)
|
values.put(last_key!!, arg)
|
||||||
last_key = null
|
last_key = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (last_key!=null) booleans.add(last_key)
|
if (last_key!=null) booleans.add(last_key!!)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ class CommandLineRunner(args: Array<String>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun setupLogging() {
|
fun setupLogging() {
|
||||||
if (options.booleans.hasKey('anonymize')) {
|
if (options.booleans.contains("anonymize")) {
|
||||||
Utils.anonymize = true
|
Utils.anonymize = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,13 +76,13 @@ class CommandLineRunner(args: Array<String>) {
|
|||||||
rootLogger.addAppender(appender)
|
rootLogger.addAppender(appender)
|
||||||
rootLogger.setLevel(Level.OFF)
|
rootLogger.setLevel(Level.OFF)
|
||||||
|
|
||||||
if (options.cmd_trace) {
|
if (options.booleans.contains("trace")) {
|
||||||
(LoggerFactory.getLogger("de.fabianonline.telegram_backup") as Logger).setLevel(Level.TRACE)
|
(LoggerFactory.getLogger("de.fabianonline.telegram_backup") as Logger).setLevel(Level.TRACE)
|
||||||
} else if (options.cmd_debug) {
|
} else if (options.booleans.contains("debug")) {
|
||||||
(LoggerFactory.getLogger("de.fabianonline.telegram_backup") as Logger).setLevel(Level.DEBUG)
|
(LoggerFactory.getLogger("de.fabianonline.telegram_backup") as Logger).setLevel(Level.DEBUG)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.cmd_trace_telegram) {
|
if (options.booleans.contains("trace_telegram")) {
|
||||||
(LoggerFactory.getLogger("com.github.badoualy") as Logger).setLevel(Level.TRACE)
|
(LoggerFactory.getLogger("com.github.badoualy") as Logger).setLevel(Level.TRACE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -245,14 +245,14 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
val map = mutableMapOf<String, String>()
|
val map = mutableMapOf<String, String>()
|
||||||
val rs = stmt.executeQuery(query)
|
val rs = stmt.executeQuery(query)
|
||||||
while(rs.next()) {
|
while(rs.next()) {
|
||||||
map.add(rs.getString(1), rs.getString(2))
|
map.put(rs.getString(1), rs.getString(2))
|
||||||
}
|
}
|
||||||
rs.close()
|
rs.close()
|
||||||
return map
|
return map
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
fun saveMessages(all: TLVector<TLAbsMessage>, api_layer: Int, source_type: MessageSource = MessageSource.NORMAL) {
|
fun saveMessages(all: TLVector<TLAbsMessage>, api_layer: Int, source_type: MessageSource = MessageSource.NORMAL, settings: Settings?) {
|
||||||
//"(id, dialog_id, from_id, from_type, text, time, has_media, data, sticker, type) " +
|
//"(id, dialog_id, from_id, from_type, text, time, has_media, data, sticker, type) " +
|
||||||
//"VALUES " +
|
//"VALUES " +
|
||||||
//"(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
//"(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
||||||
@ -314,7 +314,7 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
}
|
}
|
||||||
ps.setString(7, text)
|
ps.setString(7, text)
|
||||||
ps.setString(8, "" + msg.getDate())
|
ps.setString(8, "" + msg.getDate())
|
||||||
val f = FileManagerFactory.getFileManager(msg, user_manager)
|
val f = FileManagerFactory.getFileManager(msg, user_manager, file_base, settings)
|
||||||
if (f == null) {
|
if (f == null) {
|
||||||
ps.setNull(9, Types.BOOLEAN)
|
ps.setNull(9, Types.BOOLEAN)
|
||||||
ps.setNull(10, Types.VARCHAR)
|
ps.setNull(10, Types.VARCHAR)
|
||||||
@ -499,7 +499,7 @@ class Database constructor(val file_base: String, val user_manager: UserManager)
|
|||||||
ps_insert_or_replace.close()
|
ps_insert_or_replace.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun fetchSettings() = queryStringMap("SELECT key, value FROM settings WHERE key='${key}'")
|
fun fetchSettings() = queryStringMap("SELECT key, value FROM settings")
|
||||||
|
|
||||||
fun saveSetting(key: String, value: String?) {
|
fun saveSetting(key: String, value: String?) {
|
||||||
val ps = conn.prepareStatement("INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)")
|
val ps = conn.prepareStatement("INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)")
|
||||||
|
@ -313,7 +313,7 @@ internal class DB_Update_6(conn: Connection, db: Database) : DatabaseUpdate(conn
|
|||||||
} else {
|
} else {
|
||||||
ps.setInt(1, msg.getFwdFrom().getFromId())
|
ps.setInt(1, msg.getFwdFrom().getFromId())
|
||||||
}
|
}
|
||||||
val f = FileManagerFactory.getFileManager(msg, db.user_manager)
|
val f = FileManagerFactory.getFileManager(msg, db.user_manager, db.file_base, settings = null)
|
||||||
if (f == null) {
|
if (f == null) {
|
||||||
ps.setNull(2, Types.VARCHAR)
|
ps.setNull(2, Types.VARCHAR)
|
||||||
ps.setNull(3, Types.VARCHAR)
|
ps.setNull(3, Types.VARCHAR)
|
||||||
@ -431,7 +431,7 @@ internal class DB_Update_9(conn: Connection, db: Database) : DatabaseUpdate(conn
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
rs.close()
|
rs.close()
|
||||||
db.saveMessages(messages, api_layer=53, source_type=MessageSource.SUPERGROUP)
|
db.saveMessages(messages, api_layer=53, source_type=MessageSource.SUPERGROUP, settings=null)
|
||||||
execute("DELETE FROM messages WHERE id IN (" + messages_to_delete.joinToString() + ")")
|
execute("DELETE FROM messages WHERE id IN (" + messages_to_delete.joinToString() + ")")
|
||||||
print(".")
|
print(".")
|
||||||
|
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
package de.fabianonline.telegram_backup
|
|
||||||
|
|
||||||
class DbSettings(val database: Database) {
|
|
||||||
private fun fetchValue(name: String): String? = database.fetchSetting(name)
|
|
||||||
private fun saveValue(name: String, value: String?) = database.saveSetting(name, value)
|
|
||||||
|
|
||||||
var pts: String?
|
|
||||||
get() = fetchValue("pts")
|
|
||||||
set(x: String?) = saveValue("pts", x)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -60,7 +60,7 @@ enum class MessageSource(val descr: String) {
|
|||||||
SUPERGROUP("supergroup")
|
SUPERGROUP("supergroup")
|
||||||
}
|
}
|
||||||
|
|
||||||
class DownloadManager(val client: TelegramClient, val prog: DownloadProgressInterface, val db: Database, val user_manager: UserManager, val inisettings: IniSettings) {
|
class DownloadManager(val client: TelegramClient, val prog: DownloadProgressInterface, val db: Database, val user_manager: UserManager, val settings: Settings, val file_base: String) {
|
||||||
internal var has_seen_flood_wait_message = false
|
internal var has_seen_flood_wait_message = false
|
||||||
|
|
||||||
@Throws(RpcErrorException::class, IOException::class)
|
@Throws(RpcErrorException::class, IOException::class)
|
||||||
@ -109,7 +109,7 @@ class DownloadManager(val client: TelegramClient, val prog: DownloadProgressInte
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
System.out.println("Top message ID is " + max_message_id)
|
System.out.println("Top message ID is " + max_message_id)
|
||||||
var max_database_id = db!!.getTopMessageID()
|
var max_database_id = db.getTopMessageID()
|
||||||
System.out.println("Top message ID in database is " + max_database_id)
|
System.out.println("Top message ID in database is " + max_database_id)
|
||||||
if (limit != null) {
|
if (limit != null) {
|
||||||
System.out.println("Limit is set to " + limit)
|
System.out.println("Limit is set to " + limit)
|
||||||
@ -137,8 +137,8 @@ class DownloadManager(val client: TelegramClient, val prog: DownloadProgressInte
|
|||||||
|
|
||||||
logger.info("Searching for missing messages in the db")
|
logger.info("Searching for missing messages in the db")
|
||||||
System.out.println("Checking message database for completeness...")
|
System.out.println("Checking message database for completeness...")
|
||||||
val db_count = db!!.getMessageCount()
|
val db_count = db.getMessageCount()
|
||||||
val db_max = db!!.getTopMessageID()
|
val db_max = db.getTopMessageID()
|
||||||
logger.debug("db_count: {}", db_count)
|
logger.debug("db_count: {}", db_count)
|
||||||
logger.debug("db_max: {}", db_max)
|
logger.debug("db_max: {}", db_max)
|
||||||
|
|
||||||
@ -163,12 +163,12 @@ class DownloadManager(val client: TelegramClient, val prog: DownloadProgressInte
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (inisettings.download_channels) {
|
if (settings.download_channels) {
|
||||||
println("Checking channels...")
|
println("Checking channels...")
|
||||||
for (channel in chats.channels) { if (channel.download) downloadMessagesFromChannel(channel) }
|
for (channel in chats.channels) { if (channel.download) downloadMessagesFromChannel(channel) }
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inisettings.download_supergroups) {
|
if (settings.download_supergroups) {
|
||||||
println("Checking supergroups...")
|
println("Checking supergroups...")
|
||||||
for (supergroup in chats.supergroups) { if (supergroup.download) downloadMessagesFromChannel(supergroup) }
|
for (supergroup in chats.supergroups) { if (supergroup.download) downloadMessagesFromChannel(supergroup) }
|
||||||
}
|
}
|
||||||
@ -176,7 +176,7 @@ class DownloadManager(val client: TelegramClient, val prog: DownloadProgressInte
|
|||||||
|
|
||||||
private fun downloadMessagesFromChannel(channel: Channel) {
|
private fun downloadMessagesFromChannel(channel: Channel) {
|
||||||
val obj = channel.obj
|
val obj = channel.obj
|
||||||
val max_known_id = db!!.getTopMessageIDForChannel(channel.id)
|
val max_known_id = db.getTopMessageIDForChannel(channel.id)
|
||||||
if (obj.getTopMessage() > max_known_id) {
|
if (obj.getTopMessage() > max_known_id) {
|
||||||
val ids = makeIdList(max_known_id + 1, obj.getTopMessage())
|
val ids = makeIdList(max_known_id + 1, obj.getTopMessage())
|
||||||
var channel_name = channel.title
|
var channel_name = channel.title
|
||||||
@ -196,7 +196,7 @@ class DownloadManager(val client: TelegramClient, val prog: DownloadProgressInte
|
|||||||
} else {
|
} else {
|
||||||
"${source_type.descr} $source_name"
|
"${source_type.descr} $source_name"
|
||||||
}
|
}
|
||||||
prog!!.onMessageDownloadStart(ids.size, source_string)
|
prog.onMessageDownloadStart(ids.size, source_string)
|
||||||
|
|
||||||
logger.debug("Entering download loop")
|
logger.debug("Entering download loop")
|
||||||
while (ids.size > 0) {
|
while (ids.size > 0) {
|
||||||
@ -221,9 +221,9 @@ class DownloadManager(val client: TelegramClient, val prog: DownloadProgressInte
|
|||||||
tries++
|
tries++
|
||||||
try {
|
try {
|
||||||
if (channel == null) {
|
if (channel == null) {
|
||||||
response = client!!.messagesGetMessages(vector)
|
response = client.messagesGetMessages(vector)
|
||||||
} else {
|
} else {
|
||||||
response = client!!.channelsGetMessages(channel, vector)
|
response = client.channelsGetMessages(channel, vector)
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
} catch (e: RpcErrorException) {
|
} catch (e: RpcErrorException) {
|
||||||
@ -241,10 +241,10 @@ class DownloadManager(val client: TelegramClient, val prog: DownloadProgressInte
|
|||||||
CommandLineController.show_error("Requested ${vector.size} messages, but got ${response.getMessages().size}. That is unexpected. Quitting.")
|
CommandLineController.show_error("Requested ${vector.size} messages, but got ${response.getMessages().size}. That is unexpected. Quitting.")
|
||||||
}
|
}
|
||||||
|
|
||||||
prog!!.onMessageDownloaded(response.getMessages().size)
|
prog.onMessageDownloaded(response.getMessages().size)
|
||||||
db!!.saveMessages(response.getMessages(), Kotlogram.API_LAYER, source_type=source_type)
|
db.saveMessages(response.getMessages(), Kotlogram.API_LAYER, source_type=source_type, settings=settings)
|
||||||
db!!.saveChats(response.getChats())
|
db.saveChats(response.getChats())
|
||||||
db!!.saveUsers(response.getUsers())
|
db.saveUsers(response.getUsers())
|
||||||
logger.trace("Sleeping")
|
logger.trace("Sleeping")
|
||||||
try {
|
try {
|
||||||
TimeUnit.MILLISECONDS.sleep(Config.DELAY_AFTER_GET_MESSAGES)
|
TimeUnit.MILLISECONDS.sleep(Config.DELAY_AFTER_GET_MESSAGES)
|
||||||
@ -254,12 +254,12 @@ class DownloadManager(val client: TelegramClient, val prog: DownloadProgressInte
|
|||||||
}
|
}
|
||||||
logger.debug("Finished.")
|
logger.debug("Finished.")
|
||||||
|
|
||||||
prog!!.onMessageDownloadFinished()
|
prog.onMessageDownloadFinished()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Throws(RpcErrorException::class, IOException::class)
|
@Throws(RpcErrorException::class, IOException::class)
|
||||||
fun downloadMedia() {
|
fun downloadMedia() {
|
||||||
download_client = client!!.getDownloaderClient()
|
download_client = client.getDownloaderClient()
|
||||||
var completed: Boolean
|
var completed: Boolean
|
||||||
do {
|
do {
|
||||||
completed = true
|
completed = true
|
||||||
@ -289,19 +289,19 @@ class DownloadManager(val client: TelegramClient, val prog: DownloadProgressInte
|
|||||||
private fun _downloadMedia() {
|
private fun _downloadMedia() {
|
||||||
logger.info("This is _downloadMedia")
|
logger.info("This is _downloadMedia")
|
||||||
logger.info("Checking if there are messages in the DB with a too old API layer")
|
logger.info("Checking if there are messages in the DB with a too old API layer")
|
||||||
val ids = db!!.getIdsFromQuery("SELECT id FROM messages WHERE has_media=1 AND api_layer<" + Kotlogram.API_LAYER)
|
val ids = db.getIdsFromQuery("SELECT id FROM messages WHERE has_media=1 AND api_layer<" + Kotlogram.API_LAYER)
|
||||||
if (ids.size > 0) {
|
if (ids.size > 0) {
|
||||||
System.out.println("You have ${ids.size} messages in your db that need an update. Doing that now.")
|
System.out.println("You have ${ids.size} messages in your db that need an update. Doing that now.")
|
||||||
logger.debug("Found {} messages", ids.size)
|
logger.debug("Found {} messages", ids.size)
|
||||||
downloadMessages(ids, null, source_type=MessageSource.NORMAL)
|
downloadMessages(ids, null, source_type=MessageSource.NORMAL)
|
||||||
}
|
}
|
||||||
|
|
||||||
val messages = this.db!!.getMessagesWithMedia()
|
val messages = db.getMessagesWithMedia()
|
||||||
logger.debug("Database returned {} messages with media", messages.size)
|
logger.debug("Database returned {} messages with media", messages.size)
|
||||||
prog!!.onMediaDownloadStart(messages.size)
|
prog.onMediaDownloadStart(messages.size)
|
||||||
for (msg in messages) {
|
for (msg in messages) {
|
||||||
if (msg == null) continue
|
if (msg == null) continue
|
||||||
val m = FileManagerFactory.getFileManager(msg, user_manager)
|
val m = FileManagerFactory.getFileManager(msg, user_manager, file_base, settings=settings)
|
||||||
logger.trace("message {}, {}, {}, {}, {}",
|
logger.trace("message {}, {}, {}, {}, {}",
|
||||||
msg.getId(),
|
msg.getId(),
|
||||||
msg.getMedia().javaClass.getSimpleName().replace("TLMessageMedia", "…"),
|
msg.getMedia().javaClass.getSimpleName().replace("TLMessageMedia", "…"),
|
||||||
@ -309,25 +309,25 @@ class DownloadManager(val client: TelegramClient, val prog: DownloadProgressInte
|
|||||||
if (m.isEmpty) "empty" else "non-empty",
|
if (m.isEmpty) "empty" else "non-empty",
|
||||||
if (m.downloaded) "downloaded" else "not downloaded")
|
if (m.downloaded) "downloaded" else "not downloaded")
|
||||||
if (m.isEmpty) {
|
if (m.isEmpty) {
|
||||||
prog!!.onMediaDownloadedEmpty()
|
prog.onMediaDownloadedEmpty()
|
||||||
} else if (m.downloaded) {
|
} else if (m.downloaded) {
|
||||||
prog!!.onMediaAlreadyPresent(m)
|
prog.onMediaAlreadyPresent(m)
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
val result = m.download()
|
val result = m.download()
|
||||||
if (result) {
|
if (result) {
|
||||||
prog!!.onMediaDownloaded(m)
|
prog.onMediaDownloaded(m)
|
||||||
} else {
|
} else {
|
||||||
prog!!.onMediaSkipped()
|
prog.onMediaSkipped()
|
||||||
}
|
}
|
||||||
} catch (e: TimeoutException) {
|
} catch (e: TimeoutException) {
|
||||||
// do nothing - skip this file
|
// do nothing - skip this file
|
||||||
prog!!.onMediaSkipped()
|
prog.onMediaSkipped()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
prog!!.onMediaDownloadFinished()
|
prog.onMediaDownloadFinished()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun makeIdList(start: Int, end: Int): MutableList<Int> {
|
private fun makeIdList(start: Int, end: Int): MutableList<Int> {
|
||||||
@ -339,7 +339,7 @@ class DownloadManager(val client: TelegramClient, val prog: DownloadProgressInte
|
|||||||
fun getChats(): ChatList {
|
fun getChats(): ChatList {
|
||||||
val cl = ChatList()
|
val cl = ChatList()
|
||||||
logger.trace("Calling messagesGetDialogs")
|
logger.trace("Calling messagesGetDialogs")
|
||||||
val dialogs = client!!.messagesGetDialogs(0, 0, TLInputPeerEmpty(), 100)
|
val dialogs = client.messagesGetDialogs(0, 0, TLInputPeerEmpty(), 100)
|
||||||
logger.trace("Got {} dialogs back", dialogs.getDialogs().size)
|
logger.trace("Got {} dialogs back", dialogs.getDialogs().size)
|
||||||
|
|
||||||
// Add dialogs
|
// Add dialogs
|
||||||
@ -352,10 +352,10 @@ class DownloadManager(val client: TelegramClient, val prog: DownloadProgressInte
|
|||||||
if (tl_peer_channel == null) continue
|
if (tl_peer_channel == null) continue
|
||||||
|
|
||||||
var download = true
|
var download = true
|
||||||
if (inisettings.whitelist_channels != null) {
|
if (settings.whitelist_channels != null) {
|
||||||
download = inisettings.whitelist_channels.contains(tl_channel.getId().toString())
|
download = settings.whitelist_channels.contains(tl_channel.getId().toString())
|
||||||
} else if (inisettings.blacklist_channels != null) {
|
} else if (settings.blacklist_channels != null) {
|
||||||
download = !inisettings.blacklist_channels.contains(tl_channel.getId().toString())
|
download = !settings.blacklist_channels.contains(tl_channel.getId().toString())
|
||||||
}
|
}
|
||||||
val channel = Channel(id=tl_channel.getId(), access_hash=tl_channel.getAccessHash(), title=tl_channel.getTitle(), obj=tl_peer_channel, download=download)
|
val channel = Channel(id=tl_channel.getId(), access_hash=tl_channel.getAccessHash(), title=tl_channel.getTitle(), obj=tl_peer_channel, download=download)
|
||||||
if (tl_channel.getMegagroup()) {
|
if (tl_channel.getMegagroup()) {
|
||||||
|
@ -1,72 +0,0 @@
|
|||||||
package de.fabianonline.telegram_backup
|
|
||||||
|
|
||||||
import java.io.File
|
|
||||||
import org.slf4j.LoggerFactory
|
|
||||||
import org.slf4j.Logger
|
|
||||||
|
|
||||||
class IniSettings(val file_base: String) {
|
|
||||||
val logger = LoggerFactory.getLogger(IniSettings::class.java)
|
|
||||||
var settings = mutableMapOf<String, MutableList<String>>()
|
|
||||||
|
|
||||||
init {
|
|
||||||
loadIni(file_base + "config.ini")
|
|
||||||
copySampleIni(file_base + "config.sample.ini")
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun loadIni(filename: String) {
|
|
||||||
val file = File(filename)
|
|
||||||
logger.trace("Checking ini file {}", filename.anonymize())
|
|
||||||
if (!file.exists()) return
|
|
||||||
logger.debug("Loading ini file {}", filename.anonymize())
|
|
||||||
file.forEachLine { parseLine(it) }
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun parseLine(original_line: String) {
|
|
||||||
logger.trace("Parsing line: {}", original_line)
|
|
||||||
var line = original_line.trim().replaceAfter("#", "").removeSuffix("#")
|
|
||||||
logger.trace("After cleaning: {}", line)
|
|
||||||
if (line == "") return
|
|
||||||
val parts: List<String> = line.split("=", limit=2).map{it.trim()}
|
|
||||||
|
|
||||||
if (parts.size < 2) throw RuntimeException("Invalid config setting: $line")
|
|
||||||
|
|
||||||
val (key, value) = parts
|
|
||||||
if (value=="") {
|
|
||||||
settings.remove(key)
|
|
||||||
} else {
|
|
||||||
var map = settings.get(key)
|
|
||||||
if (map == null) {
|
|
||||||
map = mutableListOf<String>()
|
|
||||||
settings.put(key, map)
|
|
||||||
}
|
|
||||||
map.add(value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun copySampleIni(filename: String) {
|
|
||||||
val stream = Config::class.java.getResourceAsStream("/config.sample.ini")
|
|
||||||
File(filename).outputStream().use { stream.copyTo(it) }
|
|
||||||
stream.close()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun println() = println(settings)
|
|
||||||
|
|
||||||
fun getString(key: String, default: String? = null): String? = settings.get(key)?.last() ?: default
|
|
||||||
fun getStringList(key: String): List<String>? = settings.get(key)
|
|
||||||
fun getInt(key: String, default: Int? = null): Int? = try { settings.get(key)?.last()?.toInt() } catch (e: NumberFormatException) { null } ?: default
|
|
||||||
fun getBoolean(key: String, default: Boolean = false): Boolean {
|
|
||||||
val value = settings.get(key)?.last()
|
|
||||||
if (value==null) return default
|
|
||||||
return value=="true"
|
|
||||||
}
|
|
||||||
fun getArray(key: String): List<String> = settings.get(key) ?: listOf<String>()
|
|
||||||
|
|
||||||
val gmaps_key = getString("gmaps_key", default=Config.SECRET_GMAPS)!!
|
|
||||||
val pagination = getBoolean("pagination", default=true)
|
|
||||||
val pagination_size = getInt("pagination_size", default=Config.DEFAULT_PAGINATION)!!
|
|
||||||
val download_media = getBoolean("download_media", default=true)
|
|
||||||
val download_channels = getBoolean("download_channels", default=false)
|
|
||||||
val download_supergroups = getBoolean("download_supergroups", default=false)
|
|
||||||
val whitelist_channels = getStringList("whitelist_channels")
|
|
||||||
val blacklist_channels = getStringList("blacklist_channels")
|
|
||||||
}
|
|
@ -5,25 +5,41 @@ import org.slf4j.LoggerFactory
|
|||||||
|
|
||||||
class Settings(val file_base: String, val database: Database, val cli_settings: CommandLineOptions) {
|
class Settings(val file_base: String, val database: Database, val cli_settings: CommandLineOptions) {
|
||||||
val logger = LoggerFactory.getLogger(Settings::class.java)
|
val logger = LoggerFactory.getLogger(Settings::class.java)
|
||||||
val settings = mutableMapOf<String, Setting>()
|
|
||||||
|
|
||||||
val gmaps_key: Setting
|
|
||||||
|
|
||||||
private val db_settings: Map<String, String>
|
private val db_settings: Map<String, String>
|
||||||
|
|
||||||
private var ini_settings: Map<String, List<String>>
|
val ini_settings: Map<String, List<String>>
|
||||||
|
|
||||||
init {
|
init {
|
||||||
db_settings = database.fetchSettings()
|
db_settings = database.fetchSettings()
|
||||||
ini_settings = load_ini("config.ini")
|
ini_settings = load_ini("config.ini")
|
||||||
copy_sample_ini("config.sample.ini")
|
copy_sample_ini("config.sample.ini")
|
||||||
|
}
|
||||||
// Merging CLI and INI settings
|
// Merging CLI and INI settings
|
||||||
gmaps_key = get_setting("gmaps_key", default=Config.SECRET_GMAPS)
|
val gmaps_key = get_setting_string("gmaps_key", default=Config.SECRET_GMAPS)
|
||||||
|
val pagination = get_setting_boolean("pagination", default=true)
|
||||||
|
val pagination_size = get_setting_int("pagination_size", default=Config.DEFAULT_PAGINATION)
|
||||||
|
val download_media = get_setting_boolean("download_media", default=true)
|
||||||
|
val download_channels = get_setting_boolean("download_channels", default=false)
|
||||||
|
val download_supergroups = get_setting_boolean("download_supergroups", default=false)
|
||||||
|
val whitelist_channels = get_setting_list("whitelist_channels")
|
||||||
|
val blacklist_channels = get_setting_list("blacklist_channels")
|
||||||
|
|
||||||
|
|
||||||
|
private fun get_setting_string(name: String, default: String): String {
|
||||||
|
return ini_settings[name]?.last() ?: cli_settings.values[name] ?: default
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun get_setting(name: String, default: String? = null): Setting {
|
private fun get_setting_int(name: String, default: Int): Int {
|
||||||
return Setting.build(name, ini_settings[name], cli_settings.values[name], default)
|
return ini_settings[name]?.last()?.toInt() ?: cli_settings.values[name]?.toInt() ?: default
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun get_setting_boolean(name: String, default: Boolean): Boolean {
|
||||||
|
return ini_settings[name]?.last()?.toBoolean() ?: cli_settings.values[name]?.toBoolean() ?: default
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun get_setting_list(name: String): List<String>? {
|
||||||
|
return ini_settings[name]
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun load_ini(filename: String): Map<String, List<String>> {
|
private fun load_ini(filename: String): Map<String, List<String>> {
|
||||||
@ -64,38 +80,6 @@ class Settings(val file_base: String, val database: Database, val cli_settings:
|
|||||||
stream.close()
|
stream.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
open class Setting(name: String, value: List<String>?, source: SettingSource) {
|
|
||||||
companion object {
|
|
||||||
val all = mutableListOf<Setting>()
|
|
||||||
|
|
||||||
fun build(name: String, ini_value: List<String>?, cli_value: List<String>?, default: String?): Setting {
|
|
||||||
var value: List<String>?
|
|
||||||
var source: SettingSource
|
|
||||||
if (cli_value != null) {
|
|
||||||
value=cli_value
|
|
||||||
source=SettingSource.CLI
|
|
||||||
} else if (ini_value != null) {
|
|
||||||
value=ini_value
|
|
||||||
source=SettingSource.INI
|
|
||||||
} else {
|
|
||||||
if (default!=null) {
|
|
||||||
value = listOf(default)
|
|
||||||
} else {
|
|
||||||
value = null
|
|
||||||
}
|
|
||||||
source=SettingSource.DEFAULT
|
|
||||||
}
|
|
||||||
return Setting(name, value, source);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum class SettingSource {
|
|
||||||
INI,
|
|
||||||
CLI,
|
|
||||||
DEFAULT
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
class DbSettings(val database: Database) {
|
class DbSettings(val database: Database) {
|
||||||
|
@ -28,14 +28,14 @@ import de.fabianonline.telegram_backup.mediafilemanager.AbstractMediaFileManager
|
|||||||
import de.fabianonline.telegram_backup.mediafilemanager.FileManagerFactory
|
import de.fabianonline.telegram_backup.mediafilemanager.FileManagerFactory
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
|
|
||||||
internal class TelegramUpdateHandler(val user_manager: UserManager, val db: Database) : UpdateCallback {
|
internal class TelegramUpdateHandler(val user_manager: UserManager, val db: Database, val file_base: String, val settings: Settings) : UpdateCallback {
|
||||||
val logger = LoggerFactory.getLogger(TelegramUpdateHandler::class.java)
|
val logger = LoggerFactory.getLogger(TelegramUpdateHandler::class.java)
|
||||||
|
|
||||||
override fun onUpdates(client: TelegramClient, updates: TLUpdates) {
|
override fun onUpdates(client: TelegramClient, updates: TLUpdates) {
|
||||||
|
|
||||||
logger.debug("onUpdates - " + updates.getUpdates().size + " Updates, " + updates.getUsers().size + " Users, " + updates.getChats().size + " Chats")
|
logger.debug("onUpdates - " + updates.getUpdates().size + " Updates, " + updates.getUsers().size + " Users, " + updates.getChats().size + " Chats")
|
||||||
for (update in updates.getUpdates()) {
|
for (update in updates.getUpdates()) {
|
||||||
processUpdate(update, client)
|
processUpdate(update)
|
||||||
logger.debug(" " + update.javaClass.getName())
|
logger.debug(" " + update.javaClass.getName())
|
||||||
}
|
}
|
||||||
db.saveUsers(updates.getUsers())
|
db.saveUsers(updates.getUsers())
|
||||||
@ -45,7 +45,7 @@ internal class TelegramUpdateHandler(val user_manager: UserManager, val db: Data
|
|||||||
override fun onUpdatesCombined(client: TelegramClient, updates: TLUpdatesCombined) {
|
override fun onUpdatesCombined(client: TelegramClient, updates: TLUpdatesCombined) {
|
||||||
logger.debug("onUpdatesCombined")
|
logger.debug("onUpdatesCombined")
|
||||||
for (update in updates.getUpdates()) {
|
for (update in updates.getUpdates()) {
|
||||||
processUpdate(update, client)
|
processUpdate(update)
|
||||||
}
|
}
|
||||||
db.saveUsers(updates.getUsers())
|
db.saveUsers(updates.getUsers())
|
||||||
db.saveChats(updates.getChats())
|
db.saveChats(updates.getChats())
|
||||||
@ -53,7 +53,7 @@ internal class TelegramUpdateHandler(val user_manager: UserManager, val db: Data
|
|||||||
|
|
||||||
override fun onUpdateShort(client: TelegramClient, update: TLUpdateShort) {
|
override fun onUpdateShort(client: TelegramClient, update: TLUpdateShort) {
|
||||||
logger.debug("onUpdateShort")
|
logger.debug("onUpdateShort")
|
||||||
processUpdate(update.getUpdate(), client)
|
processUpdate(update.getUpdate())
|
||||||
logger.debug(" " + update.getUpdate().javaClass.getName())
|
logger.debug(" " + update.getUpdate().javaClass.getName())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ internal class TelegramUpdateHandler(val user_manager: UserManager, val db: Data
|
|||||||
message.getEntities(), null, null)
|
message.getEntities(), null, null)
|
||||||
val vector = TLVector<TLAbsMessage>(TLAbsMessage::class.java)
|
val vector = TLVector<TLAbsMessage>(TLAbsMessage::class.java)
|
||||||
vector.add(msg)
|
vector.add(msg)
|
||||||
db.saveMessages(vector, Kotlogram.API_LAYER)
|
db.saveMessages(vector, Kotlogram.API_LAYER, settings=settings)
|
||||||
System.out.print('.')
|
System.out.print('.')
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ internal class TelegramUpdateHandler(val user_manager: UserManager, val db: Data
|
|||||||
m.getEntities(), null, null)
|
m.getEntities(), null, null)
|
||||||
val vector = TLVector<TLAbsMessage>(TLAbsMessage::class.java)
|
val vector = TLVector<TLAbsMessage>(TLAbsMessage::class.java)
|
||||||
vector.add(msg)
|
vector.add(msg)
|
||||||
db.saveMessages(vector, Kotlogram.API_LAYER)
|
db.saveMessages(vector, Kotlogram.API_LAYER, settings=settings)
|
||||||
System.out.print('.')
|
System.out.print('.')
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,15 +121,15 @@ internal class TelegramUpdateHandler(val user_manager: UserManager, val db: Data
|
|||||||
logger.debug("onUpdateTooLong")
|
logger.debug("onUpdateTooLong")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processUpdate(update: TLAbsUpdate, client: TelegramClient) {
|
private fun processUpdate(update: TLAbsUpdate) {
|
||||||
if (update is TLUpdateNewMessage) {
|
if (update is TLUpdateNewMessage) {
|
||||||
val abs_msg = update.getMessage()
|
val abs_msg = update.getMessage()
|
||||||
val vector = TLVector<TLAbsMessage>(TLAbsMessage::class.java)
|
val vector = TLVector<TLAbsMessage>(TLAbsMessage::class.java)
|
||||||
vector.add(abs_msg)
|
vector.add(abs_msg)
|
||||||
db.saveMessages(vector, Kotlogram.API_LAYER)
|
db.saveMessages(vector, Kotlogram.API_LAYER, settings=settings)
|
||||||
System.out.print('.')
|
System.out.print('.')
|
||||||
if (abs_msg is TLMessage) {
|
if (abs_msg is TLMessage) {
|
||||||
val fm = FileManagerFactory.getFileManager(abs_msg, user_manager)
|
val fm = FileManagerFactory.getFileManager(abs_msg, user_manager, file_base, settings)
|
||||||
if (fm != null && !fm.isEmpty && !fm.downloaded) {
|
if (fm != null && !fm.isEmpty && !fm.downloaded) {
|
||||||
try {
|
try {
|
||||||
fm.download()
|
fm.download()
|
||||||
|
@ -37,11 +37,11 @@ import de.fabianonline.telegram_backup.*
|
|||||||
import org.slf4j.Logger
|
import org.slf4j.Logger
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
|
|
||||||
class HTMLExporter(val db: Database, val user: UserManager, val ini: IniSettings, val file_base: String) {
|
class HTMLExporter(val db: Database, val user: UserManager, val settings: Settings, val file_base: String) {
|
||||||
@Throws(IOException::class)
|
@Throws(IOException::class)
|
||||||
fun export() {
|
fun export() {
|
||||||
try {
|
try {
|
||||||
val pagination = if (ini.pagination) ini.pagination_size else -1
|
val pagination = if (settings.pagination) settings.pagination_size else -1
|
||||||
|
|
||||||
// Create base dir
|
// Create base dir
|
||||||
logger.debug("Creating base dir")
|
logger.debug("Creating base dir")
|
||||||
|
@ -21,6 +21,7 @@ import de.fabianonline.telegram_backup.Config
|
|||||||
|
|
||||||
import com.github.badoualy.telegram.tl.api.*
|
import com.github.badoualy.telegram.tl.api.*
|
||||||
import com.github.badoualy.telegram.tl.exception.RpcErrorException
|
import com.github.badoualy.telegram.tl.exception.RpcErrorException
|
||||||
|
import de.fabianonline.telegram_backup.Settings
|
||||||
|
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
@ -29,6 +29,7 @@ import com.github.badoualy.telegram.tl.api.*
|
|||||||
import com.github.badoualy.telegram.tl.api.upload.TLFile
|
import com.github.badoualy.telegram.tl.api.upload.TLFile
|
||||||
import com.github.badoualy.telegram.tl.exception.RpcErrorException
|
import com.github.badoualy.telegram.tl.exception.RpcErrorException
|
||||||
import com.github.badoualy.telegram.tl.api.request.TLRequestUploadGetFile
|
import com.github.badoualy.telegram.tl.api.request.TLRequestUploadGetFile
|
||||||
|
import de.fabianonline.telegram_backup.Settings
|
||||||
|
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@ -41,7 +42,7 @@ import java.util.concurrent.TimeoutException
|
|||||||
import org.apache.commons.io.FileUtils
|
import org.apache.commons.io.FileUtils
|
||||||
|
|
||||||
object FileManagerFactory {
|
object FileManagerFactory {
|
||||||
fun getFileManager(m: TLMessage?, u: UserManager, file_base: String): AbstractMediaFileManager? {
|
fun getFileManager(m: TLMessage?, u: UserManager, file_base: String, settings: Settings?): AbstractMediaFileManager? {
|
||||||
if (m == null) return null
|
if (m == null) return null
|
||||||
val media = m.getMedia() ?: return null
|
val media = m.getMedia() ?: return null
|
||||||
|
|
||||||
@ -53,7 +54,7 @@ object FileManagerFactory {
|
|||||||
StickerFileManager(m, u, file_base)
|
StickerFileManager(m, u, file_base)
|
||||||
} else d
|
} else d
|
||||||
} else if (media is TLMessageMediaGeo) {
|
} else if (media is TLMessageMediaGeo) {
|
||||||
return GeoFileManager(m, u, file_base)
|
return GeoFileManager(m, u, file_base, settings)
|
||||||
} else if (media is TLMessageMediaEmpty) {
|
} else if (media is TLMessageMediaEmpty) {
|
||||||
return UnsupportedFileManager(m, u, file_base, "empty")
|
return UnsupportedFileManager(m, u, file_base, "empty")
|
||||||
} else if (media is TLMessageMediaUnsupported) {
|
} else if (media is TLMessageMediaUnsupported) {
|
||||||
|
@ -18,14 +18,15 @@ package de.fabianonline.telegram_backup.mediafilemanager
|
|||||||
|
|
||||||
import de.fabianonline.telegram_backup.UserManager
|
import de.fabianonline.telegram_backup.UserManager
|
||||||
import de.fabianonline.telegram_backup.DownloadManager
|
import de.fabianonline.telegram_backup.DownloadManager
|
||||||
import de.fabianonline.telegram_backup.IniSettings
|
|
||||||
|
|
||||||
import com.github.badoualy.telegram.tl.api.*
|
import com.github.badoualy.telegram.tl.api.*
|
||||||
|
import de.fabianonline.telegram_backup.Config
|
||||||
|
import de.fabianonline.telegram_backup.Settings
|
||||||
|
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class GeoFileManager(msg: TLMessage, user: UserManager, file_base: String) : AbstractMediaFileManager(msg, user, file_base) {
|
class GeoFileManager(msg: TLMessage, user: UserManager, file_base: String, val settings: Settings?) : AbstractMediaFileManager(msg, user, file_base) {
|
||||||
protected lateinit var geo: TLGeoPoint
|
protected lateinit var geo: TLGeoPoint
|
||||||
|
|
||||||
// We don't know the size, so we just guess.
|
// We don't know the size, so we just guess.
|
||||||
@ -59,7 +60,7 @@ class GeoFileManager(msg: TLMessage, user: UserManager, file_base: String) : Abs
|
|||||||
"center=${geo.getLat()},${geo.getLong()}&" +
|
"center=${geo.getLat()},${geo.getLong()}&" +
|
||||||
"markers=color:red|${geo.getLat()},${geo.getLong()}&" +
|
"markers=color:red|${geo.getLat()},${geo.getLong()}&" +
|
||||||
"zoom=14&size=300x150&scale=2&format=png&" +
|
"zoom=14&size=300x150&scale=2&format=png&" +
|
||||||
"key=" + IniSettings.gmaps_key
|
"key=" + (settings?.gmaps_key ?: Config.SECRET_GMAPS)
|
||||||
return DownloadManager.downloadExternalFile(targetPathAndFilename, url)
|
return DownloadManager.downloadExternalFile(targetPathAndFilename, url)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user