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 1aaaeda100..cc7d2c068a 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 @@ -14,7 +14,7 @@ object MangaTypeAdapter { write { beginArray() value(it.url) - value(it.title) + value(it.trueTitle()) value(it.source) value(it.viewer) value(it.chapter_flags) 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 a34429b398..186928ebf1 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 @@ -39,8 +39,14 @@ open class MangaImpl : Manga { var last_cover_fetch: Long = 0 override fun copyFrom(other: SManga) { - if (other is MangaImpl && (other as MangaImpl)::title.isInitialized && other.title != title) - title = other.title + if (((other is MangaImpl && (other as MangaImpl)::title.isInitialized) + || other !is MangaImpl) && other.title != title) { + title = if (customTitle() != trueTitle()) { + val customTitle = customTitle() + val trueTitle = other.title + "${customTitle}≡§${trueTitle}" + } else other.title + } super.copyFrom(other) } 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 778f839344..0a1e267c4d 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 @@ -106,7 +106,7 @@ internal class DownloadNotifier(private val context: Context) { NotificationReceiver.pauseDownloadsPendingBroadcast(context)) } - val title = download.manga.title.chop(15) + val title = download.manga.customTitle().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)) @@ -161,7 +161,7 @@ internal class DownloadNotifier(private val context: Context) { } // Create notification. with(notification) { - val title = download.manga.title.chop(15) + val title = download.manga.customTitle().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 c12aa1c639..1297116ba0 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 @@ -178,7 +178,7 @@ class DownloadProvider(private val context: Context) { * @param manga the manga to query. */ fun getMangaDirName(manga: Manga): String { - return DiskUtil.buildValidFilename(manga.title) + return DiskUtil.buildValidFilename(manga.trueTitle()) } /** 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 735afa8330..87ee8cd52a 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.title, mangaSecond.title) + compareValues(mangaFirst.customTitle(), mangaSecond.customTitle()) } } 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 9029ea5510..691b2bc162 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 @@ -461,7 +461,7 @@ class LibraryUpdateService( */ private fun showProgressNotification(manga: Manga, current: Int, total: Int) { notificationManager.notify(Notifications.ID_LIBRARY_PROGRESS, progressNotification - .setContentTitle(manga.title) + .setContentTitle(manga.customTitle()) .setProgress(total, current, false) .build()) } @@ -487,7 +487,7 @@ class LibraryUpdateService( } catch (e: Exception) { } setGroupAlertBehavior(GROUP_ALERT_SUMMARY) - setContentTitle(manga.title) + setContentTitle(manga.customTitle()) color = ContextCompat.getColor(this@LibraryUpdateService, R.color.colorAccentLight) val chaptersNames = if (chapterNames.size > 5) { "${chapterNames.take(4).joinToString(", ")}, " + @@ -527,11 +527,11 @@ class LibraryUpdateService( .notification_new_chapters_text, updates.size, updates.size)) setStyle(NotificationCompat.BigTextStyle().bigText(updates.joinToString("\n") { - it.first.title.chop(45) + it.first.customTitle().chop(45) })) } else { - setContentText(updates.first().first.title.chop(45)) + setContentText(updates.first().first.customTitle().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 4bfa4b5516..16017686f9 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(parentContext: CoroutineContext, return@supervisorScope listOf(SearchEntry(searchResults.mangas.first(), 0.0)) searchResults.mangas.map { - val normalizedDistance = normalizedLevenshtein.similarity(title, it.title) + val normalizedDistance = normalizedLevenshtein.similarity(title, it.trueTitle()) 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 b02c79ae1e..d36da48dfe 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt @@ -161,7 +161,7 @@ class LocalSource(private val context: Context) : CatalogueSource { } else { chapterFile.nameWithoutExtension } - val chapNameCut = chapName.replace(manga.title, "", true).trim(' ', '-', '_') + val chapNameCut = chapName.replace(manga.trueTitle(), "", 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 3e3ef8206b..88e0ec0c1c 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 @@ -22,6 +22,16 @@ interface SManga : Serializable { var initialized: Boolean + fun customTitle(): String { + val splitTitle = title.split("▒") + return splitTitle.first() + } + + fun trueTitle(): String { + val splitTitle = title.split("▒") + return splitTitle.last() + } + fun copyFrom(other: SManga) { if (other.author != null) author = other.author diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadHolder.kt index b7cb6527ed..6accd216f1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadHolder.kt @@ -38,7 +38,7 @@ class DownloadHolder(private val view: View, val adapter: DownloadAdapter) : chapter_title.text = download.chapter.name // Update the manga title - manga_title.text = download.manga.title + manga_title.text = download.manga.customTitle() // Update the progress bar and the number of downloaded pages val pages = download.pages diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt index 62fe366242..a165c5e19f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt @@ -94,7 +94,7 @@ class LibraryCategoryAdapter(val view: LibraryCategoryView) : "N/A" } else -> { - val title = (iFlexible as LibraryItem).manga.title + val title = (iFlexible as LibraryItem).manga.customTitle() 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 6edbf424f7..2ee3ade466 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 @@ -35,7 +35,7 @@ class LibraryGridHolder( // Update the title of the manga. with(title) { visibility = if (item.manga.hide_title) View.GONE else View.VISIBLE - text = item.manga.title + text = item.manga.customTitle() } gradient.visibility = if (item.manga.hide_title) View.GONE else View.VISIBLE 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 21e2f75d45..79598bface 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 @@ -33,7 +33,7 @@ class LibraryListHolder( */ override fun onSetValues(item: LibraryItem) { // Update the title of the manga. - title.text = item.manga.title + title.text = item.manga.customTitle() // Update the unread count and its visibility. with(unread_text) { 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 1b50ff6176..e9b98f46e6 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 @@ -280,8 +280,8 @@ class LibraryPresenter( private fun sortAlphabetical(i1: LibraryItem, i2: LibraryItem): Int { return if (preferences.removeArticles().getOrDefault()) - i1.manga.title.removeArticles().compareTo(i2.manga.title.removeArticles(), true) - else i1.manga.title.compareTo(i2.manga.title, true) + i1.manga.customTitle().removeArticles().compareTo(i2.manga.customTitle().removeArticles(), true) + else i1.manga.customTitle().compareTo(i2.manga.customTitle(), true) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt index baf637a923..d448ef2881 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt @@ -116,7 +116,7 @@ class MangaController : RxController, TabbedController { private var trackingIconSubscription: Subscription? = null override fun getTitle(): String? { - return manga?.title + return manga?.customTitle() } override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View { 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 new file mode 100644 index 0000000000..3bb4500947 --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/EditMangaDialog.kt @@ -0,0 +1,168 @@ +package eu.kanade.tachiyomi.ui.manga.info + +import android.app.Dialog +import android.os.Bundle +import android.view.View +import com.afollestad.materialdialogs.MaterialDialog +import com.afollestad.materialdialogs.WhichButton +import com.afollestad.materialdialogs.actions.setActionButtonEnabled +import com.afollestad.materialdialogs.customview.customView +import com.jakewharton.rxbinding.widget.itemClicks +import com.jakewharton.rxbinding.widget.textChanges +import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.data.database.DatabaseHelper +import eu.kanade.tachiyomi.data.database.models.Manga +import eu.kanade.tachiyomi.data.database.models.Track +import eu.kanade.tachiyomi.data.track.TrackManager +import eu.kanade.tachiyomi.data.track.TrackService +import eu.kanade.tachiyomi.data.track.model.TrackSearch +import eu.kanade.tachiyomi.ui.base.controller.DialogController +import eu.kanade.tachiyomi.ui.manga.track.TrackController +import eu.kanade.tachiyomi.ui.manga.track.TrackSearchAdapter +import eu.kanade.tachiyomi.ui.manga.track.TrackSearchDialog +import eu.kanade.tachiyomi.util.plusAssign +import kotlinx.android.synthetic.main.track_controller.* +import kotlinx.android.synthetic.main.track_search_dialog.view.* +import rx.Subscription +import rx.android.schedulers.AndroidSchedulers +import rx.subscriptions.CompositeSubscription +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import java.util.concurrent.TimeUnit + +class EditMangaDialog : DialogController { + + private var dialogView: View? = null + + private var adapter: TrackSearchAdapter? = null + + private var selectedItem: Track? = null + + private val manga: Manga + + private var subscriptions = CompositeSubscription() + + private var searchTextSubscription: Subscription? = null + + private val trackController + get() = targetController as TrackController + + private var wasPreviouslyTracked:Boolean = false + + constructor(target: TrackController, manga: Manga, wasTracked:Boolean) : super(Bundle() + .apply { + putLong(KEY_MANGA, manga.id!!) + }) { + wasPreviouslyTracked = wasTracked + targetController = target + this.manga = manga + } + + @Suppress("unused") + constructor(bundle: Bundle) : super(bundle) { + manga = Injekt.get().getManga(bundle.getLong(KEY_MANGA)) + .executeAsBlocking()!! + } + + override fun onCreateDialog(savedViewState: Bundle?): Dialog { + val dialog = MaterialDialog(activity!!).apply { + customView(viewRes = R.layout.track_search_dialog, scrollable = false) + negativeButton(android.R.string.cancel) + positiveButton( + if (wasPreviouslyTracked) R.string.action_clear + else R.string.action_track){ onPositiveButtonClick() } + setActionButtonEnabled(WhichButton.POSITIVE, wasPreviouslyTracked) + } + + if (subscriptions.isUnsubscribed) { + subscriptions = CompositeSubscription() + } + + dialogView = dialog.view + onViewCreated(dialog.view, savedViewState) + + return dialog + } + + fun onViewCreated(view: View, savedState: Bundle?) { + // Create adapter + val adapter = TrackSearchAdapter(view.context) + this.adapter = adapter + view.track_search_list.adapter = adapter + + // Set listeners + selectedItem = null + + subscriptions += view.track_search_list.itemClicks().subscribe { position -> + selectedItem = adapter.getItem(position) + (dialog as? MaterialDialog)?.positiveButton(R.string.action_track) + (dialog as? MaterialDialog)?.setActionButtonEnabled(WhichButton.POSITIVE, true) + } + + // Do an initial search based on the manga's title + if (savedState == null) { + val title = trackController.presenter.manga.trueTitle() + view.track_search.append(title) + search(title) + } + } + + override fun onDestroyView(view: View) { + super.onDestroyView(view) + subscriptions.unsubscribe() + dialogView = null + adapter = null + } + + override fun onAttach(view: View) { + super.onAttach(view) + searchTextSubscription = dialogView!!.track_search.textChanges() + .skip(1) + .debounce(1, TimeUnit.SECONDS, AndroidSchedulers.mainThread()) + .map { it.toString() } + .filter(String::isNotBlank) + .subscribe { search(it) } + } + + override fun onDetach(view: View) { + super.onDetach(view) + searchTextSubscription?.unsubscribe() + } + + private fun search(query: String) { + val view = dialogView ?: return + view.progress.visibility = View.VISIBLE + view.track_search_list.visibility = View.INVISIBLE + //trackController.presenter.search(query, service) + } + + fun onSearchResults(results: List) { + selectedItem = null + val view = dialogView ?: return + view.progress.visibility = View.INVISIBLE + view.track_search_list.visibility = View.VISIBLE + adapter?.setItems(results) + if (results.size == 1 && !wasPreviouslyTracked) { + selectedItem = adapter?.getItem(0) + (dialog as? MaterialDialog)?.positiveButton(R.string.action_track) + (dialog as? MaterialDialog)?.setActionButtonEnabled(WhichButton.POSITIVE, true) + } + } + + fun onSearchResultsError() { + val view = dialogView ?: return + view.progress.visibility = View.VISIBLE + view.track_search_list.visibility = View.INVISIBLE + adapter?.setItems(emptyList()) + } + + private fun onPositiveButtonClick() { + //trackController.swipe_refresh.isRefreshing = true + //trackController.presenter.registerTracking(selectedItem, service) + } + + private companion object { + const val KEY_MANGA = "manga_id" + } + +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt index f8c0806629..ddfc2c3b18 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt @@ -181,7 +181,8 @@ class MangaInfoController : NucleusController(), shortAnimationDuration = resources?.getInteger(android.R.integer.config_shortAnimTime) ?: 0 manga_cover.longClicks().subscribeUntilDestroy { - copyToClipboard(view.context.getString(R.string.title), presenter.manga.title, R.string.manga_info_full_title_label) + copyToClipboard(view.context.getString(R.string.title), presenter.manga.customTitle(), R.string + .manga_info_full_title_label) } container = (view as ViewGroup).findViewById(R.id.manga_info_layout) as? View val bottomM = manga_genres_tags.marginBottom @@ -222,6 +223,7 @@ class MangaInfoController : NucleusController(), override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { + R.id.action_edit -> { } R.id.action_open_in_browser -> openInBrowser() R.id.action_open_in_web_view -> openInWebView() R.id.action_share -> prepareToShareManga() @@ -260,10 +262,10 @@ class MangaInfoController : NucleusController(), val view = view ?: return //update full title TextView. - manga_full_title.text = if (manga.title.isBlank()) { + manga_full_title.text = if (manga.customTitle().isBlank()) { view.context.getString(R.string.unknown) } else { - manga.title + manga.customTitle() } // Update artist TextView. @@ -395,7 +397,7 @@ class MangaInfoController : NucleusController(), } val activity = activity ?: return - val intent = WebViewActivity.newIntent(activity, source.id, url, presenter.manga.title) + val intent = WebViewActivity.newIntent(activity, source.id, url, presenter.manga.trueTitle()) startActivity(intent) } @@ -431,7 +433,7 @@ class MangaInfoController : NucleusController(), val intent = Intent(Intent.ACTION_SEND).apply { type = "text/*" putExtra(Intent.EXTRA_TEXT, url) - putExtra(Intent.EXTRA_TITLE, presenter.manga.title) + putExtra(Intent.EXTRA_TITLE, presenter.manga.customTitle()) flags = Intent.FLAG_GRANT_READ_URI_PERMISSION if (stream != null) { clipData = ClipData.newRawUri(null, stream) @@ -708,11 +710,11 @@ class MangaInfoController : NucleusController(), // Check if shortcut placement is supported if (ShortcutManagerCompat.isRequestPinShortcutSupported(activity)) { - val shortcutId = "manga-shortcut-${presenter.manga.title}-${presenter.source.name}" + val shortcutId = "manga-shortcut-${presenter.manga.trueTitle()}-${presenter.source.name}" // Create shortcut info val shortcutInfo = ShortcutInfoCompat.Builder(activity, shortcutId) - .setShortLabel(presenter.manga.title) + .setShortLabel(presenter.manga.customTitle()) .setIcon(IconCompat.createWithBitmap(icon)) .setIntent(shortcutIntent) .build() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.kt index f96d0459a7..702c65055c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoPresenter.kt @@ -148,7 +148,7 @@ class MangaInfoPresenter( directory.mkdirs() // Build destination file. - val filename = DiskUtil.buildValidFilename("${manga.title} - Cover.jpg") + val filename = DiskUtil.buildValidFilename("${manga.trueTitle()} - Cover.jpg") val destFile = File(directory, filename) val stream: OutputStream = FileOutputStream(destFile) 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 3f862ee27b..97dce5cc83 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 @@ -95,7 +95,7 @@ class TrackSearchDialog : DialogController { // Do an initial search based on the manga's title if (savedState == null) { - val title = trackController.presenter.manga.title + val title = trackController.presenter.manga.trueTitle() 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 353aeeba16..b7ff6320b3 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,7 +16,7 @@ class MangaHolder( fun bind(item: MangaItem) { // Update the title of the manga. - title.text = item.manga.title + title.text = item.manga.customTitle() // Create thumbnail onclick to simulate long click thumbnail.setOnClickListener { 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 281ed277d6..b7b8766b82 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 @@ -23,7 +23,7 @@ import uy.kohesive.injekt.injectLazy class SearchController( private var manga: Manga? = null -) : CatalogueSearchController(manga?.title) { +) : CatalogueSearchController(manga?.trueTitle()) { private var newManga: Manga? = null private var progress = 1 diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SearchPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SearchPresenter.kt index b4a31c0da6..941e99c2e8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SearchPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SearchPresenter.kt @@ -22,11 +22,4 @@ class SearchPresenter( //Set the catalogue search item as highlighted if the source matches that of the selected manga return CatalogueSearchItem(source, results, source.id == manga.source) } - - override fun networkToLocalManga(sManga: SManga, sourceId: Long): Manga { - val localManga = super.networkToLocalManga(sManga, sourceId) - // For migration, displayed title should always match source rather than local DB - localManga.title = sManga.title - return localManga - } } 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 3753bddb6a..ce45681b69 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 @@ -154,7 +154,8 @@ class MigrationListController(bundle: Bundle? = null) : BaseController(bundle), /* val searchResult = if (useSmartSearch) { smartSearchEngine.smartSearch(source, mangaObj.title) } else {*/ - val searchResult = smartSearchEngine.normalSearch(source, mangaObj.title) + val searchResult = smartSearchEngine + .normalSearch(source, mangaObj.trueTitle()) if(searchResult != null) { val localManga = smartSearchEngine.networkToLocalManga(searchResult, source.id) @@ -183,8 +184,8 @@ class MigrationListController(bundle: Bundle? = null) : BaseController(bundle), } else { validSources.forEachIndexed { index, source -> val searchResult = try { - val searchResult = smartSearchEngine.normalSearch(source, - mangaObj.title) + val searchResult = smartSearchEngine + .normalSearch(source, mangaObj.trueTitle()) if (searchResult != null) { val localManga = smartSearchEngine.networkToLocalManga(searchResult, source.id) 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 066ccba2ac..487e247af9 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 @@ -132,10 +132,10 @@ class MigrationProcessHolder( .centerCrop() .into(thumbnail) - title.text = if (manga.title.isBlank()) { + title.text = if (manga.customTitle().isBlank()) { view.context.getString(R.string.unknown) } else { - manga.title + manga.customTitle() } 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 744d00f4be..7e3a64f2e3 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 @@ -381,7 +381,7 @@ class ReaderActivity : BaseRxActivity(), viewer = newViewer viewer_container.addView(newViewer.getView()) - toolbar.title = manga.title + toolbar.title = manga.customTitle() 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 8e94968cc3..375124055a 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 @@ -444,7 +444,7 @@ class ReaderPresenter( // Build destination file. val filename = DiskUtil.buildValidFilename( - "${manga.title} - ${chapter.name}".take(225) + "${manga.customTitle()} - ${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 4a5f139d9a..cb35f5d4f8 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_title.text = item.manga.title + manga_title.text = item.manga.customTitle() // 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/recently_read/RecentlyReadHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recently_read/RecentlyReadHolder.kt index 0514b66155..b115e4c167 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 @@ -61,7 +61,7 @@ class RecentlyReadHolder( val (manga, chapter, history) = item // Set manga title - manga_title.text = manga.title + manga_title.text = manga.customTitle() // Set source + chapter title val formattedNumber = adapter.decimalFormat.format(chapter.chapter_number.toDouble()) diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/ChapterRecognition.kt b/app/src/main/java/eu/kanade/tachiyomi/util/ChapterRecognition.kt index 742fa3e1a2..7fbc0347cb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/ChapterRecognition.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/ChapterRecognition.kt @@ -74,7 +74,7 @@ object ChapterRecognition { } // Remove manga title from chapter title. - val nameWithoutManga = name.replace(manga.title.toLowerCase(), "").trim() + val nameWithoutManga = name.replace(manga.trueTitle().toLowerCase(), "").trim() // Check if first value is number after title remove. if (updateChapter(withoutManga.find(nameWithoutManga), chapter)) diff --git a/app/src/main/res/drawable/ic_edit_white_24dp.xml b/app/src/main/res/drawable/ic_edit_white_24dp.xml new file mode 100644 index 0000000000..46462b5726 --- /dev/null +++ b/app/src/main/res/drawable/ic_edit_white_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/menu/manga_info.xml b/app/src/main/res/menu/manga_info.xml index 6a5edad194..2169752f6e 100644 --- a/app/src/main/res/menu/manga_info.xml +++ b/app/src/main/res/menu/manga_info.xml @@ -2,6 +2,12 @@ + +