Archive / / / notes-2.txt
2008-10-21 01:23:53 UTC
previous next
Things that can be shown in the right pane: * playlists - reorderable, not sortable, with save button, with search filter box * smart playlists - not reorderable, with search filter box * CD song list - not reorderable, with rip button * Entire libraries - not reorderable, with search filter box Thing Reorderable Sortable Drag source Drop target ----- ----------- -------- ----------- ----------- Playlist in database Yes No Yes Yes Playlist from file Yes No Yes Yes CD No Yes Yes No Entire library No Yes Yes No Album from clicking it in library No Yes Yes No Smart playlist (library filter) No Yes Yes No iPod No Yes Yes No TrackViewPane BrowserPane FileBrowserModel LibraryBrowserModel BrowserComboBoxModel or BrowserPane::Widget BrowserPane::FileModel BrowserPane::LibraryModel BrowserPane::ComboBoxModel PlaylistPane::Widget PlaylistPane::PlaylistModel ---------------------------------------------------- Database: Config: Name, Value Artists: ArtistID, ArtistName Albums: AlbumID, ArtistID, AlbumName, AlbumReleaseDate Tracks: TrackID, AlbumID, TrackName, TrackNumber, TrackRating, TrackURI Libraries: LibraryID, LibraryName, LibraryIcon LibraryTracks: LibraryID, TrackID Playlists: PlaylistID, PlaylistName PlaylistTracks: PlaylistID, TrackID, PlaylistOrder MemoryPlaylists: PlaylistID, PlaylistName MemoryPlaylistTracks: TrackID, PlaylistID, PlaylistOrder, ArtistName, AlbumName, AlbumReleaseDate, TrackName, TrackNumber, TrackURI Or, if accessing playlists from the TreeView is too slow, change that too: Library_<LibraryID>: LibraryOrderID, TrackID Playlist_<PlaylistID>: PlaylistOrderID, TrackID MemoryPlaylist_<MemoryPlaylistID>: PlaylistOrderID, ArtistName, AlbumName, etc. so that the TreeView row is also the sqlite primary key Database::tidy_up() - Make sure every artist has at least one album and every album has at least one artist - For each Album, if all tracks have the same release date set that as the album release date - Tell sqlite to tidy up unused space in it's database too? - Call after updating the libraries ------- Research to see if there's a way to monitor an entire directory tree using something like inotify ------------------ Database/Database Database/Library : PlaySource Database/Album : PlaySource Database/Artist : PlaySource Database/Playlist : PlaySource PlaySource CDSource : PlaySource NetworkLibrary : PlaySource RadioSource : PlaySource Track typedef boost::shared_ptr<Library> LibraryRef; typedef boost::shared_ptr<Playlist> PlaylistRef; typedef boost::shared_ptr<Artist> ArtistRef; typedef boost::shared_ptr<Album> AlbumRef; typedef boost::shared_ptr<vector<LibraryRef> > LibraryListRef; typedef boost::shared_ptr<vector<PlaylistRef> > PlaylistListRef; typedef boost::shared_ptr<vector<ArtistRef> > ArtistListRef; typedef boost::shared_ptr<vector<AlbumRef> > AlbumListRef; Database::get_libraries() : LibraryListRef Database::get_playlists() : PlaylistListRef Library::get_artists() : ArtistListRef Library::get_track(int index) : const Track& Library::get_name() : const Glib::ustring& Artist::get_albums() : AlbumListRef Artist::get_track(int index) : const Track& Artist::get_name() : const Glib::ustring& Album::get_track(int index) : const Track& Album::get_name() : const Glib::ustring& Playlist::get_track(int index) : const Track& Playlist::get_name() : const Glib::ustring& -- - Album/Artist should just use the same infrastructure as the "Search" feature. They could store a reference to the Library PlaySource inside them, and use the Search to find all tracks in their album/artist, and pass through any extra search terms