Sayonara Player
Loading...
Searching...
No Matches
AbstractLibrary.h
1/* AbstractLibrary.h */
2
3/* Copyright (C) 2011-2024 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
31class Genre;
32namespace Gui
33{
34 class ExtensionSet;
35}
36
38
40 public QObject
41{
42 Q_OBJECT
43 PIMPL(AbstractLibrary)
44
45 signals:
46 void sigAllTracksLoaded();
47 void sigAllAlbumsLoaded();
48 void sigAllArtistsLoaded();
49
50 void sigReloadingLibrary(const QString& message, int progress);
51 void sigReloadingLibraryFinished();
52
53 void sigDeleteAnswer(QString);
54
55 void sigCurrentAlbumChanged(int row);
56 void sigCurrentTrackChanged(int row);
57
58 public:
59 explicit AbstractLibrary(LibraryPlaylistInteractor* playlistInteractor, QObject* parent = nullptr);
60 ~AbstractLibrary() override;
61
62 virtual void init();
63
64 [[nodiscard]] Library::Sortings sortorder() const;
65 [[nodiscard]] Library::Filter filter() const;
66 // calls fetch_by_filter and emits
67 void changeFilter(Library::Filter, bool force = false);
68
69 [[nodiscard]] const MetaDataList& tracks() const;
70 [[nodiscard]] const AlbumList& albums() const;
71 [[nodiscard]] const ArtistList& artists() const;
72 [[nodiscard]] const MetaDataList& currentTracks() const;
73
74 [[nodiscard]] const Util::Set<AlbumId>& selectedAlbums() const;
75 [[nodiscard]] const Util::Set<ArtistId>& selectedArtists() const;
76
77 // emits new tracks, very similar to psl_selected_albums_changed
78 void changeCurrentDisc(Disc track);
79
80 [[nodiscard]] bool isLoaded() const;
81
82 void setExtensions(const Gui::ExtensionSet& extensions);
83 [[nodiscard]] Gui::ExtensionSet extensions() const;
84
85 [[nodiscard]] virtual bool isReloading() const;
86 [[nodiscard]] virtual bool isEmpty() const;
87
88 [[nodiscard]] LibraryPlaylistInteractor* playlistInteractor() const;
89
90 public slots: // NOLINT(*-redundant-access-specifiers)
91 virtual void reloadLibrary(bool clear_first, Library::ReloadQuality quality) = 0;
92
93 virtual void refetch();
94
95 virtual void refreshCurrentView();
96
97 virtual void findTrack(TrackID id);
98
99 virtual void selectedArtistsChanged(const IndexSet& indexes);
100 virtual void selectedAlbumsChanged(const IndexSet& indexes, bool ignore_artists = false);
101 virtual void selectedTracksChanged(const IndexSet& indexes);
102
103 virtual void fetchByFilter(const Library::Filter& filter, bool force);
104 virtual void fetchTracksByPath(const QStringList& paths);
105
106 virtual void deleteTracks(const MetaDataList& tracks, Library::TrackDeletionMode mode) = 0;
107
108 virtual void deleteFetchedTracks(Library::TrackDeletionMode mode);
109 virtual void deleteCurrentTracks(Library::TrackDeletionMode mode);
110 virtual void deleteAllTracks();
111
112 virtual void importFiles(const QStringList& files);
113
114 virtual void changeTrackSortorder(Library::TrackSortorder sortOrder);
115 virtual void changeAlbumSortorder(Library::AlbumSortorder sortOrder);
116 virtual void changeArtistSortorder(Library::ArtistSortorder sortOrder);
117
118 virtual void refreshArtists() = 0;
119 virtual void refreshAlbums() = 0;
120 virtual void refreshTracks() = 0;
121
122 protected:
123 /* Emit 3 signals with shown artists, shown album, shown tracks */
124 virtual void initLibraryImpl() = 0;
125 virtual void emitAll();
126
127 virtual void getAllArtists(ArtistList& artists) const = 0;
128 virtual void getAllArtistsBySearchstring(const Library::Filter& filter, ArtistList& artists) const = 0;
129
130 virtual void getAllAlbums(AlbumList& albums) const = 0;
131 virtual void
132 getAllAlbumsByArtist(const IdList& artistIds, AlbumList& albums, const Library::Filter& filter) const = 0;
133 virtual void getAllAlbumsBySearchstring(const Library::Filter& filter, AlbumList& albums) const = 0;
134
135 [[nodiscard]] virtual int getTrackCount() const = 0;
136 virtual void getAllTracks(MetaDataList& tracks) const = 0;
137 virtual void getAllTracks(const QStringList& paths, MetaDataList& tracks) const = 0;
138 virtual void
139 getAllTracksByArtist(const IdList& artistIds, MetaDataList& tracks, const Library::Filter& filter) const = 0;
140 virtual void
141 getAllTracksByAlbum(const IdList& albumIds, MetaDataList& tracks, const Library::Filter& filter) const = 0;
142 virtual void getAllTracksBySearchstring(const Library::Filter& filter, MetaDataList& tracks) const = 0;
143 virtual void getAllTracksByPath(const QStringList& paths, MetaDataList& tracks) const = 0;
144
145 virtual void getTrackById(TrackID trackId, MetaData& md) const = 0;
146 virtual void getAlbumById(AlbumId albumId, Album& album) const = 0;
147 virtual void getArtistById(ArtistId artistId, Artist& artist) const = 0;
148
149 void replaceAlbum(int index, const Album& album);
150 void replaceTrack(int index, const MetaData& track);
151
152 void prepareTracks();
153 void prepareAlbums();
154 void prepareArtists();
155
156 private:
157 void changeTrackSelection(const IndexSet& indexes);
158 void changeArtistSelection(const IndexSet& indexes);
159 void changeAlbumSelection(const IndexSet& indexes, bool ignore_artists = false);
160};
161
162#endif // ABSTRACTLIBRARY_H
Definition AbstractLibrary.h:41
Definition Album.h:91
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:34
Definition Filter.h:34
Definition MetaDataList.h:34
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
Definition Sorting.h:32