2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
9 #include "MusicInfoScraper.h"
11 #include "filesystem/CurlFile.h"
12 #include "utils/log.h"
14 using namespace MUSIC_GRABBER
;
15 using namespace ADDON
;
16 using namespace std::chrono_literals
;
18 CMusicInfoScraper::CMusicInfoScraper(const ADDON::ScraperPtr
& scraper
)
19 : CThread("MusicInfoScraper"), m_scraper(scraper
)
25 m_http
= new XFILE::CCurlFile
;
28 CMusicInfoScraper::~CMusicInfoScraper(void)
34 int CMusicInfoScraper::GetAlbumCount() const
36 return (int)m_vecAlbums
.size();
39 int CMusicInfoScraper::GetArtistCount() const
41 return (int)m_vecArtists
.size();
44 CMusicAlbumInfo
& CMusicInfoScraper::GetAlbum(int iAlbum
)
46 return m_vecAlbums
[iAlbum
];
49 CMusicArtistInfo
& CMusicInfoScraper::GetArtist(int iArtist
)
51 return m_vecArtists
[iArtist
];
54 void CMusicInfoScraper::FindAlbumInfo(const std::string
& strAlbum
, const std::string
& strArtist
/* = "" */)
57 m_strArtist
=strArtist
;
63 void CMusicInfoScraper::FindArtistInfo(const std::string
& strArtist
)
65 m_strArtist
=strArtist
;
71 void CMusicInfoScraper::FindAlbumInfo()
73 m_vecAlbums
= m_scraper
->FindAlbum(*m_http
, m_strAlbum
, m_strArtist
);
74 m_bSucceeded
= !m_vecAlbums
.empty();
77 void CMusicInfoScraper::FindArtistInfo()
79 m_vecArtists
= m_scraper
->FindArtist(*m_http
, m_strArtist
);
80 m_bSucceeded
= !m_vecArtists
.empty();
83 void CMusicInfoScraper::LoadAlbumInfo(int iAlbum
)
91 void CMusicInfoScraper::LoadArtistInfo(int iArtist
, const std::string
&strSearch
)
95 m_strSearch
=strSearch
;
100 void CMusicInfoScraper::LoadAlbumInfo()
102 if (m_iAlbum
<0 || m_iAlbum
>=(int)m_vecAlbums
.size())
105 CMusicAlbumInfo
& album
=m_vecAlbums
[m_iAlbum
];
106 // Clear album artist credits
107 album
.GetAlbum().artistCredits
.clear();
108 if (album
.Load(*m_http
,m_scraper
))
112 void CMusicInfoScraper::LoadArtistInfo()
114 if (m_iArtist
<0 || m_iArtist
>=(int)m_vecArtists
.size())
117 CMusicArtistInfo
& artist
=m_vecArtists
[m_iArtist
];
118 artist
.GetArtist().strArtist
.clear();
119 if (artist
.Load(*m_http
,m_scraper
,m_strSearch
))
123 bool CMusicInfoScraper::Completed()
128 bool CMusicInfoScraper::Succeeded()
130 return !m_bCanceled
&& m_bSucceeded
;
133 void CMusicInfoScraper::Cancel()
140 bool CMusicInfoScraper::IsCanceled()
145 void CMusicInfoScraper::OnStartup()
151 void CMusicInfoScraper::Process()
155 if (m_strAlbum
.size())
161 else if (m_strArtist
.size())
179 CLog::Log(LOGERROR
, "Exception in CMusicInfoScraper::Process()");
183 bool CMusicInfoScraper::CheckValidOrFallback(const std::string
&fallbackScraper
)
186 //! @todo Handle fallback mechanism
188 if (m_scraper->Path() != fallbackScraper &&
189 parser.Load("special://xbmc/system/scrapers/music/" + fallbackScraper))
191 CLog::Log(LOGWARNING, "{} - scraper {} fails to load, falling back to {}", __FUNCTION__, m_info.strPath, fallbackScraper);
192 m_info.strPath = fallbackScraper;
193 m_info.strContent = "albums";
194 m_info.strTitle = parser.GetName();
195 m_info.strDate = parser.GetDate();
196 m_info.strFramework = parser.GetFramework();
197 m_info.strLanguage = parser.GetLanguage();
198 m_info.settings.LoadSettingsXML("special://xbmc/system/scrapers/music/" + m_info.strPath);