kunfei 4 years ago
parent
commit
17900a0c3b

+ 2 - 0
app/src/main/java/io/legado/app/App.kt

@@ -43,6 +43,8 @@ class App : MultiDexApplication() {
         registerActivityLifecycleCallbacks(LifecycleHelp)
         registerActivityLifecycleCallbacks(LifecycleHelp)
         defaultSharedPreferences.registerOnSharedPreferenceChangeListener(AppConfig)
         defaultSharedPreferences.registerOnSharedPreferenceChangeListener(AppConfig)
         Coroutine.async {
         Coroutine.async {
+            //WebDav初始化
+            AppWebDav.initConfig()
             //初始化封面
             //初始化封面
             BookCover.toString()
             BookCover.toString()
             //清除过期数据
             //清除过期数据

+ 10 - 10
app/src/main/java/io/legado/app/help/storage/AppWebDav.kt

@@ -28,6 +28,8 @@ object AppWebDav {
     private val bookProgressUrl = "${rootWebDavUrl}bookProgress/"
     private val bookProgressUrl = "${rootWebDavUrl}bookProgress/"
     private val zipFilePath = "${appCtx.externalFiles.absolutePath}${File.separator}backup.zip"
     private val zipFilePath = "${appCtx.externalFiles.absolutePath}${File.separator}backup.zip"
 
 
+    var isOk = false
+
     private val rootWebDavUrl: String
     private val rootWebDavUrl: String
         get() {
         get() {
             val configUrl = appCtx.getPrefString(PreferKey.webDavUrl)?.trim()
             val configUrl = appCtx.getPrefString(PreferKey.webDavUrl)?.trim()
@@ -49,23 +51,21 @@ object AppWebDav {
         }
         }
 
 
     @Throws(Exception::class)
     @Throws(Exception::class)
-    suspend fun initWebDav(): Boolean {
+    suspend fun initConfig() {
+        isOk = false
         val account = appCtx.getPrefString(PreferKey.webDavAccount)
         val account = appCtx.getPrefString(PreferKey.webDavAccount)
         val password = appCtx.getPrefString(PreferKey.webDavPassword)
         val password = appCtx.getPrefString(PreferKey.webDavPassword)
         if (!account.isNullOrBlank() && !password.isNullOrBlank()) {
         if (!account.isNullOrBlank() && !password.isNullOrBlank()) {
             HttpAuth.auth = HttpAuth.Auth(account, password)
             HttpAuth.auth = HttpAuth.Auth(account, password)
-            WebDav(rootWebDavUrl).makeAsDir()
-            WebDav(bookProgressUrl).makeAsDir()
-            return true
+            isOk = WebDav(rootWebDavUrl).makeAsDir() && WebDav(bookProgressUrl).makeAsDir()
         }
         }
-        return false
     }
     }
 
 
     @Throws(Exception::class)
     @Throws(Exception::class)
     private suspend fun getWebDavFileNames(): ArrayList<String> {
     private suspend fun getWebDavFileNames(): ArrayList<String> {
         val url = rootWebDavUrl
         val url = rootWebDavUrl
         val names = arrayListOf<String>()
         val names = arrayListOf<String>()
-        if (initWebDav()) {
+        if (isOk) {
             var files = WebDav(url).listFiles()
             var files = WebDav(url).listFiles()
             files = files.reversed()
             files = files.reversed()
             files.forEach {
             files.forEach {
@@ -120,7 +120,7 @@ object AppWebDav {
 
 
     suspend fun backUpWebDav(path: String) {
     suspend fun backUpWebDav(path: String) {
         try {
         try {
-            if (initWebDav() && NetworkUtils.isAvailable()) {
+            if (isOk && NetworkUtils.isAvailable()) {
                 val paths = arrayListOf(*Backup.backupFileNames)
                 val paths = arrayListOf(*Backup.backupFileNames)
                 for (i in 0 until paths.size) {
                 for (i in 0 until paths.size) {
                     paths[i] = path + File.separator + paths[i]
                     paths[i] = path + File.separator + paths[i]
@@ -138,7 +138,7 @@ object AppWebDav {
 
 
     suspend fun exportWebDav(byteArray: ByteArray, fileName: String) {
     suspend fun exportWebDav(byteArray: ByteArray, fileName: String) {
         try {
         try {
-            if (initWebDav() && NetworkUtils.isAvailable()) {
+            if (isOk && NetworkUtils.isAvailable()) {
                 // 默认导出到legado文件夹下exports目录
                 // 默认导出到legado文件夹下exports目录
                 val exportsWebDavUrl = rootWebDavUrl + EncoderUtils.escape("exports") + "/"
                 val exportsWebDavUrl = rootWebDavUrl + EncoderUtils.escape("exports") + "/"
                 // 在legado文件夹创建exports目录,如果不存在的话
                 // 在legado文件夹创建exports目录,如果不存在的话
@@ -161,7 +161,7 @@ object AppWebDav {
             val bookProgress = BookProgress(book)
             val bookProgress = BookProgress(book)
             val json = GSON.toJson(bookProgress)
             val json = GSON.toJson(bookProgress)
             val url = getProgressUrl(book)
             val url = getProgressUrl(book)
-            if (initWebDav()) {
+            if (isOk) {
                 WebDav(url).upload(json.toByteArray(), "application/json")
                 WebDav(url).upload(json.toByteArray(), "application/json")
             }
             }
         }
         }
@@ -175,7 +175,7 @@ object AppWebDav {
      * 获取书籍进度
      * 获取书籍进度
      */
      */
     suspend fun getBookProgress(book: Book): BookProgress? {
     suspend fun getBookProgress(book: Book): BookProgress? {
-        if (initWebDav() && NetworkUtils.isAvailable()) {
+        if (isOk && NetworkUtils.isAvailable()) {
             val url = getProgressUrl(book)
             val url = getProgressUrl(book)
             WebDav(url).download()?.let { byteArray ->
             WebDav(url).download()?.let { byteArray ->
                 val json = String(byteArray)
                 val json = String(byteArray)

+ 5 - 1
app/src/main/java/io/legado/app/help/storage/BackupConfig.kt

@@ -22,7 +22,11 @@ object BackupConfig {
         PreferKey.themeMode,
         PreferKey.themeMode,
         PreferKey.bookshelfLayout,
         PreferKey.bookshelfLayout,
         PreferKey.showRss,
         PreferKey.showRss,
-        PreferKey.threadCount
+        PreferKey.threadCount,
+        PreferKey.webDavUrl,
+        PreferKey.webDavDir,
+        PreferKey.webDavAccount,
+        PreferKey.webDavPassword
     )
     )
 
 
     //配置忽略标题
     //配置忽略标题

+ 5 - 8
app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt

@@ -60,8 +60,11 @@ import io.legado.app.ui.replace.ReplaceRuleActivity
 import io.legado.app.ui.replace.edit.ReplaceEditActivity
 import io.legado.app.ui.replace.edit.ReplaceEditActivity
 import io.legado.app.ui.widget.dialog.TextDialog
 import io.legado.app.ui.widget.dialog.TextDialog
 import io.legado.app.utils.*
 import io.legado.app.utils.*
-import kotlinx.coroutines.*
 import kotlinx.coroutines.Dispatchers.IO
 import kotlinx.coroutines.Dispatchers.IO
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.isActive
+import kotlinx.coroutines.launch
 
 
 class ReadBookActivity : BaseReadBookActivity(),
 class ReadBookActivity : BaseReadBookActivity(),
     View.OnTouchListener,
     View.OnTouchListener,
@@ -245,13 +248,7 @@ class ReadBookActivity : BaseReadBookActivity(),
                     }
                     }
                 }
                 }
             }
             }
-            launch {
-                menu.findItem(R.id.menu_get_progress)?.isVisible =
-                    withContext(IO) {
-                        runCatching { AppWebDav.initWebDav() }
-                            .getOrElse { false }
-                    }
-            }
+            menu.findItem(R.id.menu_get_progress)?.isVisible = AppWebDav.isOk
         }
         }
     }
     }