xbmc
RepositoryUpdater.h
1 /*
2  * Copyright (C) 2015-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 "settings/lib/ISettingCallback.h"
12 #include "threads/CriticalSection.h"
13 #include "threads/Timer.h"
14 #include "utils/EventStream.h"
15 #include "utils/Job.h"
16 
17 #include <memory>
18 #include <vector>
19 
20 class CDateTime;
21 
22 namespace ADDON
23 {
24 
25 class CAddonMgr;
26 
27 class CRepository;
28 using RepositoryPtr = std::shared_ptr<CRepository>;
29 
30 class CRepositoryUpdateJob;
31 
32 struct AddonEvent;
33 
35 {
36 public:
37  explicit CRepositoryUpdater(CAddonMgr& addonMgr);
38  ~CRepositoryUpdater() override;
39 
40  void Start();
41 
45  void CheckForUpdates(const ADDON::RepositoryPtr& repo, bool showProgress=false);
46 
50  bool CheckForUpdates(bool showProgress=false);
51 
55  void Await();
56 
62  void ScheduleUpdate();
63 
67  CDateTime LastUpdated() const;
68 
69 
70  void OnSettingChanged(const std::shared_ptr<const CSetting>& setting) override;
71 
72  struct RepositoryUpdated { };
73 
74  CEventStream<RepositoryUpdated>& Events() { return m_events; }
75 
76 private:
77  CRepositoryUpdater(const CRepositoryUpdater&) = delete;
79  CRepositoryUpdater& operator=(const CRepositoryUpdater&) = delete;
80  CRepositoryUpdater& operator=(CRepositoryUpdater&&) = delete;
81 
82  void OnJobComplete(unsigned int jobID, bool success, CJob *job) override;
83 
84  void OnTimeout() override;
85 
86  void OnEvent(const ADDON::AddonEvent& event);
87 
88  CDateTime ClosestNextCheck() const;
89 
90  CCriticalSection m_criticalSection;
91  CTimer m_timer;
92  CEvent m_doneEvent;
93  std::vector<CRepositoryUpdateJob*> m_jobs;
94  CAddonMgr& m_addonMgr;
95 
97 };
98 }
Class - CAddonMgr Holds references to all addons, enabled or otherwise.
Definition: AddonManager.h:79
This is an Event class built from a ConditionVariable.
Definition: Event.h:35
void ScheduleUpdate()
Schedule an automatic update to run based on settings and previous update times.
Definition: RepositoryUpdater.cpp:314
Base class for jobs that are executed asynchronously.
Definition: Job.h:109
Definition: EventStream.h:65
void Await()
Wait for any pending/in-progress updates to complete.
Definition: RepositoryUpdater.cpp:247
CDateTime LastUpdated() const
Returns the time of the last check (oldest).
Definition: RepositoryUpdater.cpp:274
Definition: RepositoryUpdater.h:72
Definition: ISettingCallback.h:16
Definition: Timer.h:25
Definition: RepositoryUpdater.h:34
Definition: AddonEvents.h:18
void CheckForUpdates(const ADDON::RepositoryPtr &repo, bool showProgress=false)
Check a single repository for updates.
Definition: RepositoryUpdater.cpp:225
DateTime class, which uses FileTime as it&#39;s base.
Definition: XBDateTime.h:63
void OnSettingChanged(const std::shared_ptr< const CSetting > &setting) override
The value of the given setting has changed.
Definition: RepositoryUpdater.cpp:268
Callback interface for asynchronous jobs.
Definition: Job.h:31
Definition: Addon.cpp:39
Definition: Timer.h:17
Definition: EventStream.h:22