|
1 | 1 | package org.akanework.gramophone.logic |
2 | 2 |
|
3 | | -import android.os.Build |
4 | 3 | import android.os.Bundle |
5 | 4 | import android.os.Parcelable |
6 | 5 | import android.util.Log |
7 | | -import androidx.annotation.RequiresApi |
8 | 6 | import androidx.compose.ui.util.fastFirstOrNull |
9 | 7 | import androidx.compose.ui.util.fastSumBy |
10 | 8 | import androidx.media3.common.C |
11 | 9 | import androidx.media3.common.MediaItem |
12 | 10 | import androidx.media3.common.Player.REPEAT_MODE_OFF |
13 | 11 | import org.akanework.gramophone.logic.utils.CircularShuffleOrder |
14 | | -import java.time.LocalDateTime |
15 | 12 | import kotlin.random.Random |
16 | 13 |
|
| 14 | +private const val QUEUE_EXPIRY_MS = 10 * 36000000 // 10 hrs |
17 | 15 |
|
18 | 16 | /** |
19 | 17 | * Multiple queues manager. |
20 | 18 | * |
21 | 19 | * Queues are ordered most recent modification, |
22 | 20 | */ |
23 | | -//@RequiresApi(Build.VERSION_CODES.O) // TODO: LocalDateTime methods requires API level 26... but I don't think so...? |
24 | 21 | class QueueBoard( |
25 | 22 | private val player: GramophonePlaybackService, |
26 | 23 | val masterQueues: MutableList<MultiQueueObject> = mutableListOf(), |
@@ -99,7 +96,19 @@ class QueueBoard( |
99 | 96 | } |
100 | 97 |
|
101 | 98 | fun unpinQueue(index: Int) { |
102 | | - masterQueues[index].expiry = LocalDateTime.now() |
| 99 | + masterQueues[index].expiry = System.currentTimeMillis() + QUEUE_EXPIRY_MS |
| 100 | + } |
| 101 | + |
| 102 | + /** |
| 103 | + * Remove expired queues from the QueueBoard |
| 104 | + */ |
| 105 | + fun trimQB() { |
| 106 | + val currentTimeMillis = System.currentTimeMillis() |
| 107 | + val newQueueList = masterQueues.filter { |
| 108 | + it.expiry == null || it.expiry!! > currentTimeMillis |
| 109 | + } |
| 110 | + masterQueues.clear() |
| 111 | + masterQueues.addAll(newQueueList) |
103 | 112 | } |
104 | 113 |
|
105 | 114 |
|
@@ -199,7 +208,7 @@ class QueueBoard( |
199 | 208 | id = Random.nextLong(), |
200 | 209 | index = -1, |
201 | 210 | title = title, |
202 | | - expiry = LocalDateTime.now().plusHours(10L), |
| 211 | + expiry = System.currentTimeMillis() + QUEUE_EXPIRY_MS, |
203 | 212 | queue = ArrayList(mediaList), |
204 | 213 | startIndex = mediaItemIndex, |
205 | 214 | startPositionMs = C.TIME_UNSET, |
@@ -467,7 +476,7 @@ data class MultiQueueObject( |
467 | 476 | val id: Long, // queue uid |
468 | 477 | var index: Int, // order of queue |
469 | 478 | var title: String, |
470 | | - var expiry: LocalDateTime?, |
| 479 | + var expiry: Long?, |
471 | 480 | /** |
472 | 481 | * The order of songs are dynamic. This should not be accessed from outside QueueBoard. |
473 | 482 | */ |
@@ -557,7 +566,7 @@ data class MultiQueueObject( |
557 | 566 | id = bundle.getLong("id"), |
558 | 567 | index = bundle.getInt("index"), |
559 | 568 | title = bundle.getString("title") ?: "", |
560 | | - expiry = bundle.getString("expiry")?.let { LocalDateTime.parse(it) }, |
| 569 | + expiry = bundle.getString("expiry")?.toLongOrNull(), |
561 | 570 | // queue = queue, |
562 | 571 | queue = (bundle.getParcelableArrayList<Bundle>("queue") |
563 | 572 | ?: emptyList()).map { MediaItem.fromBundle(it) }.toMutableList(), |
|
0 commit comments