pull/68/head^2
kunfei 5 years ago
parent a433637e3c
commit fd649bc73b
  1. 100
      app/src/main/java/io/legado/app/help/storage/Backup.kt
  2. 20
      app/src/main/java/io/legado/app/ui/main/MainActivity.kt

@ -9,6 +9,8 @@ import io.legado.app.help.ReadBookConfig
import io.legado.app.utils.DocumentUtils import io.legado.app.utils.DocumentUtils
import io.legado.app.utils.FileUtils import io.legado.app.utils.FileUtils
import io.legado.app.utils.GSON import io.legado.app.utils.GSON
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.withContext
import org.jetbrains.anko.defaultSharedPreferences import org.jetbrains.anko.defaultSharedPreferences
import java.io.File import java.io.File
@ -41,60 +43,64 @@ object Backup {
) )
} }
fun backup(context: Context, uri: Uri?) { suspend fun backup(context: Context, uri: Uri?) {
App.db.bookDao().allBooks.let { withContext(IO) {
if (it.isNotEmpty()) { App.db.bookDao().allBooks.let {
val json = GSON.toJson(it) if (it.isNotEmpty()) {
FileHelp.getFile(backupPath + File.separator + "bookshelf.json").writeText(json) val json = GSON.toJson(it)
FileHelp.getFile(backupPath + File.separator + "bookshelf.json").writeText(json)
}
} }
} App.db.bookGroupDao().all().let {
App.db.bookGroupDao().all().let { if (it.isNotEmpty()) {
if (it.isNotEmpty()) { val json = GSON.toJson(it)
val json = GSON.toJson(it) FileHelp.getFile(backupPath + File.separator + "bookGroup.json").writeText(json)
FileHelp.getFile(backupPath + File.separator + "bookGroup.json").writeText(json) }
} }
} App.db.bookSourceDao().all.let {
App.db.bookSourceDao().all.let { if (it.isNotEmpty()) {
if (it.isNotEmpty()) { val json = GSON.toJson(it)
val json = GSON.toJson(it) FileHelp.getFile(backupPath + File.separator + "bookSource.json")
FileHelp.getFile(backupPath + File.separator + "bookSource.json").writeText(json) .writeText(json)
}
} }
} App.db.rssSourceDao().all.let {
App.db.rssSourceDao().all.let { if (it.isNotEmpty()) {
if (it.isNotEmpty()) { val json = GSON.toJson(it)
val json = GSON.toJson(it) FileHelp.getFile(backupPath + File.separator + "rssSource.json").writeText(json)
FileHelp.getFile(backupPath + File.separator + "rssSource.json").writeText(json) }
} }
} App.db.replaceRuleDao().all.let {
App.db.replaceRuleDao().all.let { if (it.isNotEmpty()) {
if (it.isNotEmpty()) { val json = GSON.toJson(it)
val json = GSON.toJson(it) FileHelp.getFile(backupPath + File.separator + "replaceRule.json")
FileHelp.getFile(backupPath + File.separator + "replaceRule.json").writeText(json) .writeText(json)
}
} }
} GSON.toJson(ReadBookConfig.configList)?.let {
GSON.toJson(ReadBookConfig.configList)?.let { FileHelp.getFile(backupPath + File.separator + ReadBookConfig.readConfigFileName)
FileHelp.getFile(backupPath + File.separator + ReadBookConfig.readConfigFileName) .writeText(it)
.writeText(it) }
} Preferences.getSharedPreferences(App.INSTANCE, backupPath, "config")?.let { sp ->
Preferences.getSharedPreferences(App.INSTANCE, backupPath, "config")?.let { sp -> val edit = sp.edit()
val edit = sp.edit() App.INSTANCE.defaultSharedPreferences.all.map {
App.INSTANCE.defaultSharedPreferences.all.map { when (val value = it.value) {
when (val value = it.value) { is Int -> edit.putInt(it.key, value)
is Int -> edit.putInt(it.key, value) is Boolean -> edit.putBoolean(it.key, value)
is Boolean -> edit.putBoolean(it.key, value) is Long -> edit.putLong(it.key, value)
is Long -> edit.putLong(it.key, value) is Float -> edit.putFloat(it.key, value)
is Float -> edit.putFloat(it.key, value) is String -> edit.putString(it.key, value)
is String -> edit.putString(it.key, value) else -> Unit
else -> Unit }
} }
edit.commit()
}
WebDavHelp.backUpWebDav(backupPath)
if (uri != null) {
copyBackup(context, uri)
} else {
copyBackup()
} }
edit.commit()
}
WebDavHelp.backUpWebDav(backupPath)
if (uri != null) {
copyBackup(context, uri)
} else {
copyBackup()
} }
} }

@ -33,9 +33,7 @@ import io.legado.app.ui.main.my.MyFragment
import io.legado.app.ui.main.rss.RssFragment import io.legado.app.ui.main.rss.RssFragment
import io.legado.app.utils.* import io.legado.app.utils.*
import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.jetbrains.anko.toast import org.jetbrains.anko.toast
class MainActivity : VMBaseActivity<MainViewModel>(R.layout.activity_main), class MainActivity : VMBaseActivity<MainViewModel>(R.layout.activity_main),
@ -128,9 +126,7 @@ class MainActivity : VMBaseActivity<MainViewModel>(R.layout.activity_main),
override fun finish() { override fun finish() {
if (!BuildConfig.DEBUG) { if (!BuildConfig.DEBUG) {
launch { launch {
withContext(IO) { backup()
backup()
}
super.finish() super.finish()
} }
} else { } else {
@ -165,7 +161,9 @@ class MainActivity : VMBaseActivity<MainViewModel>(R.layout.activity_main),
val uri = Uri.parse(backupPath) val uri = Uri.parse(backupPath)
val doc = DocumentFile.fromTreeUri(this, uri) val doc = DocumentFile.fromTreeUri(this, uri)
if (doc?.canWrite() == true) { if (doc?.canWrite() == true) {
Backup.backup(this, uri) launch {
Backup.backup(this@MainActivity, uri)
}
} else { } else {
selectBackupFolder() selectBackupFolder()
} }
@ -201,7 +199,11 @@ class MainActivity : VMBaseActivity<MainViewModel>(R.layout.activity_main),
PermissionsCompat.Builder(this) PermissionsCompat.Builder(this)
.addPermissions(*Permissions.Group.STORAGE) .addPermissions(*Permissions.Group.STORAGE)
.rationale(R.string.tip_perm_request_storage) .rationale(R.string.tip_perm_request_storage)
.onGranted { Backup.backup(this, null) } .onGranted {
launch {
Backup.backup(this@MainActivity, null)
}
}
.request() .request()
} }
} }
@ -235,7 +237,9 @@ class MainActivity : VMBaseActivity<MainViewModel>(R.layout.activity_main),
Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
) )
putPrefString(PreferKey.backupPath, uri.toString()) putPrefString(PreferKey.backupPath, uri.toString())
Backup.backup(this, uri) launch {
Backup.backup(this@MainActivity, uri)
}
} }
} }
restoreSelectRequestCode -> if (resultCode == Activity.RESULT_OK) { restoreSelectRequestCode -> if (resultCode == Activity.RESULT_OK) {

Loading…
Cancel
Save