musikr: improve dead vertex error reporting
This commit is contained in:
parent
ff074d0e3a
commit
8c4b8dfb56
2 changed files with 44 additions and 21 deletions
|
@ -322,33 +322,46 @@ private class MusicGraphBuilderImpl : MusicGraph.Builder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal interface Vertex {
|
||||||
|
val tag: Any?
|
||||||
|
}
|
||||||
|
|
||||||
internal class SongVertex(
|
internal class SongVertex(
|
||||||
val preSong: PreSong,
|
val preSong: PreSong,
|
||||||
var albumVertex: AlbumVertex,
|
var albumVertex: AlbumVertex,
|
||||||
var artistVertices: MutableList<ArtistVertex>,
|
var artistVertices: MutableList<ArtistVertex>,
|
||||||
var genreVertices: MutableList<GenreVertex>
|
var genreVertices: MutableList<GenreVertex>
|
||||||
) {
|
) : Vertex {
|
||||||
var tag: Any? = null
|
override var tag: Any? = null
|
||||||
|
|
||||||
|
override fun toString() = "SongVertex(preSong=$preSong)"
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class AlbumVertex(val preAlbum: PreAlbum, var artistVertices: MutableList<ArtistVertex>) {
|
internal class AlbumVertex(val preAlbum: PreAlbum, var artistVertices: MutableList<ArtistVertex>) :
|
||||||
|
Vertex {
|
||||||
val songVertices = mutableSetOf<SongVertex>()
|
val songVertices = mutableSetOf<SongVertex>()
|
||||||
var tag: Any? = null
|
override var tag: Any? = null
|
||||||
|
|
||||||
|
override fun toString() = "AlbumVertex(preAlbum=$preAlbum)"
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class ArtistVertex(
|
internal class ArtistVertex(
|
||||||
val preArtist: PreArtist,
|
val preArtist: PreArtist,
|
||||||
) {
|
) : Vertex {
|
||||||
val songVertices = mutableSetOf<SongVertex>()
|
val songVertices = mutableSetOf<SongVertex>()
|
||||||
val albumVertices = mutableSetOf<AlbumVertex>()
|
val albumVertices = mutableSetOf<AlbumVertex>()
|
||||||
val genreVertices = mutableSetOf<GenreVertex>()
|
val genreVertices = mutableSetOf<GenreVertex>()
|
||||||
var tag: Any? = null
|
override var tag: Any? = null
|
||||||
|
|
||||||
|
override fun toString() = "ArtistVertex(preArtist=$preArtist)"
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class GenreVertex(val preGenre: PreGenre) {
|
internal class GenreVertex(val preGenre: PreGenre) : Vertex {
|
||||||
val songVertices = mutableSetOf<SongVertex>()
|
val songVertices = mutableSetOf<SongVertex>()
|
||||||
val artistVertices = mutableSetOf<ArtistVertex>()
|
val artistVertices = mutableSetOf<ArtistVertex>()
|
||||||
var tag: Any? = null
|
override var tag: Any? = null
|
||||||
|
|
||||||
|
override fun toString() = "GenreVertex(preGenre=$preGenre)"
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class PlaylistVertex(val prePlaylist: PrePlaylist) {
|
internal class PlaylistVertex(val prePlaylist: PrePlaylist) {
|
||||||
|
|
|
@ -21,6 +21,7 @@ package org.oxycblt.musikr.model
|
||||||
import org.oxycblt.musikr.Album
|
import org.oxycblt.musikr.Album
|
||||||
import org.oxycblt.musikr.Artist
|
import org.oxycblt.musikr.Artist
|
||||||
import org.oxycblt.musikr.Genre
|
import org.oxycblt.musikr.Genre
|
||||||
|
import org.oxycblt.musikr.Music
|
||||||
import org.oxycblt.musikr.MutableLibrary
|
import org.oxycblt.musikr.MutableLibrary
|
||||||
import org.oxycblt.musikr.Song
|
import org.oxycblt.musikr.Song
|
||||||
import org.oxycblt.musikr.graph.AlbumVertex
|
import org.oxycblt.musikr.graph.AlbumVertex
|
||||||
|
@ -29,6 +30,7 @@ import org.oxycblt.musikr.graph.GenreVertex
|
||||||
import org.oxycblt.musikr.graph.MusicGraph
|
import org.oxycblt.musikr.graph.MusicGraph
|
||||||
import org.oxycblt.musikr.graph.PlaylistVertex
|
import org.oxycblt.musikr.graph.PlaylistVertex
|
||||||
import org.oxycblt.musikr.graph.SongVertex
|
import org.oxycblt.musikr.graph.SongVertex
|
||||||
|
import org.oxycblt.musikr.graph.Vertex
|
||||||
import org.oxycblt.musikr.playlist.db.StoredPlaylists
|
import org.oxycblt.musikr.playlist.db.StoredPlaylists
|
||||||
import org.oxycblt.musikr.playlist.interpret.PlaylistInterpreter
|
import org.oxycblt.musikr.playlist.interpret.PlaylistInterpreter
|
||||||
|
|
||||||
|
@ -77,44 +79,52 @@ private class LibraryFactoryImpl() : LibraryFactory {
|
||||||
private class SongVertexCore(private val vertex: SongVertex) : SongCore {
|
private class SongVertexCore(private val vertex: SongVertex) : SongCore {
|
||||||
override val preSong = vertex.preSong
|
override val preSong = vertex.preSong
|
||||||
|
|
||||||
override fun resolveAlbum() = vertex.albumVertex.tag as Album
|
override fun resolveAlbum(): Album = tag(vertex.albumVertex)
|
||||||
|
|
||||||
override fun resolveArtists() = vertex.artistVertices.map { it.tag as Artist }
|
override fun resolveArtists(): List<Artist> = vertex.artistVertices.map { tag(it) }
|
||||||
|
|
||||||
override fun resolveGenres() = vertex.genreVertices.map { it.tag as Genre }
|
override fun resolveGenres(): List<Genre> = vertex.genreVertices.map { tag(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private class AlbumVertexCore(private val vertex: AlbumVertex) : AlbumCore {
|
private class AlbumVertexCore(private val vertex: AlbumVertex) : AlbumCore {
|
||||||
override val preAlbum = vertex.preAlbum
|
override val preAlbum = vertex.preAlbum
|
||||||
|
|
||||||
override val songs = vertex.songVertices.mapTo(mutableSetOf()) { it.tag as Song }
|
override val songs: Set<Song> = vertex.songVertices.mapTo(mutableSetOf()) { tag(it) }
|
||||||
|
|
||||||
override fun resolveArtists() = vertex.artistVertices.map { it.tag as Artist }
|
override fun resolveArtists(): List<Artist> = vertex.artistVertices.map { tag(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ArtistVertexCore(private val vertex: ArtistVertex) : ArtistCore {
|
private class ArtistVertexCore(private val vertex: ArtistVertex) : ArtistCore {
|
||||||
override val preArtist = vertex.preArtist
|
override val preArtist = vertex.preArtist
|
||||||
|
|
||||||
override val songs = vertex.songVertices.mapTo(mutableSetOf()) { it.tag as Song }
|
override val songs: Set<Song> = vertex.songVertices.mapTo(mutableSetOf()) { tag(it) }
|
||||||
|
|
||||||
override val albums = vertex.albumVertices.mapTo(mutableSetOf()) { it.tag as Album }
|
override val albums: Set<Album> = vertex.albumVertices.mapTo(mutableSetOf()) { tag(it) }
|
||||||
|
|
||||||
override fun resolveGenres() =
|
override fun resolveGenres(): Set<Genre> =
|
||||||
vertex.genreVertices.mapTo(mutableSetOf()) { it.tag as Genre }
|
vertex.genreVertices.mapTo(mutableSetOf()) { tag(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private class GenreVertexCore(vertex: GenreVertex) : GenreCore {
|
private class GenreVertexCore(vertex: GenreVertex) : GenreCore {
|
||||||
override val preGenre = vertex.preGenre
|
override val preGenre = vertex.preGenre
|
||||||
|
|
||||||
override val songs = vertex.songVertices.mapTo(mutableSetOf()) { it.tag as Song }
|
override val songs: Set<Song> = vertex.songVertices.mapTo(mutableSetOf()) { tag(it) }
|
||||||
|
|
||||||
override val artists = vertex.artistVertices.mapTo(mutableSetOf()) { it.tag as Artist }
|
override val artists: Set<Artist> = vertex.artistVertices.mapTo(mutableSetOf()) { tag(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private class PlaylistVertexCore(vertex: PlaylistVertex) : PlaylistCore {
|
private class PlaylistVertexCore(vertex: PlaylistVertex) : PlaylistCore {
|
||||||
override val prePlaylist = vertex.prePlaylist
|
override val prePlaylist = vertex.prePlaylist
|
||||||
|
|
||||||
override val songs =
|
override val songs: List<Song> =
|
||||||
vertex.songVertices.mapNotNull { vertex -> vertex?.let { it.tag as Song } }
|
vertex.songVertices.mapNotNull { vertex -> vertex?.let { tag(it) } }
|
||||||
|
}
|
||||||
|
|
||||||
|
private companion object {
|
||||||
|
private inline fun <reified T : Music> tag(vertex: Vertex): T {
|
||||||
|
val tag = vertex.tag
|
||||||
|
check(tag is T) { "Dead Vertex Detected: $vertex" }
|
||||||
|
return tag
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue