mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 22:37:56 +01:00 
			
		
		
		
	Sort chapters by upload date (#3180)
* Added sorting by upload date Spanish 'strings' contains the proper translation for the new feature. * Added missing sorting cases handling Previous commit missed some cases resulting in errors at runtime * Implemented review changes Shorter UI text and >= date comparison instead of >
This commit is contained in:
		| @@ -78,7 +78,8 @@ interface Manga : SManga { | ||||
|  | ||||
|         const val SORTING_SOURCE = 0x00000000 | ||||
|         const val SORTING_NUMBER = 0x00000100 | ||||
|         const val SORTING_MASK = 0x00000100 | ||||
|         const val SORTING_UPLOAD_DATE = 0x00000200 | ||||
|         const val SORTING_MASK = 0x00000300 | ||||
|  | ||||
|         const val DISPLAY_NAME = 0x00000000 | ||||
|         const val DISPLAY_NUMBER = 0x00100000 | ||||
|   | ||||
| @@ -196,11 +196,13 @@ class ChaptersController : | ||||
|         } | ||||
|  | ||||
|         // Sorting mode submenu | ||||
|         if (presenter.manga.sorting == Manga.SORTING_SOURCE) { | ||||
|             menu.findItem(R.id.sort_by_source).isChecked = true | ||||
|         } else { | ||||
|             menu.findItem(R.id.sort_by_number).isChecked = true | ||||
|         val sortingItem = when (presenter.manga.sorting) { | ||||
|             Manga.SORTING_SOURCE -> R.id.sort_by_source | ||||
|             Manga.SORTING_NUMBER -> R.id.sort_by_number | ||||
|             Manga.SORTING_UPLOAD_DATE -> R.id.sort_by_upload_date | ||||
|             else -> throw NotImplementedError("Unimplemented sorting method") | ||||
|         } | ||||
|         menu.findItem(sortingItem).isChecked = true | ||||
|     } | ||||
|  | ||||
|     override fun onOptionsItemSelected(item: MenuItem): Boolean { | ||||
| @@ -222,6 +224,10 @@ class ChaptersController : | ||||
|                 item.isChecked = true | ||||
|                 presenter.setSorting(Manga.SORTING_NUMBER) | ||||
|             } | ||||
|             R.id.sort_by_upload_date -> { | ||||
|                 item.isChecked = true | ||||
|                 presenter.setSorting(Manga.SORTING_UPLOAD_DATE) | ||||
|             } | ||||
|  | ||||
|             R.id.download_next, R.id.download_next_5, R.id.download_next_10, | ||||
|             R.id.download_custom, R.id.download_unread, R.id.download_all | ||||
|   | ||||
| @@ -203,6 +203,10 @@ class ChaptersPresenter( | ||||
|                 true -> { c1, c2 -> c2.chapter_number.compareTo(c1.chapter_number) } | ||||
|                 false -> { c1, c2 -> c1.chapter_number.compareTo(c2.chapter_number) } | ||||
|             } | ||||
|             Manga.SORTING_UPLOAD_DATE -> when (sortDescending()) { | ||||
|                 true -> { c1, c2 -> c2.date_upload.compareTo(c1.date_upload) } | ||||
|                 false -> { c1, c2 -> c1.date_upload.compareTo(c2.date_upload) } | ||||
|             } | ||||
|             else -> throw NotImplementedError("Unimplemented sorting method") | ||||
|         } | ||||
|         return observable.toSortedList(sortFunction) | ||||
|   | ||||
| @@ -35,3 +35,12 @@ class ChapterLoadByNumber { | ||||
|         return chapters.sortedBy { it.chapter_number } | ||||
|     } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Load strategy using the chapter upload date. This ordering ignores scanlators | ||||
|  */ | ||||
| class ChapterLoadByUploadDate() { | ||||
|     fun get(allChapters: List<Chapter>): List<Chapter> { | ||||
|         return allChapters.sortedBy { it.date_upload } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -129,6 +129,7 @@ class ReaderPresenter( | ||||
|         when (manga.sorting) { | ||||
|             Manga.SORTING_SOURCE -> ChapterLoadBySource().get(chaptersForReader) | ||||
|             Manga.SORTING_NUMBER -> ChapterLoadByNumber().get(chaptersForReader, selectedChapter) | ||||
|             Manga.SORTING_UPLOAD_DATE -> ChapterLoadByUploadDate().get(chaptersForReader) | ||||
|             else -> error("Unknown sorting method") | ||||
|         }.map(::ReaderChapter) | ||||
|     } | ||||
|   | ||||
| @@ -98,6 +98,7 @@ class HistoryPresenter : BasePresenter<HistoryController>() { | ||||
|         val sortFunction: (Chapter, Chapter) -> Int = when (manga.sorting) { | ||||
|             Manga.SORTING_SOURCE -> { c1, c2 -> c2.source_order.compareTo(c1.source_order) } | ||||
|             Manga.SORTING_NUMBER -> { c1, c2 -> c1.chapter_number.compareTo(c2.chapter_number) } | ||||
|             Manga.SORTING_UPLOAD_DATE -> { c1, c2 -> c1.date_upload.compareTo(c2.date_upload) } | ||||
|             else -> throw NotImplementedError("Unknown sorting method") | ||||
|         } | ||||
|  | ||||
| @@ -117,6 +118,10 @@ class HistoryPresenter : BasePresenter<HistoryController>() { | ||||
|                             it.chapter_number <= chapterNumber + 1 | ||||
|                     } | ||||
|             } | ||||
|             Manga.SORTING_UPLOAD_DATE -> { | ||||
|                 chapters.drop(currChapterIndex + 1) | ||||
|                         .firstOrNull { it.date_upload >= chapter.date_upload} | ||||
|             } | ||||
|             else -> throw NotImplementedError("Unknown sorting method") | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -64,6 +64,9 @@ | ||||
|                 <item | ||||
|                     android:id="@+id/sort_by_number" | ||||
|                     android:title="@string/sort_by_number" /> | ||||
|                 <item | ||||
|                     android:id="@+id/sort_by_upload_date" | ||||
|                     android:title="@string/sort_by_upload_date" /> | ||||
|             </group> | ||||
|         </menu> | ||||
|     </item> | ||||
|   | ||||
| @@ -183,6 +183,7 @@ | ||||
|     <string name="sorting_mode">Ordenado de capítulos</string> | ||||
|     <string name="sort_by_source">Por fuente</string> | ||||
|     <string name="sort_by_number">Por número de capítulo</string> | ||||
|     <string name="sort_by_upload_date">Por fecha de carga</string> | ||||
|     <string name="manga_download">Descargar</string> | ||||
|     <string name="download_1">Siguiente capítulo</string> | ||||
|     <string name="download_5">Siguientes 5 capítulos</string> | ||||
|   | ||||
| @@ -479,6 +479,7 @@ | ||||
|     <string name="sorting_mode">Sorting mode</string> | ||||
|     <string name="sort_by_source">By source</string> | ||||
|     <string name="sort_by_number">By chapter number</string> | ||||
|     <string name="sort_by_upload_date">By upload date</string> | ||||
|     <string name="manga_download">Download</string> | ||||
|     <string name="custom_download">Download custom amount</string> | ||||
|     <string name="download_1">Next chapter</string> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user