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