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
Gui::ExtensionSet
Collection of extensions. Handles extensions currently active or inactive and the extension toolbar.
Definition: ExtensionSet.h:33
ArtistList
ArtistList.
Definition: Artist.h:77
Library::Sortings
The Sortings class.
Definition: Sorting.h:37
Library::ReloadQuality
ReloadQuality
The ReloadQuality enum.
Definition: LibraryNamespaces.h:48
AbstractLibrary::currentTracks
const MetaDataList & currentTracks() const
current selected tracks
MetaDataList
The MetaDataList class.
Definition: MetaDataList.h:37
Util::Set
A set structure. Inherited from std::set with some useful methods. For integer and String this set is...
Definition: Set.h:37
Genre
Definition: Genre.h:31
Album
The Album class.
Definition: Album.h:41
QList
Definition: EngineUtils.h:33
AbstractLibrary
Definition: AbstractLibrary.h:44
AbstractLibrary::refreshCurrentView
virtual void refreshCurrentView()
refetches everything from database as it is, keeping selected elements, the user won't recognize anyt...
Library::Filter
Definition: Filter.h:34
Artist
The Artist class.
Definition: Artist.h:38
Library::TrackDeletionMode
TrackDeletionMode
The TrackDeletionMode enum.
Definition: LibraryNamespaces.h:37
AlbumList
The AlbumList class.
Definition: Album.h:100
LibraryPlaylistInteractor
Definition: LibraryPlaylistInteractor.h:27
MetaData
The MetaData class.
Definition: MetaData.h:47
AbstractLibrary::refetch
virtual void refetch()
Clears all filters and searchstrings and fetches everything again.
Library::SortOrder
SortOrder
The SortOrder enum.
Definition: Sortorder.h:32