xbmc
Artist.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 #include "XBDateTime.h"
12 #include "utils/ScraperUrl.h"
13 #include "utils/StringUtils.h"
14 
15 #include <map>
16 #include <string>
17 #include <utility>
18 #include <vector>
19 
20 class TiXmlElement;
21 class TiXmlNode;
22 class CAlbum;
23 class CMusicDatabase;
24 
26 {
27 public:
28  std::string strAlbum;
29  std::string strYear;
30  std::string strReleaseGroupMBID;
31 };
32 
34 {
35  std::string title;
36  std::string mbTrackID;
37  std::string videoURL;
38  std::string thumbURL;
39 };
40 
41 class CArtist
42 {
43 public:
44  int idArtist = -1;
45  bool operator<(const CArtist& a) const
46  {
47  if (strMusicBrainzArtistID.empty() && a.strMusicBrainzArtistID.empty())
48  {
49  if (strArtist < a.strArtist) return true;
50  if (strArtist > a.strArtist) return false;
51  return false;
52  }
53 
54  if (strMusicBrainzArtistID < a.strMusicBrainzArtistID) return true;
55  if (strMusicBrainzArtistID > a.strMusicBrainzArtistID) return false;
56  return false;
57  }
58 
59  void MergeScrapedArtist(const CArtist& source, bool override = true);
60 
61  void Reset()
62  {
63  strArtist.clear();
64  strSortName.clear();
65  strType.clear();
66  strGender.clear();
67  strDisambiguation.clear();
68  genre.clear();
69  strBiography.clear();
70  styles.clear();
71  moods.clear();
72  instruments.clear();
73  strBorn.clear();
74  strFormed.clear();
75  strDied.clear();
76  strDisbanded.clear();
77  yearsActive.clear();
78  thumbURL.Clear();
79  art.clear();
80  discography.clear();
81  idArtist = -1;
82  strPath.clear();
83  dateAdded.Reset();
84  dateUpdated.Reset();
85  dateNew.Reset();
86  bScrapedMBID = false;
87  strLastScraped.clear();
88  videolinks.clear();
89  }
90 
98  bool Load(const TiXmlElement *element, bool append = false, bool prioritise = false);
99  bool Save(TiXmlNode *node, const std::string &tag, const std::string& strPath);
100 
101  void SetDateAdded(const std::string& strDateAdded);
102  void SetDateUpdated(const std::string& strDateUpdated);
103  void SetDateNew(const std::string& strDateNew);
104 
105  std::string strArtist;
106  std::string strSortName;
107  std::string strMusicBrainzArtistID;
108  std::string strType;
109  std::string strGender;
110  std::string strDisambiguation;
111  std::vector<std::string> genre;
112  std::string strBiography;
113  std::vector<std::string> styles;
114  std::vector<std::string> moods;
115  std::vector<std::string> instruments;
116  std::string strBorn;
117  std::string strFormed;
118  std::string strDied;
119  std::string strDisbanded;
120  std::vector<std::string> yearsActive;
121  std::string strPath;
122  CScraperUrl thumbURL; // Data for available remote art
123  std::map<std::string, std::string> art; // Current artwork - thumb, fanart etc.
124  std::vector<CDiscoAlbum> discography;
125  CDateTime dateAdded; // From related file creation or modification times, or when (re-)scanned
126  CDateTime dateUpdated; // Time db record Last modified
127  CDateTime dateNew; // Time db record created
128  bool bScrapedMBID = false;
129  std::string strLastScraped;
130  std::vector<ArtistVideoLinks> videolinks;
131 };
132 
134 {
135  friend class CAlbum;
136  friend class CMusicDatabase;
137 
138 public:
139  CArtistCredit() = default;
140  explicit CArtistCredit(std::string strArtist) : m_strArtist(std::move(strArtist)) {}
141  CArtistCredit(std::string strArtist, std::string strMusicBrainzArtistID)
142  : m_strArtist(std::move(strArtist)), m_strMusicBrainzArtistID(std::move(strMusicBrainzArtistID))
143  {
144  }
145  CArtistCredit(std::string strArtist, std::string strSortName, std::string strMusicBrainzArtistID)
146  : m_strArtist(std::move(strArtist)),
147  m_strSortName(std::move(strSortName)),
148  m_strMusicBrainzArtistID(std::move(strMusicBrainzArtistID))
149  {
150  }
151 
152  bool operator<(const CArtistCredit& a) const
153  {
154  if (m_strMusicBrainzArtistID.empty() && a.m_strMusicBrainzArtistID.empty())
155  {
156  if (m_strArtist < a.m_strArtist) return true;
157  if (m_strArtist > a.m_strArtist) return false;
158  return false;
159  }
160 
161  if (m_strMusicBrainzArtistID < a.m_strMusicBrainzArtistID) return true;
162  if (m_strMusicBrainzArtistID > a.m_strMusicBrainzArtistID) return false;
163  return false;
164  }
165 
166  std::string GetArtist() const { return m_strArtist; }
167  std::string GetSortName() const { return m_strSortName; }
168  std::string GetMusicBrainzArtistID() const { return m_strMusicBrainzArtistID; }
169  int GetArtistId() const { return idArtist; }
170  bool HasScrapedMBID() const { return m_bScrapedMBID; }
171  void SetArtist(const std::string &strArtist) { m_strArtist = strArtist; }
172  void SetSortName(const std::string &strSortName) { m_strSortName = strSortName; }
173  void SetMusicBrainzArtistID(const std::string &strMusicBrainzArtistID) { m_strMusicBrainzArtistID = strMusicBrainzArtistID; }
174  void SetArtistId(int idArtist) { this->idArtist = idArtist; }
175  void SetScrapedMBID(bool scrapedMBID) { this->m_bScrapedMBID = scrapedMBID; }
176 
177 private:
178  int idArtist = -1;
179  std::string m_strArtist;
180  std::string m_strSortName;
181  std::string m_strMusicBrainzArtistID;
182  bool m_bScrapedMBID = false; // Flag that mbid is from album merge of scarper results not derived from tags
183 };
184 
185 typedef std::vector<CArtist> VECARTISTS;
186 typedef std::vector<CArtistCredit> VECARTISTCREDITS;
187 
188 const std::string BLANKARTIST_FAKEMUSICBRAINZID = "Artist Tag Missing";
189 const std::string BLANKARTIST_NAME = "[Missing Tag]";
190 const int BLANKARTIST_ID = 1;
191 const std::string VARIOUSARTISTS_MBID = "89ad4ac3-39f7-470e-963a-56509c546377";
192 
193 #define ROLE_ARTIST 1 //Default role
194 
196 {
197 public:
198  CMusicRole() = default;
199  CMusicRole(std::string strRole, std::string strArtist)
200  : idRole(-1), m_strRole(std::move(strRole)), m_strArtist(std::move(strArtist)), idArtist(-1)
201  {
202  }
203  CMusicRole(int role, std::string strRole, std::string strArtist, int ArtistId)
204  : idRole(role),
205  m_strRole(std::move(strRole)),
206  m_strArtist(std::move(strArtist)),
207  idArtist(ArtistId)
208  {
209  }
210  std::string GetArtist() const { return m_strArtist; }
211  std::string GetRoleDesc() const { return m_strRole; }
212  int GetRoleId() const { return idRole; }
213  int GetArtistId() const { return idArtist; }
214  void SetArtistId(int iArtistId) { idArtist = iArtistId; }
215 
216  bool operator==(const CMusicRole& a) const
217  {
218  if (StringUtils::EqualsNoCase(m_strRole, a.m_strRole))
219  return StringUtils::EqualsNoCase(m_strArtist, a.m_strArtist);
220  else
221  return false;
222  }
223 private:
224  int idRole;
225  std::string m_strRole;
226  std::string m_strArtist;
227  int idArtist;
228 };
229 
230 typedef std::vector<CMusicRole> VECMUSICROLES;
231 
232 
233 
Definition: Artist.h:133
Definition: Artist.h:195
Class to store and read tag information.
Definition: MusicDatabase.h:99
Definition: Artist.h:25
DateTime class, which uses FileTime as it&#39;s base.
Definition: XBDateTime.h:63
Definition: Album.h:27
Definition: Artist.h:41
Definition: ScraperUrl.h:21