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 
25 #include "Utils/Library/LibraryNamespaces.h"
26 #include "Utils/Library/Filter.h"
27 #include "Utils/Library/Sorting.h"
28 #include "Utils/Pimpl.h"
29 
30 #include <QFile>
31 
32 #define prepare_tracks_for_playlist_files static_cast<void (AbstractLibrary::*) (const QStringList&)>(&AbstractLibrary::psl_prepare_tracks_for_playlist)
33 #define prepare_tracks_for_playlistIdxs static_cast<void (AbstractLibrary::*) (const IdxList&)>(&AbstractLibrary::psl_prepare_tracks_for_playlist)
34 
35 class Genre;
36 namespace Gui
37 {
38  class ExtensionSet;
39 }
40 
42  public QObject
43 {
44  Q_OBJECT
45  PIMPL(AbstractLibrary)
46 
47 public:
48  explicit AbstractLibrary(QObject* parent=nullptr);
49  virtual ~AbstractLibrary();
50 
51  Library::Sortings sortorder() const;
52  Library::Filter filter() const;
53  // calls fetch_by_filter and emits
54  void changeFilter(Library::Filter, bool force=false);
55 
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 disc);
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 
97 public slots:
98 
99  virtual void load();
100 
101  virtual void reloadLibrary(bool clear_first, Library::ReloadQuality quality)=0;
102 
106  virtual void refetch();
107 
108 
113  virtual void refreshCurrentView();
114  void metadataChanged();
115  void albumsChanged();
116 
117  virtual void findTrack(TrackID id);
118 
119  /* selection changed */
120  virtual void selectedArtistsChanged(const IndexSet& indexes);
121  virtual void selectedAlbumsChanged(const IndexSet& indexes, bool ignore_artists=false);
122  virtual void selectedTracksChanged(const IndexSet& indexes);
123 
124  // Those two functions are identical (1) calls (2)
125  virtual void prepareCurrentTracksForPlaylist(bool new_playlist);
126  virtual void prepareFetchedTracksForPlaylist(bool new_playlist);
127  void prepareTracksForPlaylist(const QStringList& file_paths, bool new_playlist);
128 
129  /* append tracks after current played track in playlist */
130  virtual void playNextFetchedTracks();
131  virtual void playNextCurrentTracks();
132 
133  /* append tracks after last track in playlist */
134  virtual void appendFetchedTracks();
135  virtual void appendCurrentTracks();
136 
137  /* a searchfilter has been entered, nothing is emitted */
138  virtual void fetchByFilter(Library::Filter filter, bool force);
139  virtual void fetchTracksByPath(const QStringList& paths);
140 
141  virtual void deleteTracks(const MetaDataList& v_md, Library::TrackDeletionMode mode)=0;
142  virtual void deleteTracksByIndex(const IndexSet& indexes, Library::TrackDeletionMode mode);
143 
144  virtual void deleteFetchedTracks(Library::TrackDeletionMode mode);
145  virtual void deleteCurrentTracks(Library::TrackDeletionMode mode);
146  virtual void deleteAllTracks();
147 
148  //virtual void insert_tracks(const MetaDataList& v_md);
149  virtual void importFiles(const QStringList& files);
150 
151  virtual void changeTrackSortorder(Library::SortOrder s);
152  virtual void changeAlbumSortorder(Library::SortOrder s);
153  virtual void changeArtistSortorder(Library::SortOrder s);
154 
155  /* Check for current selected artist if out of date and
156  * fetch new data */
157  virtual void refreshArtists()=0;
158  virtual void refreshAlbums()=0;
159  virtual void refreshTracks()=0;
160 
161 protected:
162  /* Emit 3 signals with shown artists, shown album, shown tracks */
163  virtual void emitAll();
164 
165  virtual void getAllArtists(ArtistList& artists) const=0;
166  virtual void getAllArtistsBySearchstring(Library::Filter filter, ArtistList& artists) const=0;
167 
168  virtual void getAllAlbums(AlbumList& albums) const=0;
169  virtual void getAllAlbumsByArtist(IdList artistIds, AlbumList& albums, Library::Filter filter) const=0;
170  virtual void getAllAlbumsBySearchstring(Library::Filter filter, AlbumList& albums) const=0;
171 
172  virtual int getTrackCount() const=0;
173  virtual void getAllTracks(MetaDataList& v_md) const=0;
174  virtual void getAllTracks(const QStringList& paths, MetaDataList& v_md) const=0;
175  virtual void getAllTracksByArtist(IdList artistIds, MetaDataList& v_md, Library::Filter filter) const=0;
176  virtual void getAllTracksByAlbum(IdList albumIds, MetaDataList& v_md, Library::Filter filter) const=0;
177  virtual void getAllTracksBySearchstring(Library::Filter filter, MetaDataList& v_md) const=0;
178  virtual void getAllTracksByPath(const QStringList& paths, MetaDataList& v_md) const=0;
179 
180  virtual void getTrackById(TrackID trackId, MetaData& md) const=0;
181  virtual void getAlbumById(AlbumId albumId, Album& album) const=0;
182  virtual void getArtistById(ArtistId artistId, Artist& artist) const=0;
183 
184  void prepareTracks();
185  void prepareAlbums();
186  void prepareArtists();
187 
188  void ignoreArtistArticleChanged();
189 
190 
191 private:
192  void tagEditCommit();
193  void setPlaylistActionAfterDoubleClick();
194 
195  void changeTrackSelection(const IndexSet& indexes);
196  void changeArtistSelection(const IndexSet& indexes);
197  void changeAlbumSelection(const IndexSet& indexes, bool ignore_artists=false);
198 };
199 
200 #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:43
AbstractLibrary::refreshCurrentView
virtual void refreshCurrentView()
refetches everything from database as it is, keeping selected elements, the user won't recognize anyt...
Library::Filter
The Filter class.
Definition: Filter.h:41
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
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