Changes in cover cache. Store covers in external cache dir

This commit is contained in:
len
2016-04-11 18:49:45 +02:00
parent b84635ffec
commit b8d1a88623
11 changed files with 115 additions and 124 deletions

View File

@@ -12,7 +12,7 @@ import java.util.*
*
* @param fragment the fragment containing this adapter.
*/
class CatalogueAdapter(private val fragment: CatalogueFragment) : FlexibleAdapter<CatalogueHolder, Manga>() {
class CatalogueAdapter(val fragment: CatalogueFragment) : FlexibleAdapter<CatalogueHolder, Manga>() {
/**
* Property to get the list of manga in the adapter.
@@ -83,7 +83,7 @@ class CatalogueAdapter(private val fragment: CatalogueFragment) : FlexibleAdapte
*/
override fun onBindViewHolder(holder: CatalogueHolder, position: Int) {
val manga = getItem(position)
holder.onSetValues(manga, fragment.presenter)
holder.onSetValues(manga)
}
}

View File

@@ -370,7 +370,7 @@ class CatalogueFragment : BaseRxFragment<CataloguePresenter>(), FlexibleViewHold
* @param manga the manga initialized
*/
fun onMangaInitialized(manga: Manga) {
getHolder(manga)?.setImage(manga, presenter)
getHolder(manga)?.setImage(manga)
}
/**

View File

@@ -1,6 +1,9 @@
package eu.kanade.tachiyomi.ui.catalogue
import android.view.View
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.model.GlideUrl
import eu.kanade.tachiyomi.data.database.models.Manga
import kotlinx.android.synthetic.main.item_catalogue_grid.view.*
@@ -13,7 +16,7 @@ import kotlinx.android.synthetic.main.item_catalogue_grid.view.*
* @param listener a listener to react to single tap and long tap events.
* @constructor creates a new catalogue holder.
*/
class CatalogueGridHolder(private val view: View, adapter: CatalogueAdapter, listener: OnListItemClickListener) :
class CatalogueGridHolder(private val view: View, private val adapter: CatalogueAdapter, listener: OnListItemClickListener) :
CatalogueHolder(view, adapter, listener) {
/**
@@ -21,16 +24,15 @@ class CatalogueGridHolder(private val view: View, adapter: CatalogueAdapter, lis
* holder with the given manga.
*
* @param manga the manga to bind.
* @param presenter the catalogue presenter.
*/
override fun onSetValues(manga: Manga, presenter: CataloguePresenter) {
override fun onSetValues(manga: Manga) {
// Set manga title
view.title.text = manga.title
// Set alpha of thumbnail.
view.thumbnail.alpha = if (manga.favorite) 0.3f else 1.0f
setImage(manga, presenter)
setImage(manga)
}
/**
@@ -38,12 +40,18 @@ class CatalogueGridHolder(private val view: View, adapter: CatalogueAdapter, lis
* and the url is now known.
*
* @param manga the manga to bind.
* @param presenter the catalogue presenter.
*/
fun setImage(manga: Manga, presenter: CataloguePresenter) {
fun setImage(manga: Manga) {
if (manga.thumbnail_url != null) {
presenter.coverCache.loadFromNetwork(view.thumbnail, manga.thumbnail_url,
presenter.source.glideHeaders)
val url = manga.thumbnail_url!!
val headers = adapter.fragment.presenter.source.glideHeaders
Glide.with(view.context)
.load(if (headers != null) GlideUrl(url, headers) else url)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.centerCrop()
.into(view.thumbnail)
} else {
view.thumbnail.setImageResource(android.R.color.transparent)
}

View File

@@ -19,7 +19,6 @@ abstract class CatalogueHolder(view: View, adapter: CatalogueAdapter, listener:
* holder with the given manga.
*
* @param manga the manga to bind.
* @param presenter the catalogue presenter.
*/
abstract fun onSetValues(manga: Manga, presenter: CataloguePresenter)
abstract fun onSetValues(manga: Manga)
}

View File

@@ -25,9 +25,8 @@ class CatalogueListHolder(private val view: View, adapter: CatalogueAdapter, lis
* holder with the given manga.
*
* @param manga the manga to bind.
* @param presenter the catalogue presenter.
*/
override fun onSetValues(manga: Manga, presenter: CataloguePresenter) {
override fun onSetValues(manga: Manga) {
view.title.text = manga.title
view.title.setTextColor(if (manga.favorite) favoriteColor else unfavoriteColor)
}

View File

@@ -1,7 +1,6 @@
package eu.kanade.tachiyomi.ui.catalogue
import android.os.Bundle
import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
@@ -33,11 +32,6 @@ class CataloguePresenter : BasePresenter<CatalogueFragment>() {
*/
@Inject lateinit var db: DatabaseHelper
/**
* Cover cache.
*/
@Inject lateinit var coverCache: CoverCache
/**
* Preferences.
*/

View File

@@ -1,6 +1,9 @@
package eu.kanade.tachiyomi.ui.library
import android.view.View
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.signature.StringSignature
import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.source.base.Source
@@ -16,9 +19,11 @@ import kotlinx.android.synthetic.main.item_catalogue_grid.view.*
* @param listener a listener to react to single tap and long tap events.
* @constructor creates a new library holder.
*/
class LibraryHolder(view: View, adapter: LibraryCategoryAdapter, listener: FlexibleViewHolder.OnListItemClickListener) :
class LibraryHolder(private val view: View, adapter: LibraryCategoryAdapter, listener: FlexibleViewHolder.OnListItemClickListener) :
FlexibleViewHolder(view, adapter, listener) {
private var manga: Manga? = null
/**
* Method called from [LibraryCategoryAdapter.onBindViewHolder]. It updates the data for this
* holder with the given manga.
@@ -27,11 +32,13 @@ class LibraryHolder(view: View, adapter: LibraryCategoryAdapter, listener: Flexi
* @param presenter the library presenter.
*/
fun onSetValues(manga: Manga, presenter: LibraryPresenter) {
this.manga = manga
// Update the title of the manga.
itemView.title.text = manga.title
view.title.text = manga.title
// Update the unread count and its visibility.
with(itemView.unreadText) {
with(view.unreadText) {
visibility = if (manga.unread > 0) View.VISIBLE else View.GONE
text = manga.unread.toString()
}
@@ -49,9 +56,18 @@ class LibraryHolder(view: View, adapter: LibraryCategoryAdapter, listener: Flexi
*/
private fun loadCover(manga: Manga, source: Source, coverCache: CoverCache) {
if (manga.thumbnail_url != null) {
coverCache.saveOrLoadFromCache(itemView.thumbnail, manga.thumbnail_url, source.glideHeaders)
coverCache.saveOrLoadFromCache(manga.thumbnail_url, source.glideHeaders) {
if (this.manga == manga) {
Glide.with(view.context)
.load(it)
.diskCacheStrategy(DiskCacheStrategy.RESULT)
.centerCrop()
.signature(StringSignature(it.lastModified().toString()))
.into(itemView.thumbnail)
}
}
} else {
itemView.thumbnail.setImageResource(android.R.color.transparent)
view.thumbnail.setImageResource(android.R.color.transparent)
}
}

View File

@@ -280,7 +280,7 @@ class LibraryPresenter : BasePresenter<LibraryFragment>() {
@Throws(IOException::class)
fun editCoverWithStream(inputStream: InputStream, manga: Manga): Boolean {
if (manga.thumbnail_url != null && manga.favorite) {
coverCache.copyToLocalCache(manga.thumbnail_url, inputStream)
coverCache.copyToCache(manga.thumbnail_url, inputStream)
return true
}
return false

View File

@@ -4,6 +4,10 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.model.GlideUrl
import com.bumptech.glide.signature.StringSignature
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.source.base.Source
@@ -95,26 +99,37 @@ class MangaInfoFragment : BaseRxFragment<MangaInfoPresenter>() {
val headers = presenter.source.glideHeaders
// Check if thumbnail_url is given.
if (manga.thumbnail_url != null) {
// Check if cover is already drawn.
if (manga_cover.drawable == null) {
// If manga is in library then (download / save) (from / to) local cache if available,
// else download from network.
if (manga.favorite) {
coverCache.saveOrLoadFromCache(manga_cover, manga.thumbnail_url, headers)
} else {
coverCache.loadFromNetwork(manga_cover, manga.thumbnail_url, headers)
}
}
// Check if backdrop is already drawn.
if (backdrop.drawable == null) {
// If manga is in library then (download / save) (from / to) local cache if available,
// else download from network.
if (manga.favorite) {
coverCache.saveOrLoadFromCache(backdrop, manga.thumbnail_url, headers)
} else {
coverCache.loadFromNetwork(backdrop, manga.thumbnail_url, headers)
manga.thumbnail_url?.let { url ->
if (manga.favorite) {
coverCache.saveOrLoadFromCache(url, headers) {
if (isResumed) {
Glide.with(context)
.load(it)
.diskCacheStrategy(DiskCacheStrategy.RESULT)
.centerCrop()
.signature(StringSignature(it.lastModified().toString()))
.into(manga_cover)
Glide.with(context)
.load(it)
.diskCacheStrategy(DiskCacheStrategy.RESULT)
.centerCrop()
.signature(StringSignature(it.lastModified().toString()))
.into(backdrop)
}
}
} else {
Glide.with(context)
.load(if (headers != null) GlideUrl(url, headers) else url)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.centerCrop()
.into(manga_cover)
Glide.with(context)
.load(if (headers != null) GlideUrl(url, headers) else url)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.centerCrop()
.into(backdrop)
}
}
}

View File

@@ -130,7 +130,7 @@ class MangaInfoPresenter : BasePresenter<MangaInfoFragment>() {
if (isFavorite) {
coverCache.save(manga.thumbnail_url, source.glideHeaders)
} else {
coverCache.deleteCoverFromCache(manga.thumbnail_url)
coverCache.deleteFromCache(manga.thumbnail_url)
}
}