2 * Copyright (C) 2005-2013 Team XBMC
5 * This Program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2, or (at your option)
10 * This Program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with XBMC; see the file COPYING. If not, see
17 * <http://www.gnu.org/licenses/>.
21 #include "AlarmClock.h"
22 #include "ApplicationMessenger.h"
23 #include "guilib/LocalizeStrings.h"
24 #include "threads/SingleLock.h"
26 #include "dialogs/GUIDialogKaiToast.h"
30 CAlarmClock::CAlarmClock() : CThread("AlarmClock"), m_bIsRunning(false)
34 CAlarmClock::~CAlarmClock()
38 void CAlarmClock::Start(const CStdString& strName, float n_secs, const CStdString& strCommand, bool bSilent /* false */, bool bLoop /* false */)
40 // make lower case so that lookups are case-insensitive
41 CStdString lowerName(strName);
44 SAlarmClockEvent event;
45 event.m_fSecs = n_secs;
46 event.m_strCommand = strCommand;
55 CStdString strAlarmClock;
56 CStdString strStarted;
57 if (strName.CompareNoCase("shutdowntimer") == 0)
59 strAlarmClock = g_localizeStrings.Get(20144);
60 strStarted = g_localizeStrings.Get(20146);
64 strAlarmClock = g_localizeStrings.Get(13208);
65 strStarted = g_localizeStrings.Get(13210);
68 CStdString strMessage;
70 strMessage.Format(strStarted.c_str(),static_cast<int>(event.m_fSecs)/60,static_cast<int>(event.m_fSecs)%60);
73 CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, strAlarmClock, strMessage);
75 event.watch.StartZero();
76 CSingleLock lock(m_events);
77 m_event.insert(make_pair(lowerName,event));
78 CLog::Log(LOGDEBUG,"started alarm with name: %s",lowerName.c_str());
81 void CAlarmClock::Stop(const CStdString& strName, bool bSilent /* false */)
83 CSingleLock lock(m_events);
85 CStdString lowerName(strName);
86 lowerName.ToLower(); // lookup as lowercase only
87 map<CStdString,SAlarmClockEvent>::iterator iter = m_event.find(lowerName);
89 if (iter == m_event.end())
92 SAlarmClockEvent& event = iter->second;
94 CStdString strAlarmClock;
95 if (event.m_strCommand.Equals("xbmc.powerdown") || event.m_strCommand.Equals("xbmc.powerdown()"))
96 strAlarmClock = g_localizeStrings.Get(20144);
98 strAlarmClock = g_localizeStrings.Get(13208);
100 CStdString strMessage;
101 if( iter->second.watch.GetElapsedSeconds() > iter->second.m_fSecs )
102 strMessage = g_localizeStrings.Get(13211);
105 float remaining = static_cast<float>(iter->second.m_fSecs-iter->second.watch.GetElapsedSeconds());
106 CStdString strStarted = g_localizeStrings.Get(13212);
107 strMessage.Format(strStarted.c_str(),static_cast<int>(remaining)/60,static_cast<int>(remaining)%60);
109 if (iter->second.m_strCommand.IsEmpty() || iter->second.m_fSecs > iter->second.watch.GetElapsedSeconds())
112 CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, strAlarmClock, strMessage);
116 CApplicationMessenger::Get().ExecBuiltIn(iter->second.m_strCommand);
117 if (iter->second.m_loop)
119 iter->second.watch.Reset();
124 iter->second.watch.Stop();
128 void CAlarmClock::Process()
132 CStdString strLast = "";
134 CSingleLock lock(m_events);
135 for (map<CStdString,SAlarmClockEvent>::iterator iter=m_event.begin();iter != m_event.end(); ++iter)
136 if (iter->second.watch.GetElapsedSeconds() >= iter->second.m_fSecs)
139 if ((iter = m_event.find(strLast)) == m_event.end())
143 strLast = iter->first;