From f044db142ce5b96caa7af3a8e27a7de626cabdc5 Mon Sep 17 00:00:00 2001 From: antonio Date: Wed, 2 Aug 2023 10:47:37 +0200 Subject: [PATCH] feat: created class for storing information on tracks, albums, and artists starred or unstarred while offline or when the server was unreachable --- .../tempo/database/AppDatabase.java | 11 +++++-- .../tempo/database/dao/FavoriteDao.java | 26 +++++++++++++++ .../cappielloantonio/tempo/model/Favorite.kt | 32 +++++++++++++++++++ 3 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/cappielloantonio/tempo/database/dao/FavoriteDao.java create mode 100644 app/src/main/java/com/cappielloantonio/tempo/model/Favorite.kt diff --git a/app/src/main/java/com/cappielloantonio/tempo/database/AppDatabase.java b/app/src/main/java/com/cappielloantonio/tempo/database/AppDatabase.java index e45e3cab..3c821a26 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/database/AppDatabase.java +++ b/app/src/main/java/com/cappielloantonio/tempo/database/AppDatabase.java @@ -1,5 +1,6 @@ package com.cappielloantonio.tempo.database; +import androidx.room.AutoMigration; import androidx.room.Database; import androidx.room.Room; import androidx.room.RoomDatabase; @@ -9,19 +10,21 @@ import com.cappielloantonio.tempo.App; import com.cappielloantonio.tempo.database.converter.DateConverters; import com.cappielloantonio.tempo.database.dao.ChronologyDao; import com.cappielloantonio.tempo.database.dao.DownloadDao; +import com.cappielloantonio.tempo.database.dao.FavoriteDao; import com.cappielloantonio.tempo.database.dao.QueueDao; import com.cappielloantonio.tempo.database.dao.RecentSearchDao; import com.cappielloantonio.tempo.database.dao.ServerDao; import com.cappielloantonio.tempo.model.Chronology; import com.cappielloantonio.tempo.model.Download; +import com.cappielloantonio.tempo.model.Favorite; import com.cappielloantonio.tempo.model.Queue; import com.cappielloantonio.tempo.model.RecentSearch; import com.cappielloantonio.tempo.model.Server; @Database( - version = 1, - entities = {Queue.class, Server.class, RecentSearch.class, Download.class, Chronology.class} - // autoMigrations = {@AutoMigration(from = 61, to = 62)} + version = 2, + entities = {Queue.class, Server.class, RecentSearch.class, Download.class, Chronology.class, Favorite.class}, + autoMigrations = {@AutoMigration(from = 1, to = 2)} ) @TypeConverters({DateConverters.class}) public abstract class AppDatabase extends RoomDatabase { @@ -47,4 +50,6 @@ public abstract class AppDatabase extends RoomDatabase { public abstract DownloadDao downloadDao(); public abstract ChronologyDao chronologyDao(); + + public abstract FavoriteDao favoriteDao(); } diff --git a/app/src/main/java/com/cappielloantonio/tempo/database/dao/FavoriteDao.java b/app/src/main/java/com/cappielloantonio/tempo/database/dao/FavoriteDao.java new file mode 100644 index 00000000..ec6ae688 --- /dev/null +++ b/app/src/main/java/com/cappielloantonio/tempo/database/dao/FavoriteDao.java @@ -0,0 +1,26 @@ +package com.cappielloantonio.tempo.database.dao; + +import androidx.room.Dao; +import androidx.room.Delete; +import androidx.room.Insert; +import androidx.room.OnConflictStrategy; +import androidx.room.Query; + +import com.cappielloantonio.tempo.model.Favorite; + +import java.util.List; + +@Dao +public interface FavoriteDao { + @Query("SELECT * FROM favorite") + List getAll(); + + @Insert(onConflict = OnConflictStrategy.IGNORE) + void insert(Favorite favorite); + + @Delete + void delete(Favorite favorite); + + @Query("DELETE FROM favorite") + void deleteAll(); +} \ No newline at end of file diff --git a/app/src/main/java/com/cappielloantonio/tempo/model/Favorite.kt b/app/src/main/java/com/cappielloantonio/tempo/model/Favorite.kt new file mode 100644 index 00000000..d5bbb8c4 --- /dev/null +++ b/app/src/main/java/com/cappielloantonio/tempo/model/Favorite.kt @@ -0,0 +1,32 @@ +package com.cappielloantonio.tempo.model + +import android.os.Parcelable +import androidx.annotation.Keep +import androidx.annotation.Nullable +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.PrimaryKey +import kotlinx.parcelize.Parcelize + +@Keep +@Parcelize +@Entity(tableName = "favorite") +data class Favorite( + @PrimaryKey + @ColumnInfo(name = "timestamp") + var timestamp: Long, + + @ColumnInfo(name = "songId") + val songId: String?, + + @ColumnInfo(name = "albumId") + val albumId: String?, + + @ColumnInfo(name = "artistId") + val artistId: String?, + + @ColumnInfo(name = "toStar") + val toStar: Boolean, +) : Parcelable { + override fun toString(): String = (songId ?: "null") + (albumId ?: "null") + (artistId ?: "null") +} \ No newline at end of file