mirror of
https://github.com/antebudimir/tempus.git
synced 2025-12-31 17:43:32 +00:00
Refined scrobbling and history saving logic
This commit is contained in:
parent
0512cf036e
commit
063d293897
3 changed files with 29 additions and 33 deletions
|
|
@ -233,28 +233,6 @@ public class QueueRepository {
|
||||||
return timestamp;
|
return timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isMediaPlayingPlausible(MediaItem mediaItem) {
|
|
||||||
boolean isPlausible = true;
|
|
||||||
|
|
||||||
GetLastPlayedMediaThreadSafe getLastPlayedMediaThreadSafe = new GetLastPlayedMediaThreadSafe(queueDao);
|
|
||||||
Thread thread = new Thread(getLastPlayedMediaThreadSafe);
|
|
||||||
thread.start();
|
|
||||||
|
|
||||||
try {
|
|
||||||
thread.join();
|
|
||||||
Queue lastMediaPlayed = getLastPlayedMediaThreadSafe.getQueueItem();
|
|
||||||
|
|
||||||
if (mediaItem.mediaId.equals(lastMediaPlayed.getId())) {
|
|
||||||
|
|
||||||
isPlausible = System.currentTimeMillis() > lastMediaPlayed.getLastPlay() + lastMediaPlayed.getDuration() * 1000;
|
|
||||||
}
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
return isPlausible;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class GetMediaThreadSafe implements Runnable {
|
private static class GetMediaThreadSafe implements Runnable {
|
||||||
private final QueueDao queueDao;
|
private final QueueDao queueDao;
|
||||||
private List<Queue> media;
|
private List<Queue> media;
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@ import java.util.List;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
public class MediaManager {
|
public class MediaManager {
|
||||||
|
private static final String TAG = "MediaManager";
|
||||||
|
|
||||||
public static void reset(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture) {
|
public static void reset(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture) {
|
||||||
if (mediaBrowserListenableFuture != null) {
|
if (mediaBrowserListenableFuture != null) {
|
||||||
mediaBrowserListenableFuture.addListener(() -> {
|
mediaBrowserListenableFuture.addListener(() -> {
|
||||||
|
|
@ -225,17 +227,13 @@ public class MediaManager {
|
||||||
|
|
||||||
public static void scrobble(MediaItem mediaItem) {
|
public static void scrobble(MediaItem mediaItem) {
|
||||||
if (mediaItem != null) {
|
if (mediaItem != null) {
|
||||||
if (getQueueRepository().isMediaPlayingPlausible(mediaItem)) {
|
getSongRepository().scrobble(mediaItem.mediaMetadata.extras.getString("id"));
|
||||||
getSongRepository().scrobble(mediaItem.mediaMetadata.extras.getString("id"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void saveChronology(MediaItem mediaItem) {
|
public static void saveChronology(MediaItem mediaItem) {
|
||||||
if (mediaItem != null) {
|
if (mediaItem != null) {
|
||||||
if (getQueueRepository().isMediaPlayingPlausible(mediaItem)) {
|
getChronologyRepository().insert(new Chronology(mediaItem));
|
||||||
getChronologyRepository().insert(new Chronology(mediaItem));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,8 @@ import android.app.PendingIntent.FLAG_UPDATE_CURRENT
|
||||||
import android.app.TaskStackBuilder
|
import android.app.TaskStackBuilder
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.os.Looper
|
||||||
|
import android.util.Log
|
||||||
import androidx.media3.cast.CastPlayer
|
import androidx.media3.cast.CastPlayer
|
||||||
import androidx.media3.cast.SessionAvailabilityListener
|
import androidx.media3.cast.SessionAvailabilityListener
|
||||||
import androidx.media3.common.*
|
import androidx.media3.common.*
|
||||||
|
|
@ -27,6 +29,8 @@ import com.google.common.util.concurrent.ListenableFuture
|
||||||
|
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
class MediaService : MediaLibraryService(), SessionAvailabilityListener {
|
class MediaService : MediaLibraryService(), SessionAvailabilityListener {
|
||||||
|
private val TAG = "MediaService"
|
||||||
|
|
||||||
private val librarySessionCallback = CustomMediaLibrarySessionCallback()
|
private val librarySessionCallback = CustomMediaLibrarySessionCallback()
|
||||||
|
|
||||||
private lateinit var player: ExoPlayer
|
private lateinit var player: ExoPlayer
|
||||||
|
|
@ -234,12 +238,9 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
|
||||||
override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
|
override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
|
||||||
if (mediaItem == null) return
|
if (mediaItem == null) return
|
||||||
|
|
||||||
if (mediaItem.mediaMetadata.extras?.getString("type") == Constants.MEDIA_TYPE_MUSIC) {
|
if(reason == Player.MEDIA_ITEM_TRANSITION_REASON_SEEK || reason == Player.MEDIA_ITEM_TRANSITION_REASON_AUTO) {
|
||||||
MediaManager.scrobble(mediaItem)
|
MediaManager.setLastPlayedTimestamp(mediaItem)
|
||||||
MediaManager.saveChronology(mediaItem)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MediaManager.setLastPlayedTimestamp(mediaItem)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onIsPlayingChanged(isPlaying: Boolean) {
|
override fun onIsPlayingChanged(isPlaying: Boolean) {
|
||||||
|
|
@ -250,6 +251,25 @@ class MediaService : MediaLibraryService(), SessionAvailabilityListener {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onPositionDiscontinuity(
|
||||||
|
oldPosition: Player.PositionInfo,
|
||||||
|
newPosition: Player.PositionInfo,
|
||||||
|
reason: Int
|
||||||
|
) {
|
||||||
|
super.onPositionDiscontinuity(oldPosition, newPosition, reason)
|
||||||
|
|
||||||
|
if(reason == Player.DISCONTINUITY_REASON_AUTO_TRANSITION) {
|
||||||
|
if (oldPosition.mediaItem?.mediaMetadata?.extras?.getString("type") == Constants.MEDIA_TYPE_MUSIC) {
|
||||||
|
MediaManager.scrobble(oldPosition.mediaItem)
|
||||||
|
MediaManager.saveChronology(oldPosition.mediaItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newPosition.mediaItem?.mediaMetadata?.extras?.getString("type") == Constants.MEDIA_TYPE_MUSIC) {
|
||||||
|
MediaManager.setLastPlayedTimestamp(newPosition.mediaItem)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue