Rewrite and enable manga cover editing, Manga info edit is finished!
This commit is contained in:
parent
b8129ff4f6
commit
6469121f41
@ -1,6 +1,7 @@
|
|||||||
package eu.kanade.tachiyomi.ui.manga
|
package eu.kanade.tachiyomi.ui.manga
|
||||||
|
|
||||||
import android.app.Dialog
|
import android.app.Dialog
|
||||||
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.text.InputType
|
import android.text.InputType
|
||||||
import android.view.View
|
import android.view.View
|
||||||
@ -21,12 +22,16 @@ import eu.kanade.tachiyomi.source.LocalSource
|
|||||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||||
import eu.kanade.tachiyomi.util.lang.chop
|
import eu.kanade.tachiyomi.util.lang.chop
|
||||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||||
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
|
import eu.kanade.tachiyomi.util.view.visibleIf
|
||||||
import exh.util.trimOrNull
|
import exh.util.trimOrNull
|
||||||
|
import kotlinx.android.synthetic.main.edit_manga_dialog.view.cover_layout
|
||||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_artist
|
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_artist
|
||||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_author
|
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_author
|
||||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_cover
|
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_cover
|
||||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_description
|
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_description
|
||||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_genres_tags
|
import kotlinx.android.synthetic.main.edit_manga_dialog.view.manga_genres_tags
|
||||||
|
import kotlinx.android.synthetic.main.edit_manga_dialog.view.reset_cover
|
||||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.reset_tags
|
import kotlinx.android.synthetic.main.edit_manga_dialog.view.reset_tags
|
||||||
import kotlinx.android.synthetic.main.edit_manga_dialog.view.title
|
import kotlinx.android.synthetic.main.edit_manga_dialog.view.title
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
@ -38,9 +43,9 @@ class EditMangaDialog : DialogController {
|
|||||||
|
|
||||||
private val manga: Manga
|
private val manga: Manga
|
||||||
|
|
||||||
// private var customCoverUri: Uri? = null
|
private var customCoverUri: Uri? = null
|
||||||
|
|
||||||
// private var willResetCover = false
|
private var willResetCover = false
|
||||||
|
|
||||||
private val infoController
|
private val infoController
|
||||||
get() = targetController as MangaAllInOneController
|
get() = targetController as MangaAllInOneController
|
||||||
@ -126,17 +131,16 @@ class EditMangaDialog : DialogController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
view.manga_genres_tags.clearFocus()
|
view.manga_genres_tags.clearFocus()
|
||||||
/*view.cover_layout.setOnClickListener {
|
view.cover_layout.setOnClickListener {
|
||||||
infoController.changeCover()
|
infoController.changeCover()
|
||||||
}*/
|
}
|
||||||
view.reset_tags.setOnClickListener { resetTags() }
|
view.reset_tags.setOnClickListener { resetTags() }
|
||||||
/*view.reset_cover.visibleIf(!isLocal)
|
view.reset_cover.visibleIf { !isLocal }
|
||||||
view.reset_cover.setOnClickListener {
|
view.reset_cover.setOnClickListener {
|
||||||
view.manga_cover.loadAny(manga, builder = {
|
view.context.toast(R.string.cover_reset_toast)
|
||||||
parameters(Parameters.Builder().set(MangaFetcher.realCover, true).build())
|
customCoverUri = null
|
||||||
})
|
|
||||||
willResetCover = true
|
willResetCover = true
|
||||||
}*/
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resetTags() {
|
private fun resetTags() {
|
||||||
@ -146,11 +150,15 @@ class EditMangaDialog : DialogController {
|
|||||||
else dialogView?.manga_genres_tags?.setChips(manga.originalGenre?.split(", "))
|
else dialogView?.manga_genres_tags?.setChips(manga.originalGenre?.split(", "))
|
||||||
}
|
}
|
||||||
|
|
||||||
/*fun updateCover(uri: Uri) {
|
fun updateCover(uri: Uri) {
|
||||||
willResetCover = false
|
willResetCover = false
|
||||||
dialogView!!.manga_cover.loadAny(uri)
|
GlideApp.with(dialogView!!.context)
|
||||||
|
.load(uri)
|
||||||
|
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||||
|
.centerCrop()
|
||||||
|
.into(dialogView!!.manga_cover)
|
||||||
customCoverUri = uri
|
customCoverUri = uri
|
||||||
}*/
|
}
|
||||||
|
|
||||||
override fun onDestroyView(view: View) {
|
override fun onDestroyView(view: View) {
|
||||||
super.onDestroyView(view)
|
super.onDestroyView(view)
|
||||||
@ -161,7 +169,8 @@ class EditMangaDialog : DialogController {
|
|||||||
infoController.presenter.updateMangaInfo(
|
infoController.presenter.updateMangaInfo(
|
||||||
dialogView?.title?.text.toString(),
|
dialogView?.title?.text.toString(),
|
||||||
dialogView?.manga_author?.text.toString(), dialogView?.manga_artist?.text.toString(),
|
dialogView?.manga_author?.text.toString(), dialogView?.manga_artist?.text.toString(),
|
||||||
dialogView?.manga_description?.text.toString(), dialogView?.manga_genres_tags?.getTextStrings()
|
dialogView?.manga_description?.text.toString(), dialogView?.manga_genres_tags?.getTextStrings(),
|
||||||
|
customCoverUri, willResetCover
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,6 +60,7 @@ import eu.kanade.tachiyomi.util.view.snack
|
|||||||
import eu.kanade.tachiyomi.util.view.visible
|
import eu.kanade.tachiyomi.util.view.visible
|
||||||
import exh.EH_SOURCE_ID
|
import exh.EH_SOURCE_ID
|
||||||
import exh.EXH_SOURCE_ID
|
import exh.EXH_SOURCE_ID
|
||||||
|
import java.io.IOException
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
@ -1024,6 +1025,39 @@ class MangaAllInOneController :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun changeCover() {
|
||||||
|
if (manga?.favorite == true) {
|
||||||
|
val intent = Intent(Intent.ACTION_GET_CONTENT)
|
||||||
|
intent.type = "image/*"
|
||||||
|
startActivityForResult(
|
||||||
|
Intent.createChooser(
|
||||||
|
intent,
|
||||||
|
resources?.getString(R.string.select_cover_image)
|
||||||
|
),
|
||||||
|
101
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
activity?.toast(R.string.cover_must_be_in_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)
|
||||||
|
}
|
||||||
|
} catch (error: IOException) {
|
||||||
|
activity.toast(R.string.failed_to_update_cover)
|
||||||
|
Timber.e(error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
// EXH -->
|
// EXH -->
|
||||||
const val UPDATE_EXTRA = "update"
|
const val UPDATE_EXTRA = "update"
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package eu.kanade.tachiyomi.ui.manga
|
package eu.kanade.tachiyomi.ui.manga
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.jakewharton.rxrelay.BehaviorRelay
|
import com.jakewharton.rxrelay.BehaviorRelay
|
||||||
@ -25,6 +26,7 @@ import eu.kanade.tachiyomi.util.chapter.syncChaptersWithSource
|
|||||||
import eu.kanade.tachiyomi.util.prepUpdateCover
|
import eu.kanade.tachiyomi.util.prepUpdateCover
|
||||||
import eu.kanade.tachiyomi.util.removeCovers
|
import eu.kanade.tachiyomi.util.removeCovers
|
||||||
import eu.kanade.tachiyomi.util.shouldDownloadNewChapters
|
import eu.kanade.tachiyomi.util.shouldDownloadNewChapters
|
||||||
|
import eu.kanade.tachiyomi.util.updateCoverLastModified
|
||||||
import exh.EH_SOURCE_ID
|
import exh.EH_SOURCE_ID
|
||||||
import exh.EXH_SOURCE_ID
|
import exh.EXH_SOURCE_ID
|
||||||
import exh.MERGED_SOURCE_ID
|
import exh.MERGED_SOURCE_ID
|
||||||
@ -205,7 +207,9 @@ class MangaAllInOnePresenter(
|
|||||||
author: String?,
|
author: String?,
|
||||||
artist: String?,
|
artist: String?,
|
||||||
description: String?,
|
description: String?,
|
||||||
tags: List<String>?
|
tags: List<String>?,
|
||||||
|
uri: Uri?,
|
||||||
|
resetCover: Boolean = false
|
||||||
) {
|
) {
|
||||||
if (manga.source == LocalSource.ID) {
|
if (manga.source == LocalSource.ID) {
|
||||||
manga.title = if (title.isNullOrBlank()) manga.url else title.trim()
|
manga.title = if (title.isNullOrBlank()) manga.url else title.trim()
|
||||||
@ -232,14 +236,37 @@ class MangaAllInOnePresenter(
|
|||||||
)
|
)
|
||||||
customMangaManager.saveMangaInfo(manga)
|
customMangaManager.saveMangaInfo(manga)
|
||||||
}
|
}
|
||||||
/*if (uri != null) {
|
|
||||||
|
if (uri != null) {
|
||||||
editCoverWithStream(uri)
|
editCoverWithStream(uri)
|
||||||
} else if (resetCover) {
|
} else if (resetCover) {
|
||||||
|
controller.setRefreshing(true)
|
||||||
coverCache.deleteCustomCover(manga)
|
coverCache.deleteCustomCover(manga)
|
||||||
controller.setPaletteColor()
|
}
|
||||||
}*/
|
|
||||||
|
if (uri == null && resetCover) {
|
||||||
|
fetchMangaFromSource(manualFetch = true, fetchChapters = false)
|
||||||
|
} else {
|
||||||
updateManga(updateInfo = false)
|
updateManga(updateInfo = false)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun editCoverWithStream(uri: Uri): Boolean {
|
||||||
|
val inputStream =
|
||||||
|
downloadManager.context.contentResolver.openInputStream(uri) ?: return false
|
||||||
|
if (manga.source == LocalSource.ID) {
|
||||||
|
LocalSource.updateCover(downloadManager.context, manga, inputStream)
|
||||||
|
manga.updateCoverLastModified(db)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (manga.favorite) {
|
||||||
|
coverCache.setCustomCoverToCache(manga, inputStream)
|
||||||
|
manga.updateCoverLastModified(db)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch manga information from source.
|
* Fetch manga information from source.
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
@ -15,25 +14,24 @@
|
|||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/manga_cover"
|
android:id="@+id/manga_cover"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="100dp"
|
||||||
android:adjustViewBounds="true"
|
android:adjustViewBounds="true"
|
||||||
android:minWidth="75dp"
|
|
||||||
android:layout_height="150dp"
|
android:layout_height="150dp"
|
||||||
android:contentDescription="@string/description_cover"
|
android:contentDescription="@string/description_cover"
|
||||||
android:background="@drawable/rounded_rectangle"
|
android:background="@drawable/rounded_rectangle"
|
||||||
android:src="@mipmap/ic_launcher"/>
|
android:src="@mipmap/ic_launcher"/>
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
<!--<Button
|
<Button
|
||||||
android:id="@+id/reset_cover"
|
android:id="@+id/reset_cover"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
style="@style/Theme.Widget"
|
style="@style/Theme.Widget.Button.FilledAccent"
|
||||||
android:textAllCaps="false"
|
android:textAllCaps="false"
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:layout_marginEnd="16dp"
|
android:layout_marginEnd="16dp"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="16dp"
|
||||||
android:text="@string/reset_cover" />-->
|
android:text="@string/reset_cover" />
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
style="@style/Theme.Widget.TextInputLayout.OutlinedBox.Dense"
|
style="@style/Theme.Widget.TextInputLayout.OutlinedBox.Dense"
|
||||||
|
@ -126,6 +126,10 @@
|
|||||||
<string name="no_source_categories">No source categories available</string>
|
<string name="no_source_categories">No source categories available</string>
|
||||||
<string name="invalid_category_name">Invalid category name</string>
|
<string name="invalid_category_name">Invalid category name</string>
|
||||||
<string name="add_tag">Add Tag</string>
|
<string name="add_tag">Add Tag</string>
|
||||||
|
<string name="cover_reset_toast">The cover will be updated when you exit manga info edit</string>
|
||||||
|
<string name="select_cover_image">Select cover image</string>
|
||||||
|
<string name="cover_must_be_in_library">Must be in library to edit cover images</string>
|
||||||
|
<string name="failed_to_update_cover">Failed to update cover</string>
|
||||||
|
|
||||||
<!-- AZ -->
|
<!-- AZ -->
|
||||||
<string name="az_recommends">See Recommendations</string>
|
<string name="az_recommends">See Recommendations</string>
|
||||||
@ -136,6 +140,9 @@
|
|||||||
<string name="manhua">Manhua</string>
|
<string name="manhua">Manhua</string>
|
||||||
<string name="comic">Comic</string>
|
<string name="comic">Comic</string>
|
||||||
<string name="webtoon">Webtoon</string>
|
<string name="webtoon">Webtoon</string>
|
||||||
|
|
||||||
|
<!-- SY -->
|
||||||
<string name="reset_tags">Reset Tags</string>
|
<string name="reset_tags">Reset Tags</string>
|
||||||
|
<string name="reset_cover">Reset Cover</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
Loading…
x
Reference in New Issue
Block a user