From ff56f5a343cb7712727ad43376b2da554fb1e65c Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sat, 30 May 2020 10:25:48 +0300 Subject: [PATCH] Fix updates feed --- .../core/db/entity/TrackLogWithManga.kt | 2 +- .../core/parser/site/GroupleRepository.kt | 2 +- .../domain/tracking/TrackingRepository.kt | 30 ++++++++-------- .../koitharu/kotatsu/ui/list/MainActivity.kt | 2 +- .../list/{tracklogs => feed}/FeedAdapter.kt | 2 +- .../list/{tracklogs => feed}/FeedFragment.kt | 11 +++++- .../ui/list/{tracklogs => feed}/FeedHolder.kt | 17 +++++++-- .../list/{tracklogs => feed}/FeedPresenter.kt | 2 +- .../ui/list/{tracklogs => feed}/FeedView.kt | 2 +- .../org/koitharu/kotatsu/utils/ext/DateExt.kt | 7 +++- app/src/main/res/layout/item_tracklog.xml | 35 +++++++++++-------- app/src/main/res/menu/opt_feed.xml | 2 ++ 12 files changed, 74 insertions(+), 40 deletions(-) rename app/src/main/java/org/koitharu/kotatsu/ui/list/{tracklogs => feed}/FeedAdapter.kt (93%) rename app/src/main/java/org/koitharu/kotatsu/ui/list/{tracklogs => feed}/FeedFragment.kt (91%) rename app/src/main/java/org/koitharu/kotatsu/ui/list/{tracklogs => feed}/FeedHolder.kt (66%) rename app/src/main/java/org/koitharu/kotatsu/ui/list/{tracklogs => feed}/FeedPresenter.kt (95%) rename app/src/main/java/org/koitharu/kotatsu/ui/list/{tracklogs => feed}/FeedView.kt (92%) create mode 100644 app/src/main/res/menu/opt_feed.xml diff --git a/app/src/main/java/org/koitharu/kotatsu/core/db/entity/TrackLogWithManga.kt b/app/src/main/java/org/koitharu/kotatsu/core/db/entity/TrackLogWithManga.kt index d783c41d3..8b9849c66 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/db/entity/TrackLogWithManga.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/db/entity/TrackLogWithManga.kt @@ -23,7 +23,7 @@ data class TrackLogWithManga( fun toTrackingLogItem() = TrackingLogItem( id = trackLog.id, - chapters = trackLog.chapters.split('\n'), + chapters = trackLog.chapters.split('\n').filterNot { x -> x.isEmpty() }, manga = manga.toManga(tags.map { x -> x.toMangaTag() }.toSet()), createdAt = Date(trackLog.createdAt) ) diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/GroupleRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/GroupleRepository.kt index ae9f4c7d7..5a0e68eaf 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/GroupleRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/GroupleRepository.kt @@ -113,7 +113,7 @@ abstract class GroupleRepository(loaderContext: MangaLoaderContext) : a.attr("href")?.withDomain(domain) ?: return@mapIndexedNotNull null MangaChapter( id = href.longHashCode(), - name = a.ownText(), + name = a.ownText().removePrefix(manga.title).trim(), number = i + 1, url = href, source = source diff --git a/app/src/main/java/org/koitharu/kotatsu/domain/tracking/TrackingRepository.kt b/app/src/main/java/org/koitharu/kotatsu/domain/tracking/TrackingRepository.kt index eba1084eb..30090d180 100644 --- a/app/src/main/java/org/koitharu/kotatsu/domain/tracking/TrackingRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/domain/tracking/TrackingRepository.kt @@ -51,22 +51,24 @@ class TrackingRepository : KoinComponent { newChapters: List, lastNotifiedChapterId: Long ) { - val entity = TrackEntity( - mangaId = mangaId, - newChapters = newChapters.size, - lastCheck = System.currentTimeMillis(), - lastChapterId = lastChapterId, - totalChapters = knownChaptersCount, - lastNotifiedChapterId = lastNotifiedChapterId - ) - val logEntity = TrackLogEntity( - mangaId = mangaId, - chapters = newChapters.joinToString("\n") { x -> x.name }, - createdAt = System.currentTimeMillis() - ) db.withTransaction { + val entity = TrackEntity( + mangaId = mangaId, + newChapters = newChapters.size, + lastCheck = System.currentTimeMillis(), + lastChapterId = lastChapterId, + totalChapters = knownChaptersCount, + lastNotifiedChapterId = lastNotifiedChapterId + ) db.tracksDao.upsert(entity) - db.trackLogsDao.insert(logEntity) + if (newChapters.isNotEmpty()) { + val logEntity = TrackLogEntity( + mangaId = mangaId, + chapters = newChapters.joinToString("\n") { x -> x.name }, + createdAt = System.currentTimeMillis() + ) + db.trackLogsDao.insert(logEntity) + } } } diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/list/MainActivity.kt b/app/src/main/java/org/koitharu/kotatsu/ui/list/MainActivity.kt index 1c1c62590..efed16cc6 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/list/MainActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/list/MainActivity.kt @@ -29,7 +29,7 @@ import org.koitharu.kotatsu.ui.list.favourites.FavouritesContainerFragment import org.koitharu.kotatsu.ui.list.history.HistoryListFragment import org.koitharu.kotatsu.ui.list.local.LocalListFragment import org.koitharu.kotatsu.ui.list.remote.RemoteListFragment -import org.koitharu.kotatsu.ui.list.tracklogs.FeedFragment +import org.koitharu.kotatsu.ui.list.feed.FeedFragment import org.koitharu.kotatsu.ui.reader.ReaderActivity import org.koitharu.kotatsu.ui.reader.ReaderState import org.koitharu.kotatsu.ui.search.SearchHelper diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/list/tracklogs/FeedAdapter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/list/feed/FeedAdapter.kt similarity index 93% rename from app/src/main/java/org/koitharu/kotatsu/ui/list/tracklogs/FeedAdapter.kt rename to app/src/main/java/org/koitharu/kotatsu/ui/list/feed/FeedAdapter.kt index 56930abd3..8cd901fcf 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/list/tracklogs/FeedAdapter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/list/feed/FeedAdapter.kt @@ -1,4 +1,4 @@ -package org.koitharu.kotatsu.ui.list.tracklogs +package org.koitharu.kotatsu.ui.list.feed import android.view.ViewGroup import org.koitharu.kotatsu.core.model.TrackingLogItem diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/list/tracklogs/FeedFragment.kt b/app/src/main/java/org/koitharu/kotatsu/ui/list/feed/FeedFragment.kt similarity index 91% rename from app/src/main/java/org/koitharu/kotatsu/ui/list/tracklogs/FeedFragment.kt rename to app/src/main/java/org/koitharu/kotatsu/ui/list/feed/FeedFragment.kt index 3f90f1309..0194adac1 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/list/tracklogs/FeedFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/list/feed/FeedFragment.kt @@ -1,6 +1,8 @@ -package org.koitharu.kotatsu.ui.list.tracklogs +package org.koitharu.kotatsu.ui.list.feed import android.os.Bundle +import android.view.Menu +import android.view.MenuInflater import android.view.View import androidx.core.view.isVisible import com.google.android.material.snackbar.Snackbar @@ -25,6 +27,8 @@ class FeedFragment : BaseFragment(R.layout.fragment_tracklogs), FeedView, private var adapter: FeedAdapter? = null + override fun getTitle() = context?.getString(R.string.updates) + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setHasOptionsMenu(true) @@ -44,6 +48,11 @@ class FeedFragment : BaseFragment(R.layout.fragment_tracklogs), FeedView, } } + override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + super.onCreateOptionsMenu(menu, inflater) + inflater.inflate(R.menu.opt_feed, menu) + } + override fun onDestroyView() { adapter = null super.onDestroyView() diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/list/tracklogs/FeedHolder.kt b/app/src/main/java/org/koitharu/kotatsu/ui/list/feed/FeedHolder.kt similarity index 66% rename from app/src/main/java/org/koitharu/kotatsu/ui/list/tracklogs/FeedHolder.kt rename to app/src/main/java/org/koitharu/kotatsu/ui/list/feed/FeedHolder.kt index 2baae71f8..b7f7cb8fe 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/list/tracklogs/FeedHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/list/feed/FeedHolder.kt @@ -1,5 +1,6 @@ -package org.koitharu.kotatsu.ui.list.tracklogs +package org.koitharu.kotatsu.ui.list.feed +import android.text.format.DateUtils import android.view.ViewGroup import coil.api.clear import coil.api.load @@ -7,7 +8,7 @@ import kotlinx.android.synthetic.main.item_tracklog.* import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.model.TrackingLogItem import org.koitharu.kotatsu.ui.common.list.BaseViewHolder -import org.koitharu.kotatsu.utils.ext.format +import org.koitharu.kotatsu.utils.ext.formatRelative class FeedHolder(parent: ViewGroup) : BaseViewHolder(parent, R.layout.item_tracklog) { @@ -19,7 +20,17 @@ class FeedHolder(parent: ViewGroup) : error(R.drawable.ic_placeholder) } textView_title.text = data.manga.title - textView_subtitle.text = data.createdAt.format("d.m.Y") + textView_subtitle.text = buildString { + append(data.createdAt.formatRelative(DateUtils.DAY_IN_MILLIS)) + append(" ") + append( + context.resources.getQuantityString( + R.plurals.new_chapters, + data.chapters.size, + data.chapters.size + ) + ) + } textView_chapters.text = data.chapters.joinToString("\n") } diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/list/tracklogs/FeedPresenter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/list/feed/FeedPresenter.kt similarity index 95% rename from app/src/main/java/org/koitharu/kotatsu/ui/list/tracklogs/FeedPresenter.kt rename to app/src/main/java/org/koitharu/kotatsu/ui/list/feed/FeedPresenter.kt index 748c53e5b..0ac7c8b2b 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/list/tracklogs/FeedPresenter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/list/feed/FeedPresenter.kt @@ -1,4 +1,4 @@ -package org.koitharu.kotatsu.ui.list.tracklogs +package org.koitharu.kotatsu.ui.list.feed import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/list/tracklogs/FeedView.kt b/app/src/main/java/org/koitharu/kotatsu/ui/list/feed/FeedView.kt similarity index 92% rename from app/src/main/java/org/koitharu/kotatsu/ui/list/tracklogs/FeedView.kt rename to app/src/main/java/org/koitharu/kotatsu/ui/list/feed/FeedView.kt index 27ae1d6ca..4fcaaf967 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/list/tracklogs/FeedView.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/list/feed/FeedView.kt @@ -1,4 +1,4 @@ -package org.koitharu.kotatsu.ui.list.tracklogs +package org.koitharu.kotatsu.ui.list.feed import moxy.viewstate.strategy.AddToEndSingleTagStrategy import moxy.viewstate.strategy.AddToEndStrategy diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/DateExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/DateExt.kt index 51c1caf41..d994c3790 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ext/DateExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ext/DateExt.kt @@ -1,6 +1,7 @@ package org.koitharu.kotatsu.utils.ext import android.annotation.SuppressLint +import android.text.format.DateUtils import java.text.SimpleDateFormat import java.util.* @@ -9,4 +10,8 @@ fun Date.format(pattern: String): String = SimpleDateFormat(pattern).format(this fun Date.calendar(): Calendar = Calendar.getInstance().also { it.time = this -} \ No newline at end of file +} + +fun Date.formatRelative(minResolution: Long): CharSequence = DateUtils.getRelativeTimeSpanString( + time, System.currentTimeMillis(), minResolution +) \ No newline at end of file diff --git a/app/src/main/res/layout/item_tracklog.xml b/app/src/main/res/layout/item_tracklog.xml index e691b87e8..8a844a6be 100644 --- a/app/src/main/res/layout/item_tracklog.xml +++ b/app/src/main/res/layout/item_tracklog.xml @@ -1,18 +1,23 @@ + app:cardBackgroundColor="?android:windowBackground" + app:cardElevation="0dp" + app:cardMaxElevation="0dp" + app:strokeColor="?android:colorControlNormal" + app:strokeWidth="1px"> @@ -21,14 +26,14 @@ android:id="@+id/textView_title" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_alignParentTop="true" + android:layout_alignParentEnd="true" android:layout_marginStart="6dp" android:layout_marginTop="6dp" android:layout_marginEnd="6dp" + android:layout_toEndOf="@id/imageView_cover" android:ellipsize="end" android:maxLines="2" - android:layout_toEndOf="@id/imageView_cover" - android:layout_alignParentTop="true" - android:layout_alignParentEnd="true" android:textAppearance="@style/TextAppearance.MaterialComponents.Body1" tools:text="@tools:sample/lorem[6]" /> @@ -36,15 +41,15 @@ android:id="@+id/textView_subtitle" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_below="@id/textView_title" + android:layout_alignParentEnd="true" android:layout_marginStart="6dp" android:layout_marginTop="4dp" android:layout_marginEnd="6dp" android:layout_marginBottom="6dp" + android:layout_toEndOf="@id/imageView_cover" android:ellipsize="end" android:maxLines="1" - android:layout_toEndOf="@id/imageView_cover" - android:layout_alignParentEnd="true" - android:layout_below="@id/textView_title" android:textAppearance="@style/TextAppearance.MaterialComponents.Body2" android:textColor="?android:textColorSecondary" tools:text="@tools:sample/lorem[6]" /> @@ -53,23 +58,23 @@ android:id="@+id/divider" android:layout_width="match_parent" android:layout_height="1dp" - android:layout_toEndOf="@id/imageView_cover" - android:layout_alignParentEnd="true" android:layout_below="@id/textView_subtitle" + android:layout_alignParentEnd="true" + android:layout_toEndOf="@id/imageView_cover" android:background="?android:listDivider" /> + android:paddingBottom="12dp" /> diff --git a/app/src/main/res/menu/opt_feed.xml b/app/src/main/res/menu/opt_feed.xml new file mode 100644 index 000000000..1fe7aa6d4 --- /dev/null +++ b/app/src/main/res/menu/opt_feed.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file