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.PreferKey
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.ThemeConfig.applyDayNight
import io.legado.app.help.coroutine.Coroutine
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.utils.defaultSharedPreferences
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.BookProgress
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.isLocal
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.model.BookCover
import io.legado.app.model.localBook.LocalBook
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(
val filename: String,
val path: String,

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

@ -1,4 +1,4 @@
package io.legado.app.help
package io.legado.app.help.webdav
import android.content.Context
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 io.legado.app.constant.AppPattern.bookFileRegex
import io.legado.app.constant.BookType
import io.legado.app.data.entities.Book
import io.legado.app.data.entities.RemoteBook
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.WebDavFile
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.utils.NetworkUtils
import io.legado.app.utils.isContentScheme
@ -89,7 +88,7 @@ object RemoteBookWebDav : RemoteBookManager() {
override suspend fun upload(book: Book): Boolean {
if (!NetworkUtils.isAvailable()) return false
val localBookUri = Uri.parse(book.bookUrl)
val putUrl = "${rootBookUrl}${File.separator}${book.originName}"
val putUrl = "$rootBookUrl${File.separator}${book.originName}"
AppWebDav.authorization?.let {
if (localBookUri.isContentScheme()) {
WebDav(putUrl, it).upload(

@ -3,13 +3,13 @@ package io.legado.app.model
import io.legado.app.constant.AppLog
import io.legado.app.data.appDb
import io.legado.app.data.entities.*
import io.legado.app.help.AppWebDav
import io.legado.app.help.BookHelp
import io.legado.app.help.ContentProcessor
import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.ReadBookConfig
import io.legado.app.help.coroutine.Coroutine
import io.legado.app.help.isLocal
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.model.webBook.WebBook
import io.legado.app.service.BaseReadAloudService
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.exception.NoStackTraceException
import io.legado.app.exception.TocEmptyException
import io.legado.app.help.AppWebDav
import io.legado.app.help.BookHelp
import io.legado.app.help.config.AppConfig
import io.legado.app.help.isEpub
import io.legado.app.help.isUmd
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.lib.webdav.WebDav
import io.legado.app.model.analyzeRule.AnalyzeUrl
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.BookChapter
import io.legado.app.exception.NoStackTraceException
import io.legado.app.help.AppWebDav
import io.legado.app.help.BookHelp
import io.legado.app.help.ContentProcessor
import io.legado.app.help.config.AppConfig
import io.legado.app.help.coroutine.OrderCoroutine
import io.legado.app.help.webdav.AppWebDav
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.withLock
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.isLocal
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.theme.backgroundColor
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.info.edit.BookInfoEditActivity
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.source.edit.BookSourceEditActivity
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.coroutine.Coroutine
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.alert
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.BookProgress
import io.legado.app.exception.NoStackTraceException
import io.legado.app.help.AppWebDav
import io.legado.app.help.BookHelp
import io.legado.app.help.ContentProcessor
import io.legado.app.help.config.AppConfig
import io.legado.app.help.coroutine.Coroutine
import io.legado.app.help.isLocal
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.model.ReadAloud
import io.legado.app.model.ReadBook
import io.legado.app.model.analyzeRule.AnalyzeRule

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

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

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

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

@ -18,7 +18,6 @@ import androidx.preference.Preference
import io.legado.app.R
import io.legado.app.constant.AppLog
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.LocalConfig
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.ImportOldData
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.permission.Permissions
import io.legado.app.lib.permission.PermissionsCompat

@ -3,8 +3,8 @@ package io.legado.app.ui.config
import android.app.Application
import io.legado.app.R
import io.legado.app.base.BaseViewModel
import io.legado.app.help.AppWebDav
import io.legado.app.help.BookHelp
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.utils.FileUtils
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.PreferKey
import io.legado.app.databinding.ActivityMainBinding
import io.legado.app.help.AppWebDav
import io.legado.app.help.BookHelp
import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.LocalConfig
import io.legado.app.help.coroutine.Coroutine
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.theme.elevation
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.entities.Book
import io.legado.app.data.entities.BookSource
import io.legado.app.help.AppWebDav
import io.legado.app.help.BookHelp
import io.legado.app.help.DefaultData
import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.LocalConfig
import io.legado.app.help.isLocal
import io.legado.app.help.webdav.AppWebDav
import io.legado.app.model.CacheBook
import io.legado.app.model.analyzeRule.AnalyzeRule
import io.legado.app.model.webBook.WebBook

Loading…
Cancel
Save