summaryrefslogtreecommitdiffstats
path: root/kradio3/src/alarm.cpp
blob: 3c6784ef7c36133924510fd723f0647de48f22ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/***************************************************************************
                          alarm.cpp  -  description
                             -------------------
    begin                : Mon Feb 4 2002
    copyright            : (C) 2002 by Martin Witte / Frank Schwanz
    email                : [email protected] / [email protected]
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/
#include "include/alarm.h"

int Alarm::m_LastID = 0;

Alarm::Alarm(const QDateTime &time, bool daily, bool enabled)
    : m_time         (time),
      m_daily        (daily),
      m_weekdayMask  (0x7F),
      m_enabled      (enabled),
      m_stationID    (QString::null),
      m_volumePreset (-1),
      m_type         (StartPlaying),
      m_ID           (++m_LastID)
{
}


Alarm::Alarm ()
    : m_time        (QDateTime (QDate(1800, 1,1), QTime(0,0,0))),
      m_daily       (false),
      m_weekdayMask (0x7F),
      m_enabled     (false),
      m_stationID   (QString::null),
      m_volumePreset(-1),
      m_type        (StartPlaying),
      m_ID          (++m_LastID)
{
}


Alarm::Alarm (const Alarm &a)
   : m_time        (a.m_time),
     m_daily       (a.m_daily),
     m_weekdayMask (a.m_weekdayMask),
     m_enabled     (a.m_enabled),
     m_stationID   (a.m_stationID),
     m_volumePreset(a.m_volumePreset),
     m_type        (a.m_type),
     m_ID          (a.m_ID)
{
}


Alarm::~Alarm()
{
}


QDateTime Alarm::nextAlarm(bool ignoreEnable) const
{
    QDateTime now = QDateTime::currentDateTime(),
              alarm = m_time;
    if (m_daily) {
        alarm.setDate (now.date());
        if (alarm <= now)
            alarm = alarm.addDays(1);
        while (m_weekdayMask &&
               !(m_weekdayMask & (1 << (alarm.date().dayOfWeek()-1))))
        {
            alarm = alarm.addDays(1);
        }
    }
    return (m_enabled || ignoreEnable) && (!m_daily || m_weekdayMask) ? alarm : QDateTime();
}