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 "BackgroundInfoLoader.h"
12 #include "FileItemList.h"
14 #include "threads/Thread.h"
15 #include "utils/log.h"
19 CBackgroundInfoLoader::CBackgroundInfoLoader() = default;
21 CBackgroundInfoLoader::~CBackgroundInfoLoader()
26 void CBackgroundInfoLoader::Reset()
28 m_pVecItems
= nullptr;
33 void CBackgroundInfoLoader::Run()
37 if (!m_vecItems
.empty())
41 // Stage 1: All "fast" stuff we have already cached
42 for (std::vector
<CFileItemPtr
>::const_iterator iter
= m_vecItems
.begin(); iter
!= m_vecItems
.end(); ++iter
)
44 const CFileItemPtr
& pItem
= *iter
;
46 // Ask the callback if we should abort
47 if ((m_pProgressCallback
&& m_pProgressCallback
->Abort()) || m_bStop
)
52 if (LoadItemCached(pItem
.get()) && m_pObserver
)
53 m_pObserver
->OnItemLoaded(pItem
.get());
58 "CBackgroundInfoLoader::LoadItemCached - Unhandled exception for item {}",
59 CURL::GetRedacted(pItem
->GetPath()));
63 // Stage 2: All "slow" stuff that we need to lookup
64 for (std::vector
<CFileItemPtr
>::const_iterator iter
= m_vecItems
.begin(); iter
!= m_vecItems
.end(); ++iter
)
66 const CFileItemPtr
& pItem
= *iter
;
68 // Ask the callback if we should abort
69 if ((m_pProgressCallback
&& m_pProgressCallback
->Abort()) || m_bStop
)
74 if (LoadItemLookup(pItem
.get()) && m_pObserver
)
75 m_pObserver
->OnItemLoaded(pItem
.get());
80 "CBackgroundInfoLoader::LoadItemLookup - Unhandled exception for item {}",
81 CURL::GetRedacted(pItem
->GetPath()));
90 CLog::Log(LOGERROR
, "{} - Unhandled exception", __FUNCTION__
);
96 void CBackgroundInfoLoader::Load(CFileItemList
& items
)
103 std::unique_lock
<CCriticalSection
> lock(m_lock
);
105 for (int nItem
=0; nItem
< items
.Size(); nItem
++)
106 m_vecItems
.push_back(items
[nItem
]);
108 m_pVecItems
= &items
;
112 m_thread
= new CThread(this, "BackgroundLoader");
114 m_thread
->SetPriority(ThreadPriority::BELOW_NORMAL
);
117 void CBackgroundInfoLoader::StopAsync()
123 void CBackgroundInfoLoader::StopThread()
129 m_thread
->StopThread();
136 bool CBackgroundInfoLoader::IsLoading()
141 void CBackgroundInfoLoader::SetObserver(IBackgroundLoaderObserver
* pObserver
)
143 m_pObserver
= pObserver
;
146 void CBackgroundInfoLoader::SetProgressCallback(IProgressCallback
* pCallback
)
148 m_pProgressCallback
= pCallback
;