Sayonara Player
Loading...
Searching...
No Matches
MetaData.h
1/* MetaData.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/*
22 * MetaData.h
23 *
24 * Created on: Mar 10, 2011
25 * Author: Michael Lugmair (Lucio Carreras)
26 */
27
28#ifndef SAYONARA_PLAYER_METADATA_H
29#define SAYONARA_PLAYER_METADATA_H
30
31#include "Utils/MetaData/LibraryItem.h"
32#include "Utils/MetaData/RadioMode.h"
33#include "Utils/MetaData/Genre.h"
34#include "Utils/Library/Sortorder.h"
35#include "Utils/Pimpl.h"
36
37#include <QMetaType>
38#include <QString>
39
40class QDateTime;
41class MetaData :
42 public LibraryItem
43{
44 PIMPL(MetaData)
45
46 public:
47 struct Bookmark
48 {
49 QString title;
50 Seconds timestamp;
51
52 [[nodiscard]] bool operator==(const Bookmark& b2) const;
53 };
54
55 MetaData();
56 explicit MetaData(const QString& path);
57 MetaData(const MetaData& other);
58 MetaData(MetaData&& other) noexcept;
59 MetaData& operator=(const MetaData& md);
60 MetaData& operator=(MetaData&& md) noexcept;
61
62 ~MetaData() override;
63
64 [[nodiscard]] QString title() const;
65 void setTitle(const QString& title);
66
67 [[nodiscard]] QString artist() const;
68 void setArtist(const QString& artist);
69 [[nodiscard]] ArtistId artistId() const;
70 void setArtistId(ArtistId id);
71
72 [[nodiscard]] QString album() const;
73 void setAlbum(const QString& album);
74 [[nodiscard]] AlbumId albumId() const;
75 void setAlbumId(AlbumId id);
76
77 [[nodiscard]] const QString& comment() const;
78 void setComment(const QString& comment);
79
80 [[nodiscard]] QString filepath() const;
81 [[nodiscard]] HashValue filepathHash() const;
82 QString setFilepath(const QString& filepath, RadioMode mode = RadioMode::Undefined);
83
84 [[nodiscard]] ArtistId albumArtistId() const;
85 [[nodiscard]] QString albumArtist() const;
86
87 void setAlbumArtist(const QString& albumArtist, ArtistId id = -1);
88 void setAlbumArtistId(ArtistId id);
89
90 void setRadioStation(const QString& url, const QString& name = QString());
91 [[nodiscard]] QString radioStation() const;
92 [[nodiscard]] QString radioStationName() const;
93
94 [[nodiscard]] RadioMode radioMode() const;
95 void changeRadioMode(RadioMode mode);
96
97 [[nodiscard]] bool isUpdatable() const;
98 void setUpdateable(bool b);
99
100 [[nodiscard]] bool isValid() const;
101
102 bool operator==(const MetaData& other) const;
103 bool operator!=(const MetaData& other) const;
104 [[nodiscard]] bool isEqual(const MetaData& other) const;
105 [[nodiscard]] bool isEqualDeep(const MetaData& md) const;
106
107 [[nodiscard]] const Util::Set<GenreID>& genreIds() const;
108 [[nodiscard]] Util::Set<Genre> genres() const;
109 [[nodiscard]] bool hasGenre(const Genre& genre) const;
110 bool removeGenre(const Genre& genre);
111 bool addGenre(const Genre& genre);
112 void setGenres(const Util::Set<Genre>& genres);
113 void setGenres(const QStringList& newGenres);
114
115 void setCreatedDate(uint64_t t);
116 [[nodiscard]] uint64_t createdDate() const;
117 [[nodiscard]] QDateTime createdDateTime() const;
118
119 void setModifiedDate(uint64_t t);
120 [[nodiscard]] uint64_t modifiedDate() const;
121 [[nodiscard]] QDateTime modifiedDateTime() const;
122
123 [[nodiscard]] QString genresToString() const;
124 [[nodiscard]] QStringList genresToList() const;
125
126 [[nodiscard]] Disc discnumber() const;
127 void setDiscnumber(const Disc& value);
128
129 [[nodiscard]] Disc discCount() const;
130 void setDiscCount(const Disc& value);
131
132 [[nodiscard]] Bitrate bitrate() const;
133 void setBitrate(const Bitrate& value);
134
135 [[nodiscard]] TrackNum trackNumber() const;
136 void setTrackNumber(const uint16_t& value);
137
138 [[nodiscard]] Year year() const;
139 void setYear(const uint16_t& value);
140
141 [[nodiscard]] Filesize filesize() const;
142 void setFilesize(const Filesize& value);
143
144 [[nodiscard]] Rating rating() const;
145 void setRating(const Rating& value);
146
147 [[nodiscard]] MilliSeconds durationMs() const;
148 void setDurationMs(const MilliSeconds& value);
149
150 [[nodiscard]] bool isExtern() const;
151 void setExtern(bool value);
152
153 [[nodiscard]] bool isDisabled() const;
154 void setDisabled(bool value);
155
156 [[nodiscard]] LibraryId libraryId() const;
157 void setLibraryid(const LibraryId& value);
158
159 [[nodiscard]] TrackID id() const;
160 void setId(const TrackID& value);
161
162 [[nodiscard]] static QString getTitleFromFilepath(const QString& filepath);
163
164 void addBookmark(const Bookmark& bookmark);
165 void removeBookmark(const Bookmark& bookmark);
166 [[nodiscard]] const QList<Bookmark>& bookmarks() const;
167};
168
169#ifndef MetaDataDeclared
170Q_DECLARE_METATYPE(MetaData)
171#define MetaDataDeclared
172#endif
173
174#endif /* SAYONARA_PLAYER_METADATA_H */
Definition Genre.h:31
Definition MetaData.h:43
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
RadioMode
The RadioMode enum.
Definition RadioMode.h:32
Definition MetaData.h:48