mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
优化
This commit is contained in:
@@ -81,6 +81,7 @@ class App : Application() {
|
||||
val clearTime = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1)
|
||||
appDb.searchBookDao.clearExpired(clearTime)
|
||||
}
|
||||
appDb.bookDao.deleteNotShelfBook()
|
||||
RuleBigDataHelp.clearInvalid()
|
||||
BookHelp.clearInvalidCache()
|
||||
Backup.clearCache()
|
||||
|
||||
@@ -43,9 +43,14 @@ object BookType {
|
||||
*/
|
||||
const val archive = 0b1000000000
|
||||
|
||||
/**
|
||||
* 1024 未正式加入到书架的临时阅读书籍
|
||||
*/
|
||||
const val notShelf = 0b100_0000_0000
|
||||
|
||||
@Target(AnnotationTarget.VALUE_PARAMETER)
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
@IntDef(text, updateError, audio, image, webFile, local, archive)
|
||||
@IntDef(text, updateError, audio, image, webFile, local, archive, notShelf)
|
||||
annotation class Type
|
||||
|
||||
|
||||
|
||||
@@ -148,4 +148,7 @@ interface BookDao {
|
||||
|
||||
@Query("update books set `group` = `group` - :group where `group` & :group > 0")
|
||||
fun removeGroup(group: Long)
|
||||
|
||||
@Query("delete from books where type & ${BookType.notShelf} > 0")
|
||||
fun deleteNotShelfBook()
|
||||
}
|
||||
@@ -223,6 +223,10 @@ fun BookSource.getBookType(): Int {
|
||||
}
|
||||
}
|
||||
|
||||
fun BookSource.getAllBookType(): Int {
|
||||
return BookType.text or BookType.image or BookType.audio or BookType.webFile
|
||||
}
|
||||
|
||||
fun Book.sync(oldBook: Book) {
|
||||
val curBook = appDb.bookDao.getBook(oldBook.bookUrl)!!
|
||||
durChapterTime = curBook.durChapterTime
|
||||
|
||||
@@ -22,6 +22,7 @@ import io.legado.app.service.BaseReadAloudService
|
||||
import io.legado.app.ui.book.read.page.entities.TextChapter
|
||||
import io.legado.app.ui.book.read.page.provider.ChapterProvider
|
||||
import io.legado.app.ui.book.read.page.provider.LayoutProgressListener
|
||||
import io.legado.app.utils.LogUtils
|
||||
import io.legado.app.utils.stackTraceStr
|
||||
import io.legado.app.utils.toastOnUi
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@@ -97,6 +98,7 @@ object ReadBook : CoroutineScope by MainScope() {
|
||||
durChapterPos = book.durChapterPos
|
||||
isLocalBook = book.isLocal
|
||||
clearTextChapter()
|
||||
callBack?.upContent()
|
||||
callBack?.upMenuView()
|
||||
callBack?.upPageAnim()
|
||||
upWebBook(book)
|
||||
|
||||
@@ -6,7 +6,10 @@ import io.legado.app.data.entities.BookChapter
|
||||
import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.data.entities.SearchBook
|
||||
import io.legado.app.exception.NoStackTraceException
|
||||
import io.legado.app.help.book.addType
|
||||
import io.legado.app.help.book.getAllBookType
|
||||
import io.legado.app.help.book.getBookType
|
||||
import io.legado.app.help.book.removeType
|
||||
import io.legado.app.help.coroutine.Coroutine
|
||||
import io.legado.app.help.http.StrResponse
|
||||
import io.legado.app.model.Debug
|
||||
@@ -144,7 +147,8 @@ object WebBook {
|
||||
book: Book,
|
||||
canReName: Boolean = true,
|
||||
): Book {
|
||||
book.type = bookSource.getBookType()
|
||||
book.removeType(bookSource.getAllBookType())
|
||||
book.addType(bookSource.getBookType())
|
||||
if (!book.infoHtml.isNullOrEmpty()) {
|
||||
BookInfo.analyzeBookInfo(
|
||||
bookSource = bookSource,
|
||||
@@ -220,7 +224,8 @@ object WebBook {
|
||||
book: Book,
|
||||
runPerJs: Boolean = false
|
||||
): Result<List<BookChapter>> {
|
||||
book.type = bookSource.getBookType()
|
||||
book.removeType(bookSource.getAllBookType())
|
||||
book.addType(bookSource.getBookType())
|
||||
return kotlin.runCatching {
|
||||
if (runPerJs) {
|
||||
runPreUpdateJs(bookSource, book).getOrThrow()
|
||||
|
||||
@@ -22,6 +22,7 @@ import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.databinding.ActivityBookInfoBinding
|
||||
import io.legado.app.exception.NoStackTraceException
|
||||
import io.legado.app.help.AppWebDav
|
||||
import io.legado.app.help.book.addType
|
||||
import io.legado.app.help.book.getRemoteUrl
|
||||
import io.legado.app.help.book.isAudio
|
||||
import io.legado.app.help.book.isLocal
|
||||
@@ -45,6 +46,7 @@ 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.read.ReadBookActivity.Companion.RESULT_DELETED
|
||||
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
|
||||
@@ -106,9 +108,16 @@ class BookInfoActivity :
|
||||
ActivityResultContracts.StartActivityForResult()
|
||||
) {
|
||||
viewModel.upBook(intent)
|
||||
if (it.resultCode == RESULT_OK) {
|
||||
viewModel.inBookshelf = true
|
||||
upTvBookshelf()
|
||||
when (it.resultCode) {
|
||||
RESULT_OK -> {
|
||||
viewModel.inBookshelf = true
|
||||
upTvBookshelf()
|
||||
}
|
||||
|
||||
RESULT_DELETED -> {
|
||||
setResult(RESULT_OK)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
private val infoEditResult = registerForActivityResult(
|
||||
@@ -550,6 +559,7 @@ class BookInfoActivity :
|
||||
LocalConfig.deleteBookOriginal = checkBox.isChecked
|
||||
}
|
||||
viewModel.delBook(LocalConfig.deleteBookOriginal) {
|
||||
setResult(RESULT_OK)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
@@ -557,6 +567,7 @@ class BookInfoActivity :
|
||||
}
|
||||
} else {
|
||||
viewModel.delBook(LocalConfig.deleteBookOriginal) {
|
||||
setResult(RESULT_OK)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
@@ -637,6 +648,7 @@ class BookInfoActivity :
|
||||
|
||||
private fun readBook(book: Book) {
|
||||
if (!viewModel.inBookshelf) {
|
||||
book.addType(BookType.notShelf)
|
||||
viewModel.saveBook(book) {
|
||||
viewModel.saveChapterList {
|
||||
startReadActivity(book)
|
||||
|
||||
@@ -424,6 +424,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
|
||||
fun addToBookshelf(success: (() -> Unit)?) {
|
||||
execute {
|
||||
bookData.value?.let { book ->
|
||||
book.removeType(BookType.notShelf)
|
||||
if (book.order == 0) {
|
||||
book.order = appDb.bookDao.minOrder - 1
|
||||
}
|
||||
|
||||
@@ -12,11 +12,21 @@ import io.legado.app.constant.BookType
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.databinding.ActivityBookInfoEditBinding
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.book.addType
|
||||
import io.legado.app.help.book.isAudio
|
||||
import io.legado.app.help.book.isImage
|
||||
import io.legado.app.help.book.isLocal
|
||||
import io.legado.app.help.book.removeType
|
||||
import io.legado.app.ui.book.changecover.ChangeCoverDialog
|
||||
import io.legado.app.utils.*
|
||||
import io.legado.app.utils.FileUtils
|
||||
import io.legado.app.utils.MD5Utils
|
||||
import io.legado.app.utils.SelectImageContract
|
||||
import io.legado.app.utils.externalFiles
|
||||
import io.legado.app.utils.inputStream
|
||||
import io.legado.app.utils.launch
|
||||
import io.legado.app.utils.readUri
|
||||
import io.legado.app.utils.showDialogFragment
|
||||
import io.legado.app.utils.toastOnUi
|
||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||
import splitties.init.appCtx
|
||||
import java.io.FileOutputStream
|
||||
@@ -100,11 +110,13 @@ class BookInfoEditActivity :
|
||||
book.name = tieBookName.text?.toString() ?: ""
|
||||
book.author = tieBookAuthor.text?.toString() ?: ""
|
||||
val local = if (book.isLocal) BookType.local else 0
|
||||
book.type = when (spType.selectedItemPosition) {
|
||||
val bookType = when (spType.selectedItemPosition) {
|
||||
2 -> BookType.image or local
|
||||
1 -> BookType.audio or local
|
||||
else -> BookType.text or local
|
||||
}
|
||||
book.removeType(BookType.local, BookType.image, BookType.audio, BookType.text)
|
||||
book.addType(bookType)
|
||||
val customCoverUrl = tieCoverUrl.text?.toString()
|
||||
book.customCoverUrl = if (customCoverUrl == book.coverUrl) null else customCoverUrl
|
||||
book.customIntro = tieBookIntro.text?.toString()
|
||||
|
||||
@@ -66,6 +66,7 @@ import io.legado.app.ui.book.audio.AudioPlayActivity
|
||||
import io.legado.app.ui.book.bookmark.BookmarkDialog
|
||||
import io.legado.app.ui.book.changesource.ChangeBookSourceDialog
|
||||
import io.legado.app.ui.book.changesource.ChangeChapterSourceDialog
|
||||
import io.legado.app.ui.book.info.BookInfoActivity
|
||||
import io.legado.app.ui.book.read.config.AutoReadDialog
|
||||
import io.legado.app.ui.book.read.config.BgTextConfigDialog.Companion.BG_COLOR
|
||||
import io.legado.app.ui.book.read.config.BgTextConfigDialog.Companion.TEXT_COLOR
|
||||
@@ -189,6 +190,13 @@ class ReadBookActivity : BaseReadBookActivity(),
|
||||
}
|
||||
}
|
||||
}
|
||||
private val bookInfoActivity =
|
||||
registerForActivityResult(StartActivityContract(BookInfoActivity::class.java)) {
|
||||
if (it.resultCode == RESULT_OK) {
|
||||
setResult(RESULT_DELETED)
|
||||
super.finish()
|
||||
}
|
||||
}
|
||||
private val selectImageDir = registerForActivityResult(HandleFileContract()) {
|
||||
it.uri?.let { uri ->
|
||||
ACache.get().put(AppConst.imagePathKey, uri.toString())
|
||||
@@ -232,7 +240,6 @@ class ReadBookActivity : BaseReadBookActivity(),
|
||||
binding.readMenu.upSeekBar()
|
||||
}
|
||||
}
|
||||
private var upContent = true
|
||||
|
||||
//恢复跳转前进度对话框的交互结果
|
||||
private var confirmRestoreProcess: Boolean? = null
|
||||
@@ -284,6 +291,9 @@ class ReadBookActivity : BaseReadBookActivity(),
|
||||
|
||||
override fun onNewIntent(intent: Intent?) {
|
||||
super.onNewIntent(intent)
|
||||
if (!ReadBook.inBookshelf) {
|
||||
viewModel.removeFromBookshelf(null)
|
||||
}
|
||||
viewModel.initData(intent ?: return)
|
||||
}
|
||||
|
||||
@@ -953,6 +963,9 @@ class ReadBookActivity : BaseReadBookActivity(),
|
||||
|
||||
override fun notifyBookChanged() {
|
||||
bookChanged = true
|
||||
if (!ReadBook.inBookshelf) {
|
||||
viewModel.removeFromBookshelf { super.finish() }
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1063,6 +1076,15 @@ class ReadBookActivity : BaseReadBookActivity(),
|
||||
}
|
||||
}
|
||||
|
||||
override fun openBookInfoActivity() {
|
||||
ReadBook.book?.let {
|
||||
bookInfoActivity.launch {
|
||||
putExtra("name", it.name)
|
||||
putExtra("author", it.author)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 替换
|
||||
*/
|
||||
@@ -1462,6 +1484,8 @@ class ReadBookActivity : BaseReadBookActivity(),
|
||||
alert(title = getString(R.string.add_to_bookshelf)) {
|
||||
setMessage(getString(R.string.check_add_bookshelf, book.name))
|
||||
okButton {
|
||||
ReadBook.book?.removeType(BookType.notShelf)
|
||||
ReadBook.book?.save()
|
||||
ReadBook.inBookshelf = true
|
||||
setResult(Activity.RESULT_OK)
|
||||
}
|
||||
@@ -1477,6 +1501,9 @@ class ReadBookActivity : BaseReadBookActivity(),
|
||||
popupAction.dismiss()
|
||||
binding.readView.onDestroy()
|
||||
ReadBook.unregister(this)
|
||||
if (!ReadBook.inBookshelf) {
|
||||
viewModel.removeFromBookshelf(null)
|
||||
}
|
||||
if (!BuildConfig.DEBUG) {
|
||||
Backup.autoBack(this)
|
||||
}
|
||||
@@ -1578,4 +1605,9 @@ class ReadBookActivity : BaseReadBookActivity(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val RESULT_DELETED = 100
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -316,8 +316,9 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
|
||||
}
|
||||
|
||||
fun removeFromBookshelf(success: (() -> Unit)?) {
|
||||
execute {
|
||||
ReadBook.book?.delete()
|
||||
val book = ReadBook.book
|
||||
Coroutine.async {
|
||||
book?.delete()
|
||||
}.onSuccess {
|
||||
success?.invoke()
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ import io.legado.app.lib.theme.getPrimaryTextColor
|
||||
import io.legado.app.lib.theme.primaryColor
|
||||
import io.legado.app.lib.theme.primaryTextColor
|
||||
import io.legado.app.model.ReadBook
|
||||
import io.legado.app.ui.book.info.BookInfoActivity
|
||||
import io.legado.app.ui.browser.WebViewActivity
|
||||
import io.legado.app.ui.widget.seekbar.SeekBarChangeListener
|
||||
import io.legado.app.utils.ColorUtils
|
||||
@@ -332,12 +331,7 @@ class ReadMenu @JvmOverloads constructor(
|
||||
private fun bindEvent() = binding.run {
|
||||
vwMenuBg.setOnClickListener { runMenuOut() }
|
||||
titleBar.toolbar.setOnClickListener {
|
||||
ReadBook.book?.let {
|
||||
context.startActivity<BookInfoActivity> {
|
||||
putExtra("name", it.name)
|
||||
putExtra("author", it.author)
|
||||
}
|
||||
}
|
||||
callBack.openBookInfoActivity()
|
||||
}
|
||||
val chapterViewClickListener = OnClickListener {
|
||||
if (ReadBook.isLocalBook) {
|
||||
@@ -575,6 +569,7 @@ class ReadMenu @JvmOverloads constructor(
|
||||
fun openChapterList()
|
||||
fun openSearchActivity(searchWord: String?)
|
||||
fun openSourceEditActivity()
|
||||
fun openBookInfoActivity()
|
||||
fun showReadStyle()
|
||||
fun showMoreSetting()
|
||||
fun showReadAloudDialog()
|
||||
|
||||
Reference in New Issue
Block a user