LibreTube/app/src/main/java/com/github/libretube/util/PlayingQueue.kt

64 lines
1.5 KiB
Kotlin
Raw Normal View History

2022-09-19 23:37:55 +05:30
package com.github.libretube.util
2022-10-23 15:03:35 +05:30
import com.github.libretube.api.obj.StreamItem
2022-10-23 17:09:15 +05:30
import com.github.libretube.extensions.toID
2022-10-23 15:03:35 +05:30
2022-09-19 23:37:55 +05:30
object PlayingQueue {
2022-10-23 17:09:15 +05:30
private val queue = mutableListOf<StreamItem>()
private var currentStream: StreamItem? = null
fun add(vararg streamItem: StreamItem) {
streamItem.forEach {
if (currentStream != it) {
if (queue.contains(it)) queue.remove(it)
queue.add(it)
}
}
2022-09-19 23:37:55 +05:30
}
2022-10-23 17:09:15 +05:30
fun addAsNext(streamItem: StreamItem) {
if (currentStream == streamItem) return
if (queue.contains(streamItem)) queue.remove(streamItem)
2022-09-19 23:37:55 +05:30
queue.add(
2022-10-23 17:09:15 +05:30
currentIndex() + 1,
streamItem
2022-09-19 23:37:55 +05:30
)
}
2022-09-19 23:43:25 +05:30
fun getNext(): String? {
2022-09-23 17:42:41 +05:30
return try {
2022-10-23 17:09:15 +05:30
queue[currentIndex() + 1].url?.toID()
2022-09-23 17:42:41 +05:30
} catch (e: Exception) {
2022-09-20 01:07:30 +05:30
null
}
}
2022-09-20 01:51:30 +05:30
fun getPrev(): String? {
2022-10-23 17:09:15 +05:30
val index = queue.indexOf(currentStream)
return if (index > 0) queue[index - 1].url?.toID() else null
2022-09-20 01:07:30 +05:30
}
fun hasPrev(): Boolean {
2022-10-23 17:09:15 +05:30
return queue.indexOf(currentStream) > 0
2022-09-20 01:07:30 +05:30
}
2022-10-23 17:09:15 +05:30
fun updateCurrent(streamItem: StreamItem) {
currentStream = streamItem
queue.add(streamItem)
2022-09-19 23:43:25 +05:30
}
2022-09-20 01:13:13 +05:30
fun isNotEmpty() = queue.isNotEmpty()
2022-09-23 17:42:41 +05:30
2022-10-23 17:09:15 +05:30
fun isEmpty() = queue.isEmpty()
2022-09-23 17:42:41 +05:30
fun clear() = queue.clear()
2022-10-23 17:09:15 +05:30
fun size() = queue.size
2022-09-23 17:42:41 +05:30
2022-10-23 17:09:15 +05:30
private fun currentIndex() = queue.indexOf(currentStream)
2022-09-23 17:42:41 +05:30
2022-10-23 17:09:15 +05:30
fun contains(streamItem: StreamItem) = queue.contains(streamItem)
fun getStreams() = queue
2022-09-19 23:37:55 +05:30
}