OSDN Git Service

a9f8189449aeadbf0ac528b10e60b4c0dc41568c
[iptd/iPTd.git] / src / ry0 / iPTd / Reservation.cpp
1 /**\r
2  * @file Reservation.cpp\r
3  *\r
4  */\r
5 \r
6 #include <time.h>\r
7 \r
8 #define DBG_LEVEL 3\r
9 #include "Raym/Log.h"\r
10 \r
11 #include "keys.h"\r
12 #include "ry0/iPTd/Reservation.h"\r
13 #include "ry0/iPTd/Controller.h"\r
14 \r
15 using namespace Raym;\r
16 \r
17 namespace ry0\r
18 {\r
19 namespace iPTd\r
20 {\r
21 \r
22 static const time_t OFFSET_OF_SUPPRESSION_TIME  = -600;     // 録画開始前に休止の抑制を開始する時間(秒単位)\r
23 \r
24 Reservation::Reservation()\r
25 {\r
26     _controller         = NULL;\r
27     _path               = NULL;\r
28     _reservations       = NULL;\r
29     _reservation_seq_id = -1;\r
30 }\r
31 \r
32 Reservation::~Reservation()\r
33 {\r
34     _controller = NULL;\r
35     RELEASE(_path);\r
36     RELEASE(_reservations);\r
37 }\r
38 \r
39 Reservation *Reservation::alloc()\r
40 {\r
41     return new Reservation();\r
42 }\r
43 \r
44 Reservation *Reservation::initWithController(Controller *controller, String *path)\r
45 {\r
46     _controller = controller;\r
47     _path = path->retain();\r
48 \r
49     _reservations = Dictionary::alloc()->initWithContentsOfFile(_path);\r
50     if (_reservations == NULL)\r
51     {\r
52         DebugLog1("because \"%s\" is not exists, created.", _path->cString());\r
53         _reservations = Dictionary::alloc()->initWithCapacity(0);\r
54         _reservation_seq_id = 1;\r
55     }\r
56     else\r
57     {\r
58         DebugLog1("reservations file: \"%s\"", _path->cString());\r
59 \r
60         // 予約情報シーケンスID\r
61         _reservation_seq_id = _reservations->integerForKey(KEY_EPG_LAST_RESV_ID);\r
62     }\r
63 \r
64     return this;\r
65 }\r
66 \r
67 bool Reservation::canTerminate()\r
68 {\r
69     bool result = true;\r
70 \r
71     // 現在時刻取得\r
72     time_t now = time(NULL);\r
73 \r
74     for (int tuner = 0; tuner < _controller->_tunerCount; ++tuner)\r
75     {\r
76         Array *array = _reservations->arrayForKey(_controller->_tuners[tuner]->name());\r
77         if ((array == NULL) || (array->count() == 0))\r
78         {\r
79             // next tuner\r
80             continue;\r
81         }\r
82 \r
83         //\r
84         Dictionary *epg = (Dictionary *)array->objectAtIndex(0);\r
85         time_t start;\r
86         time_t end;\r
87         Controller::getTimeWithEPG(epg, &start, &end);\r
88 \r
89         if (start + OFFSET_OF_SUPPRESSION_TIME <= now)\r
90         {\r
91             // サスペンド不可\r
92             result = false;\r
93             break;\r
94         }\r
95     }\r
96 \r
97     return true;\r
98 }\r
99 \r
100 } // iPTd\r
101 } // ry0\r