manga "working" :D
This commit is contained in:
parent
57a584a820
commit
41b90e3a39
32 changed files with 1179 additions and 409 deletions
|
@ -14,15 +14,21 @@ import androidx.lifecycle.lifecycleScope
|
|||
import androidx.recyclerview.widget.RecyclerView
|
||||
import ani.dantotsu.*
|
||||
import ani.dantotsu.media.manga.MangaChapter
|
||||
import ani.dantotsu.parsers.DynamicMangaParser
|
||||
import ani.dantotsu.settings.CurrentReaderSettings
|
||||
import com.alexvasilkov.gestures.views.GestureFrameLayout
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||
import com.bumptech.glide.load.model.GlideUrl
|
||||
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation
|
||||
import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import ani.dantotsu.media.manga.MangaCache
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
|
||||
abstract class BaseImageAdapter(
|
||||
val activity: MangaReaderActivity,
|
||||
|
@ -44,10 +50,33 @@ abstract class BaseImageAdapter(
|
|||
if (settings.layout != CurrentReaderSettings.Layouts.PAGED) {
|
||||
if (settings.padding) {
|
||||
when (settings.direction) {
|
||||
CurrentReaderSettings.Directions.TOP_TO_BOTTOM -> view.setPadding(0, 0, 0, 16f.px)
|
||||
CurrentReaderSettings.Directions.LEFT_TO_RIGHT -> view.setPadding(0, 0, 16f.px, 0)
|
||||
CurrentReaderSettings.Directions.BOTTOM_TO_TOP -> view.setPadding(0, 16f.px, 0, 0)
|
||||
CurrentReaderSettings.Directions.RIGHT_TO_LEFT -> view.setPadding(16f.px, 0, 0, 0)
|
||||
CurrentReaderSettings.Directions.TOP_TO_BOTTOM -> view.setPadding(
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
16f.px
|
||||
)
|
||||
|
||||
CurrentReaderSettings.Directions.LEFT_TO_RIGHT -> view.setPadding(
|
||||
0,
|
||||
0,
|
||||
16f.px,
|
||||
0
|
||||
)
|
||||
|
||||
CurrentReaderSettings.Directions.BOTTOM_TO_TOP -> view.setPadding(
|
||||
0,
|
||||
16f.px,
|
||||
0,
|
||||
0
|
||||
)
|
||||
|
||||
CurrentReaderSettings.Directions.RIGHT_TO_LEFT -> view.setPadding(
|
||||
16f.px,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
)
|
||||
}
|
||||
}
|
||||
view.updateLayoutParams {
|
||||
|
@ -87,7 +116,7 @@ abstract class BaseImageAdapter(
|
|||
abstract suspend fun loadImage(position: Int, parent: View): Boolean
|
||||
|
||||
companion object {
|
||||
suspend fun Context.loadBitmap(link: FileUrl, transforms: List<BitmapTransformation>): Bitmap? {
|
||||
/*suspend fun Context.loadBitmap(link: FileUrl, transforms: List<BitmapTransformation>): Bitmap? {
|
||||
return tryWithSuspend {
|
||||
withContext(Dispatchers.IO) {
|
||||
Glide.with(this@loadBitmap)
|
||||
|
@ -113,6 +142,43 @@ abstract class BaseImageAdapter(
|
|||
.get()
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
suspend fun Context.loadBitmap(link: FileUrl, transforms: List<BitmapTransformation>): Bitmap? {
|
||||
return tryWithSuspend {
|
||||
val mangaCache = uy.kohesive.injekt.Injekt.get<MangaCache>()
|
||||
withContext(Dispatchers.IO) {
|
||||
Glide.with(this@loadBitmap)
|
||||
.asBitmap()
|
||||
.let {
|
||||
if (link.url.startsWith("file://")) {
|
||||
it.load(link.url)
|
||||
.skipMemoryCache(true)
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
} else {
|
||||
println("bitmap from cache")
|
||||
println(link.url)
|
||||
println(mangaCache.get(link.url))
|
||||
println("cache size: ${mangaCache.size()}")
|
||||
mangaCache.get(link.url)?.let { imageData ->
|
||||
val bitmap = imageData.fetchAndProcessImage(imageData.page, imageData.source)
|
||||
it.load(bitmap)
|
||||
.skipMemoryCache(true)
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
}
|
||||
}
|
||||
}
|
||||
?.let {
|
||||
if (transforms.isNotEmpty()) {
|
||||
it.transform(*transforms.toTypedArray())
|
||||
} else {
|
||||
it
|
||||
}
|
||||
}
|
||||
?.submit()
|
||||
?.get()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun mergeBitmap(bitmap1: Bitmap, bitmap2: Bitmap, scale: Boolean = false): Bitmap {
|
||||
|
@ -133,4 +199,8 @@ abstract class BaseImageAdapter(
|
|||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
interface ImageFetcher {
|
||||
suspend fun fetchImage(page: Page): Bitmap?
|
||||
}
|
|
@ -30,6 +30,7 @@ import ani.dantotsu.connections.updateProgress
|
|||
import ani.dantotsu.databinding.ActivityMangaReaderBinding
|
||||
import ani.dantotsu.media.Media
|
||||
import ani.dantotsu.media.MediaDetailsViewModel
|
||||
import ani.dantotsu.media.manga.MangaCache
|
||||
import ani.dantotsu.media.manga.MangaChapter
|
||||
import ani.dantotsu.others.ImageViewDialog
|
||||
import ani.dantotsu.others.getSerialized
|
||||
|
@ -47,12 +48,16 @@ import com.bumptech.glide.load.resource.bitmap.BitmapTransformation
|
|||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import java.util.*
|
||||
import kotlin.math.min
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
class MangaReaderActivity : AppCompatActivity() {
|
||||
private val mangaCache = Injekt.get<MangaCache>()
|
||||
|
||||
private lateinit var binding: ActivityMangaReaderBinding
|
||||
private val model: MediaDetailsViewModel by viewModels()
|
||||
private val scope = lifecycleScope
|
||||
|
@ -106,6 +111,7 @@ class MangaReaderActivity : AppCompatActivity() {
|
|||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
mangaCache.clear()
|
||||
rpc?.close()
|
||||
super.onDestroy()
|
||||
}
|
||||
|
@ -174,7 +180,7 @@ class MangaReaderActivity : AppCompatActivity() {
|
|||
|
||||
model.mangaReadSources = if (media.isAdult) HMangaSources else MangaSources
|
||||
binding.mangaReaderSource.visibility = if (settings.showSource) View.VISIBLE else View.GONE
|
||||
binding.mangaReaderSource.text = model.mangaReadSources!!.names[media.selected!!.source]
|
||||
binding.mangaReaderSource.text = model.mangaReadSources!!.names[media.selected!!.sourceIndex]
|
||||
|
||||
binding.mangaReaderTitle.text = media.userPreferredName
|
||||
|
||||
|
@ -205,6 +211,7 @@ class MangaReaderActivity : AppCompatActivity() {
|
|||
|
||||
//Chapter Change
|
||||
fun change(index: Int) {
|
||||
mangaCache.clear()
|
||||
saveData("${media.id}_${chaptersArr[currentChapterIndex]}", currentChapterPage, this)
|
||||
ChapterLoaderDialog.newInstance(chapters[chaptersArr[index]]!!).show(supportFragmentManager, "dialog")
|
||||
}
|
||||
|
@ -258,7 +265,7 @@ class MangaReaderActivity : AppCompatActivity() {
|
|||
type = RPC.Type.WATCHING
|
||||
activityName = media.userPreferredName
|
||||
details = chap.title?.takeIf { it.isNotEmpty() } ?: getString(R.string.chapter_num, chap.number)
|
||||
state = "Chapter : ${chap.number}/${media.manga?.totalChapters ?: "??"}"
|
||||
state = "${chap.number}/${media.manga?.totalChapters ?: "??"}"
|
||||
media.cover?.let { cover ->
|
||||
largeImage = RPC.Link(media.userPreferredName, cover)
|
||||
}
|
||||
|
@ -691,7 +698,7 @@ class MangaReaderActivity : AppCompatActivity() {
|
|||
}
|
||||
|
||||
fun getTransformation(mangaImage: MangaImage): BitmapTransformation? {
|
||||
return model.loadTransformation(mangaImage, media.selected!!.source)
|
||||
return model.loadTransformation(mangaImage, media.selected!!.sourceIndex)
|
||||
}
|
||||
|
||||
fun onImageLongClicked(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue