diff --git a/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt b/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt index fe35f61bdd7a..f5e2f2384bd0 100644 --- a/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt +++ b/app/src/main/java/eu/kanade/domain/manga/model/Manga.kt @@ -55,6 +55,7 @@ fun Manga.copyFrom(other: SManga): Manga { // SY --> val author = other.author ?: ogAuthor val artist = other.artist ?: ogArtist + val thumbnailUrl = other.thumbnail_url ?: ogThumbnailUrl val description = other.description ?: ogDescription val genres = if (other.genre != null) { other.getGenres() @@ -62,15 +63,14 @@ fun Manga.copyFrom(other: SManga): Manga { ogGenre } // SY <-- - val thumbnailUrl = other.thumbnail_url ?: thumbnailUrl return this.copy( // SY --> ogAuthor = author, ogArtist = artist, + ogThumbnailUrl = thumbnailUrl, ogDescription = description, ogGenre = genres, // SY <-- - thumbnailUrl = thumbnailUrl, // SY --> ogStatus = other.status.toLong(), // SY <-- @@ -86,11 +86,11 @@ fun SManga.toDomainManga(sourceId: Long): Manga { ogTitle = title, ogArtist = artist, ogAuthor = author, + ogThumbnailUrl = thumbnail_url, ogDescription = description, ogGenre = getGenres(), ogStatus = status.toLong(), // SY <-- - thumbnailUrl = thumbnail_url, updateStrategy = update_strategy, initialized = initialized, source = sourceId, diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/MangaBackupCreator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/MangaBackupCreator.kt index 10d8d3f84660..b6a50ff79e1d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/MangaBackupCreator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/MangaBackupCreator.kt @@ -136,6 +136,7 @@ private fun Manga.toBackupManga(/* SY --> */customMangaInfo: CustomMangaInfo?/* backupManga.customTitle = it.title backupManga.customArtist = it.artist backupManga.customAuthor = it.author + backupManga.customThumbnailUrl = it.thumbnailUrl backupManga.customDescription = it.description backupManga.customGenre = it.genre backupManga.customStatus = it.status?.toInt() ?: 0 diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupManga.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupManga.kt index 4f503a0dbd99..6c55ece1b4ae 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupManga.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupManga.kt @@ -52,6 +52,7 @@ data class BackupManga( // skipping 803 due to using duplicate value in previous builds @ProtoNumber(804) var customDescription: String? = null, @ProtoNumber(805) var customGenre: List? = null, + @ProtoNumber(806) var customThumbnailUrl: String? = null, // Neko specific values @ProtoNumber(901) var filtered_scanlators: String? = null, @@ -63,11 +64,11 @@ data class BackupManga( ogTitle = this@BackupManga.title, ogArtist = this@BackupManga.artist, ogAuthor = this@BackupManga.author, + ogThumbnailUrl = this@BackupManga.thumbnailUrl, ogDescription = this@BackupManga.description, ogGenre = this@BackupManga.genre, ogStatus = this@BackupManga.status.toLong(), // SY <-- - thumbnailUrl = this@BackupManga.thumbnailUrl, favorite = this@BackupManga.favorite, source = this@BackupManga.source, dateAdded = this@BackupManga.dateAdded, diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/MangaRestorer.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/MangaRestorer.kt index 04be23abf264..eb680e6d66c3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/MangaRestorer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/MangaRestorer.kt @@ -119,7 +119,7 @@ class MangaRestorer( ogArtist = newer.artist, ogDescription = newer.description, ogGenre = newer.genre, - thumbnailUrl = newer.thumbnailUrl, + ogThumbnailUrl = newer.thumbnailUrl, ogStatus = newer.status, // SY <-- initialized = this.initialized || newer.initialized, @@ -504,6 +504,7 @@ class MangaRestorer( if (customTitle != null || customArtist != null || customAuthor != null || + customThumbnailUrl != null || customDescription != null || customGenre != null || customStatus != 0 @@ -513,6 +514,7 @@ class MangaRestorer( title = customTitle, author = customAuthor, artist = customArtist, + thumbnailUrl = customThumbnailUrl, description = customDescription, genre = customGenre, status = customStatus.takeUnless { it == 0 }?.toLong(), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt index 73106beb3b2c..2110a697d648 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt @@ -729,6 +729,7 @@ class LibraryScreenModel( title = editedTitle.nullIfBlank(), author = manga.author.takeUnless { it == manga.ogAuthor }, artist = manga.artist.takeUnless { it == manga.ogArtist }, + thumbnailUrl = manga.thumbnailUrl.takeUnless { it == manga.ogThumbnailUrl }, description = manga.description.takeUnless { it == manga.ogDescription }, genre = manga.genre.takeUnless { it == manga.ogGenre }, status = manga.status.takeUnless { it == manga.ogStatus }?.toLong(), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/EditMangaDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/EditMangaDialog.kt index 7dc3c1abde4d..1a670aea3a89 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/EditMangaDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/EditMangaDialog.kt @@ -50,6 +50,7 @@ fun EditMangaDialog( title: String?, author: String?, artist: String?, + thumbnailUrl: String?, description: String?, tags: List?, status: Long?, @@ -69,6 +70,7 @@ fun EditMangaDialog( binding.title.text.toString(), binding.mangaAuthor.text.toString(), binding.mangaArtist.text.toString(), + binding.thumbnailUrl.text.toString(), binding.mangaDescription.text.toString(), binding.mangaGenresTags.getTextStrings(), binding.status.selectedItemPosition.let { @@ -157,6 +159,7 @@ private fun onViewCreated(manga: Manga, context: Context, binding: EditMangaDial binding.title.hint = context.stringResource(SYMR.strings.title_hint, manga.url) binding.mangaAuthor.setText(manga.author.orEmpty()) binding.mangaArtist.setText(manga.artist.orEmpty()) + binding.thumbnailUrl.setText(manga.thumbnailUrl.orEmpty()) binding.mangaDescription.setText(manga.description.orEmpty()) binding.mangaGenresTags.setChips(manga.genre.orEmpty().dropBlank(), scope) } else { @@ -169,6 +172,9 @@ private fun onViewCreated(manga: Manga, context: Context, binding: EditMangaDial if (manga.artist != manga.ogArtist) { binding.mangaArtist.append(manga.artist.orEmpty()) } + if (manga.thumbnailUrl != manga.ogThumbnailUrl) { + binding.thumbnailUrl.append(manga.thumbnailUrl.orEmpty()) + } if (manga.description != manga.ogDescription) { binding.mangaDescription.append(manga.description.orEmpty()) } @@ -181,6 +187,13 @@ private fun onViewCreated(manga: Manga, context: Context, binding: EditMangaDial if (manga.ogArtist != null) { binding.mangaArtist.hint = context.stringResource(SYMR.strings.artist_hint, manga.ogArtist!!) } + if (manga.ogThumbnailUrl != null) { + binding.thumbnailUrl.hint = + context.stringResource( + SYMR.strings.thumbnail_url_hint, + manga.ogThumbnailUrl!!.chop(30) + "." + manga.ogThumbnailUrl!!.substringAfterLast(".").chop(6) + ) + } if (!manga.ogDescription.isNullOrBlank()) { binding.mangaDescription.hint = context.stringResource( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt index 592647e0de87..24f746195229 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt @@ -488,6 +488,7 @@ class MangaScreenModel( title: String?, author: String?, artist: String?, + thumbnailUrl: String?, description: String?, tags: List?, status: Long?, @@ -498,11 +499,13 @@ class MangaScreenModel( val newTitle = if (title.isNullOrBlank()) manga.url else title.trim() val newAuthor = author?.trimOrNull() val newArtist = artist?.trimOrNull() + val newThumbnailUrl = thumbnailUrl?.trimOrNull() val newDesc = description?.trimOrNull() manga = manga.copy( ogTitle = newTitle, ogAuthor = author?.trimOrNull(), ogArtist = artist?.trimOrNull(), + ogThumbnailUrl = thumbnailUrl?.trimOrNull(), ogDescription = description?.trimOrNull(), ogGenre = tags?.nullIfEmpty(), ogStatus = status ?: 0, @@ -516,6 +519,7 @@ class MangaScreenModel( title = newTitle, author = newAuthor, artist = newArtist, + thumbnailUrl = newThumbnailUrl, description = newDesc, genre = tags, status = status, @@ -534,6 +538,7 @@ class MangaScreenModel( title?.trimOrNull(), author?.trimOrNull(), artist?.trimOrNull(), + thumbnailUrl?.trimOrNull(), description?.trimOrNull(), genre, status.takeUnless { it == state.manga.ogStatus }, diff --git a/app/src/main/res/layout/edit_manga_dialog.xml b/app/src/main/res/layout/edit_manga_dialog.xml index f4c753606cc6..205207812afa 100644 --- a/app/src/main/res/layout/edit_manga_dialog.xml +++ b/app/src/main/res/layout/edit_manga_dialog.xml @@ -87,6 +87,22 @@ + + + + + + ? = null, val status: Long? = null, @@ -82,6 +84,7 @@ class CustomMangaRepositoryImpl(context: Context) : CustomMangaRepository { title = this@MangaJson.title?.takeUnless { it.isBlank() }, author = this@MangaJson.author, artist = this@MangaJson.artist, + thumbnailUrl = this@MangaJson.thumbnailUrl, description = this@MangaJson.description, genre = this@MangaJson.genre, status = this@MangaJson.status?.takeUnless { it == 0L }, @@ -94,6 +97,7 @@ class CustomMangaRepositoryImpl(context: Context) : CustomMangaRepository { title, author, artist, + thumbnailUrl, description, genre, status, diff --git a/data/src/main/java/tachiyomi/data/manga/MangaMapper.kt b/data/src/main/java/tachiyomi/data/manga/MangaMapper.kt index 2ca2a48316cc..b9718f86fb8c 100644 --- a/data/src/main/java/tachiyomi/data/manga/MangaMapper.kt +++ b/data/src/main/java/tachiyomi/data/manga/MangaMapper.kt @@ -49,11 +49,11 @@ object MangaMapper { ogTitle = title, ogArtist = artist, ogAuthor = author, + ogThumbnailUrl = thumbnailUrl, ogDescription = description, ogGenre = genre, ogStatus = status, // SY <-- - thumbnailUrl = thumbnailUrl, updateStrategy = updateStrategy, initialized = initialized, lastModifiedAt = lastModifiedAt, @@ -150,7 +150,7 @@ object MangaMapper { ogDescription = libraryView.description, ogGenre = libraryView.genre, ogStatus = libraryView.status, - thumbnailUrl = libraryView.thumbnail_url, + ogThumbnailUrl = libraryView.thumbnail_url, updateStrategy = libraryView.update_strategy, initialized = libraryView.initialized, fetchInterval = libraryView.calculate_interval.toInt(), diff --git a/domain/src/main/java/tachiyomi/domain/manga/model/CustomMangaInfo.kt b/domain/src/main/java/tachiyomi/domain/manga/model/CustomMangaInfo.kt index 7edaacb107f2..c8481ef87135 100644 --- a/domain/src/main/java/tachiyomi/domain/manga/model/CustomMangaInfo.kt +++ b/domain/src/main/java/tachiyomi/domain/manga/model/CustomMangaInfo.kt @@ -5,6 +5,7 @@ data class CustomMangaInfo( val title: String?, val author: String? = null, val artist: String? = null, + val thumbnailUrl: String? = null, val description: String? = null, val genre: List? = null, val status: Long? = null, diff --git a/domain/src/main/java/tachiyomi/domain/manga/model/Manga.kt b/domain/src/main/java/tachiyomi/domain/manga/model/Manga.kt index 0c769327bf84..2af9c2d68d2b 100644 --- a/domain/src/main/java/tachiyomi/domain/manga/model/Manga.kt +++ b/domain/src/main/java/tachiyomi/domain/manga/model/Manga.kt @@ -24,11 +24,11 @@ data class Manga( val ogTitle: String, val ogArtist: String?, val ogAuthor: String?, + val ogThumbnailUrl: String?, val ogDescription: String?, val ogGenre: List?, val ogStatus: Long, // SY <-- - val thumbnailUrl: String?, val updateStrategy: UpdateStrategy, val initialized: Boolean, val lastModifiedAt: Long, @@ -51,6 +51,9 @@ data class Manga( val artist: String? get() = customMangaInfo?.artist ?: ogArtist + val thumbnailUrl: String? + get() = customMangaInfo?.thumbnailUrl ?: ogThumbnailUrl + val description: String? get() = customMangaInfo?.description ?: ogDescription @@ -147,11 +150,11 @@ data class Manga( // SY --> ogArtist = null, ogAuthor = null, + ogThumbnailUrl = null, ogDescription = null, ogGenre = null, ogStatus = 0L, // SY <-- - thumbnailUrl = null, updateStrategy = UpdateStrategy.ALWAYS_UPDATE, initialized = false, lastModifiedAt = 0L, diff --git a/domain/src/main/java/tachiyomi/domain/manga/model/MangaUpdate.kt b/domain/src/main/java/tachiyomi/domain/manga/model/MangaUpdate.kt index f434445aa7bc..e2d1c803bd7e 100644 --- a/domain/src/main/java/tachiyomi/domain/manga/model/MangaUpdate.kt +++ b/domain/src/main/java/tachiyomi/domain/manga/model/MangaUpdate.kt @@ -45,11 +45,11 @@ fun Manga.toMangaUpdate(): MangaUpdate { title = ogTitle, artist = ogArtist, author = ogAuthor, + thumbnailUrl = ogThumbnailUrl, description = ogDescription, genre = ogGenre, status = ogStatus, // SY <-- - thumbnailUrl = thumbnailUrl, updateStrategy = updateStrategy, initialized = initialized, ) diff --git a/i18n-sy/src/commonMain/resources/MR/base/strings.xml b/i18n-sy/src/commonMain/resources/MR/base/strings.xml index 03cbe40554c4..2651f12423a1 100644 --- a/i18n-sy/src/commonMain/resources/MR/base/strings.xml +++ b/i18n-sy/src/commonMain/resources/MR/base/strings.xml @@ -344,6 +344,7 @@ Description: %1$s Author: %1$s Artist: %1$s + Thumbnail Url: %1$s diff --git a/i18n-sy/src/commonMain/resources/MR/in/strings.xml b/i18n-sy/src/commonMain/resources/MR/in/strings.xml index c604ea70650d..d0f98c4b74ec 100644 --- a/i18n-sy/src/commonMain/resources/MR/in/strings.xml +++ b/i18n-sy/src/commonMain/resources/MR/in/strings.xml @@ -298,6 +298,7 @@ Deskripsi: %1$s Author: %1$s Artist: %1$s + Thumbnail Url: %1$s diff --git a/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/SManga.kt b/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/SManga.kt index 908c3fb1f7a5..6ba21656b199 100755 --- a/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/SManga.kt +++ b/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/SManga.kt @@ -33,6 +33,7 @@ interface SManga : Serializable { val originalTitle: String val originalAuthor: String? val originalArtist: String? + val originalThumbnailUrl: String? val originalDescription: String? val originalGenre: String? val originalStatus: Int @@ -44,11 +45,11 @@ interface SManga : Serializable { it.title = originalTitle it.artist = originalArtist it.author = originalAuthor + it.thumbnail_url = originalThumbnailUrl it.description = originalDescription it.genre = originalGenre it.status = originalStatus // SY <-- - it.thumbnail_url = thumbnail_url it.update_strategy = update_strategy it.initialized = initialized } @@ -103,7 +104,7 @@ fun SManga.copy( description: String? = this.originalDescription, genre: String? = this.originalGenre, status: Int = this.status, - thumbnail_url: String? = this.thumbnail_url, + thumbnail_url: String? = this.originalThumbnailUrl, initialized: Boolean = this.initialized, ) = SManga.create().also { it.url = url diff --git a/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/SMangaImpl.kt b/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/SMangaImpl.kt index 0fb935ab8833..608c2c1ac475 100755 --- a/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/SMangaImpl.kt +++ b/source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/SMangaImpl.kt @@ -31,6 +31,8 @@ class SMangaImpl : SManga { get() = author override val originalArtist: String? get() = artist + override val originalThumbnailUrl: String? + get() = thumbnail_url override val originalDescription: String? get() = description override val originalGenre: String?