Sayonara Player
Tracks.h
1/* DatabaseTracks.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 DATABASETRACKS_H
22#define DATABASETRACKS_H
23
24#include "Query.h"
25#include "Utils/Pimpl.h"
26
27#include <QMap>
28
29namespace Library
30{
31 class Filter;
32}
33
34class Genre;
35
36namespace DB
37{
38 class Tracks
39 {
40 public:
41 Tracks();
42 virtual ~Tracks();
43
44 void initViews();
45
46 virtual bool dbFetchTracks(Query& q, MetaDataList& result) const;
47
48 virtual int getNumTracks() const;
49 virtual bool getAllTracks(MetaDataList& result) const;
50
51 virtual bool getAllTracksByAlbum(const IdList& albumsIds, MetaDataList& result) const;
52 virtual bool getAllTracksByAlbum(const IdList& track, MetaDataList& result,
53 const ::Library::Filter& filter, int discnumber) const;
54 virtual bool getAllTracksByArtist(const IdList& artistIds, MetaDataList& result) const;
55 virtual bool getAllTracksByArtist(const IdList& artistIds, MetaDataList& result,
56 const ::Library::Filter& filter) const;
57 virtual bool getAllTracksBySearchString(const ::Library::Filter& filter, MetaDataList& result) const;
58 virtual bool getAllTracksByPaths(const QStringList& paths, MetaDataList& tracks) const;
59
60 virtual MetaData getTrackById(TrackID id) const;
61 virtual MetaData getTrackByPath(const QString& path) const;
62 virtual bool getMultipleTracksByPath(const QStringList& paths, MetaDataList& tracks) const;
63
64 virtual bool
65 insertTrackIntoDatabase(const MetaData& track, ArtistId artistId, AlbumId albumId, ArtistId albumArtistId);
66 virtual bool updateTrack(const MetaData& track);
67
68 virtual bool renameFilepaths(const QMap<QString, QString>& paths, LibraryId libraryId);
69 virtual bool renameFilepath(const QString& oldPath, const QString& newPath, LibraryId libraryId);
70
71 virtual bool deleteTrack(TrackID id);
72 virtual bool deleteTracks(const IdList& ids);
73
74 // some tracks may be inserted two times
75 // this function deletes BOTH copies but returns those tracks
76 // which were found twice. Those tracks should be inserted by the store_metadata()
77 // function of LibraryDatabase
78 virtual bool deleteInvalidTracks(const QString& libraryPath, MetaDataList& doubleMetadata);
79
80 virtual QString fetchQueryTracks(const QString& where) const;
81
82 virtual Util::Set<Genre> getAllGenres() const;
83
84 void deleteAllTracks(bool alsoViews);
85
86 protected:
87 virtual QString artistIdField() const = 0;
88 virtual QString trackView() const = 0;
89 virtual QString trackSearchView() const = 0;
90 virtual LibraryId libraryId() const = 0;
91
92 virtual Module* module() = 0;
93 virtual const Module* module() const = 0;
94
95 virtual void updateTrackCissearch();
96
97 private:
98 MetaData getSingleTrack(const QString& queryText, const std::pair<QString, QVariant>& binding,
99 const QString& errorMessage) const;
100 bool getAllTracksByIdList(const IdList& ids, const QString& idField, const ::Library::Filter& filter,
101 MetaDataList& tracks) const;
102 };
103}
104
105#endif // DATABASETRACKS_H
Definition: Module.h:33
Definition: Query.h:37
Definition: Tracks.h:39
Definition: Genre.h:31
The MetaDataList class.
Definition: MetaDataList.h:39
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
An interface class needed when implementing a library plugin.
Definition: LocalLibraryWatcher.h:31