mirror of
https://github.com/libre-tube/LibreTube.git
synced 2024-12-15 06:40:30 +05:30
Merge pull request #2639 from Bnyro/master
Fix that background mode doesn't start from beginning
This commit is contained in:
commit
1e5a82167f
@ -94,7 +94,7 @@ class BackgroundMode : Service() {
|
|||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
val channel = NotificationChannel(
|
val channel = NotificationChannel(
|
||||||
BACKGROUND_CHANNEL_ID,
|
BACKGROUND_CHANNEL_ID,
|
||||||
"Background Service",
|
getString(R.string.background_mode),
|
||||||
NotificationManager.IMPORTANCE_DEFAULT
|
NotificationManager.IMPORTANCE_DEFAULT
|
||||||
)
|
)
|
||||||
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
|
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
|
||||||
@ -139,8 +139,13 @@ class BackgroundMode : Service() {
|
|||||||
|
|
||||||
private fun updateWatchPosition() {
|
private fun updateWatchPosition() {
|
||||||
player?.currentPosition?.let {
|
player?.currentPosition?.let {
|
||||||
|
val watchPosition = WatchPosition(videoId, it)
|
||||||
|
|
||||||
|
// indicator that a new video is getting loaded
|
||||||
|
this.streams ?: return@let
|
||||||
|
|
||||||
query {
|
query {
|
||||||
Database.watchPositionDao().insertAll(WatchPosition(videoId, it))
|
Database.watchPositionDao().insertAll(watchPosition)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
handler.postDelayed(this::updateWatchPosition, 500)
|
handler.postDelayed(this::updateWatchPosition, 500)
|
||||||
@ -154,11 +159,9 @@ class BackgroundMode : Service() {
|
|||||||
seekToPosition: Long = 0
|
seekToPosition: Long = 0
|
||||||
) {
|
) {
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
try {
|
streams = runCatching {
|
||||||
streams = RetrofitInstance.api.getStreams(videoId)
|
RetrofitInstance.api.getStreams(videoId)
|
||||||
} catch (e: Exception) {
|
}.getOrNull() ?: return@launch
|
||||||
return@launch
|
|
||||||
}
|
|
||||||
|
|
||||||
// add the playlist video to the queue
|
// add the playlist video to the queue
|
||||||
if (PlayingQueue.isEmpty() && playlistId != null) {
|
if (PlayingQueue.isEmpty() && playlistId != null) {
|
||||||
@ -205,7 +208,7 @@ class BackgroundMode : Service() {
|
|||||||
if (seekToPosition != 0L) {
|
if (seekToPosition != 0L) {
|
||||||
player?.seekTo(seekToPosition)
|
player?.seekTo(seekToPosition)
|
||||||
} else if (PlayerHelper.watchPositionsEnabled) {
|
} else if (PlayerHelper.watchPositionsEnabled) {
|
||||||
try {
|
runCatching {
|
||||||
val watchPosition = awaitQuery {
|
val watchPosition = awaitQuery {
|
||||||
Database.watchPositionDao().findById(videoId)
|
Database.watchPositionDao().findById(videoId)
|
||||||
}
|
}
|
||||||
@ -214,8 +217,6 @@ class BackgroundMode : Service() {
|
|||||||
player?.seekTo(watchPosition.position)
|
player?.seekTo(watchPosition.position)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -276,15 +277,14 @@ class BackgroundMode : Service() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Plays the first related video to the current (used when the playback of the current video ended)
|
* Plays the next video from the queue
|
||||||
*/
|
*/
|
||||||
private fun playNextVideo(nextId: String? = null) {
|
private fun playNextVideo(nextId: String? = null) {
|
||||||
val nextVideo = nextId ?: PlayingQueue.getNext()
|
val nextVideo = nextId ?: PlayingQueue.getNext() ?: return
|
||||||
|
|
||||||
// play new video on background
|
// play new video on background
|
||||||
if (nextVideo != null) {
|
|
||||||
this.videoId = nextVideo
|
this.videoId = nextVideo
|
||||||
}
|
this.streams = null
|
||||||
this.segmentData = null
|
this.segmentData = null
|
||||||
loadAudio(videoId)
|
loadAudio(videoId)
|
||||||
}
|
}
|
||||||
@ -344,11 +344,9 @@ class BackgroundMode : Service() {
|
|||||||
val currentPosition = player?.currentPosition
|
val currentPosition = player?.currentPosition
|
||||||
if (currentPosition in segmentStart until segmentEnd) {
|
if (currentPosition in segmentStart until segmentEnd) {
|
||||||
if (PlayerHelper.sponsorBlockNotifications) {
|
if (PlayerHelper.sponsorBlockNotifications) {
|
||||||
try {
|
runCatching {
|
||||||
Toast.makeText(this, R.string.segment_skipped, Toast.LENGTH_SHORT)
|
Toast.makeText(this, R.string.segment_skipped, Toast.LENGTH_SHORT)
|
||||||
.show()
|
.show()
|
||||||
} catch (e: Exception) {
|
|
||||||
// Do nothing.
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
player?.seekTo(segmentEnd)
|
player?.seekTo(segmentEnd)
|
||||||
|
Loading…
Reference in New Issue
Block a user