[filesystem][SpecialProtocol] Removed assert from GetPath
[xbmc.git] / xbmc / music / infoscanner / MusicInfoScraper.cpp
blob630c2a797c33ecf9f93e203e0b7a079756a2a9b4
1 /*
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.
7 */
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)
21 m_bSucceeded=false;
22 m_bCanceled=false;
23 m_iAlbum=-1;
24 m_iArtist=-1;
25 m_http = new XFILE::CCurlFile;
28 CMusicInfoScraper::~CMusicInfoScraper(void)
30 StopThread();
31 delete m_http;
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 /* = "" */)
56 m_strAlbum=strAlbum;
57 m_strArtist=strArtist;
58 m_bSucceeded=false;
59 StopThread();
60 Create();
63 void CMusicInfoScraper::FindArtistInfo(const std::string& strArtist)
65 m_strArtist=strArtist;
66 m_bSucceeded=false;
67 StopThread();
68 Create();
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)
85 m_iAlbum=iAlbum;
86 m_iArtist=-1;
87 StopThread();
88 Create();
91 void CMusicInfoScraper::LoadArtistInfo(int iArtist, const std::string &strSearch)
93 m_iAlbum=-1;
94 m_iArtist=iArtist;
95 m_strSearch=strSearch;
96 StopThread();
97 Create();
100 void CMusicInfoScraper::LoadAlbumInfo()
102 if (m_iAlbum<0 || m_iAlbum>=(int)m_vecAlbums.size())
103 return;
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))
109 m_bSucceeded=true;
112 void CMusicInfoScraper::LoadArtistInfo()
114 if (m_iArtist<0 || m_iArtist>=(int)m_vecArtists.size())
115 return;
117 CMusicArtistInfo& artist=m_vecArtists[m_iArtist];
118 artist.GetArtist().strArtist.clear();
119 if (artist.Load(*m_http,m_scraper,m_strSearch))
120 m_bSucceeded=true;
123 bool CMusicInfoScraper::Completed()
125 return Join(10ms);
128 bool CMusicInfoScraper::Succeeded()
130 return !m_bCanceled && m_bSucceeded;
133 void CMusicInfoScraper::Cancel()
135 m_http->Cancel();
136 m_bCanceled=true;
137 m_http->Reset();
140 bool CMusicInfoScraper::IsCanceled()
142 return m_bCanceled;
145 void CMusicInfoScraper::OnStartup()
147 m_bSucceeded=false;
148 m_bCanceled=false;
151 void CMusicInfoScraper::Process()
155 if (m_strAlbum.size())
157 FindAlbumInfo();
158 m_strAlbum.clear();
159 m_strArtist.clear();
161 else if (m_strArtist.size())
163 FindArtistInfo();
164 m_strArtist.clear();
166 if (m_iAlbum>-1)
168 LoadAlbumInfo();
169 m_iAlbum=-1;
171 if (m_iArtist>-1)
173 LoadArtistInfo();
174 m_iArtist=-1;
177 catch(...)
179 CLog::Log(LOGERROR, "Exception in CMusicInfoScraper::Process()");
183 bool CMusicInfoScraper::CheckValidOrFallback(const std::string &fallbackScraper)
185 return true;
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);
199 return true;
201 return false; */