@@ -31,6 +31,7 @@ import com.github.libretube.constants.PreferenceKeys
3131import com.github.libretube.databinding.FragmentDownloadContentBinding
3232import com.github.libretube.databinding.FragmentDownloadsBinding
3333import com.github.libretube.db.DatabaseHolder.Database
34+ import com.github.libretube.db.obj.Download
3435import com.github.libretube.db.obj.DownloadPlaylistWithDownload
3536import com.github.libretube.db.obj.DownloadWithItems
3637import com.github.libretube.db.obj.filterByTab
@@ -69,7 +70,7 @@ enum class DownloadTab {
6970 PLAYLIST
7071}
7172
72- private enum class DownloadSortingOrder (@StringRes val stringId : Int ) {
73+ enum class DownloadSortingOrder (@StringRes val stringId : Int ) {
7374 OLDEST (R .string.least_recent),
7475 NEWEST (R .string.most_recent),
7576 ALPHABETIC (R .string.alphabetic),
@@ -186,31 +187,38 @@ class DownloadsFragmentPage : DynamicLayoutManagerFragment(R.layout.fragment_dow
186187 override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
187188 _binding = FragmentDownloadContentBinding .bind(view)
188189 super .onViewCreated(view, savedInstanceState)
189- adapter = DownloadsAdapter (requireContext(), downloadTab, downloadPlaylistId) {
190- var isDownloading = false
191- val ids = it.downloadItems
192- .filter { item -> item.path.fileSize() < item.downloadSize }
193- .map { item -> item.id }
194-
195- if (! serviceConnection.isBound) {
196- DownloadHelper .startDownloadService(requireContext())
197- bindDownloadService(ids.toIntArray())
198- return @DownloadsAdapter true
199- }
200190
201- binder?.getService()?.let { service ->
202- isDownloading = ids.any { id -> service.isDownloading(id) }
191+ adapter =
192+ DownloadsAdapter (
193+ requireContext(), downloadTab, downloadPlaylistId,
194+ currentSortOrder = {
195+ DownloadSortingOrder .entries[selectedSortType]
196+ }
197+ ) {
198+ var isDownloading = false
199+ val ids = it.downloadItems
200+ .filter { item -> item.path.fileSize() < item.downloadSize }
201+ .map { item -> item.id }
202+
203+ if (! serviceConnection.isBound) {
204+ DownloadHelper .startDownloadService(requireContext())
205+ bindDownloadService(ids.toIntArray())
206+ return @DownloadsAdapter true
207+ }
208+
209+ binder?.getService()?.let { service ->
210+ isDownloading = ids.any { id -> service.isDownloading(id) }
203211
204- ids.forEach { id ->
205- if (isDownloading) {
206- service.pause(id)
207- } else {
208- service.resume(id)
212+ ids.forEach { id ->
213+ if (isDownloading) {
214+ service.pause(id)
215+ } else {
216+ service.resume(id)
217+ }
209218 }
210219 }
220+ return @DownloadsAdapter isDownloading.not ()
211221 }
212- return @DownloadsAdapter isDownloading.not ()
213- }
214222 binding.downloadsRecView.adapter = adapter
215223
216224 val filterOptions = DownloadSortingOrder .entries.map { getString(it.stringId) }
@@ -295,14 +303,8 @@ class DownloadsFragmentPage : DynamicLayoutManagerFragment(R.layout.fragment_dow
295303 }
296304
297305 private fun submitDownloadList (items : List <DownloadWithItems >) {
298- val sortedItems = when (selectedSortType) {
299- DownloadSortingOrder .OLDEST .ordinal -> items
300- DownloadSortingOrder .NEWEST .ordinal -> items.reversed()
301- DownloadSortingOrder .ALPHABETIC .ordinal -> items.sortedBy { it.download.title }
302- DownloadSortingOrder .DURATION .ordinal -> items.sortedBy { it.download.duration }
303- DownloadSortingOrder .CHANNEL .ordinal -> items.sortedBy { it.download.uploader }
304- else -> items.sortedBy { it.downloadItems.sumOf { o -> o.downloadSize } }
305- }
306+ val sortOrder = DownloadSortingOrder .entries[selectedSortType]
307+ val sortedItems = sortDownloadWithItemsList(items, sortOrder)
306308
307309 adapter.submitList(sortedItems)
308310 }
@@ -419,6 +421,33 @@ class DownloadsFragmentPage : DynamicLayoutManagerFragment(R.layout.fragment_dow
419421 _binding = null
420422 }
421423
424+ companion object {
425+ fun sortDownloadWithItemsList (
426+ items : List <DownloadWithItems >,
427+ selectedSortType : DownloadSortingOrder
428+ ): List <DownloadWithItems > {
429+ return when (selectedSortType) {
430+ DownloadSortingOrder .OLDEST -> items
431+ DownloadSortingOrder .NEWEST -> items.reversed()
432+ DownloadSortingOrder .ALPHABETIC -> items.sortedBy { it.download.title }
433+ DownloadSortingOrder .DURATION -> items.sortedBy { it.download.duration }
434+ DownloadSortingOrder .CHANNEL -> items.sortedBy { it.download.uploader }
435+ DownloadSortingOrder .SIZE -> items.sortedBy { it.downloadItems.sumOf { o -> o.downloadSize } }
436+ }
437+ }
438+
439+ // ugly HACK: should probably be refactored in the future
440+ fun sortDownloadList (items : List <Download >, selectedSortType : DownloadSortingOrder ): List <Download > {
441+ return when (selectedSortType) {
442+ DownloadSortingOrder .OLDEST -> items
443+ DownloadSortingOrder .NEWEST -> items.reversed()
444+ DownloadSortingOrder .ALPHABETIC -> items.sortedBy { it.title }
445+ DownloadSortingOrder .DURATION -> items.sortedBy { it.duration }
446+ DownloadSortingOrder .CHANNEL -> items.sortedBy { it.uploader }
447+ DownloadSortingOrder .SIZE -> items
448+ }
449+ }
450+ }
422451}
423452
424453class PlaylistDownloadsFragmentPage : Fragment (R .layout.fragment_download_content) {
0 commit comments