Merge pull request #5 from gedoor/master

up
pull/68/head
口口吕 5 years ago committed by GitHub
commit adc7b1beca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 148
      app/src/main/java/io/legado/app/help/storage/Backup.kt
  2. 15
      app/src/main/java/io/legado/app/ui/main/MainActivity.kt

@ -4,21 +4,19 @@ import android.content.Context
import android.net.Uri
import androidx.documentfile.provider.DocumentFile
import io.legado.app.App
import io.legado.app.R
import io.legado.app.help.FileHelp
import io.legado.app.help.ReadBookConfig
import io.legado.app.utils.DocumentUtils
import io.legado.app.utils.FileUtils
import io.legado.app.utils.GSON
import org.jetbrains.anko.defaultSharedPreferences
import org.jetbrains.anko.doAsync
import org.jetbrains.anko.toast
import org.jetbrains.anko.uiThread
import java.io.File
object Backup {
private val backupPath = App.INSTANCE.filesDir.absolutePath + File.separator + "backup"
val defaultPath by lazy {
FileUtils.getSdCardPath() + File.separator + "YueDu"
}
@ -31,134 +29,54 @@ object Backup {
legadoPath + File.separator + "Export"
}
fun backup(context: Context, uri: Uri) {
DocumentFile.fromTreeUri(context, uri)?.listFiles()?.forEach { doc ->
when (doc.name) {
"bookshelf.json" -> App.db.bookDao().allBooks.let {
if (it.isNotEmpty()) {
val json = GSON.toJson(it)
DocumentUtils.writeText(context, json, doc.uri)
}
}
"bookGroup.json" -> App.db.bookGroupDao().all().let {
if (it.isNotEmpty()) {
val json = GSON.toJson(it)
DocumentUtils.writeText(context, json, doc.uri)
}
}
"bookSource.json" -> App.db.bookSourceDao().all.let {
if (it.isNotEmpty()) {
val json = GSON.toJson(it)
DocumentUtils.writeText(context, json, doc.uri)
}
}
"rssSource.json" -> App.db.rssSourceDao().all.let {
if (it.isNotEmpty()) {
val json = GSON.toJson(it)
DocumentUtils.writeText(context, json, doc.uri)
}
}
"replaceRule.json" -> App.db.replaceRuleDao().all.let {
if (it.isNotEmpty()) {
val json = GSON.toJson(it)
DocumentUtils.writeText(context, json, doc.uri)
}
}
ReadBookConfig.readConfigFileName -> GSON.toJson(ReadBookConfig.configList)?.let {
DocumentUtils.writeText(context, it, doc.uri)
}
"config.xml" -> {
}
}
}
}
private fun pBackup(path: String = legadoPath) {
backupBookshelf(path)
backupBookGroup(path)
backupBookSource(path)
backupRssSource(path)
backupReplaceRule(path)
backupReadConfig(path)
backupPreference(path)
WebDavHelp.backUpWebDav(path)
}
fun backup() {
doAsync {
pBackup()
uiThread {
App.INSTANCE.toast(R.string.backup_success)
}
}
}
fun autoBackup() {
doAsync {
pBackup()
}
private val backupFileNames by lazy {
arrayOf(
"bookshelf.json",
"bookGroup.json",
"bookSource.json",
"rssSource.json",
"replaceRule.json",
ReadBookConfig.readConfigFileName,
"config.xml"
)
}
private fun backupBookshelf(path: String) {
fun backup(context: Context, uri: Uri?) {
App.db.bookDao().allBooks.let {
if (it.isNotEmpty()) {
val json = GSON.toJson(it)
val file = FileHelp.getFile(path + File.separator + "bookshelf.json")
file.writeText(json)
FileHelp.getFile(backupPath + File.separator + "bookshelf.json").writeText(json)
}
}
}
private fun backupBookGroup(path: String) {
App.db.bookGroupDao().all().let {
if (it.isNotEmpty()) {
val json = GSON.toJson(it)
val file = FileHelp.getFile(path + File.separator + "bookGroup.json")
file.writeText(json)
FileHelp.getFile(backupPath + File.separator + "bookGroup.json").writeText(json)
}
}
}
private fun backupBookSource(path: String) {
App.db.bookSourceDao().all.let {
if (it.isNotEmpty()) {
val json = GSON.toJson(it)
val file = FileHelp.getFile(path + File.separator + "bookSource.json")
file.writeText(json)
FileHelp.getFile(backupPath + File.separator + "bookSource.json").writeText(json)
}
}
}
private fun backupRssSource(path: String) {
App.db.rssSourceDao().all.let {
if (it.isNotEmpty()) {
val json = GSON.toJson(it)
val file = FileHelp.getFile(path + File.separator + "rssSource.json")
file.writeText(json)
FileHelp.getFile(backupPath + File.separator + "rssSource.json").writeText(json)
}
}
}
private fun backupReplaceRule(path: String) {
App.db.replaceRuleDao().all.let {
if (it.isNotEmpty()) {
val json = GSON.toJson(it)
val file = FileHelp.getFile(path + File.separator + "replaceRule.json")
file.writeText(json)
FileHelp.getFile(backupPath + File.separator + "replaceRule.json").writeText(json)
}
}
}
private fun backupReadConfig(path: String) {
GSON.toJson(ReadBookConfig.configList)?.let {
FileHelp.getFile(path + File.separator + ReadBookConfig.readConfigFileName)
FileHelp.getFile(backupPath + File.separator + ReadBookConfig.readConfigFileName)
.writeText(it)
}
}
private fun backupPreference(path: String) {
Preferences.getSharedPreferences(App.INSTANCE, path, "config")?.let { sp ->
Preferences.getSharedPreferences(App.INSTANCE, backupPath, "config")?.let { sp ->
val edit = sp.edit()
App.INSTANCE.defaultSharedPreferences.all.map {
when (val value = it.value) {
@ -172,6 +90,32 @@ object Backup {
}
edit.commit()
}
WebDavHelp.backUpWebDav(backupPath)
if (uri != null) {
copyBackup(context, uri)
} else {
copyBackup()
}
}
private fun copyBackup(context: Context, uri: Uri) {
DocumentFile.fromTreeUri(context, uri)?.let { treeDoc ->
for (fileName in backupFileNames) {
treeDoc.createFile("text/plain", fileName)?.let { doc ->
DocumentUtils.writeText(
context,
FileHelp.getFile(backupPath + File.separator + fileName).readText(),
doc.uri
)
}
}
}
}
private fun copyBackup() {
for (fileName in backupFileNames) {
FileHelp.getFile(backupPath + File.separator + "bookshelf.json")
.copyTo(FileHelp.getFile(legadoPath + File.separator + "bookshelf.json"))
}
}
}

@ -33,6 +33,9 @@ import io.legado.app.ui.main.my.MyFragment
import io.legado.app.ui.main.rss.RssFragment
import io.legado.app.utils.*
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class MainActivity : VMBaseActivity<MainViewModel>(R.layout.activity_main),
BottomNavigationView.OnNavigationItemSelectedListener,
@ -123,9 +126,15 @@ class MainActivity : VMBaseActivity<MainViewModel>(R.layout.activity_main),
override fun finish() {
if (!BuildConfig.DEBUG) {
Backup.autoBackup()
launch {
withContext(IO) {
backup()
}
super.finish()
}
} else {
super.finish()
}
super.finish()
}
override fun onDestroy() {
@ -183,7 +192,7 @@ class MainActivity : VMBaseActivity<MainViewModel>(R.layout.activity_main),
PermissionsCompat.Builder(this)
.addPermissions(*Permissions.Group.STORAGE)
.rationale(R.string.tip_perm_request_storage)
.onGranted { Backup.backup() }
.onGranted { Backup.backup(this, null) }
.request()
}
}

Loading…
Cancel
Save