kodi
MusicInfoTag.h
1 /*
2  * Copyright (C) 2005-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 class CSong;
12 class CArtist;
13 class CVariant;
14 
15 #include "ReplayGain.h"
16 #include "XBDateTime.h"
17 #include "music/Album.h"
18 #include "utils/IArchivable.h"
19 #include "utils/ISerializable.h"
20 #include "utils/ISortable.h"
21 
22 #include <string>
23 #include <vector>
24 
25 namespace MUSIC_INFO
26 {
27 class CMusicInfoTag final : public IArchivable, public ISerializable, public ISortable
28 {
29 public:
30  CMusicInfoTag(void);
31  bool operator !=(const CMusicInfoTag& tag) const;
32  bool Loaded() const;
33  const std::string& GetTitle() const;
34  const std::string& GetURL() const;
35  const std::vector<std::string>& GetArtist() const;
36  const std::string& GetArtistSort() const;
37  const std::string GetArtistString() const;
38  const std::string& GetComposerSort() const;
39  const std::string& GetAlbum() const;
40  int GetAlbumId() const;
41  const std::vector<std::string>& GetAlbumArtist() const;
42  const std::string GetAlbumArtistString() const;
43  const std::string& GetAlbumArtistSort() const;
44  const std::vector<std::string>& GetGenre() const;
45  int GetTrackNumber() const;
46  int GetDiscNumber() const;
47  int GetTrackAndDiscNumber() const;
48  int GetTotalDiscs() const;
49  int GetDuration() const; // may be set even if Loaded() returns false
50  int GetYear() const;
51  const std::string& GetReleaseDate() const;
52  const std::string GetReleaseYear() const;
53  const std::string& GetOriginalDate() const;
54  const std::string GetOriginalYear() const;
55  int GetDatabaseId() const;
56  const std::string &GetType() const;
57  const std::string& GetDiscSubtitle() const;
58  int GetBPM() const;
59  std::string GetYearString() const;
60  const std::string& GetMusicBrainzTrackID() const;
61  const std::vector<std::string>& GetMusicBrainzArtistID() const;
62  const std::vector<std::string>& GetMusicBrainzArtistHints() const;
63  const std::string& GetMusicBrainzAlbumID() const;
64  const std::string& GetMusicBrainzReleaseGroupID() const;
65  const std::vector<std::string>& GetMusicBrainzAlbumArtistID() const;
66  const std::vector<std::string>& GetMusicBrainzAlbumArtistHints() const;
67  const std::string& GetMusicBrainzReleaseType() const;
68  const std::string& GetComment() const;
69  const std::string& GetMood() const;
70  const std::string& GetRecordLabel() const;
71  const std::string& GetLyrics() const;
72  const std::string& GetCueSheet() const;
73  const CDateTime& GetLastPlayed() const;
74  const CDateTime& GetDateAdded() const;
75  bool GetCompilation() const;
76  bool GetBoxset() const;
77  float GetRating() const;
78  int GetUserrating() const;
79  int GetVotes() const;
80  int GetListeners() const;
81  int GetPlayCount() const;
82  int GetBitRate() const;
83  int GetNoOfChannels() const;
84  int GetSampleRate() const;
85  const std::string& GetAlbumReleaseStatus() const;
86  const std::string& GetStationName() const;
87  const std::string& GetStationArt() const;
88  const std::string& GetSongVideoURL() const;
89  const EmbeddedArtInfo &GetCoverArtInfo() const;
90  const ReplayGain& GetReplayGain() const;
91  CAlbum::ReleaseType GetAlbumReleaseType() const;
92 
93  void SetURL(const std::string& strURL);
94  void SetTitle(const std::string& strTitle);
95  void SetArtist(const std::string& strArtist);
96  void SetArtist(const std::vector<std::string>& artists, bool FillDesc = false);
97  void SetArtistDesc(const std::string& strArtistDesc);
98  void SetArtistSort(const std::string& strArtistsort);
99  void SetComposerSort(const std::string& strComposerSort);
100  void SetAlbum(const std::string& strAlbum);
101  void SetAlbumId(const int iAlbumId);
102  void SetAlbumArtist(const std::string& strAlbumArtist);
103  void SetAlbumArtist(const std::vector<std::string>& albumArtists, bool FillDesc = false);
104  void SetAlbumArtistDesc(const std::string& strAlbumArtistDesc);
105  void SetAlbumArtistSort(const std::string& strAlbumArtistSort);
106  void SetGenre(const std::string& strGenre, bool bTrim = false);
107  void SetGenre(const std::vector<std::string>& genres, bool bTrim = false);
108  void SetYear(int year);
109  void SetOriginalDate(const std::string& strOriginalDate);
110  void SetReleaseDate(const std::string& strReleaseDate);
111  void SetDatabaseId(int id, const std::string &type);
112  void SetTrackNumber(int iTrack);
113  void SetDiscNumber(int iDiscNumber);
114  void SetTrackAndDiscNumber(int iTrackAndDisc);
115  void SetDuration(int iSec);
116  void SetLoaded(bool bOnOff = true);
117  void SetArtist(const CArtist& artist);
118  void SetAlbum(const CAlbum& album);
119  void SetSong(const CSong& song);
120  void SetMusicBrainzTrackID(const std::string& strTrackID);
121  void SetMusicBrainzArtistID(const std::vector<std::string>& musicBrainzArtistId);
122  void SetMusicBrainzArtistHints(const std::vector<std::string>& musicBrainzArtistHints);
123  void SetMusicBrainzAlbumID(const std::string& strAlbumID);
124  void SetMusicBrainzAlbumArtistID(const std::vector<std::string>& musicBrainzAlbumArtistId);
125  void SetMusicBrainzAlbumArtistHints(const std::vector<std::string>& musicBrainzAlbumArtistHints);
126  void SetMusicBrainzReleaseGroupID(const std::string& strReleaseGroupID);
127  void SetMusicBrainzReleaseType(const std::string& ReleaseType);
128  void SetComment(const std::string& comment);
129  void SetMood(const std::string& mood);
130  void SetRecordLabel(const std::string& publisher);
131  void SetLyrics(const std::string& lyrics);
132  void SetCueSheet(const std::string& cueSheet);
133  void SetRating(float rating);
134  void SetUserrating(int rating);
135  void SetVotes(int votes);
136  void SetListeners(int listeners);
137  void SetPlayCount(int playcount);
138  void SetLastPlayed(const std::string& strLastPlayed);
139  void SetLastPlayed(const CDateTime& strLastPlayed);
140  void SetDateAdded(const std::string& strDateAdded);
141  void SetDateAdded(const CDateTime& dateAdded);
142  void SetDateUpdated(const std::string& strDateUpdated);
143  void SetDateUpdated(const CDateTime& dateUpdated);
144  void SetDateNew(const std::string& strDateNew);
145  void SetDateNew(const CDateTime& dateNew);
146  void SetCompilation(bool compilation);
147  void SetBoxset(bool boxset);
148  void SetCoverArtInfo(size_t size, const std::string &mimeType);
149  void SetReplayGain(const ReplayGain& aGain);
150  void SetAlbumReleaseType(CAlbum::ReleaseType releaseType);
151  void SetType(const MediaType& mediaType);
152  void SetDiscSubtitle(const std::string& strDiscSubtitle);
153  void SetTotalDiscs(int iDiscTotal);
154  void SetBPM(int iBPM);
155  void SetBitRate(int bitrate);
156  void SetNoOfChannels(int channels);
157  void SetSampleRate(int samplerate);
158  void SetAlbumReleaseStatus(const std::string& strReleaseStatus);
159  void SetStationName(const std::string& strStationName); // name of online radio station
160  void SetStationArt(const std::string& strStationArt);
161  void SetSongVideoURL(const std::string& songVideoURL); // link to video of song
162 
167  void AppendArtist(const std::string &artist);
168 
173  void AppendAlbumArtist(const std::string &albumArtist);
174 
179  void AppendGenre(const std::string &genre);
180  void AddOriginalDate(const std::string& strDateYear);
181  void AddReleaseDate(const std::string& strDateYear, bool isMonth = false);
182 
183  void AddArtistRole(const std::string& Role, const std::string& strArtist);
184  void AddArtistRole(const std::string& Role, const std::vector<std::string>& artists);
185  void AppendArtistRole(const CMusicRole& ArtistRole);
186  const std::string GetArtistStringForRole(const std::string& strRole) const;
187  const std::string GetContributorsText() const;
188  const std::string GetContributorsAndRolesText() const;
189  const VECMUSICROLES &GetContributors() const;
190  void SetContributors(const VECMUSICROLES& contributors);
191  bool HasContributors() const { return !m_musicRoles.empty(); }
192 
193  void Archive(CArchive& ar) override;
194  void Serialize(CVariant& ar) const override;
195  void ToSortable(SortItem& sortable, Field field) const override;
196 
197  void Clear();
198 
199 protected:
204  std::string Trim(const std::string &value) const;
205 
206  std::string m_strURL;
207  std::string m_strTitle;
208  std::vector<std::string> m_artist;
209  std::string m_strArtistSort;
210  std::string m_strArtistDesc;
211  std::string m_strComposerSort;
212  std::string m_strAlbum;
213  std::vector<std::string> m_albumArtist;
214  std::string m_strAlbumArtistDesc;
215  std::string m_strAlbumArtistSort;
216  std::vector<std::string> m_genre;
217  std::string m_strMusicBrainzTrackID;
218  std::vector<std::string> m_musicBrainzArtistID;
219  std::vector<std::string> m_musicBrainzArtistHints;
220  std::string m_strMusicBrainzAlbumID;
221  std::vector<std::string> m_musicBrainzAlbumArtistID;
222  std::vector<std::string> m_musicBrainzAlbumArtistHints;
223  std::string m_strMusicBrainzReleaseGroupID;
224  std::string m_strMusicBrainzReleaseType;
225  VECMUSICROLES m_musicRoles; //Artists contributing to the recording and role (from tags other than ARTIST or ALBUMARTIST)
226  std::string m_strComment;
227  std::string m_strMood;
228  std::string m_strRecordLabel;
229  std::string m_strLyrics;
230  std::string m_cuesheet;
231  std::string m_strDiscSubtitle;
232  std::string m_strReleaseDate; //ISO8601 date YYYY, YYYY-MM or YYYY-MM-DD
233  std::string m_strOriginalDate; //ISO8601 date YYYY, YYYY-MM or YYYY-MM-DD
234  CDateTime m_lastPlayed;
235  CDateTime m_dateNew;
236  CDateTime m_dateAdded;
237  CDateTime m_dateUpdated;
238  bool m_bCompilation;
239  int m_iDuration;
240  int m_iTrack; // consists of the disk number in the high 16 bits, the track number in the low 16bits
241  int m_iDbId;
242  MediaType m_type;
243  bool m_bLoaded;
244  float m_Rating;
245  int m_Userrating;
246  int m_Votes;
247  int m_listeners;
248  int m_iTimesPlayed;
249  int m_iAlbumId;
250  int m_iDiscTotal;
251  bool m_bBoxset;
252  int m_iBPM;
253  CAlbum::ReleaseType m_albumReleaseType;
254  std::string m_strReleaseStatus;
255  int m_samplerate;
256  int m_channels;
257  int m_bitrate;
258  std::string m_stationName;
259  std::string m_stationArt; // Used to fetch thumb URL for Shoutcasts
260  std::string m_songVideoURL; // link to a video for a song
261 
263 
265 };
266 }
Definition: Artist.h:194
Definition: ReplayGain.h:16
Definition: Variant.h:31
std::string Trim(const std::string &value) const
Trim whitespace off the given string.
Definition: MusicInfoTag.cpp:1312
void AppendArtist(const std::string &artist)
Append a unique artist to the artist list Checks if we have this artist already added, and if not adds it to the songs artist list.
Definition: MusicInfoTag.cpp:1213
void AppendAlbumArtist(const std::string &albumArtist)
Append a unique album artist to the artist list Checks if we have this album artist already added...
Definition: MusicInfoTag.cpp:1224
Definition: EmbeddedArt.h:17
Definition: ISerializable.h:13
Definition: Archive.h:29
DateTime class, which uses FileTime as it&#39;s base.
Definition: XBDateTime.h:63
EmbeddedArtInfo m_coverArt
art information
Definition: MusicInfoTag.h:262
void AppendGenre(const std::string &genre)
Append a unique genre to the genre list Checks if we have this genre already added, and if not adds it to the songs genre list.
Definition: MusicInfoTag.cpp:1235
ReplayGain m_replayGain
ReplayGain information.
Definition: MusicInfoTag.h:264
Definition: ISortable.h:15
Definition: Album.h:26
MediaType m_type
item type "music", "song", "album", "artist"
Definition: MusicInfoTag.h:242
Definition: Artist.h:40
Definition: MusicInfoTag.h:27
Definition: IArchivable.h:13
Class to store and read song information from CMusicDatabase.
Definition: Song.h:48
Definition: Application.h:77