From 744097694f0bb8b64d0229c84d133618e2c44815 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Tue, 17 Dec 2024 12:11:20 -0500 Subject: [PATCH] musikr: re-add playlist adding --- .../org/oxycblt/musikr/model/LibraryImpl.kt | 19 ++++++++++++++----- .../org/oxycblt/musikr/model/PlaylistImpl.kt | 4 +--- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/musikr/src/main/java/org/oxycblt/musikr/model/LibraryImpl.kt b/musikr/src/main/java/org/oxycblt/musikr/model/LibraryImpl.kt index 74b3dea97..6dc91a392 100644 --- a/musikr/src/main/java/org/oxycblt/musikr/model/LibraryImpl.kt +++ b/musikr/src/main/java/org/oxycblt/musikr/model/LibraryImpl.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package org.oxycblt.musikr.model import org.oxycblt.musikr.Music @@ -23,9 +23,11 @@ import org.oxycblt.musikr.MutableLibrary import org.oxycblt.musikr.Playlist import org.oxycblt.musikr.Song import org.oxycblt.musikr.fs.Path +import org.oxycblt.musikr.playlist.PlaylistHandle import org.oxycblt.musikr.playlist.db.StoredPlaylists import org.oxycblt.musikr.playlist.interpret.PlaylistInterpreter import org.oxycblt.musikr.playlist.interpret.PostPlaylist +import org.oxycblt.musikr.playlist.interpret.PrePlaylistInfo internal data class LibraryImpl( override val songs: Collection, @@ -68,15 +70,22 @@ internal data class LibraryImpl( val playlistImpl = requireNotNull(playlistUidMap[playlist.uid]) { "Playlist to rename is not in this library" } - playlistImpl.handle.rename(name) - val postPlaylist = playlistInterpreter.interpret(name, playlistImpl.handle) + val prePlaylist = playlistImpl.core.prePlaylist + prePlaylist.handle.rename(name) + val postPlaylist = playlistInterpreter.interpret(name, prePlaylist.handle) val core = NewPlaylistCore(postPlaylist, playlist.songs) val newPlaylist = PlaylistImpl(core) return copy(playlists = playlists - playlistImpl + newPlaylist) } override suspend fun addToPlaylist(playlist: Playlist, songs: List): MutableLibrary { - return this + val playlistImpl = requireNotNull(playlistUidMap[playlist.uid]) { + "Playlist to add to is not in this library" + } + playlistImpl.core.prePlaylist.handle.add(songs) + val core = NewPlaylistCore(playlistImpl.core.prePlaylist, playlistImpl.songs + songs) + val newPlaylist = PlaylistImpl(core) + return copy(playlists = playlists - playlistImpl + newPlaylist) } override suspend fun rewritePlaylist(playlist: Playlist, songs: List): MutableLibrary { @@ -88,7 +97,7 @@ internal data class LibraryImpl( } private class NewPlaylistCore( - override val prePlaylist: PostPlaylist, + override val prePlaylist: PrePlaylistInfo, override val songs: List ) : PlaylistCore } diff --git a/musikr/src/main/java/org/oxycblt/musikr/model/PlaylistImpl.kt b/musikr/src/main/java/org/oxycblt/musikr/model/PlaylistImpl.kt index 85dfc1e16..f42f2d505 100644 --- a/musikr/src/main/java/org/oxycblt/musikr/model/PlaylistImpl.kt +++ b/musikr/src/main/java/org/oxycblt/musikr/model/PlaylistImpl.kt @@ -30,15 +30,13 @@ internal interface PlaylistCore { val songs: List } -internal class PlaylistImpl(private val core: PlaylistCore) : Playlist { +internal class PlaylistImpl(val core: PlaylistCore) : Playlist { override val uid = core.prePlaylist.handle.uid override val name: Name.Known = core.prePlaylist.name override val durationMs = core.songs.sumOf { it.durationMs } override val cover = Cover.multi(core.songs) override val songs = core.songs - val handle = core.prePlaylist.handle - private var hashCode = 31 * (31 * uid.hashCode() + core.prePlaylist.hashCode()) + songs.hashCode()