kodi
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 
57  enum class UpdateScheduleType
58  {
60  First,
62  Regular
63  };
64 
70  void ScheduleUpdate(UpdateScheduleType scheduleType);
71 
75  CDateTime LastUpdated() const;
76 
77 
78  void OnSettingChanged(const std::shared_ptr<const CSetting>& setting) override;
79 
80  struct RepositoryUpdated { };
81 
82  CEventStream<RepositoryUpdated>& Events() { return m_events; }
83 
84 private:
85  CRepositoryUpdater(const CRepositoryUpdater&) = delete;
87  CRepositoryUpdater& operator=(const CRepositoryUpdater&) = delete;
88  CRepositoryUpdater& operator=(CRepositoryUpdater&&) = delete;
89 
90  void OnJobComplete(unsigned int jobID, bool success, CJob *job) override;
91 
92  void OnTimeout() override;
93 
94  void OnEvent(const ADDON::AddonEvent& event);
95 
96  CDateTime ClosestNextCheck() const;
97 
98  CCriticalSection m_criticalSection;
99  CTimer m_timer;
100  CEvent m_doneEvent;
101  std::vector<CRepositoryUpdateJob*> m_jobs;
102  CAddonMgr& m_addonMgr;
103 
105 };
106 }
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
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:80
Definition: ISettingCallback.h:16
UpdateScheduleType
Definition: RepositoryUpdater.h:57
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
void ScheduleUpdate(UpdateScheduleType scheduleType)
Schedule an automatic update to run based on settings and previous update times.
Definition: RepositoryUpdater.cpp:314
Callback interface for asynchronous jobs.
Definition: Job.h:31
Definition: Addon.cpp:39
Definition: Timer.h:17
Definition: EventStream.h:22