Skip to content

Commit

Permalink
refactor: rewrite handling after song parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
zyrouge committed Jan 21, 2025
1 parent e96b81c commit 9002ac6
Show file tree
Hide file tree
Showing 32 changed files with 716 additions and 630 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,41 +5,38 @@ import io.github.zyrouge.symphony.services.database.store.ArtworkStore
import io.github.zyrouge.symphony.utils.KeyGenerator

class Database(symphony: Symphony) {
private val persistent = PersistentDatabase.create(symphony)
val persistent = PersistentDatabase.create(symphony)

val albumArtistSongsIdGenerator = KeyGenerator.TimeIncremental()
val albumArtistsIdGenerator = KeyGenerator.TimeIncremental()
val albumSongsIdGenerator = KeyGenerator.TimeIncremental()
val albumsIdGenerator = KeyGenerator.TimeIncremental()
val artistSongsIdGenerator = KeyGenerator.TimeIncremental()
val artistsIdGenerator = KeyGenerator.TimeIncremental()
val mediaTreeFoldersIdGenerator = KeyGenerator.TimeIncremental()
val mediaTreeSongFilesIdGenerator = KeyGenerator.TimeIncremental()
val mediaTreeLyricsFilesIdGenerator = KeyGenerator.TimeIncremental()
val genreSongsIdGenerator = KeyGenerator.TimeIncremental()
val genreIdGenerator = KeyGenerator.TimeIncremental()
val playlistSongsIdGenerator = KeyGenerator.TimeIncremental()
val playlistsIdGenerator = KeyGenerator.TimeIncremental()
val songFilesIdGenerator = KeyGenerator.TimeIncremental()
val songLyricsIdGenerator = KeyGenerator.TimeIncremental()
val songsIdGenerator = KeyGenerator.TimeIncremental()
val albumsIdGenerator = KeyGenerator.TimeCounterRandomMix()
val albumArtistMappingIdGenerator = KeyGenerator.TimeCounterRandomMix()
val albumSongMappingIdGenerator = KeyGenerator.TimeCounterRandomMix()
val artistsIdGenerator = KeyGenerator.TimeCounterRandomMix()
val artistSongMappingIdGenerator = KeyGenerator.TimeCounterRandomMix()
val artworksIdGenerator = KeyGenerator.TimeCounterRandomMix()
val artworkIndicesIdGenerator = KeyGenerator.TimeCounterRandomMix()
val genresIdGenerator = KeyGenerator.TimeCounterRandomMix()
val genreSongMappingIdGenerator = KeyGenerator.TimeCounterRandomMix()
val mediaTreeFoldersIdGenerator = KeyGenerator.TimeCounterRandomMix()
val mediaTreeSongFilesIdGenerator = KeyGenerator.TimeCounterRandomMix()
val mediaTreeLyricFilesIdGenerator = KeyGenerator.TimeCounterRandomMix()
val playlistsIdGenerator = KeyGenerator.TimeCounterRandomMix()
val playlistSongMappingIdGenerator = KeyGenerator.TimeCounterRandomMix()
val songLyricsIdGenerator = KeyGenerator.TimeCounterRandomMix()

val albumArtistSongs get() = persistent.albumArtistSongs()
val albumArtists get() = persistent.albumArtists()
val albumSongs get() = persistent.albumSongs()
val albums get() = persistent.albums()
val artistSongs get() = persistent.artistSongs()
val albumArtistMapping get() = persistent.albumArtistMapping()
val albumSongMapping get() = persistent.albumSongMapping()
val artists get() = persistent.artists()
val artwork = ArtworkStore(symphony)
val artistSongMapping get() = persistent.artistSongMapping()
val artworks = ArtworkStore(symphony)
val artworkIndices get() = persistent.artworkIndices()
val genreSongs get() = persistent.genreSongs()
val genre get() = persistent.genre()
val genres get() = persistent.genre()
val genreSongMapping get() = persistent.genreSongMapping()
val mediaTreeFolders get() = persistent.mediaTreeFolders()
val mediaTreeLyricFiles get() = persistent.mediaTreeLyricFiles()
val mediaTreeSongFiles get() = persistent.mediaTreeSongFiles()
val mediaTreeLyricsFiles get() = persistent.mediaTreeLyricsFiles()
val playlistSongs get() = persistent.playlistSongs()
val playlists get() = persistent.playlists()
val songFiles get() = persistent.songFiles()
val playlistSongMapping get() = persistent.playlistSongMapping()
val songLyrics get() = persistent.songLyrics()
val songs get() = persistent.songs()
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,11 @@ import io.github.zyrouge.symphony.services.database.store.ArtworkIndexStore
import io.github.zyrouge.symphony.services.database.store.GenreSongMappingStore
import io.github.zyrouge.symphony.services.database.store.GenreStore
import io.github.zyrouge.symphony.services.database.store.MediaTreeFolderStore
import io.github.zyrouge.symphony.services.database.store.MediaTreeLyricsFileStore
import io.github.zyrouge.symphony.services.database.store.MediaTreeLyricFileStore
import io.github.zyrouge.symphony.services.database.store.MediaTreeSongFileStore
import io.github.zyrouge.symphony.services.database.store.PlaylistSongMappingStore
import io.github.zyrouge.symphony.services.database.store.PlaylistStore
import io.github.zyrouge.symphony.services.database.store.SongFileStore
import io.github.zyrouge.symphony.services.database.store.SongLyricsStore
import io.github.zyrouge.symphony.services.database.store.SongLyricStore
import io.github.zyrouge.symphony.services.database.store.SongStore
import io.github.zyrouge.symphony.services.groove.entities.Album
import io.github.zyrouge.symphony.services.groove.entities.AlbumArtistMapping
Expand All @@ -32,8 +31,7 @@ import io.github.zyrouge.symphony.services.groove.entities.GenreSongMapping
import io.github.zyrouge.symphony.services.groove.entities.Playlist
import io.github.zyrouge.symphony.services.groove.entities.PlaylistSongMapping
import io.github.zyrouge.symphony.services.groove.entities.Song
import io.github.zyrouge.symphony.services.groove.entities.SongFile
import io.github.zyrouge.symphony.services.groove.entities.SongLyrics
import io.github.zyrouge.symphony.services.groove.entities.SongLyric
import io.github.zyrouge.symphony.utils.RoomConvertors

@Database(
Expand All @@ -48,12 +46,11 @@ import io.github.zyrouge.symphony.utils.RoomConvertors
GenreSongMapping::class,
Genre::class,
MediaTreeFolderStore::class,
MediaTreeLyricsFileStore::class,
MediaTreeLyricFileStore::class,
MediaTreeSongFileStore::class,
PlaylistSongMapping::class,
Playlist::class,
SongFile::class,
SongLyrics::class,
SongLyric::class,
Song::class,
],
)
Expand All @@ -68,12 +65,11 @@ abstract class PersistentDatabase : RoomDatabase() {
abstract fun genreSongMapping(): GenreSongMappingStore
abstract fun genre(): GenreStore
abstract fun mediaTreeFolders(): MediaTreeFolderStore
abstract fun mediaTreeLyricFiles(): MediaTreeLyricFileStore
abstract fun mediaTreeSongFiles(): MediaTreeSongFileStore
abstract fun mediaTreeLyricsFiles(): MediaTreeLyricsFileStore
abstract fun playlistSongMapping(): PlaylistSongMappingStore
abstract fun playlists(): PlaylistStore
abstract fun songFiles(): SongFileStore
abstract fun songLyrics(): SongLyricsStore
abstract fun songLyrics(): SongLyricStore
abstract fun songs(): SongStore

companion object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ package io.github.zyrouge.symphony.services.database.store

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import io.github.zyrouge.symphony.services.groove.entities.AlbumArtistMapping

@Dao
interface AlbumArtistMappingStore {
@Insert
suspend fun insert(vararg entities: AlbumArtistMapping)
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun upsert(vararg entities: AlbumArtistMapping)
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ package io.github.zyrouge.symphony.services.database.store

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import io.github.zyrouge.symphony.services.groove.entities.AlbumSongMapping

@Dao
interface AlbumSongMappingStore {
@Insert
suspend fun insert(vararg entities: AlbumSongMapping)
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun upsert(vararg entities: AlbumSongMapping)
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import androidx.room.Insert
import androidx.room.Query
import androidx.room.Update
import io.github.zyrouge.symphony.services.groove.entities.Album
import kotlinx.coroutines.flow.Flow

@Dao
interface AlbumStore {
Expand All @@ -15,9 +14,6 @@ interface AlbumStore {
@Update
suspend fun update(vararg entities: Album): Int

@Query("SELECT * FROM ${Album.TABLE}")
suspend fun values(): List<Album>

@Query("SELECT * FROM ${Album.TABLE}")
suspend fun valuesAsFlow(): Flow<List<Album>>
@Query("SELECT * FROM ${Album.TABLE} WHERE ${Album.COLUMN_NAME} = :name LIMIT 1")
fun findByName(name: String): Album?
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ package io.github.zyrouge.symphony.services.database.store

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import io.github.zyrouge.symphony.services.groove.entities.ArtistSongMapping

@Dao
interface ArtistSongMappingStore {
@Insert
suspend fun insert(vararg entities: ArtistSongMapping)
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun upsert(vararg entities: ArtistSongMapping)
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ package io.github.zyrouge.symphony.services.database.store

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.MapColumn
import androidx.room.Query
import androidx.room.Update
import io.github.zyrouge.symphony.services.groove.entities.Artist
import kotlinx.coroutines.flow.Flow

@Dao
interface ArtistStore {
Expand All @@ -15,9 +15,8 @@ interface ArtistStore {
@Update
suspend fun update(vararg entities: Artist): Int

@Query("SELECT * FROM ${Artist.TABLE}")
suspend fun values(): List<Artist>

@Query("SELECT * FROM ${Artist.TABLE}")
suspend fun valuesAsFlow(): Flow<List<Artist>>
@Query("SELECT ${Artist.COLUMN_ID}, ${Artist.COLUMN_NAME} FROM ${Artist.TABLE} WHERE ${Artist.COLUMN_NAME} in (:names)")
fun entriesByNameNameIdMapped(names: Collection<String>): Map<
@MapColumn(Artist.COLUMN_NAME) String,
@MapColumn(Artist.COLUMN_ID) String>
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ interface ArtworkIndexStore {
suspend fun upsert(vararg entities: ArtworkIndex): List<String>

@Query("SELECT * FROM ${ArtworkIndex.TABLE}")
suspend fun entriesSongIdMapped(): Map<@MapColumn(ArtworkIndex.COLUMN_SONG_ID) String, ArtworkIndex>
fun entriesSongIdMapped(): Map<@MapColumn(ArtworkIndex.COLUMN_SONG_ID) String, ArtworkIndex>
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ package io.github.zyrouge.symphony.services.database.store

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import io.github.zyrouge.symphony.services.groove.entities.GenreSongMapping

@Dao
interface GenreSongMappingStore {
@Insert
suspend fun insert(vararg entities: GenreSongMapping)
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun upsert(vararg entities: GenreSongMapping)
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,13 @@ package io.github.zyrouge.symphony.services.database.store
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Update
import io.github.zyrouge.symphony.services.groove.entities.Genre
import kotlinx.coroutines.flow.Flow

@Dao
interface GenreStore {
@Insert
suspend fun insert(vararg entities: Genre): List<String>

@Update
suspend fun update(vararg entities: Genre): Int

@Query("SELECT * FROM ${Genre.TABLE}")
suspend fun values(): List<Genre>

@Query("SELECT * FROM ${Genre.TABLE}")
suspend fun valuesAsFlow(): Flow<List<Genre>>
@Query("SELECT * FROM ${Genre.TABLE} WHERE ${Genre.COLUMN_NAME} = :name LIMIT 1")
fun findByName(name: String): Genre?
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ package io.github.zyrouge.symphony.services.database.store

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.MapColumn
import androidx.room.Query
import androidx.room.Update
import io.github.zyrouge.symphony.services.groove.entities.MediaTreeFolder
import kotlinx.coroutines.flow.Flow

@Dao
interface MediaTreeFolderStore {
Expand All @@ -15,15 +15,15 @@ interface MediaTreeFolderStore {
@Update()
suspend fun update(vararg entities: MediaTreeFolder): Int

@Query("SELECT * FROM ${MediaTreeFolder.TABLE} WHERE ${MediaTreeFolder.COLUMN_PARENT_ID} = :parentId AND ${MediaTreeFolder.COLUMN_NAME} = :name LIMIT 1")
fun findByName(parentId: String?, name: String): MediaTreeFolder?
@Query("SELECT id FROM ${MediaTreeFolder.TABLE} WHERE ${MediaTreeFolder.COLUMN_PARENT_ID} = :parentId")
fun ids(parentId: String): List<String>

@Query("SELECT * FROM ${MediaTreeFolder.TABLE} WHERE ${MediaTreeFolder.COLUMN_INTERNAL_NAME} = :internalName LIMIT 1")
fun findByInternalName(internalName: String): MediaTreeFolder?
@Query("SELECT * FROM ${MediaTreeFolder.TABLE} WHERE ${MediaTreeFolder.COLUMN_IS_HEAD} = 1 AND ${MediaTreeFolder.COLUMN_NAME} = :name")
fun findHeadByName(name: String): MediaTreeFolder?

@Query("SELECT * FROM ${MediaTreeFolder.TABLE}")
fun values(): List<MediaTreeFolder>
@Query("SELECT * FROM ${MediaTreeFolder.TABLE} WHERE ${MediaTreeFolder.COLUMN_PARENT_ID} = :parentId AND ${MediaTreeFolder.COLUMN_NAME} = :name")
fun findByName(parentId: String, name: String): MediaTreeFolder?

@Query("SELECT * FROM ${MediaTreeFolder.TABLE}")
fun valuesAsFlow(): Flow<List<MediaTreeFolder>>
@Query("SELECT * FROM ${MediaTreeFolder.TABLE} WHERE ${MediaTreeFolder.COLUMN_PARENT_ID} = :parentId")
fun entriesNameMapped(parentId: String): Map<@MapColumn(MediaTreeFolder.COLUMN_NAME) String, MediaTreeFolder>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package io.github.zyrouge.symphony.services.database.store

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.MapColumn
import androidx.room.Query
import androidx.room.Update
import io.github.zyrouge.symphony.services.groove.entities.MediaTreeLyricFile

@Dao
interface MediaTreeLyricFileStore {
@Insert()
suspend fun insert(vararg entities: MediaTreeLyricFile): List<String>

@Update()
suspend fun update(vararg entities: MediaTreeLyricFile): Int

@Query("SELECT id FROM ${MediaTreeLyricFile.TABLE} WHERE ${MediaTreeLyricFile.COLUMN_PARENT_ID} = :parentId")
fun ids(parentId: String): List<String>

@Query("SELECT * FROM ${MediaTreeLyricFile.TABLE} WHERE ${MediaTreeLyricFile.COLUMN_PARENT_ID} = :parentId AND ${MediaTreeLyricFile.COLUMN_NAME} = :name LIMIT 1")
fun findByName(parentId: String, name: String): MediaTreeLyricFile?

@Query("SELECT * FROM ${MediaTreeLyricFile.TABLE} WHERE ${MediaTreeLyricFile.COLUMN_PARENT_ID} = :parentId")
fun entriesNameMapped(parentId: String?): Map<@MapColumn(MediaTreeLyricFile.COLUMN_NAME) String, MediaTreeLyricFile>
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,28 @@ package io.github.zyrouge.symphony.services.database.store

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.MapColumn
import androidx.room.Query
import androidx.room.Update
import io.github.zyrouge.symphony.services.groove.entities.MediaTreeFolder
import io.github.zyrouge.symphony.services.groove.entities.MediaTreeSongFile
import kotlinx.coroutines.flow.Flow

@Dao
interface MediaTreeSongFileStore {
@Insert
fun insert(vararg entities: MediaTreeSongFile): List<String>
suspend fun insert(vararg entities: MediaTreeSongFile): List<String>

@Update
fun update(vararg entities: MediaTreeSongFile): Int
suspend fun update(vararg entities: MediaTreeSongFile): Int

@Query("SELECT * FROM ${MediaTreeSongFile.TABLE} WHERE ${MediaTreeSongFile.COLUMN_PARENT_ID} = :parentId AND ${MediaTreeSongFile.COLUMN_NAME} = :name LIMIT 1")
fun findByName(parentId: String, name: String): MediaTreeFolder?
@Query("DELETE FROM ${MediaTreeSongFile.TABLE} WHERE ${MediaTreeSongFile.COLUMN_ID} IN (:ids)")
suspend fun delete(ids: Collection<String>): Int

@Query("SELECT * FROM ${MediaTreeSongFile.TABLE}")
suspend fun values(): List<MediaTreeSongFile>
@Query("SELECT id FROM ${MediaTreeSongFile.TABLE} WHERE ${MediaTreeSongFile.COLUMN_PARENT_ID} = :parentId")
fun ids(parentId: String): List<String>

@Query("SELECT * FROM ${MediaTreeSongFile.TABLE}")
suspend fun valuesAsFlow(): Flow<List<MediaTreeSongFile>>
@Query("SELECT * FROM ${MediaTreeSongFile.TABLE} WHERE $${MediaTreeSongFile.COLUMN_PARENT_ID} = :parentId AND ${MediaTreeSongFile.COLUMN_NAME} = :name LIMIT 1")
fun findByName(parentId: String, name: String): MediaTreeSongFile?

@Query("SELECT * FROM ${MediaTreeSongFile.TABLE} WHERE ${MediaTreeSongFile.COLUMN_PARENT_ID} = :parentId")
fun entriesNameMapped(parentId: String?): Map<@MapColumn(MediaTreeSongFile.COLUMN_NAME) String, MediaTreeSongFile>
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,10 @@ package io.github.zyrouge.symphony.services.database.store

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Transaction
import io.github.zyrouge.symphony.services.groove.entities.PlaylistSongMapping

@Dao
interface PlaylistSongMappingStore {
@Insert
suspend fun insert(vararg entities: PlaylistSongMapping)

@Insert
@Transaction
suspend fun updateInTransaction(vararg entities: PlaylistSongMapping): Int
}
Loading

0 comments on commit 9002ac6

Please sign in to comment.