pull/2370/head
kunfei 2 years ago
parent 66ae1d0ee9
commit 7816fb4e42
  1. 6
      app/src/main/java/io/legado/app/App.kt
  2. 6
      app/src/main/java/io/legado/app/api/controller/BookController.kt
  3. 5
      app/src/main/java/io/legado/app/data/entities/RemoteBook.kt
  4. 2
      app/src/main/java/io/legado/app/help/storage/Backup.kt
  5. 2
      app/src/main/java/io/legado/app/help/webdav/AppWebDav.kt
  6. 7
      app/src/main/java/io/legado/app/help/webdav/RemoteBookWebDav.kt
  7. 2
      app/src/main/java/io/legado/app/model/ReadBook.kt
  8. 2
      app/src/main/java/io/legado/app/model/localBook/LocalBook.kt
  9. 5
      app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt
  10. 2
      app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt
  11. 1
      app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt
  12. 2
      app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt
  13. 13
      app/src/main/java/io/legado/app/ui/book/remote/RemoteBookActivity.kt
  14. 1
      app/src/main/java/io/legado/app/ui/book/remote/RemoteBookAdapter.kt
  15. 1
      app/src/main/java/io/legado/app/ui/book/remote/RemoteBookManager.kt
  16. 2
      app/src/main/java/io/legado/app/ui/book/remote/RemoteBookSort.kt
  17. 9
      app/src/main/java/io/legado/app/ui/book/remote/RemoteBookViewModel.kt
  18. 2
      app/src/main/java/io/legado/app/ui/config/BackupConfigFragment.kt
  19. 2
      app/src/main/java/io/legado/app/ui/config/ConfigViewModel.kt
  20. 2
      app/src/main/java/io/legado/app/ui/main/MainActivity.kt
  21. 2
      app/src/main/java/io/legado/app/ui/main/MainViewModel.kt

@ -16,11 +16,15 @@ import io.legado.app.constant.AppConst.channelIdReadAloud
import io.legado.app.constant.AppConst.channelIdWeb import io.legado.app.constant.AppConst.channelIdWeb
import io.legado.app.constant.PreferKey import io.legado.app.constant.PreferKey
import io.legado.app.data.appDb import io.legado.app.data.appDb
import io.legado.app.help.* import io.legado.app.help.BookHelp
import io.legado.app.help.CrashHandler
import io.legado.app.help.LifecycleHelp
import io.legado.app.help.RuleBigDataHelp
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.ThemeConfig.applyDayNight import io.legado.app.help.config.ThemeConfig.applyDayNight
import io.legado.app.help.coroutine.Coroutine import io.legado.app.help.coroutine.Coroutine
import io.legado.app.help.http.cronet.CronetLoader import io.legado.app.help.http.cronet.CronetLoader
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.model.BookCover import io.legado.app.model.BookCover
import io.legado.app.utils.defaultSharedPreferences import io.legado.app.utils.defaultSharedPreferences
import io.legado.app.utils.getPrefBoolean import io.legado.app.utils.getPrefBoolean

@ -7,8 +7,12 @@ import io.legado.app.data.appDb
import io.legado.app.data.entities.Book import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookProgress import io.legado.app.data.entities.BookProgress
import io.legado.app.data.entities.BookSource import io.legado.app.data.entities.BookSource
import io.legado.app.help.* import io.legado.app.help.BookHelp
import io.legado.app.help.CacheManager
import io.legado.app.help.ContentProcessor
import io.legado.app.help.glide.ImageLoader import io.legado.app.help.glide.ImageLoader
import io.legado.app.help.isLocal
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.model.BookCover import io.legado.app.model.BookCover
import io.legado.app.model.localBook.LocalBook import io.legado.app.model.localBook.LocalBook
import io.legado.app.model.webBook.WebBook import io.legado.app.model.webBook.WebBook

@ -1,5 +1,8 @@
package io.legado.app.ui.book.remote package io.legado.app.data.entities
import com.android.tools.r8.Keep
@Keep
data class RemoteBook( data class RemoteBook(
val filename: String, val filename: String,
val path: String, val path: String,

@ -6,12 +6,12 @@ import androidx.documentfile.provider.DocumentFile
import io.legado.app.constant.AppLog import io.legado.app.constant.AppLog
import io.legado.app.constant.PreferKey import io.legado.app.constant.PreferKey
import io.legado.app.data.appDb import io.legado.app.data.appDb
import io.legado.app.help.AppWebDav
import io.legado.app.help.DirectLinkUpload import io.legado.app.help.DirectLinkUpload
import io.legado.app.help.config.LocalConfig import io.legado.app.help.config.LocalConfig
import io.legado.app.help.config.ReadBookConfig import io.legado.app.help.config.ReadBookConfig
import io.legado.app.help.config.ThemeConfig import io.legado.app.help.config.ThemeConfig
import io.legado.app.help.coroutine.Coroutine import io.legado.app.help.coroutine.Coroutine
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.utils.* import io.legado.app.utils.*
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.ensureActive import kotlinx.coroutines.ensureActive

@ -1,4 +1,4 @@
package io.legado.app.help package io.legado.app.help.webdav
import android.content.Context import android.content.Context
import io.legado.app.R import io.legado.app.R

@ -1,15 +1,14 @@
package io.legado.app.ui.book.remote.manager package io.legado.app.help.webdav
import android.net.Uri import android.net.Uri
import io.legado.app.constant.AppPattern.bookFileRegex import io.legado.app.constant.AppPattern.bookFileRegex
import io.legado.app.constant.BookType import io.legado.app.constant.BookType
import io.legado.app.data.entities.Book import io.legado.app.data.entities.Book
import io.legado.app.data.entities.RemoteBook
import io.legado.app.exception.NoStackTraceException import io.legado.app.exception.NoStackTraceException
import io.legado.app.help.AppWebDav
import io.legado.app.lib.webdav.WebDav import io.legado.app.lib.webdav.WebDav
import io.legado.app.lib.webdav.WebDavFile import io.legado.app.lib.webdav.WebDavFile
import io.legado.app.model.localBook.LocalBook import io.legado.app.model.localBook.LocalBook
import io.legado.app.ui.book.remote.RemoteBook
import io.legado.app.ui.book.remote.RemoteBookManager import io.legado.app.ui.book.remote.RemoteBookManager
import io.legado.app.utils.NetworkUtils import io.legado.app.utils.NetworkUtils
import io.legado.app.utils.isContentScheme import io.legado.app.utils.isContentScheme
@ -89,7 +88,7 @@ object RemoteBookWebDav : RemoteBookManager() {
override suspend fun upload(book: Book): Boolean { override suspend fun upload(book: Book): Boolean {
if (!NetworkUtils.isAvailable()) return false if (!NetworkUtils.isAvailable()) return false
val localBookUri = Uri.parse(book.bookUrl) val localBookUri = Uri.parse(book.bookUrl)
val putUrl = "${rootBookUrl}${File.separator}${book.originName}" val putUrl = "$rootBookUrl${File.separator}${book.originName}"
AppWebDav.authorization?.let { AppWebDav.authorization?.let {
if (localBookUri.isContentScheme()) { if (localBookUri.isContentScheme()) {
WebDav(putUrl, it).upload( WebDav(putUrl, it).upload(

@ -3,13 +3,13 @@ package io.legado.app.model
import io.legado.app.constant.AppLog import io.legado.app.constant.AppLog
import io.legado.app.data.appDb import io.legado.app.data.appDb
import io.legado.app.data.entities.* import io.legado.app.data.entities.*
import io.legado.app.help.AppWebDav
import io.legado.app.help.BookHelp import io.legado.app.help.BookHelp
import io.legado.app.help.ContentProcessor import io.legado.app.help.ContentProcessor
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.ReadBookConfig import io.legado.app.help.config.ReadBookConfig
import io.legado.app.help.coroutine.Coroutine import io.legado.app.help.coroutine.Coroutine
import io.legado.app.help.isLocal import io.legado.app.help.isLocal
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.model.webBook.WebBook import io.legado.app.model.webBook.WebBook
import io.legado.app.service.BaseReadAloudService import io.legado.app.service.BaseReadAloudService
import io.legado.app.ui.book.read.page.entities.TextChapter import io.legado.app.ui.book.read.page.entities.TextChapter

@ -14,11 +14,11 @@ import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookChapter import io.legado.app.data.entities.BookChapter
import io.legado.app.exception.NoStackTraceException import io.legado.app.exception.NoStackTraceException
import io.legado.app.exception.TocEmptyException import io.legado.app.exception.TocEmptyException
import io.legado.app.help.AppWebDav
import io.legado.app.help.BookHelp import io.legado.app.help.BookHelp
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.isEpub import io.legado.app.help.isEpub
import io.legado.app.help.isUmd import io.legado.app.help.isUmd
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.lib.webdav.WebDav import io.legado.app.lib.webdav.WebDav
import io.legado.app.model.analyzeRule.AnalyzeUrl import io.legado.app.model.analyzeRule.AnalyzeUrl
import io.legado.app.utils.* import io.legado.app.utils.*

@ -18,13 +18,14 @@ import io.legado.app.data.appDb
import io.legado.app.data.entities.Book import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookChapter import io.legado.app.data.entities.BookChapter
import io.legado.app.exception.NoStackTraceException import io.legado.app.exception.NoStackTraceException
import io.legado.app.help.AppWebDav
import io.legado.app.help.BookHelp import io.legado.app.help.BookHelp
import io.legado.app.help.ContentProcessor import io.legado.app.help.ContentProcessor
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.coroutine.OrderCoroutine import io.legado.app.help.coroutine.OrderCoroutine
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.utils.* import io.legado.app.utils.*
import kotlinx.coroutines.* import kotlinx.coroutines.delay
import kotlinx.coroutines.ensureActive
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.sync.withLock
import me.ag2s.epublib.domain.* import me.ag2s.epublib.domain.*

@ -23,6 +23,7 @@ import io.legado.app.help.config.AppConfig
import io.legado.app.help.isAudio import io.legado.app.help.isAudio
import io.legado.app.help.isLocal import io.legado.app.help.isLocal
import io.legado.app.help.isLocalTxt import io.legado.app.help.isLocalTxt
import io.legado.app.help.webdav.RemoteBookWebDav
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.backgroundColor import io.legado.app.lib.theme.backgroundColor
import io.legado.app.lib.theme.bottomBackground import io.legado.app.lib.theme.bottomBackground
@ -36,7 +37,6 @@ import io.legado.app.ui.book.changesource.ChangeBookSourceDialog
import io.legado.app.ui.book.group.GroupSelectDialog import io.legado.app.ui.book.group.GroupSelectDialog
import io.legado.app.ui.book.info.edit.BookInfoEditActivity import io.legado.app.ui.book.info.edit.BookInfoEditActivity
import io.legado.app.ui.book.read.ReadBookActivity import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.ui.book.remote.manager.RemoteBookWebDav
import io.legado.app.ui.book.search.SearchActivity import io.legado.app.ui.book.search.SearchActivity
import io.legado.app.ui.book.source.edit.BookSourceEditActivity import io.legado.app.ui.book.source.edit.BookSourceEditActivity
import io.legado.app.ui.book.toc.TocActivityResult import io.legado.app.ui.book.toc.TocActivityResult

@ -28,6 +28,7 @@ import io.legado.app.help.config.ReadBookConfig
import io.legado.app.help.config.ReadTipConfig import io.legado.app.help.config.ReadTipConfig
import io.legado.app.help.coroutine.Coroutine import io.legado.app.help.coroutine.Coroutine
import io.legado.app.help.storage.Backup import io.legado.app.help.storage.Backup
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.lib.dialogs.SelectItem import io.legado.app.lib.dialogs.SelectItem
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.dialogs.selector import io.legado.app.lib.dialogs.selector

@ -15,12 +15,12 @@ import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookChapter import io.legado.app.data.entities.BookChapter
import io.legado.app.data.entities.BookProgress import io.legado.app.data.entities.BookProgress
import io.legado.app.exception.NoStackTraceException import io.legado.app.exception.NoStackTraceException
import io.legado.app.help.AppWebDav
import io.legado.app.help.BookHelp import io.legado.app.help.BookHelp
import io.legado.app.help.ContentProcessor import io.legado.app.help.ContentProcessor
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.coroutine.Coroutine import io.legado.app.help.coroutine.Coroutine
import io.legado.app.help.isLocal import io.legado.app.help.isLocal
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.model.ReadAloud import io.legado.app.model.ReadAloud
import io.legado.app.model.ReadBook import io.legado.app.model.ReadBook
import io.legado.app.model.analyzeRule.AnalyzeRule import io.legado.app.model.analyzeRule.AnalyzeRule

@ -10,6 +10,7 @@ import androidx.core.view.isGone
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.VMBaseActivity import io.legado.app.base.VMBaseActivity
import io.legado.app.data.entities.RemoteBook
import io.legado.app.databinding.ActivityImportBookBinding import io.legado.app.databinding.ActivityImportBookBinding
import io.legado.app.lib.theme.backgroundColor import io.legado.app.lib.theme.backgroundColor
import io.legado.app.ui.about.AppLogDialog import io.legado.app.ui.about.AppLogDialog
@ -50,7 +51,7 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV
binding.selectActionBar.setCallBack(this) binding.selectActionBar.setCallBack(this)
} }
private fun sortCheck(sortKey: Sort) { private fun sortCheck(sortKey: RemoteBookSort) {
if (viewModel.sortKey == sortKey) { if (viewModel.sortKey == sortKey) {
viewModel.sortAscending = !viewModel.sortAscending viewModel.sortAscending = !viewModel.sortAscending
} else { } else {
@ -89,12 +90,12 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV
R.id.menu_log -> showDialogFragment<AppLogDialog>() R.id.menu_log -> showDialogFragment<AppLogDialog>()
R.id.menu_sort_name -> { R.id.menu_sort_name -> {
item.isChecked = true item.isChecked = true
sortCheck(Sort.Name) sortCheck(RemoteBookSort.Name)
upPath() upPath()
} }
R.id.menu_sort_time -> { R.id.menu_sort_time -> {
item.isChecked = true item.isChecked = true
sortCheck(Sort.Default) sortCheck(RemoteBookSort.Default)
upPath() upPath()
} }
} }
@ -104,8 +105,10 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV
override fun onPrepareOptionsMenu(menu: Menu): Boolean { override fun onPrepareOptionsMenu(menu: Menu): Boolean {
groupMenu = menu.findItem(R.id.menu_sort)?.subMenu groupMenu = menu.findItem(R.id.menu_sort)?.subMenu
groupMenu?.setGroupCheckable(R.id.menu_group_sort, true, true) groupMenu?.setGroupCheckable(R.id.menu_group_sort, true, true)
groupMenu?.findItem(R.id.menu_sort_name)?.isChecked = viewModel.sortKey == Sort.Name groupMenu?.findItem(R.id.menu_sort_name)?.isChecked =
groupMenu?.findItem(R.id.menu_sort_time)?.isChecked = viewModel.sortKey == Sort.Default viewModel.sortKey == RemoteBookSort.Name
groupMenu?.findItem(R.id.menu_sort_time)?.isChecked =
viewModel.sortKey == RemoteBookSort.Default
return super.onPrepareOptionsMenu(menu) return super.onPrepareOptionsMenu(menu)
} }

@ -7,6 +7,7 @@ import io.legado.app.R
import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.ItemViewHolder
import io.legado.app.base.adapter.RecyclerAdapter import io.legado.app.base.adapter.RecyclerAdapter
import io.legado.app.constant.AppConst import io.legado.app.constant.AppConst
import io.legado.app.data.entities.RemoteBook
import io.legado.app.databinding.ItemImportBookBinding import io.legado.app.databinding.ItemImportBookBinding
import io.legado.app.utils.ConvertUtils import io.legado.app.utils.ConvertUtils
import io.legado.app.utils.gone import io.legado.app.utils.gone

@ -2,6 +2,7 @@ package io.legado.app.ui.book.remote
import android.net.Uri import android.net.Uri
import io.legado.app.data.entities.Book import io.legado.app.data.entities.Book
import io.legado.app.data.entities.RemoteBook
abstract class RemoteBookManager { abstract class RemoteBookManager {
protected val remoteBookFolder : String = "books" protected val remoteBookFolder : String = "books"

@ -1,5 +1,5 @@
package io.legado.app.ui.book.remote package io.legado.app.ui.book.remote
enum class Sort { enum class RemoteBookSort {
Default, Name Default, Name
} }

@ -4,8 +4,9 @@ import android.app.Application
import io.legado.app.base.BaseViewModel import io.legado.app.base.BaseViewModel
import io.legado.app.constant.AppLog import io.legado.app.constant.AppLog
import io.legado.app.constant.BookType import io.legado.app.constant.BookType
import io.legado.app.data.entities.RemoteBook
import io.legado.app.help.webdav.RemoteBookWebDav
import io.legado.app.model.localBook.LocalBook import io.legado.app.model.localBook.LocalBook
import io.legado.app.ui.book.remote.manager.RemoteBookWebDav
import io.legado.app.utils.toastOnUi import io.legado.app.utils.toastOnUi
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.channels.awaitClose
@ -15,7 +16,7 @@ import kotlinx.coroutines.flow.map
import java.util.* import java.util.*
class RemoteBookViewModel(application: Application) : BaseViewModel(application) { class RemoteBookViewModel(application: Application) : BaseViewModel(application) {
var sortKey = Sort.Default var sortKey = RemoteBookSort.Default
var sortAscending = false var sortAscending = false
val dirList = arrayListOf<RemoteBook>() val dirList = arrayListOf<RemoteBook>()
@ -49,10 +50,10 @@ class RemoteBookViewModel(application: Application) : BaseViewModel(application)
} }
}.map { list -> }.map { list ->
if (sortAscending) when (sortKey) { if (sortAscending) when (sortKey) {
Sort.Name -> list.sortedWith(compareBy({ !it.isDir }, { it.filename })) RemoteBookSort.Name -> list.sortedWith(compareBy({ !it.isDir }, { it.filename }))
else -> list.sortedWith(compareBy({ !it.isDir }, { it.lastModify })) else -> list.sortedWith(compareBy({ !it.isDir }, { it.lastModify }))
} else when (sortKey) { } else when (sortKey) {
Sort.Name -> list.sortedWith { o1, o2 -> RemoteBookSort.Name -> list.sortedWith { o1, o2 ->
val compare = -compareValues(o1.isDir, o2.isDir) val compare = -compareValues(o1.isDir, o2.isDir)
if (compare == 0) { if (compare == 0) {
return@sortedWith -compareValues(o1.filename, o2.filename) return@sortedWith -compareValues(o1.filename, o2.filename)

@ -18,7 +18,6 @@ import androidx.preference.Preference
import io.legado.app.R import io.legado.app.R
import io.legado.app.constant.AppLog import io.legado.app.constant.AppLog
import io.legado.app.constant.PreferKey import io.legado.app.constant.PreferKey
import io.legado.app.help.AppWebDav
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.LocalConfig import io.legado.app.help.config.LocalConfig
import io.legado.app.help.coroutine.Coroutine import io.legado.app.help.coroutine.Coroutine
@ -26,6 +25,7 @@ import io.legado.app.help.storage.Backup
import io.legado.app.help.storage.BackupConfig import io.legado.app.help.storage.BackupConfig
import io.legado.app.help.storage.ImportOldData import io.legado.app.help.storage.ImportOldData
import io.legado.app.help.storage.Restore import io.legado.app.help.storage.Restore
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.permission.Permissions import io.legado.app.lib.permission.Permissions
import io.legado.app.lib.permission.PermissionsCompat import io.legado.app.lib.permission.PermissionsCompat

@ -3,8 +3,8 @@ package io.legado.app.ui.config
import android.app.Application import android.app.Application
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseViewModel import io.legado.app.base.BaseViewModel
import io.legado.app.help.AppWebDav
import io.legado.app.help.BookHelp import io.legado.app.help.BookHelp
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.utils.FileUtils import io.legado.app.utils.FileUtils
import io.legado.app.utils.toastOnUi import io.legado.app.utils.toastOnUi

@ -21,12 +21,12 @@ import io.legado.app.constant.AppConst.appInfo
import io.legado.app.constant.EventBus import io.legado.app.constant.EventBus
import io.legado.app.constant.PreferKey import io.legado.app.constant.PreferKey
import io.legado.app.databinding.ActivityMainBinding import io.legado.app.databinding.ActivityMainBinding
import io.legado.app.help.AppWebDav
import io.legado.app.help.BookHelp import io.legado.app.help.BookHelp
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.LocalConfig import io.legado.app.help.config.LocalConfig
import io.legado.app.help.coroutine.Coroutine import io.legado.app.help.coroutine.Coroutine
import io.legado.app.help.storage.Backup import io.legado.app.help.storage.Backup
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.elevation import io.legado.app.lib.theme.elevation
import io.legado.app.lib.theme.primaryColor import io.legado.app.lib.theme.primaryColor

@ -9,12 +9,12 @@ import io.legado.app.constant.EventBus
import io.legado.app.data.appDb import io.legado.app.data.appDb
import io.legado.app.data.entities.Book import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookSource import io.legado.app.data.entities.BookSource
import io.legado.app.help.AppWebDav
import io.legado.app.help.BookHelp import io.legado.app.help.BookHelp
import io.legado.app.help.DefaultData import io.legado.app.help.DefaultData
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.LocalConfig import io.legado.app.help.config.LocalConfig
import io.legado.app.help.isLocal import io.legado.app.help.isLocal
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.model.CacheBook import io.legado.app.model.CacheBook
import io.legado.app.model.analyzeRule.AnalyzeRule import io.legado.app.model.analyzeRule.AnalyzeRule
import io.legado.app.model.webBook.WebBook import io.legado.app.model.webBook.WebBook

Loading…
Cancel
Save