From 1316d5a698a9ece718ffe1241cc2095dd1587331 Mon Sep 17 00:00:00 2001 From: aayush262 Date: Thu, 29 Feb 2024 20:43:30 +0530 Subject: [PATCH 1/3] feat(manga): Date and Scanlator in description --- .../ani/dantotsu/media/manga/MangaChapter.kt | 4 +- .../media/manga/MangaChapterAdapter.kt | 22 ++++++++++ .../ani/dantotsu/parsers/AniyomiAdapter.kt | 3 +- .../java/ani/dantotsu/parsers/MangaParser.kt | 1 + app/src/main/res/layout/item_chapter_list.xml | 41 ++++++++++++++++++- 5 files changed, 67 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/ani/dantotsu/media/manga/MangaChapter.kt b/app/src/main/java/ani/dantotsu/media/manga/MangaChapter.kt index 6af71788..d8944b66 100644 --- a/app/src/main/java/ani/dantotsu/media/manga/MangaChapter.kt +++ b/app/src/main/java/ani/dantotsu/media/manga/MangaChapter.kt @@ -13,6 +13,7 @@ data class MangaChapter( var description: String? = null, var sChapter: SChapter, val scanlator: String? = null, + val date: Long? = null, var progress: String? = "" ) : Serializable { constructor(chapter: MangaChapter) : this( @@ -21,7 +22,8 @@ data class MangaChapter( chapter.title, chapter.description, chapter.sChapter, - chapter.scanlator + chapter.scanlator, + chapter.date ) private val images = mutableListOf() diff --git a/app/src/main/java/ani/dantotsu/media/manga/MangaChapterAdapter.kt b/app/src/main/java/ani/dantotsu/media/manga/MangaChapterAdapter.kt index 6cad3b90..1dff742f 100644 --- a/app/src/main/java/ani/dantotsu/media/manga/MangaChapterAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/manga/MangaChapterAdapter.kt @@ -1,5 +1,6 @@ package ani.dantotsu.media.manga +import android.annotation.SuppressLint import android.app.AlertDialog import android.util.TypedValue import android.view.LayoutInflater @@ -16,6 +17,9 @@ import ani.dantotsu.databinding.ItemChapterListBinding import ani.dantotsu.databinding.ItemEpisodeCompactBinding import ani.dantotsu.media.Media import ani.dantotsu.setAnimation +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -258,6 +262,7 @@ class MangaChapterAdapter( } } + @SuppressLint("SetTextI18n") override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (holder) { is ChapterCompactViewHolder -> { @@ -290,6 +295,23 @@ class MangaChapterAdapter( holder.bind(ep.number, ep.progress) setAnimation(fragment.requireContext(), holder.binding.root) binding.itemChapterNumber.text = ep.number + + if (ep.date != null) { + binding.itemChapterDateLayout.visibility = View.VISIBLE + val time = Date(ep.date) + val dateFormat = SimpleDateFormat("MMM/dd/yyyy", Locale.ENGLISH).format(time) + binding.itemChapterDate.text = + if (dateFormat != "Jan/01/1970") "$dateFormat • " else "" + } + if (ep.scanlator != null) { + binding.itemChapterDateLayout.visibility = View.VISIBLE + binding.itemChapterScan.text = ep.scanlator.replaceFirstChar { + if (it.isLowerCase()) it.titlecase( + Locale.ROOT + ) else it.toString() + } + } + if (ep.progress.isNullOrEmpty()) { binding.itemChapterTitle.visibility = View.GONE } else binding.itemChapterTitle.visibility = View.VISIBLE diff --git a/app/src/main/java/ani/dantotsu/parsers/AniyomiAdapter.kt b/app/src/main/java/ani/dantotsu/parsers/AniyomiAdapter.kt index 761bd949..7ec22cdb 100644 --- a/app/src/main/java/ani/dantotsu/parsers/AniyomiAdapter.kt +++ b/app/src/main/java/ani/dantotsu/parsers/AniyomiAdapter.kt @@ -633,7 +633,8 @@ class DynamicMangaParser(extension: MangaExtension.Installed) : MangaParser() { sChapter.name, null, sChapter.scanlator, - sChapter + sChapter, + sChapter.date_upload ) } diff --git a/app/src/main/java/ani/dantotsu/parsers/MangaParser.kt b/app/src/main/java/ani/dantotsu/parsers/MangaParser.kt index 8948d495..cd757307 100644 --- a/app/src/main/java/ani/dantotsu/parsers/MangaParser.kt +++ b/app/src/main/java/ani/dantotsu/parsers/MangaParser.kt @@ -81,6 +81,7 @@ data class MangaChapter( val description: String? = null, val scanlator: String? = null, val sChapter: SChapter, + val date: Long? = null, ) data class MangaImage( diff --git a/app/src/main/res/layout/item_chapter_list.xml b/app/src/main/res/layout/item_chapter_list.xml index fe263d01..f97656c8 100644 --- a/app/src/main/res/layout/item_chapter_list.xml +++ b/app/src/main/res/layout/item_chapter_list.xml @@ -32,7 +32,7 @@ android:textAppearance="@style/TextAppearance.Widget.AppCompat.Toolbar.Title" android:textColor="?attr/colorOnBackground" android:textSize="16sp" - tools:text="1" /> + tools:text="Chapter: 1" /> + + + + + + Date: Thu, 29 Feb 2024 19:42:40 +0100 Subject: [PATCH 2/3] Update UserInterfaceSettingsActivity.kt (#207) feat(UI setting): restart option after changing default tabs --- .../dantotsu/settings/UserInterfaceSettingsActivity.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/ani/dantotsu/settings/UserInterfaceSettingsActivity.kt b/app/src/main/java/ani/dantotsu/settings/UserInterfaceSettingsActivity.kt index 2c5fc602..92e5e183 100644 --- a/app/src/main/java/ani/dantotsu/settings/UserInterfaceSettingsActivity.kt +++ b/app/src/main/java/ani/dantotsu/settings/UserInterfaceSettingsActivity.kt @@ -36,18 +36,20 @@ class UserInterfaceSettingsActivity : AppCompatActivity() { onBackPressedDispatcher.onBackPressed() } - val views = resources.getStringArray(R.array.home_layouts) binding.uiSettingsHomeLayout.setOnClickListener { + val set = PrefManager.getVal>(PrefName.HomeLayoutShow).toMutableList() + val views = resources.getStringArray(R.array.home_layouts) val dialog = AlertDialog.Builder(this, R.style.MyPopup) .setTitle(getString(R.string.home_layout_show)).apply { setMultiChoiceItems( views, PrefManager.getVal>(PrefName.HomeLayoutShow).toBooleanArray() ) { _, i, value -> - val set = PrefManager.getVal>(PrefName.HomeLayoutShow) - .toMutableList() set[i] = value + } + setPositiveButton("Done") { _, _ -> PrefManager.setVal(PrefName.HomeLayoutShow, set) + restartApp() } }.show() dialog.window?.setDimAmount(0.8f) @@ -116,4 +118,4 @@ class UserInterfaceSettingsActivity : AppCompatActivity() { show() } } -} \ No newline at end of file +} From 976acd4af29344aa575a7b53baabb3dfa6bb95b5 Mon Sep 17 00:00:00 2001 From: aayush262 Date: Fri, 1 Mar 2024 00:23:25 +0530 Subject: [PATCH 3/3] feat(manga dates): Better time formatting --- .../media/manga/MangaChapterAdapter.kt | 35 ++++++++++++++++--- app/src/main/res/layout/item_chapter_list.xml | 17 +++++++-- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/ani/dantotsu/media/manga/MangaChapterAdapter.kt b/app/src/main/java/ani/dantotsu/media/manga/MangaChapterAdapter.kt index 1dff742f..a2cf40b7 100644 --- a/app/src/main/java/ani/dantotsu/media/manga/MangaChapterAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/manga/MangaChapterAdapter.kt @@ -298,10 +298,7 @@ class MangaChapterAdapter( if (ep.date != null) { binding.itemChapterDateLayout.visibility = View.VISIBLE - val time = Date(ep.date) - val dateFormat = SimpleDateFormat("MMM/dd/yyyy", Locale.ENGLISH).format(time) - binding.itemChapterDate.text = - if (dateFormat != "Jan/01/1970") "$dateFormat • " else "" + binding.itemChapterDate.text = formatDate(ep.date) } if (ep.scanlator != null) { binding.itemChapterDateLayout.visibility = View.VISIBLE @@ -311,6 +308,9 @@ class MangaChapterAdapter( ) else it.toString() } } + if (formatDate(ep.date) == "" || ep.scanlator == null) { + binding.itemChapterDateDivider.visibility = View.GONE + } else binding.itemChapterDateDivider.visibility = View.VISIBLE if (ep.progress.isNullOrEmpty()) { binding.itemChapterTitle.visibility = View.GONE @@ -344,6 +344,33 @@ class MangaChapterAdapter( fun updateType(t: Int) { type = t } + private fun formatDate(timestamp: Long?): String { + timestamp ?: return "" // Return empty string if timestamp is null + val targetDate = Date(timestamp) + + if (targetDate < Date(946684800000L)) { // January 1, 2000 (who want dates before that?) + return "" + } + + val currentDate = Date() + val difference = currentDate.time - targetDate.time + + return when (val daysDifference = difference / (1000 * 60 * 60 * 24)) { + 0L -> { + val hoursDifference = difference / (1000 * 60 * 60) + val minutesDifference = (difference / (1000 * 60)) % 60 + + when { + hoursDifference > 0 -> "$hoursDifference hour${if (hoursDifference > 1) "s" else ""} ago" + minutesDifference > 0 -> "$minutesDifference minute${if (minutesDifference > 1) "s" else ""} ago" + else -> "Just now" + } + } + 1L -> "1 day ago" + in 2..6 -> "$daysDifference days ago" + else -> SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH).format(targetDate) + } + } } \ No newline at end of file diff --git a/app/src/main/res/layout/item_chapter_list.xml b/app/src/main/res/layout/item_chapter_list.xml index f97656c8..0ade90bf 100644 --- a/app/src/main/res/layout/item_chapter_list.xml +++ b/app/src/main/res/layout/item_chapter_list.xml @@ -62,12 +62,14 @@ android:layout_marginBottom="10dp" android:layout_marginEnd="100dp" android:visibility="gone" - android:orientation="horizontal"> + android:orientation="horizontal" + tools:visibility="visible"> + +