Fix override applying
This commit is contained in:
@@ -11,7 +11,6 @@ import android.view.ViewGroup
|
|||||||
import android.view.ViewTreeObserver
|
import android.view.ViewTreeObserver
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.appcompat.widget.TooltipCompat
|
|
||||||
import androidx.core.text.buildSpannedString
|
import androidx.core.text.buildSpannedString
|
||||||
import androidx.core.text.inSpans
|
import androidx.core.text.inSpans
|
||||||
import androidx.core.text.method.LinkMovementMethodCompat
|
import androidx.core.text.method.LinkMovementMethodCompat
|
||||||
@@ -261,7 +260,7 @@ class DetailsActivity :
|
|||||||
R.id.button_scrobbling_more -> {
|
R.id.button_scrobbling_more -> {
|
||||||
router.showScrobblingSelectorSheet(
|
router.showScrobblingSelectorSheet(
|
||||||
manga = viewModel.getMangaOrNull() ?: return,
|
manga = viewModel.getMangaOrNull() ?: return,
|
||||||
scrobblerService = viewModel.scrobblingInfo.value.firstOrNull()?.scrobbler
|
scrobblerService = viewModel.scrobblingInfo.value.firstOrNull()?.scrobbler,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -390,7 +389,7 @@ class DetailsActivity :
|
|||||||
mangaGridItemAD(
|
mangaGridItemAD(
|
||||||
sizeResolver = StaticItemSizeResolver(resources.getDimensionPixelSize(R.dimen.smaller_grid_width)),
|
sizeResolver = StaticItemSizeResolver(resources.getDimensionPixelSize(R.dimen.smaller_grid_width)),
|
||||||
) { item, view ->
|
) { item, view ->
|
||||||
router.openDetails(item)
|
router.openDetails(item.toMangaWithOverride())
|
||||||
},
|
},
|
||||||
).also { rv.adapter = it }
|
).also { rv.adapter = it }
|
||||||
adapter.items = related
|
adapter.items = related
|
||||||
|
|||||||
@@ -198,11 +198,9 @@ class ExploreViewModel @Inject constructor(
|
|||||||
|
|
||||||
private fun List<Manga>.toRecommendationList() = map { manga ->
|
private fun List<Manga>.toRecommendationList() = map { manga ->
|
||||||
MangaCompactListModel(
|
MangaCompactListModel(
|
||||||
id = manga.id,
|
|
||||||
title = manga.title,
|
|
||||||
subtitle = manga.tags.joinToString { it.title },
|
|
||||||
coverUrl = manga.coverUrl,
|
|
||||||
manga = manga,
|
manga = manga,
|
||||||
|
override = null,
|
||||||
|
subtitle = manga.tags.joinToString { it.title },
|
||||||
counter = 0,
|
counter = 0,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,8 +23,9 @@ import org.koitharu.kotatsu.list.ui.model.MangaListModel
|
|||||||
import org.koitharu.kotatsu.local.data.index.LocalMangaIndex
|
import org.koitharu.kotatsu.local.data.index.LocalMangaIndex
|
||||||
import org.koitharu.kotatsu.parsers.model.Manga
|
import org.koitharu.kotatsu.parsers.model.Manga
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaTag
|
import org.koitharu.kotatsu.parsers.model.MangaTag
|
||||||
import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty
|
|
||||||
import org.koitharu.kotatsu.tracker.domain.TrackingRepository
|
import org.koitharu.kotatsu.tracker.domain.TrackingRepository
|
||||||
|
import org.koitharu.kotatsu.tracker.domain.model.TrackingLogItem
|
||||||
|
import org.koitharu.kotatsu.tracker.ui.feed.model.FeedItem
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@Reusable
|
@Reusable
|
||||||
@@ -77,6 +78,14 @@ class MangaListMapper @Inject constructor(
|
|||||||
override = dataRepository.getOverride(manga.id),
|
override = dataRepository.getOverride(manga.id),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
suspend fun toFeedItem(logItem: TrackingLogItem) = FeedItem(
|
||||||
|
id = logItem.id,
|
||||||
|
override = dataRepository.getOverride(logItem.manga.id),
|
||||||
|
count = logItem.chapters.size,
|
||||||
|
manga = logItem.manga,
|
||||||
|
isNew = logItem.isNew,
|
||||||
|
)
|
||||||
|
|
||||||
fun mapTags(tags: Collection<MangaTag>) = tags.map {
|
fun mapTags(tags: Collection<MangaTag>) = tags.map {
|
||||||
ChipsView.ChipModel(
|
ChipsView.ChipModel(
|
||||||
tint = getTagTint(it),
|
tint = getTagTint(it),
|
||||||
@@ -90,11 +99,9 @@ class MangaListMapper @Inject constructor(
|
|||||||
@Options options: Int,
|
@Options options: Int,
|
||||||
override: MangaOverride?,
|
override: MangaOverride?,
|
||||||
) = MangaCompactListModel(
|
) = MangaCompactListModel(
|
||||||
id = manga.id,
|
|
||||||
title = override?.title.ifNullOrEmpty { manga.title },
|
|
||||||
subtitle = manga.tags.joinToString(", ") { it.title },
|
|
||||||
coverUrl = override?.coverUrl.ifNullOrEmpty { manga.coverUrl },
|
|
||||||
manga = manga,
|
manga = manga,
|
||||||
|
override = override,
|
||||||
|
subtitle = manga.tags.joinToString(", ") { it.title },
|
||||||
counter = getCounter(manga.id, options),
|
counter = getCounter(manga.id, options),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -103,11 +110,9 @@ class MangaListMapper @Inject constructor(
|
|||||||
@Options options: Int,
|
@Options options: Int,
|
||||||
override: MangaOverride?,
|
override: MangaOverride?,
|
||||||
) = MangaDetailedListModel(
|
) = MangaDetailedListModel(
|
||||||
id = manga.id,
|
|
||||||
title = override?.title.ifNullOrEmpty { manga.title },
|
|
||||||
subtitle = manga.altTitles.firstOrNull(),
|
subtitle = manga.altTitles.firstOrNull(),
|
||||||
coverUrl = override?.coverUrl.ifNullOrEmpty { manga.coverUrl },
|
|
||||||
manga = manga,
|
manga = manga,
|
||||||
|
override = override,
|
||||||
counter = getCounter(manga.id, options),
|
counter = getCounter(manga.id, options),
|
||||||
progress = getProgress(manga.id, options),
|
progress = getProgress(manga.id, options),
|
||||||
isFavorite = isFavorite(manga.id, options),
|
isFavorite = isFavorite(manga.id, options),
|
||||||
@@ -120,10 +125,8 @@ class MangaListMapper @Inject constructor(
|
|||||||
@Options options: Int,
|
@Options options: Int,
|
||||||
override: MangaOverride?
|
override: MangaOverride?
|
||||||
) = MangaGridModel(
|
) = MangaGridModel(
|
||||||
id = manga.id,
|
|
||||||
title = override?.title.ifNullOrEmpty { manga.title },
|
|
||||||
coverUrl = override?.coverUrl.ifNullOrEmpty { manga.coverUrl },
|
|
||||||
manga = manga,
|
manga = manga,
|
||||||
|
override = override,
|
||||||
counter = getCounter(manga.id, options),
|
counter = getCounter(manga.id, options),
|
||||||
progress = getProgress(manga.id, options),
|
progress = getProgress(manga.id, options),
|
||||||
isFavorite = isFavorite(manga.id, options),
|
isFavorite = isFavorite(manga.id, options),
|
||||||
|
|||||||
@@ -153,19 +153,20 @@ abstract class MangaListFragment :
|
|||||||
super.onDestroyView()
|
super.onDestroyView()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemClick(item: Manga, view: View) {
|
override fun onItemClick(item: MangaListModel, view: View) {
|
||||||
if (selectionController?.onItemClick(item.id) != true) {
|
if (selectionController?.onItemClick(item.id) != true) {
|
||||||
if ((activity as? MangaListActivity)?.showPreview(item) != true) {
|
val manga = item.toMangaWithOverride()
|
||||||
router.openDetails(item)
|
if ((activity as? MangaListActivity)?.showPreview(manga) != true) {
|
||||||
|
router.openDetails(manga)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemLongClick(item: Manga, view: View): Boolean {
|
override fun onItemLongClick(item: MangaListModel, view: View): Boolean {
|
||||||
return selectionController?.onItemLongClick(view, item.id) == true
|
return selectionController?.onItemLongClick(view, item.id) == true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemContextClick(item: Manga, view: View): Boolean {
|
override fun onItemContextClick(item: MangaListModel, view: View): Boolean {
|
||||||
return selectionController?.onItemContextClick(view, item.id) == true
|
return selectionController?.onItemContextClick(view, item.id) == true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,11 @@ package org.koitharu.kotatsu.list.ui.adapter
|
|||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import org.koitharu.kotatsu.core.ui.list.OnListItemClickListener
|
import org.koitharu.kotatsu.core.ui.list.OnListItemClickListener
|
||||||
|
import org.koitharu.kotatsu.list.ui.model.MangaListModel
|
||||||
import org.koitharu.kotatsu.parsers.model.Manga
|
import org.koitharu.kotatsu.parsers.model.Manga
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaTag
|
import org.koitharu.kotatsu.parsers.model.MangaTag
|
||||||
|
|
||||||
interface MangaDetailsClickListener : OnListItemClickListener<Manga> {
|
interface MangaDetailsClickListener : OnListItemClickListener<MangaListModel> {
|
||||||
|
|
||||||
fun onReadClick(manga: Manga, view: View)
|
fun onReadClick(manga: Manga, view: View)
|
||||||
|
|
||||||
|
|||||||
@@ -10,17 +10,17 @@ import org.koitharu.kotatsu.databinding.ItemMangaGridBinding
|
|||||||
import org.koitharu.kotatsu.list.ui.ListModelDiffCallback.Companion.PAYLOAD_PROGRESS_CHANGED
|
import org.koitharu.kotatsu.list.ui.ListModelDiffCallback.Companion.PAYLOAD_PROGRESS_CHANGED
|
||||||
import org.koitharu.kotatsu.list.ui.model.ListModel
|
import org.koitharu.kotatsu.list.ui.model.ListModel
|
||||||
import org.koitharu.kotatsu.list.ui.model.MangaGridModel
|
import org.koitharu.kotatsu.list.ui.model.MangaGridModel
|
||||||
|
import org.koitharu.kotatsu.list.ui.model.MangaListModel
|
||||||
import org.koitharu.kotatsu.list.ui.size.ItemSizeResolver
|
import org.koitharu.kotatsu.list.ui.size.ItemSizeResolver
|
||||||
import org.koitharu.kotatsu.parsers.model.Manga
|
|
||||||
|
|
||||||
fun mangaGridItemAD(
|
fun mangaGridItemAD(
|
||||||
sizeResolver: ItemSizeResolver,
|
sizeResolver: ItemSizeResolver,
|
||||||
clickListener: OnListItemClickListener<Manga>,
|
clickListener: OnListItemClickListener<MangaListModel>,
|
||||||
) = adapterDelegateViewBinding<MangaGridModel, ListModel, ItemMangaGridBinding>(
|
) = adapterDelegateViewBinding<MangaGridModel, ListModel, ItemMangaGridBinding>(
|
||||||
{ inflater, parent -> ItemMangaGridBinding.inflate(inflater, parent, false) },
|
{ inflater, parent -> ItemMangaGridBinding.inflate(inflater, parent, false) },
|
||||||
) {
|
) {
|
||||||
|
|
||||||
AdapterDelegateClickListenerAdapter(this, clickListener, MangaGridModel::manga).attach(itemView)
|
AdapterDelegateClickListenerAdapter(this, clickListener).attach(itemView)
|
||||||
sizeResolver.attachToView(itemView, binding.textViewTitle, binding.progressView)
|
sizeResolver.attachToView(itemView, binding.textViewTitle, binding.progressView)
|
||||||
|
|
||||||
bind { payloads ->
|
bind { payloads ->
|
||||||
|
|||||||
@@ -16,7 +16,8 @@ fun mangaListDetailedItemAD(
|
|||||||
{ inflater, parent -> ItemMangaListDetailsBinding.inflate(inflater, parent, false) },
|
{ inflater, parent -> ItemMangaListDetailsBinding.inflate(inflater, parent, false) },
|
||||||
) {
|
) {
|
||||||
|
|
||||||
AdapterDelegateClickListenerAdapter(this, clickListener, MangaDetailedListModel::manga).attach(itemView)
|
AdapterDelegateClickListenerAdapter(this, clickListener)
|
||||||
|
.attach(itemView)
|
||||||
|
|
||||||
bind { payloads ->
|
bind { payloads ->
|
||||||
binding.textViewTitle.text = item.title
|
binding.textViewTitle.text = item.title
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package org.koitharu.kotatsu.list.ui.adapter
|
package org.koitharu.kotatsu.list.ui.adapter
|
||||||
|
|
||||||
import androidx.appcompat.widget.TooltipCompat
|
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateViewBinding
|
import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateViewBinding
|
||||||
import org.koitharu.kotatsu.core.ui.list.AdapterDelegateClickListenerAdapter
|
import org.koitharu.kotatsu.core.ui.list.AdapterDelegateClickListenerAdapter
|
||||||
@@ -10,15 +9,15 @@ import org.koitharu.kotatsu.core.util.ext.textAndVisible
|
|||||||
import org.koitharu.kotatsu.databinding.ItemMangaListBinding
|
import org.koitharu.kotatsu.databinding.ItemMangaListBinding
|
||||||
import org.koitharu.kotatsu.list.ui.model.ListModel
|
import org.koitharu.kotatsu.list.ui.model.ListModel
|
||||||
import org.koitharu.kotatsu.list.ui.model.MangaCompactListModel
|
import org.koitharu.kotatsu.list.ui.model.MangaCompactListModel
|
||||||
import org.koitharu.kotatsu.parsers.model.Manga
|
import org.koitharu.kotatsu.list.ui.model.MangaListModel
|
||||||
|
|
||||||
fun mangaListItemAD(
|
fun mangaListItemAD(
|
||||||
clickListener: OnListItemClickListener<Manga>,
|
clickListener: OnListItemClickListener<MangaListModel>,
|
||||||
) = adapterDelegateViewBinding<MangaCompactListModel, ListModel, ItemMangaListBinding>(
|
) = adapterDelegateViewBinding<MangaCompactListModel, ListModel, ItemMangaListBinding>(
|
||||||
{ inflater, parent -> ItemMangaListBinding.inflate(inflater, parent, false) },
|
{ inflater, parent -> ItemMangaListBinding.inflate(inflater, parent, false) },
|
||||||
) {
|
) {
|
||||||
|
|
||||||
AdapterDelegateClickListenerAdapter(this, clickListener, MangaCompactListModel::manga).attach(itemView)
|
AdapterDelegateClickListenerAdapter(this, clickListener).attach(itemView)
|
||||||
|
|
||||||
bind {
|
bind {
|
||||||
itemView.setTooltipCompat(item.getSummary(context))
|
itemView.setTooltipCompat(item.getSummary(context))
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
package org.koitharu.kotatsu.list.ui.model
|
package org.koitharu.kotatsu.list.ui.model
|
||||||
|
|
||||||
|
import org.koitharu.kotatsu.core.ui.model.MangaOverride
|
||||||
import org.koitharu.kotatsu.parsers.model.Manga
|
import org.koitharu.kotatsu.parsers.model.Manga
|
||||||
|
|
||||||
data class MangaCompactListModel(
|
data class MangaCompactListModel(
|
||||||
override val id: Long,
|
|
||||||
override val title: String,
|
|
||||||
val subtitle: String,
|
|
||||||
override val coverUrl: String?,
|
|
||||||
override val manga: Manga,
|
override val manga: Manga,
|
||||||
|
override val override: MangaOverride?,
|
||||||
|
val subtitle: String,
|
||||||
override val counter: Int,
|
override val counter: Int,
|
||||||
) : MangaListModel()
|
) : MangaListModel()
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.koitharu.kotatsu.list.ui.model
|
package org.koitharu.kotatsu.list.ui.model
|
||||||
|
|
||||||
|
import org.koitharu.kotatsu.core.ui.model.MangaOverride
|
||||||
import org.koitharu.kotatsu.core.ui.widgets.ChipsView
|
import org.koitharu.kotatsu.core.ui.widgets.ChipsView
|
||||||
import org.koitharu.kotatsu.list.domain.ReadingProgress
|
import org.koitharu.kotatsu.list.domain.ReadingProgress
|
||||||
import org.koitharu.kotatsu.list.ui.ListModelDiffCallback.Companion.PAYLOAD_ANYTHING_CHANGED
|
import org.koitharu.kotatsu.list.ui.ListModelDiffCallback.Companion.PAYLOAD_ANYTHING_CHANGED
|
||||||
@@ -7,11 +8,9 @@ import org.koitharu.kotatsu.list.ui.ListModelDiffCallback.Companion.PAYLOAD_PROG
|
|||||||
import org.koitharu.kotatsu.parsers.model.Manga
|
import org.koitharu.kotatsu.parsers.model.Manga
|
||||||
|
|
||||||
data class MangaDetailedListModel(
|
data class MangaDetailedListModel(
|
||||||
override val id: Long,
|
|
||||||
override val title: String,
|
|
||||||
val subtitle: String?,
|
|
||||||
override val coverUrl: String?,
|
|
||||||
override val manga: Manga,
|
override val manga: Manga,
|
||||||
|
override val override: MangaOverride?,
|
||||||
|
val subtitle: String?,
|
||||||
override val counter: Int,
|
override val counter: Int,
|
||||||
val progress: ReadingProgress?,
|
val progress: ReadingProgress?,
|
||||||
val isFavorite: Boolean,
|
val isFavorite: Boolean,
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
package org.koitharu.kotatsu.list.ui.model
|
package org.koitharu.kotatsu.list.ui.model
|
||||||
|
|
||||||
|
import org.koitharu.kotatsu.core.ui.model.MangaOverride
|
||||||
import org.koitharu.kotatsu.list.domain.ReadingProgress
|
import org.koitharu.kotatsu.list.domain.ReadingProgress
|
||||||
import org.koitharu.kotatsu.list.ui.ListModelDiffCallback.Companion.PAYLOAD_ANYTHING_CHANGED
|
import org.koitharu.kotatsu.list.ui.ListModelDiffCallback.Companion.PAYLOAD_ANYTHING_CHANGED
|
||||||
import org.koitharu.kotatsu.list.ui.ListModelDiffCallback.Companion.PAYLOAD_PROGRESS_CHANGED
|
import org.koitharu.kotatsu.list.ui.ListModelDiffCallback.Companion.PAYLOAD_PROGRESS_CHANGED
|
||||||
import org.koitharu.kotatsu.parsers.model.Manga
|
import org.koitharu.kotatsu.parsers.model.Manga
|
||||||
|
|
||||||
data class MangaGridModel(
|
data class MangaGridModel(
|
||||||
override val id: Long,
|
|
||||||
override val title: String,
|
|
||||||
override val coverUrl: String?,
|
|
||||||
override val manga: Manga,
|
override val manga: Manga,
|
||||||
|
override val override: MangaOverride?,
|
||||||
override val counter: Int,
|
override val counter: Int,
|
||||||
val progress: ReadingProgress?,
|
val progress: ReadingProgress?,
|
||||||
val isFavorite: Boolean,
|
val isFavorite: Boolean,
|
||||||
|
|||||||
@@ -4,21 +4,33 @@ import android.content.Context
|
|||||||
import androidx.core.text.bold
|
import androidx.core.text.bold
|
||||||
import androidx.core.text.buildSpannedString
|
import androidx.core.text.buildSpannedString
|
||||||
import org.koitharu.kotatsu.core.model.getTitle
|
import org.koitharu.kotatsu.core.model.getTitle
|
||||||
|
import org.koitharu.kotatsu.core.model.withOverride
|
||||||
|
import org.koitharu.kotatsu.core.ui.model.MangaOverride
|
||||||
import org.koitharu.kotatsu.list.ui.ListModelDiffCallback.Companion.PAYLOAD_ANYTHING_CHANGED
|
import org.koitharu.kotatsu.list.ui.ListModelDiffCallback.Companion.PAYLOAD_ANYTHING_CHANGED
|
||||||
import org.koitharu.kotatsu.parsers.model.Manga
|
import org.koitharu.kotatsu.parsers.model.Manga
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||||
|
import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty
|
||||||
|
|
||||||
sealed class MangaListModel : ListModel {
|
sealed class MangaListModel : ListModel {
|
||||||
|
|
||||||
abstract val id: Long
|
abstract val override: MangaOverride?
|
||||||
abstract val manga: Manga
|
abstract val manga: Manga
|
||||||
abstract val title: String
|
|
||||||
abstract val coverUrl: String?
|
|
||||||
abstract val counter: Int
|
abstract val counter: Int
|
||||||
|
|
||||||
|
val id: Long
|
||||||
|
get() = manga.id
|
||||||
|
|
||||||
|
val title: String
|
||||||
|
get() = override?.title.ifNullOrEmpty { manga.title }
|
||||||
|
|
||||||
|
val coverUrl: String?
|
||||||
|
get() = override?.coverUrl.ifNullOrEmpty { manga.coverUrl }
|
||||||
|
|
||||||
val source: MangaSource
|
val source: MangaSource
|
||||||
get() = manga.source
|
get() = manga.source
|
||||||
|
|
||||||
|
fun toMangaWithOverride() = manga.withOverride(override)
|
||||||
|
|
||||||
open fun getSummary(context: Context): CharSequence = buildSpannedString {
|
open fun getSummary(context: Context): CharSequence = buildSpannedString {
|
||||||
bold {
|
bold {
|
||||||
append(manga.title)
|
append(manga.title)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import androidx.fragment.app.viewModels
|
|||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.list.ui.MangaListFragment
|
import org.koitharu.kotatsu.list.ui.MangaListFragment
|
||||||
import org.koitharu.kotatsu.parsers.model.Manga
|
import org.koitharu.kotatsu.list.ui.model.MangaListModel
|
||||||
import org.koitharu.kotatsu.picker.ui.PageImagePickActivity
|
import org.koitharu.kotatsu.picker.ui.PageImagePickActivity
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
@@ -17,8 +17,8 @@ class MangaPickerFragment : MangaListFragment() {
|
|||||||
|
|
||||||
override fun onScrolledToEnd() = Unit
|
override fun onScrolledToEnd() = Unit
|
||||||
|
|
||||||
override fun onItemClick(item: Manga, view: View) {
|
override fun onItemClick(item: MangaListModel, view: View) {
|
||||||
(activity as PageImagePickActivity).onMangaPicked(item)
|
(activity as PageImagePickActivity).onMangaPicked(item.manga)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
@@ -26,7 +26,7 @@ class MangaPickerFragment : MangaListFragment() {
|
|||||||
activity?.setTitle(R.string.pick_manga_page)
|
activity?.setTitle(R.string.pick_manga_page)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemLongClick(item: Manga, view: View): Boolean = false
|
override fun onItemLongClick(item: MangaListModel, view: View): Boolean = false
|
||||||
|
|
||||||
override fun onItemContextClick(item: Manga, view: View): Boolean = false
|
override fun onItemContextClick(item: MangaListModel, view: View): Boolean = false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import org.koitharu.kotatsu.list.ui.MangaSelectionDecoration
|
|||||||
import org.koitharu.kotatsu.list.ui.adapter.MangaListListener
|
import org.koitharu.kotatsu.list.ui.adapter.MangaListListener
|
||||||
import org.koitharu.kotatsu.list.ui.adapter.TypedListSpacingDecoration
|
import org.koitharu.kotatsu.list.ui.adapter.TypedListSpacingDecoration
|
||||||
import org.koitharu.kotatsu.list.ui.model.ListHeader
|
import org.koitharu.kotatsu.list.ui.model.ListHeader
|
||||||
|
import org.koitharu.kotatsu.list.ui.model.MangaListModel
|
||||||
import org.koitharu.kotatsu.list.ui.size.DynamicItemSizeResolver
|
import org.koitharu.kotatsu.list.ui.size.DynamicItemSizeResolver
|
||||||
import org.koitharu.kotatsu.parsers.model.Manga
|
import org.koitharu.kotatsu.parsers.model.Manga
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaTag
|
import org.koitharu.kotatsu.parsers.model.MangaTag
|
||||||
@@ -115,17 +116,17 @@ class SearchActivity :
|
|||||||
return insets.consumeAllSystemBarsInsets()
|
return insets.consumeAllSystemBarsInsets()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemClick(item: Manga, view: View) {
|
override fun onItemClick(item: MangaListModel, view: View) {
|
||||||
if (!selectionController.onItemClick(item.id)) {
|
if (!selectionController.onItemClick(item.id)) {
|
||||||
router.openDetails(item)
|
router.openDetails(item.toMangaWithOverride())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemLongClick(item: Manga, view: View): Boolean {
|
override fun onItemLongClick(item: MangaListModel, view: View): Boolean {
|
||||||
return selectionController.onItemLongClick(view, item.id)
|
return selectionController.onItemLongClick(view, item.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemContextClick(item: Manga, view: View): Boolean {
|
override fun onItemContextClick(item: MangaListModel, view: View): Boolean {
|
||||||
return selectionController.onItemContextClick(view, item.id)
|
return selectionController.onItemContextClick(view, item.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ import org.koitharu.kotatsu.databinding.ItemListGroupBinding
|
|||||||
import org.koitharu.kotatsu.list.ui.MangaSelectionDecoration
|
import org.koitharu.kotatsu.list.ui.MangaSelectionDecoration
|
||||||
import org.koitharu.kotatsu.list.ui.adapter.mangaGridItemAD
|
import org.koitharu.kotatsu.list.ui.adapter.mangaGridItemAD
|
||||||
import org.koitharu.kotatsu.list.ui.model.ListModel
|
import org.koitharu.kotatsu.list.ui.model.ListModel
|
||||||
|
import org.koitharu.kotatsu.list.ui.model.MangaListModel
|
||||||
import org.koitharu.kotatsu.list.ui.size.ItemSizeResolver
|
import org.koitharu.kotatsu.list.ui.size.ItemSizeResolver
|
||||||
import org.koitharu.kotatsu.parsers.model.Manga
|
|
||||||
import org.koitharu.kotatsu.search.ui.multi.SearchResultsListModel
|
import org.koitharu.kotatsu.search.ui.multi.SearchResultsListModel
|
||||||
|
|
||||||
@SuppressLint("NotifyDataSetChanged")
|
@SuppressLint("NotifyDataSetChanged")
|
||||||
@@ -26,7 +26,7 @@ fun searchResultsAD(
|
|||||||
sharedPool: RecycledViewPool,
|
sharedPool: RecycledViewPool,
|
||||||
sizeResolver: ItemSizeResolver,
|
sizeResolver: ItemSizeResolver,
|
||||||
selectionDecoration: MangaSelectionDecoration,
|
selectionDecoration: MangaSelectionDecoration,
|
||||||
listener: OnListItemClickListener<Manga>,
|
listener: OnListItemClickListener<MangaListModel>,
|
||||||
itemClickListener: OnListItemClickListener<SearchResultsListModel>,
|
itemClickListener: OnListItemClickListener<SearchResultsListModel>,
|
||||||
) = adapterDelegateViewBinding<SearchResultsListModel, ListModel, ItemListGroupBinding>(
|
) = adapterDelegateViewBinding<SearchResultsListModel, ListModel, ItemListGroupBinding>(
|
||||||
{ layoutInflater, parent -> ItemListGroupBinding.inflate(layoutInflater, parent, false) },
|
{ layoutInflater, parent -> ItemListGroupBinding.inflate(layoutInflater, parent, false) },
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import org.koitharu.kotatsu.list.domain.ListFilterOption
|
|||||||
import org.koitharu.kotatsu.list.ui.adapter.MangaListListener
|
import org.koitharu.kotatsu.list.ui.adapter.MangaListListener
|
||||||
import org.koitharu.kotatsu.list.ui.adapter.TypedListSpacingDecoration
|
import org.koitharu.kotatsu.list.ui.adapter.TypedListSpacingDecoration
|
||||||
import org.koitharu.kotatsu.list.ui.model.ListHeader
|
import org.koitharu.kotatsu.list.ui.model.ListHeader
|
||||||
|
import org.koitharu.kotatsu.list.ui.model.MangaListModel
|
||||||
import org.koitharu.kotatsu.list.ui.size.StaticItemSizeResolver
|
import org.koitharu.kotatsu.list.ui.size.StaticItemSizeResolver
|
||||||
import org.koitharu.kotatsu.parsers.model.Manga
|
import org.koitharu.kotatsu.parsers.model.Manga
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaTag
|
import org.koitharu.kotatsu.parsers.model.MangaTag
|
||||||
@@ -63,7 +64,7 @@ class FeedFragment :
|
|||||||
val sizeResolver = StaticItemSizeResolver(resources.getDimensionPixelSize(R.dimen.smaller_grid_width))
|
val sizeResolver = StaticItemSizeResolver(resources.getDimensionPixelSize(R.dimen.smaller_grid_width))
|
||||||
val feedAdapter = FeedAdapter(this, sizeResolver) { item, v ->
|
val feedAdapter = FeedAdapter(this, sizeResolver) { item, v ->
|
||||||
viewModel.onItemClick(item)
|
viewModel.onItemClick(item)
|
||||||
onItemClick(item.manga, v)
|
router.openDetails(item.toMangaWithOverride())
|
||||||
}
|
}
|
||||||
with(binding.recyclerView) {
|
with(binding.recyclerView) {
|
||||||
val paddingVertical = resources.getDimensionPixelSize(R.dimen.list_spacing_normal)
|
val paddingVertical = resources.getDimensionPixelSize(R.dimen.list_spacing_normal)
|
||||||
@@ -126,8 +127,8 @@ class FeedFragment :
|
|||||||
viewModel.requestMoreItems()
|
viewModel.requestMoreItems()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemClick(item: Manga, view: View) {
|
override fun onItemClick(item: MangaListModel, view: View) {
|
||||||
router.openDetails(item)
|
router.openDetails(item.toMangaWithOverride())
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onReadClick(manga: Manga, view: View) = Unit
|
override fun onReadClick(manga: Manga, view: View) = Unit
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ import org.koitharu.kotatsu.tracker.domain.UpdatesListQuickFilter
|
|||||||
import org.koitharu.kotatsu.tracker.domain.model.TrackingLogItem
|
import org.koitharu.kotatsu.tracker.domain.model.TrackingLogItem
|
||||||
import org.koitharu.kotatsu.tracker.ui.feed.model.FeedItem
|
import org.koitharu.kotatsu.tracker.ui.feed.model.FeedItem
|
||||||
import org.koitharu.kotatsu.tracker.ui.feed.model.UpdatedMangaHeader
|
import org.koitharu.kotatsu.tracker.ui.feed.model.UpdatedMangaHeader
|
||||||
import org.koitharu.kotatsu.tracker.ui.feed.model.toFeedItem
|
|
||||||
import org.koitharu.kotatsu.tracker.work.TrackWorker
|
import org.koitharu.kotatsu.tracker.work.TrackWorker
|
||||||
import java.util.concurrent.atomic.AtomicBoolean
|
import java.util.concurrent.atomic.AtomicBoolean
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@@ -132,7 +131,7 @@ class FeedViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun List<TrackingLogItem>.mapListTo(destination: MutableList<ListModel>) {
|
private suspend fun List<TrackingLogItem>.mapListTo(destination: MutableList<ListModel>) {
|
||||||
var prevDate: DateTimeAgo? = null
|
var prevDate: DateTimeAgo? = null
|
||||||
for (item in this) {
|
for (item in this) {
|
||||||
val date = calculateTimeAgo(item.createdAt)
|
val date = calculateTimeAgo(item.createdAt)
|
||||||
@@ -144,7 +143,7 @@ class FeedViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
prevDate = date
|
prevDate = date
|
||||||
destination += item.toFeedItem()
|
destination += mangaListMapper.toFeedItem(item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,13 +10,13 @@ import org.koitharu.kotatsu.list.ui.adapter.ListItemType
|
|||||||
import org.koitharu.kotatsu.list.ui.adapter.mangaGridItemAD
|
import org.koitharu.kotatsu.list.ui.adapter.mangaGridItemAD
|
||||||
import org.koitharu.kotatsu.list.ui.model.ListHeader
|
import org.koitharu.kotatsu.list.ui.model.ListHeader
|
||||||
import org.koitharu.kotatsu.list.ui.model.ListModel
|
import org.koitharu.kotatsu.list.ui.model.ListModel
|
||||||
|
import org.koitharu.kotatsu.list.ui.model.MangaListModel
|
||||||
import org.koitharu.kotatsu.list.ui.size.ItemSizeResolver
|
import org.koitharu.kotatsu.list.ui.size.ItemSizeResolver
|
||||||
import org.koitharu.kotatsu.parsers.model.Manga
|
|
||||||
import org.koitharu.kotatsu.tracker.ui.feed.model.UpdatedMangaHeader
|
import org.koitharu.kotatsu.tracker.ui.feed.model.UpdatedMangaHeader
|
||||||
|
|
||||||
fun updatedMangaAD(
|
fun updatedMangaAD(
|
||||||
sizeResolver: ItemSizeResolver,
|
sizeResolver: ItemSizeResolver,
|
||||||
listener: OnListItemClickListener<Manga>,
|
listener: OnListItemClickListener<MangaListModel>,
|
||||||
headerClickListener: ListHeaderClickListener,
|
headerClickListener: ListHeaderClickListener,
|
||||||
) = adapterDelegateViewBinding<UpdatedMangaHeader, ListModel, ItemListGroupBinding>(
|
) = adapterDelegateViewBinding<UpdatedMangaHeader, ListModel, ItemListGroupBinding>(
|
||||||
{ layoutInflater, parent -> ItemListGroupBinding.inflate(layoutInflater, parent, false) },
|
{ layoutInflater, parent -> ItemListGroupBinding.inflate(layoutInflater, parent, false) },
|
||||||
|
|||||||
@@ -1,18 +1,28 @@
|
|||||||
package org.koitharu.kotatsu.tracker.ui.feed.model
|
package org.koitharu.kotatsu.tracker.ui.feed.model
|
||||||
|
|
||||||
|
import org.koitharu.kotatsu.core.model.withOverride
|
||||||
|
import org.koitharu.kotatsu.core.ui.model.MangaOverride
|
||||||
import org.koitharu.kotatsu.list.ui.ListModelDiffCallback
|
import org.koitharu.kotatsu.list.ui.ListModelDiffCallback
|
||||||
import org.koitharu.kotatsu.list.ui.model.ListModel
|
import org.koitharu.kotatsu.list.ui.model.ListModel
|
||||||
import org.koitharu.kotatsu.parsers.model.Manga
|
import org.koitharu.kotatsu.parsers.model.Manga
|
||||||
|
import org.koitharu.kotatsu.parsers.util.ifNullOrEmpty
|
||||||
|
|
||||||
data class FeedItem(
|
data class FeedItem(
|
||||||
val id: Long,
|
val id: Long,
|
||||||
val imageUrl: String?,
|
private val override: MangaOverride?,
|
||||||
val title: String,
|
|
||||||
val manga: Manga,
|
val manga: Manga,
|
||||||
val count: Int,
|
val count: Int,
|
||||||
val isNew: Boolean,
|
val isNew: Boolean,
|
||||||
) : ListModel {
|
) : ListModel {
|
||||||
|
|
||||||
|
val imageUrl: String?
|
||||||
|
get() = override?.coverUrl.ifNullOrEmpty { manga.coverUrl }
|
||||||
|
|
||||||
|
val title: String
|
||||||
|
get() = override?.title.ifNullOrEmpty { manga.title }
|
||||||
|
|
||||||
|
fun toMangaWithOverride() = manga.withOverride(override)
|
||||||
|
|
||||||
override fun areItemsTheSame(other: ListModel): Boolean {
|
override fun areItemsTheSame(other: ListModel): Boolean {
|
||||||
return other is FeedItem && other.id == id
|
return other is FeedItem && other.id == id
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
package org.koitharu.kotatsu.tracker.ui.feed.model
|
|
||||||
|
|
||||||
import org.koitharu.kotatsu.tracker.domain.model.TrackingLogItem
|
|
||||||
|
|
||||||
fun TrackingLogItem.toFeedItem() = FeedItem(
|
|
||||||
id = id,
|
|
||||||
imageUrl = manga.coverUrl,
|
|
||||||
title = manga.title,
|
|
||||||
count = chapters.size,
|
|
||||||
manga = manga,
|
|
||||||
isNew = isNew,
|
|
||||||
)
|
|
||||||
Reference in New Issue
Block a user