From 8f884bf2227f595fe87f7e1d95f08b9449fb6e7c Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 16 Mar 2020 01:52:30 -0700 Subject: [PATCH] Removing edit online manga, now only for local This is a nightmare to maintain and freeing to clean up, so it's out. Local manga will continue to be editable but online editing will remain only for covers (which wlil not be overridden when updating) --- app/build.gradle.kts | 2 +- .../java/eu/kanade/tachiyomi/Migrations.kt | 3 + .../backup/serializer/MangaTypeAdapter.kt | 2 +- .../tachiyomi/data/database/models/Manga.kt | 4 +- .../data/database/models/MangaImpl.kt | 10 +-- .../resolvers/MangaInfoPutResolver.kt | 11 +-- .../tachiyomi/data/download/DownloadCache.kt | 4 +- .../data/download/DownloadNotifier.kt | 4 +- .../data/download/DownloadProvider.kt | 2 +- .../tachiyomi/data/glide/MangaModelLoader.kt | 15 ++-- .../data/library/LibraryUpdateRanker.kt | 2 +- .../data/library/LibraryUpdateService.kt | 8 +- .../smartsearch/SmartSearchEngine.kt | 2 +- .../eu/kanade/tachiyomi/source/LocalSource.kt | 2 +- .../kanade/tachiyomi/source/model/SManga.kt | 59 ++------------ .../catalogue/browse/CatalogueGridHolder.kt | 2 +- .../catalogue/browse/CatalogueListHolder.kt | 2 +- .../tachiyomi/ui/download/DownloadHolder.kt | 2 +- .../ui/library/LibraryCategoryAdapter.kt | 4 +- .../tachiyomi/ui/library/LibraryGridHolder.kt | 4 +- .../tachiyomi/ui/library/LibraryItem.kt | 11 ++- .../tachiyomi/ui/library/LibraryListHolder.kt | 6 +- .../tachiyomi/ui/library/LibraryPresenter.kt | 18 ++++- .../ui/manga/MangaDetailsController.kt | 75 ++++++++++++++++-- .../ui/manga/MangaDetailsPresenter.kt | 76 +++++-------------- .../tachiyomi/ui/manga/MangaHeaderHolder.kt | 24 +++--- .../ui/manga/info/EditMangaDialog.kt | 75 ++---------------- .../ui/manga/track/TrackSearchDialog.kt | 2 +- .../tachiyomi/ui/migration/MangaHolder.kt | 4 +- .../ui/migration/SearchController.kt | 2 +- .../manga/process/MigrationListController.kt | 4 +- .../manga/process/MigrationProcessHolder.kt | 4 +- .../tachiyomi/ui/reader/ReaderActivity.kt | 2 +- .../tachiyomi/ui/reader/ReaderPresenter.kt | 2 +- .../ui/recent_updates/RecentChapterHolder.kt | 2 +- .../ui/recent_updates/RecentChapterItem.kt | 2 +- .../ui/recently_read/RecentlyReadHolder.kt | 2 +- .../util/chapter/ChapterRecognition.kt | 2 +- app/src/main/res/layout/edit_manga_dialog.xml | 4 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values/strings.xml | 6 +- 42 files changed, 206 insertions(+), 265 deletions(-) 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