diff --git a/core/src/main/java/dev/jdtech/jellyfin/di/DatabaseModule.kt b/core/src/main/java/dev/jdtech/jellyfin/di/DatabaseModule.kt index 88c92dcc..6e811696 100644 --- a/core/src/main/java/dev/jdtech/jellyfin/di/DatabaseModule.kt +++ b/core/src/main/java/dev/jdtech/jellyfin/di/DatabaseModule.kt @@ -25,6 +25,6 @@ object DatabaseModule { .fallbackToDestructiveMigration() .allowMainThreadQueries() .build() - .serverDatabaseDao + .getServerDatabaseDao() } } diff --git a/data/build.gradle.kts b/data/build.gradle.kts index 9e28054d..de7d78d7 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -21,6 +21,7 @@ android { ksp { arg("room.schemaLocation", "$projectDir/schemas") + arg("room.generateKotlin", "true") } } diff --git a/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt b/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt index b0240609..1d84c004 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt @@ -26,5 +26,5 @@ import dev.jdtech.jellyfin.models.User ) @TypeConverters(Converters::class) abstract class ServerDatabase : RoomDatabase() { - abstract val serverDatabaseDao: ServerDatabaseDao + abstract fun getServerDatabaseDao(): ServerDatabaseDao } diff --git a/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt b/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt index 285a0c7a..727328e4 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt @@ -24,210 +24,210 @@ import dev.jdtech.jellyfin.models.User import java.util.UUID @Dao -abstract class ServerDatabaseDao { +interface ServerDatabaseDao { @Insert(onConflict = OnConflictStrategy.REPLACE) - abstract fun insertServer(server: Server) + fun insertServer(server: Server) @Insert(onConflict = OnConflictStrategy.REPLACE) - abstract fun insertServerAddress(address: ServerAddress) + fun insertServerAddress(address: ServerAddress) @Insert(onConflict = OnConflictStrategy.REPLACE) - abstract fun insertUser(user: User) + fun insertUser(user: User) @Update - abstract fun update(server: Server) + fun update(server: Server) @Query("SELECT * FROM servers WHERE id = :id") - abstract fun get(id: String): Server? + fun get(id: String): Server? @Query("SELECT * FROM users WHERE id = :id") - abstract fun getUser(id: UUID): User? + fun getUser(id: UUID): User? @Transaction @Query("SELECT * FROM servers WHERE id = :id") - abstract fun getServerWithAddresses(id: String): ServerWithAddresses + fun getServerWithAddresses(id: String): ServerWithAddresses @Transaction @Query("SELECT * FROM servers WHERE id = :id") - abstract fun getServerWithUsers(id: String): ServerWithUsers + fun getServerWithUsers(id: String): ServerWithUsers @Transaction @Query("SELECT * FROM servers WHERE id = :id") - abstract fun getServerWithAddressesAndUsers(id: String): ServerWithAddressesAndUsers? + fun getServerWithAddressesAndUsers(id: String): ServerWithAddressesAndUsers? @Query("DELETE FROM servers") - abstract fun clear() + fun clear() @Query("SELECT * FROM servers") - abstract fun getAllServersSync(): List + fun getAllServersSync(): List @Query("SELECT COUNT(*) FROM servers") - abstract fun getServersCount(): Int + fun getServersCount(): Int @Query("DELETE FROM servers WHERE id = :id") - abstract fun delete(id: String) + fun delete(id: String) @Query("DELETE FROM users WHERE id = :id") - abstract fun deleteUser(id: UUID) + fun deleteUser(id: UUID) @Query("DELETE FROM serverAddresses WHERE id = :id") - abstract fun deleteServerAddress(id: UUID) + fun deleteServerAddress(id: UUID) @Query("UPDATE servers SET currentUserId = :userId WHERE id = :serverId") - abstract fun updateServerCurrentUser(serverId: String, userId: UUID) + fun updateServerCurrentUser(serverId: String, userId: UUID) @Query("SELECT * FROM users WHERE id = (SELECT currentUserId FROM servers WHERE id = :serverId)") - abstract fun getServerCurrentUser(serverId: String): User? + fun getServerCurrentUser(serverId: String): User? @Query("SELECT * FROM serverAddresses WHERE id = (SELECT currentServerAddressId FROM servers WHERE id = :serverId)") - abstract fun getServerCurrentAddress(serverId: String): ServerAddress? + fun getServerCurrentAddress(serverId: String): ServerAddress? @Insert(onConflict = OnConflictStrategy.IGNORE) - abstract fun insertMovie(movie: FindroidMovieDto) + fun insertMovie(movie: FindroidMovieDto) @Insert(onConflict = OnConflictStrategy.REPLACE) - abstract fun insertSource(source: FindroidSourceDto) + fun insertSource(source: FindroidSourceDto) @Query("SELECT * FROM movies WHERE id = :id") - abstract fun getMovie(id: UUID): FindroidMovieDto + fun getMovie(id: UUID): FindroidMovieDto @Query("SELECT * FROM movies JOIN sources ON movies.id = sources.itemId ORDER BY movies.name ASC") - abstract fun getMoviesAndSources(): Map> + fun getMoviesAndSources(): Map> @Query("SELECT * FROM sources WHERE itemId = :itemId") - abstract fun getSources(itemId: UUID): List + fun getSources(itemId: UUID): List @Query("SELECT * FROM sources WHERE downloadId = :downloadId") - abstract fun getSourceByDownloadId(downloadId: Long): FindroidSourceDto? + fun getSourceByDownloadId(downloadId: Long): FindroidSourceDto? @Query("UPDATE sources SET downloadId = :downloadId WHERE id = :id") - abstract fun setSourceDownloadId(id: String, downloadId: Long) + fun setSourceDownloadId(id: String, downloadId: Long) @Query("UPDATE sources SET path = :path WHERE id = :id") - abstract fun setSourcePath(id: String, path: String) + fun setSourcePath(id: String, path: String) @Query("DELETE FROM sources WHERE id = :id") - abstract fun deleteSource(id: String) + fun deleteSource(id: String) @Query("DELETE FROM movies WHERE id = :id") - abstract fun deleteMovie(id: UUID) + fun deleteMovie(id: UUID) @Query("UPDATE userdata SET playbackPositionTicks = :playbackPositionTicks WHERE itemId = :itemId AND userid = :userId") - abstract fun setPlaybackPositionTicks(itemId: UUID, userId: UUID, playbackPositionTicks: Long) + fun setPlaybackPositionTicks(itemId: UUID, userId: UUID, playbackPositionTicks: Long) @Insert(onConflict = OnConflictStrategy.REPLACE) - abstract fun insertMediaStream(mediaStream: FindroidMediaStreamDto) + fun insertMediaStream(mediaStream: FindroidMediaStreamDto) @Query("SELECT * FROM mediastreams WHERE sourceId = :sourceId") - abstract fun getMediaStreamsBySourceId(sourceId: String): List + fun getMediaStreamsBySourceId(sourceId: String): List @Query("SELECT * FROM mediastreams WHERE downloadId = :downloadId") - abstract fun getMediaStreamByDownloadId(downloadId: Long): FindroidMediaStreamDto? + fun getMediaStreamByDownloadId(downloadId: Long): FindroidMediaStreamDto? @Query("UPDATE mediastreams SET downloadId = :downloadId WHERE id = :id") - abstract fun setMediaStreamDownloadId(id: UUID, downloadId: Long) + fun setMediaStreamDownloadId(id: UUID, downloadId: Long) @Query("UPDATE mediastreams SET path = :path WHERE id = :id") - abstract fun setMediaStreamPath(id: UUID, path: String) + fun setMediaStreamPath(id: UUID, path: String) @Query("DELETE FROM mediastreams WHERE id = :id") - abstract fun deleteMediaStream(id: UUID) + fun deleteMediaStream(id: UUID) @Query("DELETE FROM mediastreams WHERE sourceId = :sourceId") - abstract fun deleteMediaStreamsBySourceId(sourceId: String) + fun deleteMediaStreamsBySourceId(sourceId: String) @Query("UPDATE userdata SET played = :played WHERE userId = :userId AND itemId = :itemId") - abstract fun setPlayed(userId: UUID, itemId: UUID, played: Boolean) + fun setPlayed(userId: UUID, itemId: UUID, played: Boolean) @Query("UPDATE userdata SET favorite = :favorite WHERE userId = :userId AND itemId = :itemId") - abstract fun setFavorite(userId: UUID, itemId: UUID, favorite: Boolean) + fun setFavorite(userId: UUID, itemId: UUID, favorite: Boolean) @Insert(onConflict = OnConflictStrategy.REPLACE) - abstract fun insertTrickPlayManifest(trickPlayManifestDto: TrickPlayManifestDto) + fun insertTrickPlayManifest(trickPlayManifestDto: TrickPlayManifestDto) @Query("SELECT * FROM trickPlayManifests WHERE itemId = :itemId") - abstract fun getTrickPlayManifest(itemId: UUID): TrickPlayManifestDto? + fun getTrickPlayManifest(itemId: UUID): TrickPlayManifestDto? @Query("DELETE FROM trickPlayManifests WHERE itemId = :itemId") - abstract fun deleteTrickPlayManifest(itemId: UUID) + fun deleteTrickPlayManifest(itemId: UUID) @Query("SELECT * FROM movies ORDER BY name ASC") - abstract fun getMovies(): List + fun getMovies(): List @Query("SELECT * FROM movies WHERE serverId = :serverId ORDER BY name ASC") - abstract fun getMoviesByServerId(serverId: String): List + fun getMoviesByServerId(serverId: String): List @Insert(onConflict = OnConflictStrategy.IGNORE) - abstract fun insertShow(show: FindroidShowDto) + fun insertShow(show: FindroidShowDto) @Query("SELECT * FROM shows WHERE id = :id") - abstract fun getShow(id: UUID): FindroidShowDto + fun getShow(id: UUID): FindroidShowDto @Query("SELECT * FROM shows ORDER BY name ASC") - abstract fun getShows(): List + fun getShows(): List @Query("SELECT * FROM shows WHERE serverId = :serverId ORDER BY name ASC") - abstract fun getShowsByServerId(serverId: String): List + fun getShowsByServerId(serverId: String): List @Query("DELETE FROM shows WHERE id = :id") - abstract fun deleteShow(id: UUID) + fun deleteShow(id: UUID) @Insert(onConflict = OnConflictStrategy.IGNORE) - abstract fun insertSeason(show: FindroidSeasonDto) + fun insertSeason(show: FindroidSeasonDto) @Query("SELECT * FROM seasons WHERE id = :id") - abstract fun getSeason(id: UUID): FindroidSeasonDto + fun getSeason(id: UUID): FindroidSeasonDto @Query("SELECT * FROM seasons WHERE seriesId = :seriesId ORDER BY indexNumber ASC") - abstract fun getSeasonsByShowId(seriesId: UUID): List + fun getSeasonsByShowId(seriesId: UUID): List @Query("DELETE FROM seasons WHERE id = :id") - abstract fun deleteSeason(id: UUID) + fun deleteSeason(id: UUID) @Insert(onConflict = OnConflictStrategy.IGNORE) - abstract fun insertEpisode(episode: FindroidEpisodeDto) + fun insertEpisode(episode: FindroidEpisodeDto) @Query("SELECT * FROM episodes WHERE id = :id") - abstract fun getEpisode(id: UUID): FindroidEpisodeDto + fun getEpisode(id: UUID): FindroidEpisodeDto @Query("SELECT * FROM episodes WHERE seriesId = :seriesId ORDER BY parentIndexNumber ASC, indexNumber ASC") - abstract fun getEpisodesByShowId(seriesId: UUID): List + fun getEpisodesByShowId(seriesId: UUID): List @Query("SELECT * FROM episodes WHERE seasonId = :seasonId ORDER BY indexNumber ASC") - abstract fun getEpisodesBySeasonId(seasonId: UUID): List + fun getEpisodesBySeasonId(seasonId: UUID): List @Query("SELECT * FROM episodes WHERE serverId = :serverId ORDER BY seriesName ASC, parentIndexNumber ASC, indexNumber ASC") - abstract fun getEpisodesByServerId(serverId: String): List + fun getEpisodesByServerId(serverId: String): List @Query("SELECT episodes.id, episodes.serverId, episodes.seasonId, episodes.seriesId, episodes.name, episodes.seriesName, episodes.overview, episodes.indexNumber, episodes.indexNumberEnd, episodes.parentIndexNumber, episodes.runtimeTicks, episodes.premiereDate, episodes.communityRating FROM episodes INNER JOIN userdata ON episodes.id = userdata.itemId WHERE serverId = :serverId AND playbackPositionTicks > 0 ORDER BY episodes.parentIndexNumber ASC, episodes.indexNumber ASC") - abstract fun getEpisodeResumeItems(serverId: String): List + fun getEpisodeResumeItems(serverId: String): List @Query("DELETE FROM episodes WHERE id = :id") - abstract fun deleteEpisode(id: UUID) + fun deleteEpisode(id: UUID) @Query("DELETE FROM episodes WHERE seasonId = :seasonId") - abstract fun deleteEpisodesBySeasonId(seasonId: UUID) + fun deleteEpisodesBySeasonId(seasonId: UUID) @Insert(onConflict = OnConflictStrategy.REPLACE) - abstract fun insertIntro(intro: IntroDto) + fun insertIntro(intro: IntroDto) @Query("SELECT * FROM intros WHERE itemId = :itemId") - abstract fun getIntro(itemId: UUID): IntroDto? + fun getIntro(itemId: UUID): IntroDto? @Query("DELETE FROM intros WHERE itemId = :itemId") - abstract fun deleteIntro(itemId: UUID) + fun deleteIntro(itemId: UUID) @Query("SELECT * FROM seasons") - abstract fun getSeasons(): List + fun getSeasons(): List @Query("SELECT * FROM episodes") - abstract fun getEpisodes(): List + fun getEpisodes(): List @Query("SELECT * FROM userdata WHERE itemId = :itemId AND userId = :userId") - abstract fun getUserData(itemId: UUID, userId: UUID): FindroidUserDataDto? + fun getUserData(itemId: UUID, userId: UUID): FindroidUserDataDto? @Transaction - open fun getUserDataOrCreateNew(itemId: UUID, userId: UUID): FindroidUserDataDto { + fun getUserDataOrCreateNew(itemId: UUID, userId: UUID): FindroidUserDataDto { var userData = getUserData(itemId, userId) // Create user data when there is none @@ -246,23 +246,23 @@ abstract class ServerDatabaseDao { } @Insert(onConflict = OnConflictStrategy.REPLACE) - abstract fun insertUserData(userData: FindroidUserDataDto) + fun insertUserData(userData: FindroidUserDataDto) @Query("DELETE FROM userdata WHERE itemId = :itemId") - abstract fun deleteUserData(itemId: UUID) + fun deleteUserData(itemId: UUID) @Query("SELECT * FROM userdata WHERE userId = :userId AND itemId = :itemId AND toBeSynced = 1") - abstract fun getUserDataToBeSynced(userId: UUID, itemId: UUID): FindroidUserDataDto? + fun getUserDataToBeSynced(userId: UUID, itemId: UUID): FindroidUserDataDto? @Query("UPDATE userdata SET toBeSynced = :toBeSynced WHERE itemId = :itemId AND userId = :userId") - abstract fun setUserDataToBeSynced(userId: UUID, itemId: UUID, toBeSynced: Boolean) + fun setUserDataToBeSynced(userId: UUID, itemId: UUID, toBeSynced: Boolean) @Query("SELECT * FROM movies WHERE serverId = :serverId AND name LIKE '%' || :name || '%'") - abstract fun searchMovies(serverId: String, name: String): List + fun searchMovies(serverId: String, name: String): List @Query("SELECT * FROM shows WHERE serverId = :serverId AND name LIKE '%' || :name || '%'") - abstract fun searchShows(serverId: String, name: String): List + fun searchShows(serverId: String, name: String): List @Query("SELECT * FROM episodes WHERE serverId = :serverId AND name LIKE '%' || :name || '%'") - abstract fun searchEpisodes(serverId: String, name: String): List + fun searchEpisodes(serverId: String, name: String): List }