kodi
AlarmClock.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 "Stopwatch.h"
12 #include "threads/CriticalSection.h"
13 #include "threads/Thread.h"
14 
15 #include <map>
16 #include <string>
17 
19 {
20  CStopWatch watch;
21  double m_fSecs;
22  std::string m_strCommand;
23  bool m_loop;
24 };
25 
26 class CAlarmClock : public CThread
27 {
28 public:
29  CAlarmClock();
30  ~CAlarmClock() override;
31  void Start(const std::string& strName, float n_secs, const std::string& strCommand, bool bSilent = false, bool bLoop = false);
32  inline bool IsRunning() const
33  {
34  return m_bIsRunning;
35  }
36 
37  inline bool HasAlarm(const std::string& strName)
38  {
39  // note: strName should be lower case only here
40  // No point checking it at the moment due to it only being called
41  // from GUIInfoManager (which is always lowercase)
42  // CLog::Log(LOGDEBUG,"checking for {}",strName);
43  return (m_event.find(strName) != m_event.end());
44  }
45 
46  double GetRemaining(const std::string& strName)
47  {
48  std::map<std::string,SAlarmClockEvent>::iterator iter;
49  if ((iter=m_event.find(strName)) != m_event.end())
50  {
51  return iter->second.m_fSecs - static_cast<double>(iter->second.watch.IsRunning()
52  ? iter->second.watch.GetElapsedSeconds()
53  : 0.f);
54  }
55 
56  return 0.0;
57  }
58 
59  void Stop(const std::string& strName, bool bSilent = false);
60  void Process() override;
61 private:
62  std::map<std::string,SAlarmClockEvent> m_event;
63  CCriticalSection m_events;
64 
65  bool m_bIsRunning = false;
66 };
67 
68 extern CAlarmClock g_alarmClock;
69 
Definition: Stopwatch.h:14
Definition: AlarmClock.h:18
Definition: Thread.h:44
Definition: AlarmClock.h:26