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;
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