kodi
BackgroundInfoLoader.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 "IProgressCallback.h"
12 #include "threads/CriticalSection.h"
13 #include "threads/IRunnable.h"
14 
15 #include <memory>
16 #include <vector>
17 
18 class CFileItem; typedef std::shared_ptr<CFileItem> CFileItemPtr;
19 class CFileItemList;
20 class CThread;
21 
23 {
24 public:
25  virtual ~IBackgroundLoaderObserver() = default;
26  virtual void OnItemLoaded(CFileItem* pItem) = 0;
27 };
28 
30 {
31 public:
33  ~CBackgroundInfoLoader() override;
34 
35  void Load(CFileItemList& items);
36  bool IsLoading();
37  void Run() override;
38  void SetObserver(IBackgroundLoaderObserver* pObserver);
39  void SetProgressCallback(IProgressCallback* pCallback);
40  virtual bool LoadItem(CFileItem* pItem) { return false; }
41  virtual bool LoadItemCached(CFileItem* pItem) { return false; }
42  virtual bool LoadItemLookup(CFileItem* pItem) { return false; }
43 
44  void StopThread(); // will actually stop the loader thread.
45  void StopAsync(); // will ask loader to stop as soon as possible, but not block
46 
47 protected:
48  virtual void OnLoaderStart() {}
49  virtual void OnLoaderFinish() {}
50 
51  CFileItemList* m_pVecItems{nullptr};
52  std::vector<CFileItemPtr> m_vecItems; // FileItemList would delete the items and we only want to keep a reference.
53  CCriticalSection m_lock;
54 
55  volatile bool m_bIsLoading{false};
56  volatile bool m_bStop{true};
57  CThread* m_thread{nullptr};
58 
59  IBackgroundLoaderObserver* m_pObserver{nullptr};
60  IProgressCallback* m_pProgressCallback{nullptr};
61 
62 private:
63  void Reset();
64 };
65 
Definition: Thread.h:44
std::shared_ptr< CFileItem > CFileItemPtr
A shared pointer to CFileItem.
Definition: FileItem.h:669
Represents a list of files.
Definition: FileItem.h:702
Definition: BackgroundInfoLoader.h:22
Definition: BackgroundInfoLoader.h:29
Definition: IRunnable.h:11
Definition: IProgressCallback.h:11
Represents a file on a share.
Definition: FileItem.h:102