Added lastPlay info in queue model

This commit is contained in:
CappielloAntonio 2021-08-12 17:56:03 +02:00
parent 4adde9e951
commit 76f4f1d021
6 changed files with 44 additions and 3 deletions

View file

@ -15,7 +15,7 @@ import com.cappielloantonio.play.model.Queue;
import com.cappielloantonio.play.model.RecentSearch; import com.cappielloantonio.play.model.RecentSearch;
import com.cappielloantonio.play.model.Server; import com.cappielloantonio.play.model.Server;
@Database(entities = {Queue.class, Server.class, RecentSearch.class, Download.class}, version = 14, exportSchema = false) @Database(entities = {Queue.class, Server.class, RecentSearch.class, Download.class}, version = 15, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase { public abstract class AppDatabase extends RoomDatabase {
private static final String TAG = "AppDatabase"; private static final String TAG = "AppDatabase";

View file

@ -29,4 +29,7 @@ public interface QueueDao {
@Query("SELECT COUNT(*) FROM queue") @Query("SELECT COUNT(*) FROM queue")
int count(); int count();
@Query("UPDATE queue SET last_play=:timestamp WHERE id=:id")
void setLastPlay(String id, long timestamp);
} }

View file

@ -36,7 +36,10 @@ public class Queue {
@ColumnInfo(name = "duration") @ColumnInfo(name = "duration")
private long duration; private long duration;
public Queue(int trackOrder, String songID, String title, String albumId, String albumName, String artistId, String artistName, String primary, long duration) { @ColumnInfo(name = "last_play")
private long lastPlay;
public Queue(int trackOrder, String songID, String title, String albumId, String albumName, String artistId, String artistName, String primary, long duration, long lastPlay) {
this.trackOrder = trackOrder; this.trackOrder = trackOrder;
this.songID = songID; this.songID = songID;
this.title = title; this.title = title;
@ -46,6 +49,7 @@ public class Queue {
this.artistName = artistName; this.artistName = artistName;
this.primary = primary; this.primary = primary;
this.duration = duration; this.duration = duration;
this.lastPlay = lastPlay;
} }
public int getTrackOrder() { public int getTrackOrder() {
@ -119,4 +123,12 @@ public class Queue {
public void setDuration(long duration) { public void setDuration(long duration) {
this.duration = duration; this.duration = duration;
} }
public long getLastPlay() {
return lastPlay;
}
public void setLastPlay(long lastPlay) {
this.lastPlay = lastPlay;
}
} }

View file

@ -14,6 +14,7 @@ import com.cappielloantonio.play.util.MappingUtil;
import com.cappielloantonio.play.util.PreferenceUtil; import com.cappielloantonio.play.util.PreferenceUtil;
import com.cappielloantonio.play.util.QueueUtil; import com.cappielloantonio.play.util.QueueUtil;
import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -93,6 +94,12 @@ public class QueueRepository {
return count; return count;
} }
public void setTimestamp(Song song) {
SetTimestampThreadSafe delete = new SetTimestampThreadSafe(queueDao, song.getId());
Thread thread = new Thread(delete);
thread.start();
}
private static class GetSongsThreadSafe implements Runnable { private static class GetSongsThreadSafe implements Runnable {
private QueueDao queueDao; private QueueDao queueDao;
private List<Song> songs; private List<Song> songs;
@ -171,4 +178,19 @@ public class QueueRepository {
return count; return count;
} }
} }
private static class SetTimestampThreadSafe implements Runnable {
private QueueDao queueDao;
private String songId;
public SetTimestampThreadSafe(QueueDao queueDao, String songId) {
this.queueDao = queueDao;
this.songId = songId;
}
@Override
public void run() {
queueDao.setLastPlay(songId, Instant.now().toEpochMilli());
}
}
} }

View file

@ -32,6 +32,7 @@ import com.cappielloantonio.play.R;
import com.cappielloantonio.play.broadcast.receiver.MediaButtonIntentReceiver; import com.cappielloantonio.play.broadcast.receiver.MediaButtonIntentReceiver;
import com.cappielloantonio.play.interfaces.Playback; import com.cappielloantonio.play.interfaces.Playback;
import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.model.Playlist;
import com.cappielloantonio.play.model.Queue;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.repository.QueueRepository; import com.cappielloantonio.play.repository.QueueRepository;
import com.cappielloantonio.play.repository.SongRepository; import com.cappielloantonio.play.repository.SongRepository;
@ -598,7 +599,10 @@ public class MusicService extends Service implements Playback.PlaybackCallbacks
private void increaseSongCount() { private void increaseSongCount() {
SongRepository songRepository = new SongRepository(App.getInstance()); SongRepository songRepository = new SongRepository(App.getInstance());
QueueRepository queueRepository = new QueueRepository(App.getInstance());
songRepository.scrobble(getCurrentSong().getId()); songRepository.scrobble(getCurrentSong().getId());
queueRepository.setTimestamp(getCurrentSong());
} }
@Override @Override

View file

@ -14,7 +14,7 @@ public class QueueUtil {
List<Queue> queue = new ArrayList<>(); List<Queue> queue = new ArrayList<>();
for (Song song : songs) { for (Song song : songs) {
queue.add(new Queue(counter, song.getId(), song.getTitle(), song.getAlbumId(), song.getAlbumName(), song.getArtistId(), song.getArtistName(), song.getPrimary(), song.getDuration())); queue.add(new Queue(counter, song.getId(), song.getTitle(), song.getAlbumId(), song.getAlbumName(), song.getArtistId(), song.getArtistName(), song.getPrimary(), song.getDuration(), 0));
counter++; counter++;
} }