diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 90b5b48635..b1e3fb73db 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -34,7 +34,7 @@ android { minSdkVersion(23) targetSdkVersion(29) applicationId = "eu.kanade.tachiyomi" - versionCode = 60 + versionCode = 61 versionName = "0.9.81" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled = true diff --git a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt index 1e0897155e..5d2e9eb647 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt @@ -5,6 +5,7 @@ import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.getOrDefault import eu.kanade.tachiyomi.data.updater.UpdaterJob +import eu.kanade.tachiyomi.ui.library.LibraryPresenter import java.io.File object Migrations { @@ -63,6 +64,8 @@ object Migrations { } if (oldVersion < 54) DownloadProvider(context).renameChaapters() + if (oldVersion < 61) + LibraryPresenter.resetCustomManga() return true } return false diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/serializer/MangaTypeAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/serializer/MangaTypeAdapter.kt index d1ccf823e9..1192f39b4a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/serializer/MangaTypeAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/serializer/MangaTypeAdapter.kt @@ -15,7 +15,7 @@ object MangaTypeAdapter { write { beginArray() value(it.url) - value(it.originalTitle()) + value(it.title) value(it.source) value(max(0, it.viewer)) value(it.chapter_flags) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/Manga.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/Manga.kt index 0105e5f133..e94f0a3305 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/Manga.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/Manga.kt @@ -37,7 +37,7 @@ interface Manga : SManga { fun mangaType(): Int { val sourceName = Injekt.get().getOrStub(source).name - val currentTags = currentGenres()?.split(",")?.map { it.trim().toLowerCase(Locale.US) } + val currentTags = genre?.split(",")?.map { it.trim().toLowerCase(Locale.US) } return if (currentTags?.any { tag -> tag.startsWith("japanese") || tag == "manga" @@ -69,7 +69,7 @@ interface Manga : SManga { fun defaultReaderType(): Int { val sourceName = Injekt.get().getOrStub(source).name - val currentTags = currentGenres()?.split(",")?.map { it.trim().toLowerCase(Locale.US) } + val currentTags = genre?.split(",")?.map { it.trim().toLowerCase(Locale.US) } return if (currentTags?.any { tag -> tag == "long strip" || tag == "manhwa" || diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/MangaImpl.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/MangaImpl.kt index 5540b3325c..d36f3ae395 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/MangaImpl.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/MangaImpl.kt @@ -42,13 +42,9 @@ open class MangaImpl : Manga { override fun copyFrom(other: SManga) { if (other is MangaImpl && (other as MangaImpl)::title.isInitialized && - !other.title.isBlank() && other.title != originalTitle()) { - val oldTitle = originalTitle() - title = if (currentTitle() != originalTitle()) { - val customTitle = currentTitle() - val trueTitle = other.title - "${customTitle}${SManga.splitter}$trueTitle" - } else other.title + !other.title.isBlank() && other.title != title) { + val oldTitle = title + title = other.title val db: DownloadManager by injectLazy() val provider = DownloadProvider(db.context) provider.renameMangaFolder(oldTitle, title, source) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/resolvers/MangaInfoPutResolver.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/resolvers/MangaInfoPutResolver.kt index 0c03aa8873..eb50bf2f94 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/resolvers/MangaInfoPutResolver.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/resolvers/MangaInfoPutResolver.kt @@ -34,10 +34,11 @@ class MangaInfoPutResolver(val reset: Boolean = false) : PutResolver() { } fun resetToContentValues(manga: Manga) = ContentValues(1).apply { - put(MangaTable.COL_TITLE, manga.originalTitle()) - put(MangaTable.COL_GENRE, manga.originalGenres()) - put(MangaTable.COL_AUTHOR, manga.originalAuthor()) - put(MangaTable.COL_ARTIST, manga.originalArtist()) - put(MangaTable.COL_DESCRIPTION, manga.originalDesc()) + val splitter = "▒ ▒∩▒" + put(MangaTable.COL_TITLE, manga.title.split(splitter).last()) + put(MangaTable.COL_GENRE, manga.genre?.split(splitter)?.lastOrNull()) + put(MangaTable.COL_AUTHOR, manga.author?.split(splitter)?.lastOrNull()) + put(MangaTable.COL_ARTIST, manga.artist?.split(splitter)?.lastOrNull()) + put(MangaTable.COL_DESCRIPTION, manga.description?.split(splitter)?.lastOrNull()) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt index 986f71653e..99e1598229 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt @@ -142,10 +142,10 @@ class DownloadCache( } val trueMangaDirs = mangaDirs.mapNotNull { mangaDir -> val manga = sourceMangas.firstOrNull()?.find { DiskUtil.buildValidFilename( - it.originalTitle()).toLowerCase() == mangaDir.key + it.title).toLowerCase() == mangaDir.key .toLowerCase() && it.source == sourceValue.key } ?: sourceMangas.lastOrNull()?.find { DiskUtil.buildValidFilename( - it.originalTitle()).toLowerCase() == mangaDir.key + it.title).toLowerCase() == mangaDir.key .toLowerCase() && it.source == sourceValue.key } val id = manga?.id ?: return@mapNotNull null id to mangaDir.value.files diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt index f8f7ea301c..82e2945876 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt @@ -84,7 +84,7 @@ internal class DownloadNotifier(private val context: Context) { } if (download != null) { - val title = download.manga.currentTitle().chop(15) + val title = download.manga.title.chop(15) val quotedTitle = Pattern.quote(title) val chapter = download.chapter.name.replaceFirst("$quotedTitle[\\s]*[-]*[\\s]*" .toRegex(RegexOption.IGNORE_CASE), "") @@ -129,7 +129,7 @@ internal class DownloadNotifier(private val context: Context) { NotificationReceiver.pauseDownloadsPendingBroadcast(context)) } - val title = download.manga.currentTitle().chop(15) + val title = download.manga.title.chop(15) val quotedTitle = Pattern.quote(title) val chapter = download.chapter.name.replaceFirst("$quotedTitle[\\s]*[-]*[\\s]*".toRegex(RegexOption.IGNORE_CASE), "") setContentTitle("$title - $chapter".chop(30)) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt index dc08390728..484d952883 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt @@ -185,7 +185,7 @@ class DownloadProvider(private val context: Context) { * @param manga the manga to query. */ fun getMangaDirName(manga: Manga): String { - return DiskUtil.buildValidFilename(manga.originalTitle()) + return DiskUtil.buildValidFilename(manga.title) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/glide/MangaModelLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/data/glide/MangaModelLoader.kt index 3a1aeedd1f..4630cd0dc5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/glide/MangaModelLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/glide/MangaModelLoader.kt @@ -90,11 +90,8 @@ class MangaModelLoader : ModelLoader { ): ModelLoader.LoadData? { // Check thumbnail is not null or empty val url = manga.thumbnail_url - if (url == null || url.isEmpty()) { - return null - } - if (url.startsWith("http")) { + if (url?.startsWith("http") == true) { val source = sourceManager.get(manga.source) as? HttpSource val glideUrl = GlideUrl(url, getHeaders(manga, source)) @@ -113,8 +110,14 @@ class MangaModelLoader : ModelLoader { // Return an instance of the fetcher providing the needed elements. return ModelLoader.LoadData(MangaSignature(manga, file), libraryFetcher) } else { - // Get the file from the url, removing the scheme if present. - val file = File(url.substringAfter("file://")) + // Get the file from the url, removing the scheme if present, or from the cache if no url. + val file = when { + manga.hasCustomCover() -> coverCache.getCoverFile(manga.thumbnail_url!!) + url != null -> File(url.substringAfter("file://")) + else -> null + } + + if (file?.exists() != true) return null // Return an instance of the fetcher providing the needed elements. return ModelLoader.LoadData(MangaSignature(manga, file), FileFetcher(file)) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateRanker.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateRanker.kt index 18f3fc2485..c7f9699d9b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateRanker.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateRanker.kt @@ -36,7 +36,7 @@ object LibraryUpdateRanker { fun lexicographicRanking(): Comparator { return Comparator { mangaFirst: Manga, mangaSecond: Manga -> - compareValues(mangaFirst.currentTitle(), mangaSecond.currentTitle()) + compareValues(mangaFirst.title, mangaSecond.title) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt index 1092eb0e5d..f7f28dbca1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt @@ -522,7 +522,7 @@ class LibraryUpdateService( private fun showProgressNotification(manga: Manga, current: Int, total: Int) { notificationManager.notify( Notifications.ID_LIBRARY_PROGRESS, progressNotification - .setContentTitle(manga.currentTitle()) + .setContentTitle(manga.title) .setProgress(total, current, false) .build() ) @@ -549,7 +549,7 @@ class LibraryUpdateService( } catch (e: Exception) { } setGroupAlertBehavior(GROUP_ALERT_SUMMARY) - setContentTitle(manga.currentTitle()) + setContentTitle(manga.title) color = ContextCompat.getColor(this@LibraryUpdateService, R.color.colorAccent) val chaptersNames = if (chapterNames.size > 5) { "${chapterNames.take(4).joinToString(", ")}, " + @@ -605,11 +605,11 @@ class LibraryUpdateService( setStyle( NotificationCompat.BigTextStyle() .bigText(updates.keys.joinToString("\n") { - it.currentTitle().chop(45) + it.title.chop(45) }) ) } else { - setContentText(updates.keys.first().currentTitle().chop(45)) + setContentText(updates.keys.first().title.chop(45)) } priority = NotificationCompat.PRIORITY_HIGH setGroup(Notifications.GROUP_NEW_CHAPTERS) diff --git a/app/src/main/java/eu/kanade/tachiyomi/smartsearch/SmartSearchEngine.kt b/app/src/main/java/eu/kanade/tachiyomi/smartsearch/SmartSearchEngine.kt index c3e44e62fe..1df8f6079d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/smartsearch/SmartSearchEngine.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/smartsearch/SmartSearchEngine.kt @@ -65,7 +65,7 @@ class SmartSearchEngine( return@supervisorScope listOf(SearchEntry(searchResults.mangas.first(), 0.0)) searchResults.mangas.map { - val normalizedDistance = normalizedLevenshtein.similarity(title, it.originalTitle()) + val normalizedDistance = normalizedLevenshtein.similarity(title, it.title) SearchEntry(it, normalizedDistance) }.filter { (_, normalizedDistance) -> normalizedDistance >= MIN_NORMAL_ELIGIBLE_THRESHOLD diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt index a92a8a3fd2..ac87991730 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt @@ -202,7 +202,7 @@ class LocalSource(private val context: Context) : CatalogueSource { chapterFile.nameWithoutExtension } val chapNameCut = - chapName.replace(manga.originalTitle(), "", true).trim(' ', '-', '_') + chapName.replace(manga.title, "", true).trim(' ', '-', '_') name = if (chapNameCut.isEmpty()) chapName else chapNameCut date_upload = chapterFile.lastModified() ChapterRecognition.parseChapterNumber(this, manga) diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/model/SManga.kt b/app/src/main/java/eu/kanade/tachiyomi/source/model/SManga.kt index a3701637d1..123affee08 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/model/SManga.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/model/SManga.kt @@ -23,68 +23,22 @@ interface SManga : Serializable { var initialized: Boolean - fun currentTitle(): String { - val splitTitle = title.split(splitter) - return splitTitle.first() - } - - fun originalTitle(): String { - val splitTitle = title.split(splitter) - return splitTitle.last() - } - - fun currentGenres() = split(genre, true) - - fun originalGenres() = split(genre, false) - - fun currentDesc() = split(description, true) - - fun originalDesc() = split(description, false) - - fun currentAuthor() = split(author, true) - - fun originalAuthor() = split(author, false) - - fun currentArtist() = split(artist, true) - - fun originalArtist() = split(artist, false) - - private fun split(string: String?, first: Boolean): String? { - val split = string?.split(splitter) ?: return null - val s = if (first) split.first() else split.last() - return if (s.isBlank()) null else s - } + fun hasCustomCover() = thumbnail_url?.startsWith("Custom-") == true fun copyFrom(other: SManga) { if (other.author != null) - author = if (currentAuthor() != originalAuthor()) { - val current = currentAuthor() - val og = other.author - "${current}$splitter$og" - } else other.author + author = other.author if (other.artist != null) - artist = if (currentArtist() != originalArtist()) { - val current = currentArtist() - val og = other.artist - "${current}$splitter$og" - } else other.artist + artist = other.artist if (other.description != null) - description = if (currentDesc() != originalDesc()) { - val current = currentDesc() - val og = other.description - "${current}$splitter$og" - } else other.description + description = other.description if (other.genre != null) - genre = if (currentGenres() != originalGenres()) { - val current = currentGenres() - val og = other.genre - "${current}$splitter$og" - } else other.genre + genre = other.genre - if (other.thumbnail_url != null) + if (other.thumbnail_url != null && !hasCustomCover()) thumbnail_url = other.thumbnail_url status = other.status @@ -98,7 +52,6 @@ interface SManga : Serializable { const val ONGOING = 1 const val COMPLETED = 2 const val LICENSED = 3 - const val splitter = "▒ ▒∩▒" fun create(): SManga { return MangaImpl() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/CatalogueGridHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/CatalogueGridHolder.kt index db9088ffca..b5fa56f5b4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/CatalogueGridHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/CatalogueGridHolder.kt @@ -37,7 +37,7 @@ class CatalogueGridHolder( */ override fun onSetValues(manga: Manga) { // Update the title of the manga. - compact_title.text = manga.currentTitle() + compact_title.text = manga.title badge_view.setInLibrary(manga.favorite) // Update the cover. diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/CatalogueListHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/CatalogueListHolder.kt index 21ffb6dbf9..d53ad5b222 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/CatalogueListHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/CatalogueListHolder.kt @@ -31,7 +31,7 @@ class CatalogueListHolder(private val view: View, adapter: FlexibleAdapter { if (!preferences.hideCategories().getOrDefault()) { - val title = (iFlexible as LibraryItem).manga.currentTitle() + val title = (iFlexible as LibraryItem).manga.title if (preferences.removeArticles().getOrDefault()) title.removeArticles().substring(0, 1).toUpperCase(Locale.US) else title.substring(0, 1).toUpperCase(Locale.US) @@ -144,7 +144,7 @@ class LibraryCategoryAdapter(val libraryListener: LibraryListener) : "N/A" } else -> { - val title = (iFlexible as LibraryItem).manga.currentTitle() + val title = (iFlexible as LibraryItem).manga.title if (preferences.removeArticles().getOrDefault()) title.removeArticles().substring(0, 1).toUpperCase(Locale.US) else title.substring(0, 1).toUpperCase(Locale.US) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryGridHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryGridHolder.kt index 513e24dd08..8a15ff00c6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryGridHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryGridHolder.kt @@ -53,8 +53,8 @@ class LibraryGridHolder( */ override fun onSetValues(item: LibraryItem) { // Update the title and subtitle of the manga. - title.text = item.manga.currentTitle() - subtitle.text = item.manga.originalAuthor()?.trim() + title.text = item.manga.title + subtitle.text = item.manga.author?.trim() compact_title.text = title.text diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt index 0f8e12d276..e07a73d48a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt @@ -124,15 +124,14 @@ class LibraryItem( val sourceManager by injectLazy() val sourceName = if (manga.source == 0L) "Local" else sourceManager.getOrStub(manga.source).name - return manga.currentTitle().contains(constraint, true) || - manga.originalTitle().contains(constraint, true) || - (manga.currentAuthor()?.contains(constraint, true) ?: false) || - (manga.currentArtist()?.contains(constraint, true) ?: false) || + return manga.title.contains(constraint, true) || + (manga.author?.contains(constraint, true) ?: false) || + (manga.artist?.contains(constraint, true) ?: false) || sourceName.contains(constraint, true) || if (constraint.contains(",")) { - val genres = manga.currentGenres()?.split(", ") + val genres = manga.genre?.split(", ") constraint.split(",").all { containsGenre(it.trim(), genres) } - } else containsGenre(constraint, manga.currentGenres()?.split(", ")) + } else containsGenre(constraint, manga.genre?.split(", ")) } @SuppressLint("DefaultLocale") diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListHolder.kt index 7536b0bac2..38f56b30c4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListHolder.kt @@ -34,11 +34,11 @@ class LibraryListHolder( */ override fun onSetValues(item: LibraryItem) { // Update the title of the manga. - title.text = item.manga.currentTitle() + title.text = item.manga.title setUnreadBadge(badge_view, item) - subtitle.text = item.manga.originalAuthor()?.trim() - subtitle.visibility = if (!item.manga.originalAuthor().isNullOrBlank()) View.VISIBLE + subtitle.text = item.manga.author?.trim() + subtitle.visibility = if (!item.manga.author.isNullOrBlank()) View.VISIBLE else View.GONE play_layout.visibility = if (item.manga.unread > 0 && item.unreadType > 0) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt index 150404dcfa..457e20f431 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt @@ -430,8 +430,8 @@ class LibraryPresenter( private fun sortAlphabetical(i1: LibraryItem, i2: LibraryItem): Int { return if (preferences.removeArticles().getOrDefault()) - i1.manga.currentTitle().removeArticles().compareTo(i2.manga.currentTitle().removeArticles(), true) - else i1.manga.currentTitle().compareTo(i2.manga.currentTitle(), true) + i1.manga.title.removeArticles().compareTo(i2.manga.title.removeArticles(), true) + else i1.manga.title.compareTo(i2.manga.title, true) } /** @@ -876,7 +876,17 @@ class LibraryPresenter( return catId in categories } - private companion object { - var currentLibrary: Library? = null + companion object { + private var currentLibrary: Library? = null + + fun resetCustomManga() { + val db: DatabaseHelper = Injekt.get() + db.inTransaction { + val libraryManga = db.getLibraryMangas().executeAsBlocking() + libraryManga.forEach { manga -> + db.resetMangaInfo(manga).executeAsBlocking() + } + } + } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsController.kt index e36656ed9e..18df4708c7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsController.kt @@ -44,6 +44,7 @@ import androidx.transition.ChangeImageTransform import androidx.transition.TransitionManager import androidx.transition.TransitionSet import com.afollestad.materialdialogs.MaterialDialog +import com.afollestad.materialdialogs.list.listItems import com.bluelinelabs.conductor.ControllerChangeHandler import com.bluelinelabs.conductor.ControllerChangeType import com.bumptech.glide.load.engine.DiskCacheStrategy @@ -66,6 +67,7 @@ import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.glide.GlideApp import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.track.model.TrackSearch +import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.online.HttpSource @@ -96,6 +98,7 @@ import eu.kanade.tachiyomi.util.view.snack import eu.kanade.tachiyomi.util.view.updateLayoutParams import eu.kanade.tachiyomi.util.view.updatePaddingRelative import java.io.File +import java.io.IOException import jp.wasabeef.glide.transformations.CropSquareTransformation import jp.wasabeef.glide.transformations.MaskTransformation import kotlinx.android.synthetic.main.main_activity.* @@ -152,6 +155,7 @@ class MangaDetailsController : BaseController, var coverDrawable: Drawable? = null private var trackingBottomSheet: TrackingBottomSheet? = null private var startingDLChapterPos: Int? = null + private var editMangaDialog: EditMangaDialog? = null /** * Adapter containing a list of chapters. @@ -173,7 +177,7 @@ class MangaDetailsController : BaseController, } override fun getTitle(): String? { - return if (toolbarIsColored) manga?.currentTitle() else null + return if (toolbarIsColored) manga?.title else null } override fun onViewCreated(view: View) { @@ -480,6 +484,8 @@ class MangaDetailsController : BaseController, inflater.inflate(R.menu.manga_details, menu) val editItem = menu.findItem(R.id.action_edit) editItem.isVisible = presenter.manga.favorite && !presenter.isLockedFromSearch + editItem.title = view?.context?.getString(if (manga?.source == LocalSource.ID) + R.string.action_edit else R.string.action_edit_cover) menu.findItem(R.id.action_download).isVisible = !presenter.isLockedFromSearch menu.findItem(R.id.action_mark_all_as_read).isVisible = presenter.getNextUnreadChapter() != null && !presenter.isLockedFromSearch @@ -489,7 +495,32 @@ class MangaDetailsController : BaseController, override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { - R.id.action_edit -> EditMangaDialog(this, presenter.manga).showDialog(router) + R.id.action_edit -> { + if (manga?.source == LocalSource.ID) { + editMangaDialog = EditMangaDialog(this, presenter.manga) + editMangaDialog?.showDialog(router) + } else { + if (manga?.hasCustomCover() == true) { + MaterialDialog(activity!!).listItems(items = listOf( + view!!.context.getString( + R.string.action_edit_cover + ), view!!.context.getString( + R.string.action_reset_cover + ) + ), + waitForPositiveButton = false, + selection = { _, index, _ -> + when (index) { + 0 -> changeCover() + else -> presenter.clearCover() + } + }) + .show() + } else { + changeCover() + } + } + } R.id.action_open_in_web_view -> openInWebView() R.id.action_share -> prepareToShareManga() R.id.action_add_to_home_screen -> addToHomeScreen() @@ -543,7 +574,7 @@ class MangaDetailsController : BaseController, val intent = Intent(Intent.ACTION_SEND).apply { type = "text/*" putExtra(Intent.EXTRA_TEXT, url) - putExtra(Intent.EXTRA_TITLE, presenter.manga.currentTitle()) + putExtra(Intent.EXTRA_TITLE, presenter.manga.title) flags = Intent.FLAG_GRANT_READ_URI_PERMISSION if (stream != null) { clipData = ClipData.newRawUri(null, stream) @@ -566,7 +597,7 @@ class MangaDetailsController : BaseController, val activity = activity ?: return val intent = WebViewActivity.newIntent(activity.applicationContext, source.id, url, presenter.manga - .originalTitle()) + .title) startActivity(intent) } @@ -669,11 +700,11 @@ class MangaDetailsController : BaseController, // Check if shortcut placement is supported if (ShortcutManagerCompat.isRequestPinShortcutSupported(activity)) { - val shortcutId = "manga-shortcut-${presenter.manga.originalTitle()}-${presenter.source.name}" + val shortcutId = "manga-shortcut-${presenter.manga.title}-${presenter.source.name}" // Create shortcut info val shortcutInfo = ShortcutInfoCompat.Builder(activity, shortcutId) - .setShortLabel(presenter.manga.currentTitle()) + .setShortLabel(presenter.manga.title) .setIcon(IconCompat.createWithBitmap(icon)) .setIntent(shortcutIntent) .build() @@ -989,6 +1020,38 @@ class MangaDetailsController : BaseController, return false } + fun changeCover() { + if (manga?.favorite == true) { + val intent = Intent(Intent.ACTION_GET_CONTENT) + intent.type = "image/*" + startActivityForResult( + Intent.createChooser(intent, + resources?.getString(R.string.file_select_cover)), + 101 + ) + } else { + activity?.toast(R.string.notification_first_add_to_library) + } + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + if (requestCode == 101) { + if (data == null || resultCode != Activity.RESULT_OK) return + val activity = activity ?: return + try { + val uri = data.data ?: return + if (editMangaDialog != null) editMangaDialog?.updateCover(uri) + else { + presenter.editCoverWithStream(uri) + setPaletteColor() + } + } catch (error: IOException) { + activity.toast(R.string.notification_cover_update_failed) + Timber.e(error) + } + } + } + override fun zoomImageFromThumb(thumbView: View) { // If there's an animation in progress, cancel it immediately and proceed with this one. currentAnimator?.cancel() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt index 0198ddd543..fa70000133 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt @@ -24,7 +24,6 @@ import eu.kanade.tachiyomi.data.track.TrackService import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.model.SChapter -import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.ui.manga.chapter.ChapterItem import eu.kanade.tachiyomi.ui.manga.track.TrackItem import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate @@ -340,7 +339,7 @@ class MangaDetailsPresenter( manga.copyFrom(networkManga) manga.initialized = true db.insertManga(manga).executeAsBlocking() - if (thumbnailUrl != networkManga.thumbnail_url) { + if (thumbnailUrl != networkManga.thumbnail_url && !manga.hasCustomCover()) { MangaImpl.setLastCoverFetch(manga.id!!, Date().time) withContext(Dispatchers.Main) { controller.setPaletteColor() } } @@ -562,7 +561,7 @@ class MangaDetailsPresenter( directory.mkdirs() // Build destination file. - val filename = DiskUtil.buildValidFilename("${manga.originalTitle()} - Cover.jpg") + val filename = DiskUtil.buildValidFilename("${manga.title} - Cover.jpg") val destFile = File(directory, filename) val stream: OutputStream = FileOutputStream(destFile) @@ -589,63 +588,23 @@ class MangaDetailsPresenter( manga.genre = if (tags.isNullOrEmpty()) null else tagsString?.trim() LocalSource(downloadManager.context).updateMangaInfo(manga) db.updateMangaInfo(manga).executeAsBlocking() - } else { - var changed = false - val title = title?.trim() - if (!title.isNullOrBlank() && manga.originalTitle().isBlank()) { - manga.title = title - changed = true - } else if (title.isNullOrBlank() && manga.currentTitle() != manga.originalTitle()) { - manga.title = manga.originalTitle() - changed = true - } else if (!title.isNullOrBlank() && title != manga.currentTitle()) { - manga.title = "${title}${SManga.splitter}${manga.originalTitle()}" - changed = true - } - - val author = author?.trim() - if (author.isNullOrBlank() && manga.currentAuthor() != manga.originalAuthor()) { - manga.author = manga.originalAuthor() - changed = true - } else if (!author.isNullOrBlank() && author != manga.currentAuthor()) { - manga.author = "${author}${SManga.splitter}${manga.originalAuthor() ?: ""}" - changed = true - } - - val artist = artist?.trim() - if (artist.isNullOrBlank() && manga.currentArtist() != manga.originalArtist()) { - manga.artist = manga.originalArtist() - changed = true - } else if (!artist.isNullOrBlank() && artist != manga.currentArtist()) { - manga.artist = "${artist}${SManga.splitter}${manga.originalArtist() ?: ""}" - changed = true - } - - val description = description?.trim() - if (description.isNullOrBlank() && manga.currentDesc() != manga.originalDesc()) { - manga.description = manga.originalDesc() - changed = true - } else if (!description.isNullOrBlank() && description != manga.currentDesc()) { - manga.description = "${description}${SManga.splitter}${manga.originalDesc() ?: ""}" - changed = true - } - - var tagsString = tags?.joinToString(", ") - if ((tagsString.isNullOrBlank() && manga.currentGenres() != manga.originalGenres()) || tagsString == manga.originalGenres()) { - manga.genre = manga.originalGenres() - changed = true - } else if (!tagsString.isNullOrBlank() && tagsString != manga.currentGenres()) { - tagsString = tags?.joinToString(", ") { it.capitalize() } - manga.genre = "${tagsString}${SManga.splitter}${manga.originalGenres() ?: ""}" - changed = true - } - if (changed) db.updateMangaInfo(manga).executeAsBlocking() } if (uri != null) editCoverWithStream(uri) controller.updateHeader() } - private fun editCoverWithStream(uri: Uri): Boolean { + fun clearCover() { + if (manga.hasCustomCover()) { + coverCache.deleteFromCache(manga.thumbnail_url!!) + manga.thumbnail_url = manga.thumbnail_url?.removePrefix("Custom-") + db.insertManga(manga).executeAsBlocking() + MangaImpl.setLastCoverFetch(manga.id!!, Date().time) + controller.updateHeader() + controller.setPaletteColor() + } + } + + fun editCoverWithStream(uri: Uri): Boolean { val inputStream = downloadManager.context.contentResolver.openInputStream(uri) ?: return false if (manga.source == LocalSource.ID) { @@ -653,8 +612,11 @@ class MangaDetailsPresenter( return true } - if (manga.thumbnail_url != null && manga.favorite) { - Injekt.get().refreshCoversToo().set(false) + if (manga.favorite) { + if (!manga.hasCustomCover()) { + manga.thumbnail_url = "Custom-${manga.thumbnail_url ?: manga.id!!}" + db.insertManga(manga).executeAsBlocking() + } coverCache.copyToCache(manga.thumbnail_url!!, inputStream) MangaImpl.setLastCoverFetch(manga.id!!, Date().time) return true diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaHeaderHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaHeaderHolder.kt index 9247154c99..0250bf31d7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaHeaderHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaHeaderHolder.kt @@ -15,6 +15,7 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.MangaImpl import eu.kanade.tachiyomi.data.glide.GlideApp +import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder import eu.kanade.tachiyomi.ui.manga.chapter.ChaptersAdapter @@ -86,24 +87,24 @@ class MangaHeaderHolder( @SuppressLint("SetTextI18n") fun bind(item: MangaHeaderItem, manga: Manga) { val presenter = adapter.coverListener.mangaPresenter() - manga_full_title.text = manga.currentTitle() + manga_full_title.text = manga.title - if (manga.currentGenres().isNullOrBlank().not()) - manga_genres_tags.setTags(manga.currentGenres()?.split(", ")?.map(String::trim)) + if (manga.genre.isNullOrBlank().not()) + manga_genres_tags.setTags(manga.genre?.split(", ")?.map(String::trim)) else manga_genres_tags.setTags(emptyList()) - if (manga.currentAuthor() == manga.currentArtist() || - manga.currentArtist().isNullOrBlank()) - manga_author.text = manga.currentAuthor()?.trim() + if (manga.author == manga.artist || + manga.artist.isNullOrBlank()) + manga_author.text = manga.author?.trim() else { - manga_author.text = "${manga.currentAuthor()?.trim()}, ${manga.currentArtist()}" + manga_author.text = "${manga.author?.trim()}, ${manga.artist}" } - manga_summary.text = manga.currentDesc()?.trim() ?: itemView.context.getString(R.string + manga_summary.text = manga.description?.trim() ?: itemView.context.getString(R.string .no_description) manga_summary.post { - if ((manga_summary.lineCount < 3 && manga.currentGenres().isNullOrBlank()) || + if ((manga_summary.lineCount < 3 && manga.genre.isNullOrBlank()) || less_button.visibility == View.VISIBLE) { more_button_group.gone() } else @@ -190,6 +191,11 @@ class MangaHeaderHolder( filters_text.text = presenter.currentFilters() + if (manga.source == LocalSource.ID) { + webview_button.gone() + share_button.gone() + } + if (!manga.initialized) return GlideApp.with(view.context).load(manga) .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/EditMangaDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/EditMangaDialog.kt index 63db8af64a..8098f70a3b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/EditMangaDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/EditMangaDialog.kt @@ -1,8 +1,6 @@ package eu.kanade.tachiyomi.ui.manga.info -import android.app.Activity import android.app.Dialog -import android.content.Intent import android.net.Uri import android.os.Bundle import android.view.View @@ -18,11 +16,7 @@ import eu.kanade.tachiyomi.data.glide.GlideApp import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.ui.manga.MangaDetailsController -import eu.kanade.tachiyomi.util.lang.chop -import eu.kanade.tachiyomi.util.system.toast -import java.io.IOException import kotlinx.android.synthetic.main.edit_manga_dialog.view.* -import timber.log.Timber import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -84,77 +78,24 @@ class EditMangaDialog : DialogController { view.manga_artist.append(manga.artist ?: "") view.manga_description.append(manga.description ?: "") view.manga_genres_tags.setTags(manga.genre?.split(", ") ?: emptyList()) - } else { - if (manga.currentTitle() != manga.originalTitle()) - view.manga_full_title.append(manga.currentTitle()) - view.manga_full_title.hint = "${resources?.getString(R.string.title)}: ${manga - .originalTitle()}" - - if (manga.currentAuthor() != manga.originalAuthor()) - view.manga_author.append(manga.currentAuthor()) - if (!manga.originalAuthor().isNullOrBlank()) - view.manga_author.hint = "${resources?.getString(R.string - .manga_info_author_label)}: ${manga.originalAuthor()}" - - if (manga.currentArtist() != manga.originalArtist()) - view.manga_artist.append(manga.currentArtist()) - if (!manga.originalArtist().isNullOrBlank()) - view.manga_artist.hint = "${resources?.getString(R.string - .manga_info_artist_label)}: ${manga.originalArtist()}" - - if (manga.currentDesc() != manga.originalDesc()) - view.manga_description.append(manga.currentDesc()) - if (!manga.originalDesc().isNullOrBlank()) - view.manga_description.hint = "${resources?.getString(R.string.description)}: ${manga - .originalDesc()?.chop(15)}" - if (manga.currentGenres().isNullOrBlank().not()) { - view.manga_genres_tags.setTags(manga.currentGenres()?.split(", ")) - } } view.manga_genres_tags.clearFocus() view.cover_layout.setOnClickListener { - changeCover() + infoController.changeCover() } view.reset_tags.setOnClickListener { resetTags() } } private fun resetTags() { - if (manga.originalGenres().isNullOrBlank() || manga.source == LocalSource.ID) - dialogView?.manga_genres_tags?.setTags(emptyList()) - else - dialogView?.manga_genres_tags?.setTags(manga.originalGenres()?.split(", ")) + if (manga.genre.isNullOrBlank() || manga.source == LocalSource.ID) dialogView?.manga_genres_tags?.setTags( + emptyList() + ) + else dialogView?.manga_genres_tags?.setTags(manga.genre?.split(", ")) } - private fun changeCover() { - if (manga.favorite) { - val intent = Intent(Intent.ACTION_GET_CONTENT) - intent.type = "image/*" - startActivityForResult( - Intent.createChooser(intent, - resources?.getString(R.string.file_select_cover)), - 101 - ) - } else { - activity?.toast(R.string.notification_first_add_to_library) - } - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == 101) { - if (data == null || resultCode != Activity.RESULT_OK) return - val activity = activity ?: return - - try { - // Get the file's input stream from the incoming Intent - GlideApp.with(dialogView!!.context) - .load(data.data ?: Uri.EMPTY) - .into(dialogView!!.manga_cover) - customCoverUri = data.data - } catch (error: IOException) { - activity.toast(R.string.notification_cover_update_failed) - Timber.e(error) - } - } + fun updateCover(uri: Uri) { + GlideApp.with(dialogView!!.context).load(uri).into(dialogView!!.manga_cover) + customCoverUri = uri } override fun onDestroyView(view: View) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchDialog.kt index ec72867acd..1530c6e04a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchDialog.kt @@ -97,7 +97,7 @@ class TrackSearchDialog : DialogController { // Do an initial search based on the manga's title if (savedState == null) { - val title = presenter.manga.originalTitle() + val title = presenter.manga.title view.track_search.append(title) search(title) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MangaHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MangaHolder.kt index 48539b1015..9d09649efd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MangaHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MangaHolder.kt @@ -16,8 +16,8 @@ class MangaHolder( fun bind(item: MangaItem) { // Update the title of the manga. - title.text = item.manga.currentTitle() - subtitle.text = item.manga.currentAuthor()?.trim() + title.text = item.manga.title + subtitle.text = item.manga.author?.trim() // Update the cover. GlideApp.with(itemView.context).clear(cover_thumbnail) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SearchController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SearchController.kt index f96cdd3195..96559f728a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SearchController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SearchController.kt @@ -24,7 +24,7 @@ import uy.kohesive.injekt.injectLazy class SearchController( private var manga: Manga? = null -) : CatalogueSearchController(manga?.originalTitle()), BottomNavBarInterface { +) : CatalogueSearchController(manga?.title), BottomNavBarInterface { private var newManga: Manga? = null private var progress = 1 diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationListController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationListController.kt index 2eca42a464..315fdb905f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationListController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationListController.kt @@ -163,7 +163,7 @@ class MigrationListController(bundle: Bundle? = null) : BaseController(bundle), } else {*/ val searchResult = smartSearchEngine.normalSearch( source, - mangaObj.originalTitle() + mangaObj.title ) if (searchResult != null) { @@ -206,7 +206,7 @@ class MigrationListController(bundle: Bundle? = null) : BaseController(bundle), val searchResult = try { val searchResult = smartSearchEngine.normalSearch( source, - mangaObj.originalTitle() + mangaObj.title ) if (searchResult != null) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessHolder.kt index aa66dcd91b..a7c8430ef9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessHolder.kt @@ -144,10 +144,10 @@ class MigrationProcessHolder( compact_title.visible() gradient.visible() - compact_title.text = if (manga.currentTitle().isBlank()) { + compact_title.text = if (manga.title.isBlank()) { view.context.getString(R.string.unknown) } else { - manga.currentTitle() + manga.title } gradient.visible() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt index 8497b79193..0aef5862ab 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt @@ -415,7 +415,7 @@ class ReaderActivity : BaseRxActivity(), viewer = newViewer viewer_container.addView(newViewer.getView()) - toolbar.title = manga.currentTitle() + toolbar.title = manga.title page_seekbar.isRTL = newViewer is R2LPagerViewer diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt index 65fd125e34..1d17e7d262 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt @@ -445,7 +445,7 @@ class ReaderPresenter( // Build destination file. val filename = DiskUtil.buildValidFilename( - "${manga.currentTitle()} - ${chapter.name}".take(225) + "${manga.title} - ${chapter.name}".take(225) ) + " - ${page.number}.${type.extension}" val destFile = File(directory, filename) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChapterHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChapterHolder.kt index f0cfe7a713..360ae19630 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChapterHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChapterHolder.kt @@ -61,7 +61,7 @@ class RecentChapterHolder(private val view: View, private val adapter: RecentCha chapter_title.text = item.chapter.name // Set manga title - manga_full_title.text = item.manga.currentTitle() + manga_full_title.text = item.manga.title // Set the correct drawable for dropdown and update the tint to match theme. chapter_menu_icon.setVectorCompat(R.drawable.ic_more_horiz_black_24dp, view.context.getResourceColor(R.attr.icon_color)) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChapterItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChapterItem.kt index d1888732a4..e1acb6b04d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChapterItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChapterItem.kt @@ -44,7 +44,7 @@ class RecentChapterItem(val chapter: Chapter, val manga: Manga, header: DateItem fun filter(text: String): Boolean { return chapter.name.contains(text, false) || - manga.currentTitle().contains(text, false) + manga.title.contains(text, false) } override fun equals(other: Any?): Boolean { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recently_read/RecentlyReadHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recently_read/RecentlyReadHolder.kt index 7491bf3f6a..f03aef3f6c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recently_read/RecentlyReadHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recently_read/RecentlyReadHolder.kt @@ -48,7 +48,7 @@ class RecentlyReadHolder( val (manga, chapter, history) = item // Set manga title - manga_full_title.text = manga.currentTitle() + manga_full_title.text = manga.title // Set source + chapter title val formattedNumber = adapter.decimalFormat.format(chapter.chapter_number.toDouble()) diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterRecognition.kt b/app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterRecognition.kt index 21f0efab7b..d0da5f6fb0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterRecognition.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterRecognition.kt @@ -74,7 +74,7 @@ object ChapterRecognition { } // Remove manga title from chapter title. - val nameWithoutManga = name.replace(manga.originalTitle().toLowerCase(), "").trim() + val nameWithoutManga = name.replace(manga.title.toLowerCase(), "").trim() // Check if first value is number after title remove. if (updateChapter(withoutManga.find(nameWithoutManga), chapter)) diff --git a/app/src/main/res/layout/edit_manga_dialog.xml b/app/src/main/res/layout/edit_manga_dialog.xml index 51eee4e19c..b1b4ca66a2 100644 --- a/app/src/main/res/layout/edit_manga_dialog.xml +++ b/app/src/main/res/layout/edit_manga_dialog.xml @@ -86,9 +86,11 @@ android:id="@+id/reset_tags" android:layout_width="wrap_content" android:layout_height="wrap_content" + style="@style/Theme.Widget.Button.Primary" + android:textAllCaps="false" android:layout_marginEnd="16dp" android:layout_marginStart="16dp" - android:text="@string/reset_tags" /> + android:text="@string/clear_tags" /> Używaj pierwszego źródła z alternatywą Pomiń ten krok następnym razem By pokazać ten ekran ponownie, przejdź do Ustawienia -> Biblioteka. - Resetuj tagi + Resetuj tagi diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index b837753723..fd3f14d87f 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -493,7 +493,7 @@ Перечитываю - Сбросить теги + Сбросить теги Восстановление закончено %1$s восстановлено. %2$s ошибок обнаружено. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f890fc5622..c538c7abde 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -86,6 +86,8 @@ Remove download Update library Edit + Edit cover + Reset cover Add Add category Edit categories @@ -662,7 +664,7 @@ and %1$d more extensions Failed to update cover - Please add the manga to your library before doing this + Manga must be in your library to edit View all errors @@ -726,7 +728,7 @@ Use first source with alternative Skip this step next time To show this screen again, go to Settings -> Library. - Reset Tags + Clear Tags Display as Auto More