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 
34 class Genre;
35 namespace 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;
64  const MetaDataList& currentTracks() const;
65 
66  const Util::Set<TrackID>& selectedTracks() const;
67  const Util::Set<AlbumId>& selectedAlbums() const;
68  const Util::Set<ArtistId>& selectedArtists() const;
69 
70  // emits new tracks, very similar to psl_selected_albums_changed
71  void changeCurrentDisc(Disc track);
72 
73  bool isLoaded() const;
74 
75  void setExtensions(const Gui::ExtensionSet& extensions);
76  Gui::ExtensionSet extensions() const;
77 
78  virtual bool isReloading() const;
79  virtual bool isEmpty() const;
80 
81  signals:
82  void sigTrackMimedataAvailable();
83  void sigAllTracksLoaded();
84  void sigAllAlbumsLoaded();
85  void sigAllArtistsLoaded();
86 
87  void sigReloadingLibrary(const QString& message, int progress);
88  void sigReloadingLibraryFinished();
89 
90  void sigDeleteAnswer(QString);
91  void sigImportDialogRequested();
92 
93  void sigCurrentAlbumChanged(int row);
94  void sigCurrentTrackChanged(int row);
95 
96  public slots:
97 
98  virtual void load();
99 
100  virtual void reloadLibrary(bool clear_first, Library::ReloadQuality quality) = 0;
101 
105  virtual void refetch();
106 
111  virtual void refreshCurrentView();
112  void metadataChanged();
113  void albumsChanged();
114 
115  virtual void findTrack(TrackID id);
116 
117  /* selection changed */
118  virtual void selectedArtistsChanged(const IndexSet& indexes);
119  virtual void selectedAlbumsChanged(const IndexSet& indexes, bool ignore_artists = false);
120  virtual void selectedTracksChanged(const IndexSet& indexes);
121 
122  // Those two functions are identical (1) calls (2)
123  virtual void prepareCurrentTracksForPlaylist(bool new_playlist);
124  virtual void prepareFetchedTracksForPlaylist(bool new_playlist);
125  void prepareTracksForPlaylist(const QStringList& file_paths, bool new_playlist);
126 
127  /* append tracks after current played track in playlist */
128  virtual void playNextFetchedTracks();
129  virtual void playNextCurrentTracks();
130 
131  /* append tracks after last track in playlist */
132  virtual void appendFetchedTracks();
133  virtual void appendCurrentTracks();
134 
135  /* a searchfilter has been entered, nothing is emitted */
136  virtual void fetchByFilter(Library::Filter filter, bool force);
137  virtual void fetchTracksByPath(const QStringList& paths);
138 
139  virtual void deleteTracks(const MetaDataList& v_md, Library::TrackDeletionMode mode) = 0;
140  virtual void deleteTracksByIndex(const IndexSet& indexes, Library::TrackDeletionMode mode);
141 
142  virtual void deleteFetchedTracks(Library::TrackDeletionMode mode);
143  virtual void deleteCurrentTracks(Library::TrackDeletionMode mode);
144  virtual void deleteAllTracks();
145 
146  //virtual void insert_tracks(const MetaDataList& v_md);
147  virtual void importFiles(const QStringList& files);
148 
149  virtual void changeTrackSortorder(Library::SortOrder sortOrder);
150  virtual void changeAlbumSortorder(Library::SortOrder sortOrder);
151  virtual void changeArtistSortorder(Library::SortOrder sortOrder);
152 
153  /* Check for current selected artist if out of date and
154  * fetch new data */
155  virtual void refreshArtists() = 0;
156  virtual void refreshAlbums() = 0;
157  virtual void refreshTracks() = 0;
158 
159  protected:
160  /* Emit 3 signals with shown artists, shown album, shown tracks */
161  virtual void emitAll();
162 
163  virtual void getAllArtists(ArtistList& artists) const = 0;
164  virtual void getAllArtistsBySearchstring(Library::Filter filter, ArtistList& artists) const = 0;
165 
166  virtual void getAllAlbums(AlbumList& albums) const = 0;
167  virtual void getAllAlbumsByArtist(IdList artistIds, AlbumList& albums, Library::Filter filter) const = 0;
168  virtual void getAllAlbumsBySearchstring(Library::Filter filter, AlbumList& albums) const = 0;
169 
170  virtual int getTrackCount() const = 0;
171  virtual void getAllTracks(MetaDataList& v_md) const = 0;
172  virtual void getAllTracks(const QStringList& paths, MetaDataList& v_md) const = 0;
173  virtual void getAllTracksByArtist(IdList artistIds, MetaDataList& v_md, Library::Filter filter) const = 0;
174  virtual void getAllTracksByAlbum(IdList albumIds, MetaDataList& v_md, Library::Filter filter) const = 0;
175  virtual void getAllTracksBySearchstring(Library::Filter filter, MetaDataList& v_md) const = 0;
176  virtual void getAllTracksByPath(const QStringList& paths, MetaDataList& v_md) const = 0;
177 
178  virtual void getTrackById(TrackID trackId, MetaData& md) const = 0;
179  virtual void getAlbumById(AlbumId albumId, Album& album) const = 0;
180  virtual void getArtistById(ArtistId artistId, Artist& artist) const = 0;
181 
182  void prepareTracks();
183  void prepareAlbums();
184  void prepareArtists();
185 
186  void ignoreArtistArticleChanged();
187 
188  private:
189  void tagEditCommit();
190 
191  void changeTrackSelection(const IndexSet& indexes);
192  void changeArtistSelection(const IndexSet& indexes);
193  void changeAlbumSelection(const IndexSet& indexes, bool ignore_artists = false);
194 };
195 
196 #endif // ABSTRACTLIBRARY_H
Definition: AbstractLibrary.h:44
virtual void refetch()
Clears all filters and searchstrings and fetches everything again.
virtual void refreshCurrentView()
refetches everything from database as it is, keeping selected elements, the user won't recognize anyt...
const MetaDataList & currentTracks() const
current selected tracks
The AlbumList class.
Definition: Album.h:100
The Album class.
Definition: Album.h:41
ArtistList.
Definition: Artist.h:77
The Artist class.
Definition: Artist.h:38
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:37
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
SortOrder
The SortOrder enum.
Definition: Sortorder.h:32
ReloadQuality
The ReloadQuality enum.
Definition: LibraryNamespaces.h:48
TrackDeletionMode
The TrackDeletionMode enum.
Definition: LibraryNamespaces.h:37