Sayonara Player
AbstractLibrary.h
1/* AbstractLibrary.h */
2
3/* Copyright (C) 2011-2020 Michael Lugmair (Lucio Carreras)
4 *
5 * This file is part of sayonara player
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21#ifndef ABSTRACTLIBRARY_H
22#define ABSTRACTLIBRARY_H
23
24#include "Utils/Library/LibraryNamespaces.h"
25#include "Utils/Library/Filter.h"
26#include "Utils/Library/Sorting.h"
27#include "Utils/Pimpl.h"
28
29#include <QFile>
30
31#define prepare_tracks_for_playlist_files static_cast<void (AbstractLibrary::*) (const QStringList&)>(&AbstractLibrary::psl_prepare_tracks_for_playlist)
32#define prepare_tracks_for_playlistIdxs static_cast<void (AbstractLibrary::*) (const IdxList&)>(&AbstractLibrary::psl_prepare_tracks_for_playlist)
33
34class Genre;
35namespace Gui
36{
37 class ExtensionSet;
38}
39
41
43 public QObject
44{
45 Q_OBJECT
46 PIMPL(AbstractLibrary)
47
48 public:
49 explicit AbstractLibrary(LibraryPlaylistInteractor* playlistInteractor, QObject* parent = nullptr);
50 virtual ~AbstractLibrary();
51
52 Library::Sortings sortorder() const;
53 Library::Filter filter() const;
54 // calls fetch_by_filter and emits
55 void changeFilter(Library::Filter, bool force = false);
56
57 const MetaDataList& tracks() const;
58 const AlbumList& albums() const;
59 const ArtistList& artists() const;
60 const MetaDataList& currentTracks() const;
61
62 const Util::Set<TrackID>& selectedTracks() const;
63 const Util::Set<AlbumId>& selectedAlbums() const;
64 const Util::Set<ArtistId>& selectedArtists() const;
65
66 // emits new tracks, very similar to psl_selected_albums_changed
67 void changeCurrentDisc(Disc track);
68
69 bool isLoaded() const;
70
71 void setExtensions(const Gui::ExtensionSet& extensions);
72 Gui::ExtensionSet extensions() const;
73
74 virtual bool isReloading() const;
75 virtual bool isEmpty() const;
76
77 signals:
78 void sigTrackMimedataAvailable();
79 void sigAllTracksLoaded();
80 void sigAllAlbumsLoaded();
81 void sigAllArtistsLoaded();
82
83 void sigReloadingLibrary(const QString& message, int progress);
84 void sigReloadingLibraryFinished();
85
86 void sigDeleteAnswer(QString);
87 void sigImportDialogRequested();
88
89 void sigCurrentAlbumChanged(int row);
90 void sigCurrentTrackChanged(int row);
91
92 public slots:
93 virtual void load();
94
95 virtual void reloadLibrary(bool clear_first, Library::ReloadQuality quality) = 0;
96
97 virtual void refetch();
98
99 virtual void refreshCurrentView();
100 void metadataChanged();
101 void albumsChanged();
102
103 virtual void findTrack(TrackID id);
104
105 /* selection changed */
106 virtual void selectedArtistsChanged(const IndexSet& indexes);
107 virtual void selectedAlbumsChanged(const IndexSet& indexes, bool ignore_artists = false);
108 virtual void selectedTracksChanged(const IndexSet& indexes);
109
110 // Those two functions are identical (1) calls (2)
111 virtual void prepareCurrentTracksForPlaylist(bool new_playlist);
112 virtual void prepareFetchedTracksForPlaylist(bool new_playlist);
113 void prepareTracksForPlaylist(const QStringList& file_paths, bool new_playlist);
114
115 /* append tracks after current played track in playlist */
116 virtual void playNextFetchedTracks();
117 virtual void playNextCurrentTracks();
118
119 /* append tracks after last track in playlist */
120 virtual void appendFetchedTracks();
121 virtual void appendCurrentTracks();
122
123 /* a searchfilter has been entered, nothing is emitted */
124 virtual void fetchByFilter(Library::Filter filter, bool force);
125 virtual void fetchTracksByPath(const QStringList& paths);
126
127 virtual void deleteTracks(const MetaDataList& v_md, Library::TrackDeletionMode mode) = 0;
128 virtual void deleteTracksByIndex(const IndexSet& indexes, Library::TrackDeletionMode mode);
129
130 virtual void deleteFetchedTracks(Library::TrackDeletionMode mode);
131 virtual void deleteCurrentTracks(Library::TrackDeletionMode mode);
132 virtual void deleteAllTracks();
133
134 //virtual void insert_tracks(const MetaDataList& v_md);
135 virtual void importFiles(const QStringList& files);
136
137 virtual void changeTrackSortorder(Library::SortOrder sortOrder);
138 virtual void changeAlbumSortorder(Library::SortOrder sortOrder);
139 virtual void changeArtistSortorder(Library::SortOrder sortOrder);
140
141 /* Check for current selected artist if out of date and
142 * fetch new data */
143 virtual void refreshArtists() = 0;
144 virtual void refreshAlbums() = 0;
145 virtual void refreshTracks() = 0;
146
147 protected:
148 /* Emit 3 signals with shown artists, shown album, shown tracks */
149 virtual void emitAll();
150
151 virtual void getAllArtists(ArtistList& artists) const = 0;
152 virtual void getAllArtistsBySearchstring(Library::Filter filter, ArtistList& artists) const = 0;
153
154 virtual void getAllAlbums(AlbumList& albums) const = 0;
155 virtual void getAllAlbumsByArtist(IdList artistIds, AlbumList& albums, Library::Filter filter) const = 0;
156 virtual void getAllAlbumsBySearchstring(Library::Filter filter, AlbumList& albums) const = 0;
157
158 virtual int getTrackCount() const = 0;
159 virtual void getAllTracks(MetaDataList& v_md) const = 0;
160 virtual void getAllTracks(const QStringList& paths, MetaDataList& v_md) const = 0;
161 virtual void getAllTracksByArtist(IdList artistIds, MetaDataList& v_md, Library::Filter filter) const = 0;
162 virtual void getAllTracksByAlbum(IdList albumIds, MetaDataList& v_md, Library::Filter filter) const = 0;
163 virtual void getAllTracksBySearchstring(Library::Filter filter, MetaDataList& v_md) const = 0;
164 virtual void getAllTracksByPath(const QStringList& paths, MetaDataList& v_md) const = 0;
165
166 virtual void getTrackById(TrackID trackId, MetaData& md) const = 0;
167 virtual void getAlbumById(AlbumId albumId, Album& album) const = 0;
168 virtual void getArtistById(ArtistId artistId, Artist& artist) const = 0;
169
170 void prepareTracks();
171 void prepareAlbums();
172 void prepareArtists();
173
174 private:
175 void tagEditCommit();
176
177 void changeTrackSelection(const IndexSet& indexes);
178 void changeArtistSelection(const IndexSet& indexes);
179 void changeAlbumSelection(const IndexSet& indexes, bool ignore_artists = false);
180};
181
182#endif // ABSTRACTLIBRARY_H
Definition: AbstractLibrary.h:44
Definition: Album.h:88
Definition: Album.h:37
Definition: Artist.h:61
Definition: Artist.h:34
Definition: Genre.h:31
Collection of extensions. Handles extensions currently active or inactive and the extension toolbar.
Definition: ExtensionSet.h:33
Definition: LibraryPlaylistInteractor.h:27
Definition: Filter.h:34
The Sortings class.
Definition: Sorting.h:37
The MetaDataList class.
Definition: MetaDataList.h:39
The MetaData class.
Definition: MetaData.h:47
Definition: EngineUtils.h:33
A set structure. Inherited from std::set with some useful methods. For integer and String this set is...
Definition: Set.h:37
ReloadQuality
The ReloadQuality enum.
Definition: LibraryNamespaces.h:48
TrackDeletionMode
The TrackDeletionMode enum.
Definition: LibraryNamespaces.h:37