タイニー番組ナビゲータ本体
Revisión | 4ddc4c369f664e50430942eb08b8a564a71f4689 (tree) |
---|---|
Tiempo | 2014-01-27 18:05:37 |
Autor | peeweedee <peeweedee@user...> |
Commiter | peeweedee |
しょぼかるデータに対して番組追跡が実行できない場合があった
@@ -10,10 +10,17 @@ | ||
10 | 10 | 2chの番ナビスレ:http://toro.2ch.net/test/read.cgi/av/1352223253/ |
11 | 11 | ★☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆★ |
12 | 12 | |
13 | -3.22.12β+1.5.12(2014-01-XX) | |
13 | +3.22.13β+1.5.12(2014-01-XX) | |
14 | 14 | ■変更点 |
15 | - ・(レコーダ対応[DIGA BWT650]) 追加(>>673.) | |
16 | 15 | ・(レコーダ対応[TvRock]) 録画/視聴のモード設定の追加 |
16 | + ・(その他) 設定タブの群れをルートからサブにまとめて移動 | |
17 | +■バグ修正 | |
18 | + ・(Web番組表[しょぼかる]) 「タイトル中のサブタイトルを番組追跡に使わない」を有効にしていると、しょぼかるデータに対して番組追跡が行われない問題を修正 | |
19 | + ・(レコーダ対応[DIGA BWT2100/BZT710/720]) ログイン時にネットワークできないとNullぽしてたのを修正 | |
20 | + | |
21 | +3.22.12β+1.5.12(2014-01-20) | |
22 | +■変更点 | |
23 | + ・(レコーダ対応[DIGA BWT650]) 追加(>>673.) | |
17 | 24 | ・(新聞形式) 番組枠内テキストの描画を、LineBreakMeasurerからdrawGlyphVectorに変更。それに伴い番組詳細の描画行数制限を廃止 |
18 | 25 | ・(その他) プラグインの格納場所を変えた |
19 | 26 | ■バグ修正 |
@@ -4,55 +4,7 @@ | ||
4 | 4 | <void method="add"> |
5 | 5 | <object class="tainavi.TraceKey"> |
6 | 6 | <void property="center"> |
7 | - <string>TOKYO MX</string> | |
8 | - </void> | |
9 | - <void property="fazzyThreshold"> | |
10 | - <int>35</int> | |
11 | - </void> | |
12 | - <void property="okiniiri"> | |
13 | - <string>★★★★★</string> | |
14 | - </void> | |
15 | - <void property="title"> | |
16 | - <string><物語>シリーズ セカンドシーズン</string> | |
17 | - </void> | |
18 | - </object> | |
19 | - </void> | |
20 | - <void method="add"> | |
21 | - <object class="tainavi.TraceKey"> | |
22 | - <void property="center"> | |
23 | - <string>BSイレブン</string> | |
24 | - </void> | |
25 | - <void property="fazzyThreshold"> | |
26 | - <int>35</int> | |
27 | - </void> | |
28 | - <void property="okiniiri"> | |
29 | - <string>★★★★★</string> | |
30 | - </void> | |
31 | - <void property="title"> | |
32 | - <string><物語>シリーズセカンドシーズン</string> | |
33 | - </void> | |
34 | - </object> | |
35 | - </void> | |
36 | - <void method="add"> | |
37 | - <object class="tainavi.TraceKey"> | |
38 | - <void property="center"> | |
39 | - <string>BSイレブン</string> | |
40 | - </void> | |
41 | - <void property="fazzyThreshold"> | |
42 | - <int>35</int> | |
43 | - </void> | |
44 | - <void property="okiniiri"> | |
45 | - <string>★★★★★</string> | |
46 | - </void> | |
47 | - <void property="title"> | |
48 | - <string>Fate/kaleid liner プリズマ☆イリヤ</string> | |
49 | - </void> | |
50 | - </object> | |
51 | - </void> | |
52 | - <void method="add"> | |
53 | - <object class="tainavi.TraceKey"> | |
54 | - <void property="center"> | |
55 | - <string>TOKYO MX</string> | |
7 | + <string>日本テレビ</string> | |
56 | 8 | </void> |
57 | 9 | <void property="fazzyThreshold"> |
58 | 10 | <int>35</int> |
@@ -61,14 +13,14 @@ | ||
61 | 13 | <string>★★★★★</string> |
62 | 14 | </void> |
63 | 15 | <void property="title"> |
64 | - <string>Fate kaleid liner プリズマ☆イリヤ</string> | |
16 | + <string>HUNTER×HUNTER</string> | |
65 | 17 | </void> |
66 | 18 | </object> |
67 | 19 | </void> |
68 | 20 | <void method="add"> |
69 | 21 | <object class="tainavi.TraceKey"> |
70 | 22 | <void property="center"> |
71 | - <string>BSイレブン</string> | |
23 | + <string>テレビ東京</string> | |
72 | 24 | </void> |
73 | 25 | <void property="fazzyThreshold"> |
74 | 26 | <int>80</int> |
@@ -77,14 +29,14 @@ | ||
77 | 29 | <string>★★★★★</string> |
78 | 30 | </void> |
79 | 31 | <void property="title"> |
80 | - <string>Free!</string> | |
32 | + <string>アイカツ!</string> | |
81 | 33 | </void> |
82 | 34 | </object> |
83 | 35 | </void> |
84 | 36 | <void method="add"> |
85 | 37 | <object class="tainavi.TraceKey"> |
86 | 38 | <void property="center"> |
87 | - <string>TOKYO MX</string> | |
39 | + <string>BSジャパン</string> | |
88 | 40 | </void> |
89 | 41 | <void property="fazzyThreshold"> |
90 | 42 | <int>80</int> |
@@ -93,14 +45,14 @@ | ||
93 | 45 | <string>★★★★★</string> |
94 | 46 | </void> |
95 | 47 | <void property="title"> |
96 | - <string>Free!</string> | |
48 | + <string>アイカツ!</string> | |
97 | 49 | </void> |
98 | 50 | </object> |
99 | 51 | </void> |
100 | 52 | <void method="add"> |
101 | 53 | <object class="tainavi.TraceKey"> |
102 | 54 | <void property="center"> |
103 | - <string>日本テレビ</string> | |
55 | + <string>BSジャパン</string> | |
104 | 56 | </void> |
105 | 57 | <void property="fazzyThreshold"> |
106 | 58 | <int>35</int> |
@@ -109,14 +61,14 @@ | ||
109 | 61 | <string>★★★★★</string> |
110 | 62 | </void> |
111 | 63 | <void property="title"> |
112 | - <string>HUNTER×HUNTER</string> | |
64 | + <string>カードファイト!!ヴァンガード リンクジョーカー編</string> | |
113 | 65 | </void> |
114 | 66 | </object> |
115 | 67 | </void> |
116 | 68 | <void method="add"> |
117 | 69 | <object class="tainavi.TraceKey"> |
118 | 70 | <void property="center"> |
119 | - <string>BSイレブン</string> | |
71 | + <string>テレビ東京</string> | |
120 | 72 | </void> |
121 | 73 | <void property="fazzyThreshold"> |
122 | 74 | <int>35</int> |
@@ -125,46 +77,46 @@ | ||
125 | 77 | <string>★★★★★</string> |
126 | 78 | </void> |
127 | 79 | <void property="title"> |
128 | - <string>きんいろモザイク</string> | |
80 | + <string>カードファイト!!ヴァンガード リンクジョーカー編</string> | |
129 | 81 | </void> |
130 | 82 | </object> |
131 | 83 | </void> |
132 | 84 | <void method="add"> |
133 | 85 | <object class="tainavi.TraceKey"> |
134 | 86 | <void property="center"> |
135 | - <string>TOKYO MX</string> | |
87 | + <string>フジテレビ</string> | |
136 | 88 | </void> |
137 | 89 | <void property="fazzyThreshold"> |
138 | - <int>35</int> | |
90 | + <int>90</int> | |
139 | 91 | </void> |
140 | 92 | <void property="okiniiri"> |
141 | 93 | <string>★★★★★</string> |
142 | 94 | </void> |
143 | 95 | <void property="title"> |
144 | - <string>きんいろモザイク</string> | |
96 | + <string>トリコ</string> | |
145 | 97 | </void> |
146 | 98 | </object> |
147 | 99 | </void> |
148 | 100 | <void method="add"> |
149 | 101 | <object class="tainavi.TraceKey"> |
150 | 102 | <void property="center"> |
151 | - <string>TOKYO MX</string> | |
103 | + <string>テレビ東京</string> | |
152 | 104 | </void> |
153 | 105 | <void property="fazzyThreshold"> |
154 | - <int>35</int> | |
106 | + <int>60</int> | |
155 | 107 | </void> |
156 | 108 | <void property="okiniiri"> |
157 | 109 | <string>★★★★★</string> |
158 | 110 | </void> |
159 | 111 | <void property="title"> |
160 | - <string>げんしけん二代目</string> | |
112 | + <string>プリティーリズム・レインボーライブ</string> | |
161 | 113 | </void> |
162 | 114 | </object> |
163 | 115 | </void> |
164 | 116 | <void method="add"> |
165 | 117 | <object class="tainavi.TraceKey"> |
166 | 118 | <void property="center"> |
167 | - <string>TOKYO MX</string> | |
119 | + <string>テレビ東京</string> | |
168 | 120 | </void> |
169 | 121 | <void property="fazzyThreshold"> |
170 | 122 | <int>35</int> |
@@ -173,23 +125,23 @@ | ||
173 | 125 | <string>★★★★★</string> |
174 | 126 | </void> |
175 | 127 | <void property="title"> |
176 | - <string>たまゆら~もあぐれっしぶ~</string> | |
128 | + <string>マイリトルポニー ~トモダチは魔法~</string> | |
177 | 129 | </void> |
178 | 130 | </object> |
179 | 131 | </void> |
180 | 132 | <void method="add"> |
181 | 133 | <object class="tainavi.TraceKey"> |
182 | 134 | <void property="center"> |
183 | - <string>BSイレブン</string> | |
135 | + <string>日本テレビ</string> | |
184 | 136 | </void> |
185 | 137 | <void property="fazzyThreshold"> |
186 | - <int>35</int> | |
138 | + <int>60</int> | |
187 | 139 | </void> |
188 | 140 | <void property="okiniiri"> |
189 | 141 | <string>★★★★★</string> |
190 | 142 | </void> |
191 | 143 | <void property="title"> |
192 | - <string>とある科学の超電磁砲S</string> | |
144 | + <string>宇宙兄弟</string> | |
193 | 145 | </void> |
194 | 146 | </object> |
195 | 147 | </void> |
@@ -205,14 +157,14 @@ | ||
205 | 157 | <string>★★★★★</string> |
206 | 158 | </void> |
207 | 159 | <void property="title"> |
208 | - <string>とある科学の超電磁砲S</string> | |
160 | + <string>機動戦士ガンダムSEED DESTINY HDリマスター</string> | |
209 | 161 | </void> |
210 | 162 | </object> |
211 | 163 | </void> |
212 | 164 | <void method="add"> |
213 | 165 | <object class="tainavi.TraceKey"> |
214 | 166 | <void property="center"> |
215 | - <string>BS日テレ</string> | |
167 | + <string>NHK Eテレ</string> | |
216 | 168 | </void> |
217 | 169 | <void property="fazzyThreshold"> |
218 | 170 | <int>35</int> |
@@ -221,46 +173,14 @@ | ||
221 | 173 | <string>★★★★★</string> |
222 | 174 | </void> |
223 | 175 | <void property="title"> |
224 | - <string>ふたりはミルキィホームズ</string> | |
225 | - </void> | |
226 | - </object> | |
227 | - </void> | |
228 | - <void method="add"> | |
229 | - <object class="tainavi.TraceKey"> | |
230 | - <void property="center"> | |
231 | - <string>テレビ東京</string> | |
232 | - </void> | |
233 | - <void property="fazzyThreshold"> | |
234 | - <int>80</int> | |
235 | - </void> | |
236 | - <void property="okiniiri"> | |
237 | - <string>★★★★★</string> | |
238 | - </void> | |
239 | - <void property="title"> | |
240 | - <string>アイカツ!</string> | |
241 | - </void> | |
242 | - </object> | |
243 | - </void> | |
244 | - <void method="add"> | |
245 | - <object class="tainavi.TraceKey"> | |
246 | - <void property="center"> | |
247 | - <string>BSジャパン</string> | |
248 | - </void> | |
249 | - <void property="fazzyThreshold"> | |
250 | - <int>80</int> | |
251 | - </void> | |
252 | - <void property="okiniiri"> | |
253 | - <string>★★★★★</string> | |
254 | - </void> | |
255 | - <void property="title"> | |
256 | - <string>アイカツ!</string> | |
176 | + <string>黒魔女</string> | |
257 | 177 | </void> |
258 | 178 | </object> |
259 | 179 | </void> |
260 | 180 | <void method="add"> |
261 | 181 | <object class="tainavi.TraceKey"> |
262 | 182 | <void property="center"> |
263 | - <string>BSジャパン</string> | |
183 | + <string>BS日テレ</string> | |
264 | 184 | </void> |
265 | 185 | <void property="fazzyThreshold"> |
266 | 186 | <int>35</int> |
@@ -269,14 +189,14 @@ | ||
269 | 189 | <string>★★★★★</string> |
270 | 190 | </void> |
271 | 191 | <void property="title"> |
272 | - <string>カードファイト!!ヴァンガード リンクジョーカー編</string> | |
192 | + <string>とある飛空士への恋歌</string> | |
273 | 193 | </void> |
274 | 194 | </object> |
275 | 195 | </void> |
276 | 196 | <void method="add"> |
277 | 197 | <object class="tainavi.TraceKey"> |
278 | 198 | <void property="center"> |
279 | - <string>テレビ東京</string> | |
199 | + <string>BS日テレ</string> | |
280 | 200 | </void> |
281 | 201 | <void property="fazzyThreshold"> |
282 | 202 | <int>35</int> |
@@ -285,14 +205,14 @@ | ||
285 | 205 | <string>★★★★★</string> |
286 | 206 | </void> |
287 | 207 | <void property="title"> |
288 | - <string>カードファイト!!ヴァンガード リンクジョーカー編</string> | |
208 | + <string>GJ部</string> | |
289 | 209 | </void> |
290 | 210 | </object> |
291 | 211 | </void> |
292 | 212 | <void method="add"> |
293 | 213 | <object class="tainavi.TraceKey"> |
294 | 214 | <void property="center"> |
295 | - <string>日本テレビ</string> | |
215 | + <string>BS-TBS</string> | |
296 | 216 | </void> |
297 | 217 | <void property="fazzyThreshold"> |
298 | 218 | <int>35</int> |
@@ -301,14 +221,14 @@ | ||
301 | 221 | <string>★★★★★</string> |
302 | 222 | </void> |
303 | 223 | <void property="title"> |
304 | - <string>ガッチャマン クラウズ</string> | |
224 | + <string>鬼灯の冷徹</string> | |
305 | 225 | </void> |
306 | 226 | </object> |
307 | 227 | </void> |
308 | 228 | <void method="add"> |
309 | 229 | <object class="tainavi.TraceKey"> |
310 | 230 | <void property="center"> |
311 | - <string>NHK BSプレミアム</string> | |
231 | + <string>BS-TBS</string> | |
312 | 232 | </void> |
313 | 233 | <void property="fazzyThreshold"> |
314 | 234 | <int>35</int> |
@@ -317,14 +237,14 @@ | ||
317 | 237 | <string>★★★★★</string> |
318 | 238 | </void> |
319 | 239 | <void property="title"> |
320 | - <string>キングダム2</string> | |
240 | + <string>キルラキル</string> | |
321 | 241 | </void> |
322 | 242 | </object> |
323 | 243 | </void> |
324 | 244 | <void method="add"> |
325 | 245 | <object class="tainavi.TraceKey"> |
326 | 246 | <void property="center"> |
327 | - <string>BSイレブン</string> | |
247 | + <string>BS-TBS</string> | |
328 | 248 | </void> |
329 | 249 | <void property="fazzyThreshold"> |
330 | 250 | <int>35</int> |
@@ -333,14 +253,14 @@ | ||
333 | 253 | <string>★★★★★</string> |
334 | 254 | </void> |
335 | 255 | <void property="title"> |
336 | - <string>サーバント×サービス</string> | |
256 | + <string>魔法戦争</string> | |
337 | 257 | </void> |
338 | 258 | </object> |
339 | 259 | </void> |
340 | 260 | <void method="add"> |
341 | 261 | <object class="tainavi.TraceKey"> |
342 | 262 | <void property="center"> |
343 | - <string>TOKYO MX</string> | |
263 | + <string>BS-TBS</string> | |
344 | 264 | </void> |
345 | 265 | <void property="fazzyThreshold"> |
346 | 266 | <int>35</int> |
@@ -349,7 +269,7 @@ | ||
349 | 269 | <string>★★★★★</string> |
350 | 270 | </void> |
351 | 271 | <void property="title"> |
352 | - <string>サーバント×サービス</string> | |
272 | + <string>桜Trick</string> | |
353 | 273 | </void> |
354 | 274 | </object> |
355 | 275 | </void> |
@@ -359,36 +279,20 @@ | ||
359 | 279 | <string>BSフジ</string> |
360 | 280 | </void> |
361 | 281 | <void property="fazzyThreshold"> |
362 | - <int>80</int> | |
363 | - </void> | |
364 | - <void property="okiniiri"> | |
365 | - <string>★★★★★</string> | |
366 | - </void> | |
367 | - <void property="title"> | |
368 | - <string>ジャパコン</string> | |
369 | - </void> | |
370 | - </object> | |
371 | - </void> | |
372 | - <void method="add"> | |
373 | - <object class="tainavi.TraceKey"> | |
374 | - <void property="center"> | |
375 | - <string>TBSテレビ</string> | |
376 | - </void> | |
377 | - <void property="fazzyThreshold"> | |
378 | 282 | <int>35</int> |
379 | 283 | </void> |
380 | 284 | <void property="okiniiri"> |
381 | 285 | <string>★★★★★</string> |
382 | 286 | </void> |
383 | 287 | <void property="title"> |
384 | - <string>ステラ女学院高等科C3部</string> | |
288 | + <string>スペース☆ダンディ</string> | |
385 | 289 | </void> |
386 | 290 | </object> |
387 | 291 | </void> |
388 | 292 | <void method="add"> |
389 | 293 | <object class="tainavi.TraceKey"> |
390 | 294 | <void property="center"> |
391 | - <string>BS-TBS</string> | |
295 | + <string>BSイレブン</string> | |
392 | 296 | </void> |
393 | 297 | <void property="fazzyThreshold"> |
394 | 298 | <int>35</int> |
@@ -397,14 +301,14 @@ | ||
397 | 301 | <string>★★★★★</string> |
398 | 302 | </void> |
399 | 303 | <void property="title"> |
400 | - <string>ステラ女学院高等科C3部</string> | |
304 | + <string>のうりん</string> | |
401 | 305 | </void> |
402 | 306 | </object> |
403 | 307 | </void> |
404 | 308 | <void method="add"> |
405 | 309 | <object class="tainavi.TraceKey"> |
406 | 310 | <void property="center"> |
407 | - <string>BS-TBS</string> | |
311 | + <string>BSイレブン</string> | |
408 | 312 | </void> |
409 | 313 | <void property="fazzyThreshold"> |
410 | 314 | <int>35</int> |
@@ -413,14 +317,14 @@ | ||
413 | 317 | <string>★★★★★</string> |
414 | 318 | </void> |
415 | 319 | <void property="title"> |
416 | - <string>ダンガンロンパ 希望の学園と絶望の高校生 The Animaition</string> | |
320 | + <string>バディ・コンプレックス</string> | |
417 | 321 | </void> |
418 | 322 | </object> |
419 | 323 | </void> |
420 | 324 | <void method="add"> |
421 | 325 | <object class="tainavi.TraceKey"> |
422 | 326 | <void property="center"> |
423 | - <string>TBSテレビ</string> | |
327 | + <string>BSイレブン</string> | |
424 | 328 | </void> |
425 | 329 | <void property="fazzyThreshold"> |
426 | 330 | <int>35</int> |
@@ -429,30 +333,14 @@ | ||
429 | 333 | <string>★★★★★</string> |
430 | 334 | </void> |
431 | 335 | <void property="title"> |
432 | - <string>ダンガンロンパ 希望の学園と絶望の高校生 The Animation</string> | |
336 | + <string>東京レイヴンズ</string> | |
433 | 337 | </void> |
434 | 338 | </object> |
435 | 339 | </void> |
436 | 340 | <void method="add"> |
437 | 341 | <object class="tainavi.TraceKey"> |
438 | 342 | <void property="center"> |
439 | - <string>フジテレビ</string> | |
440 | - </void> | |
441 | - <void property="fazzyThreshold"> | |
442 | - <int>90</int> | |
443 | - </void> | |
444 | - <void property="okiniiri"> | |
445 | - <string>★★★★★</string> | |
446 | - </void> | |
447 | - <void property="title"> | |
448 | - <string>トリコ</string> | |
449 | - </void> | |
450 | - </object> | |
451 | - </void> | |
452 | - <void method="add"> | |
453 | - <object class="tainavi.TraceKey"> | |
454 | - <void property="center"> | |
455 | - <string>テレビ朝日</string> | |
343 | + <string>BSイレブン</string> | |
456 | 344 | </void> |
457 | 345 | <void property="fazzyThreshold"> |
458 | 346 | <int>35</int> |
@@ -461,7 +349,7 @@ | ||
461 | 349 | <string>★★★★★</string> |
462 | 350 | </void> |
463 | 351 | <void property="title"> |
464 | - <string>ドキドキ!プリキュア</string> | |
352 | + <string>ウィッチクラフトワークス</string> | |
465 | 353 | </void> |
466 | 354 | </object> |
467 | 355 | </void> |
@@ -477,23 +365,7 @@ | ||
477 | 365 | <string>★★★★★</string> |
478 | 366 | </void> |
479 | 367 | <void property="title"> |
480 | - <string>ハイスクールD×D NEW 月光校庭のエクスカリバー</string> | |
481 | - </void> | |
482 | - </object> | |
483 | - </void> | |
484 | - <void method="add"> | |
485 | - <object class="tainavi.TraceKey"> | |
486 | - <void property="center"> | |
487 | - <string>BS朝日</string> | |
488 | - </void> | |
489 | - <void property="fazzyThreshold"> | |
490 | - <int>80</int> | |
491 | - </void> | |
492 | - <void property="okiniiri"> | |
493 | - <string>★★★★★</string> | |
494 | - </void> | |
495 | - <void property="title"> | |
496 | - <string>バビル2世</string> | |
368 | + <string>ガールズ&パンツァー</string> | |
497 | 369 | </void> |
498 | 370 | </object> |
499 | 371 | </void> |
@@ -509,14 +381,14 @@ | ||
509 | 381 | <string>★★★★★</string> |
510 | 382 | </void> |
511 | 383 | <void property="title"> |
512 | - <string>ファンタジスタドール</string> | |
384 | + <string>ノブナガン</string> | |
513 | 385 | </void> |
514 | 386 | </object> |
515 | 387 | </void> |
516 | 388 | <void method="add"> |
517 | 389 | <object class="tainavi.TraceKey"> |
518 | 390 | <void property="center"> |
519 | - <string>TOKYO MX</string> | |
391 | + <string>BSイレブン</string> | |
520 | 392 | </void> |
521 | 393 | <void property="fazzyThreshold"> |
522 | 394 | <int>35</int> |
@@ -525,7 +397,7 @@ | ||
525 | 397 | <string>★★★★★</string> |
526 | 398 | </void> |
527 | 399 | <void property="title"> |
528 | - <string>ファンタジスタドール</string> | |
400 | + <string>ウィザード・バリスターズ~弁魔士セシル</string> | |
529 | 401 | </void> |
530 | 402 | </object> |
531 | 403 | </void> |
@@ -535,68 +407,20 @@ | ||
535 | 407 | <string>BSイレブン</string> |
536 | 408 | </void> |
537 | 409 | <void property="fazzyThreshold"> |
538 | - <int>70</int> | |
539 | - </void> | |
540 | - <void property="okiniiri"> | |
541 | - <string>★★★★★</string> | |
542 | - </void> | |
543 | - <void property="title"> | |
544 | - <string>ブラッドラッド </string> | |
545 | - </void> | |
546 | - </object> | |
547 | - </void> | |
548 | - <void method="add"> | |
549 | - <object class="tainavi.TraceKey"> | |
550 | - <void property="center"> | |
551 | - <string>TOKYO MX</string> | |
552 | - </void> | |
553 | - <void property="fazzyThreshold"> | |
554 | - <int>80</int> | |
555 | - </void> | |
556 | - <void property="okiniiri"> | |
557 | - <string>★★★★★</string> | |
558 | - </void> | |
559 | - <void property="title"> | |
560 | - <string>ブラッドラッド </string> | |
561 | - </void> | |
562 | - </object> | |
563 | - </void> | |
564 | - <void method="add"> | |
565 | - <object class="tainavi.TraceKey"> | |
566 | - <void property="center"> | |
567 | - <string>テレビ東京</string> | |
568 | - </void> | |
569 | - <void property="fazzyThreshold"> | |
570 | - <int>60</int> | |
571 | - </void> | |
572 | - <void property="okiniiri"> | |
573 | - <string>★★★★★</string> | |
574 | - </void> | |
575 | - <void property="title"> | |
576 | - <string>プリティーリズム・レインボーライブ</string> | |
577 | - </void> | |
578 | - </object> | |
579 | - </void> | |
580 | - <void method="add"> | |
581 | - <object class="tainavi.TraceKey"> | |
582 | - <void property="center"> | |
583 | - <string>テレビ東京</string> | |
584 | - </void> | |
585 | - <void property="fazzyThreshold"> | |
586 | 410 | <int>35</int> |
587 | 411 | </void> |
588 | 412 | <void property="okiniiri"> |
589 | 413 | <string>★★★★★</string> |
590 | 414 | </void> |
591 | 415 | <void property="title"> |
592 | - <string>マイリトルポニー ~トモダチは魔法~</string> | |
416 | + <string>最近、妹のようすがちょっとおかしいんだが。</string> | |
593 | 417 | </void> |
594 | 418 | </object> |
595 | 419 | </void> |
596 | 420 | <void method="add"> |
597 | 421 | <object class="tainavi.TraceKey"> |
598 | 422 | <void property="center"> |
599 | - <string>テレビ東京</string> | |
423 | + <string>BSイレブン</string> | |
600 | 424 | </void> |
601 | 425 | <void property="fazzyThreshold"> |
602 | 426 | <int>35</int> |
@@ -605,7 +429,7 @@ | ||
605 | 429 | <string>★★★★★</string> |
606 | 430 | </void> |
607 | 431 | <void property="title"> |
608 | - <string>ムシブギョー</string> | |
432 | + <string>そにアニ -SUPER SONICO THE ANIMATION-</string> | |
609 | 433 | </void> |
610 | 434 | </object> |
611 | 435 | </void> |
@@ -621,14 +445,14 @@ | ||
621 | 445 | <string>★★★★★</string> |
622 | 446 | </void> |
623 | 447 | <void property="title"> |
624 | - <string>ロウきゅーぶ!SS</string> | |
448 | + <string>ゴールデンタイム</string> | |
625 | 449 | </void> |
626 | 450 | </object> |
627 | 451 | </void> |
628 | 452 | <void method="add"> |
629 | 453 | <object class="tainavi.TraceKey"> |
630 | 454 | <void property="center"> |
631 | - <string>BS-TBS</string> | |
455 | + <string>BSイレブン</string> | |
632 | 456 | </void> |
633 | 457 | <void property="fazzyThreshold"> |
634 | 458 | <int>35</int> |
@@ -637,14 +461,14 @@ | ||
637 | 461 | <string>★★★★★</string> |
638 | 462 | </void> |
639 | 463 | <void property="title"> |
640 | - <string>ローゼンメイデン</string> | |
464 | + <string>生徒会役員共*</string> | |
641 | 465 | </void> |
642 | 466 | </object> |
643 | 467 | </void> |
644 | 468 | <void method="add"> |
645 | 469 | <object class="tainavi.TraceKey"> |
646 | 470 | <void property="center"> |
647 | - <string>TBSテレビ</string> | |
471 | + <string>BSイレブン</string> | |
648 | 472 | </void> |
649 | 473 | <void property="fazzyThreshold"> |
650 | 474 | <int>35</int> |
@@ -653,30 +477,14 @@ | ||
653 | 477 | <string>★★★★★</string> |
654 | 478 | </void> |
655 | 479 | <void property="title"> |
656 | - <string>ローゼンメイデン</string> | |
480 | + <string>ストライク・ザ・ブラッド</string> | |
657 | 481 | </void> |
658 | 482 | </object> |
659 | 483 | </void> |
660 | 484 | <void method="add"> |
661 | 485 | <object class="tainavi.TraceKey"> |
662 | 486 | <void property="center"> |
663 | - <string>日本テレビ</string> | |
664 | - </void> | |
665 | - <void property="fazzyThreshold"> | |
666 | - <int>60</int> | |
667 | - </void> | |
668 | - <void property="okiniiri"> | |
669 | - <string>★★★★★</string> | |
670 | - </void> | |
671 | - <void property="title"> | |
672 | - <string>宇宙兄弟</string> | |
673 | - </void> | |
674 | - </object> | |
675 | - </void> | |
676 | - <void method="add"> | |
677 | - <object class="tainavi.TraceKey"> | |
678 | - <void property="center"> | |
679 | - <string>TBSテレビ</string> | |
487 | + <string>BSイレブン</string> | |
680 | 488 | </void> |
681 | 489 | <void property="fazzyThreshold"> |
682 | 490 | <int>35</int> |
@@ -685,14 +493,14 @@ | ||
685 | 493 | <string>★★★★★</string> |
686 | 494 | </void> |
687 | 495 | <void property="title"> |
688 | - <string>宇宙戦艦ヤマト2199</string> | |
496 | + <string>マケン姫っ!通</string> | |
689 | 497 | </void> |
690 | 498 | </object> |
691 | 499 | </void> |
692 | 500 | <void method="add"> |
693 | 501 | <object class="tainavi.TraceKey"> |
694 | 502 | <void property="center"> |
695 | - <string>日本テレビ</string> | |
503 | + <string>BSイレブン</string> | |
696 | 504 | </void> |
697 | 505 | <void property="fazzyThreshold"> |
698 | 506 | <int>35</int> |
@@ -701,7 +509,7 @@ | ||
701 | 509 | <string>★★★★★</string> |
702 | 510 | </void> |
703 | 511 | <void property="title"> |
704 | - <string>帰宅部活動記録</string> | |
512 | + <string>ノラガミ</string> | |
705 | 513 | </void> |
706 | 514 | </object> |
707 | 515 | </void> |
@@ -717,14 +525,14 @@ | ||
717 | 525 | <string>★★★★★</string> |
718 | 526 | </void> |
719 | 527 | <void property="title"> |
720 | - <string>幻影ヲ駆ケル太陽</string> | |
528 | + <string>ニセコイ</string> | |
721 | 529 | </void> |
722 | 530 | </object> |
723 | 531 | </void> |
724 | 532 | <void method="add"> |
725 | 533 | <object class="tainavi.TraceKey"> |
726 | 534 | <void property="center"> |
727 | - <string>TOKYO MX</string> | |
535 | + <string>BSイレブン</string> | |
728 | 536 | </void> |
729 | 537 | <void property="fazzyThreshold"> |
730 | 538 | <int>35</int> |
@@ -733,14 +541,14 @@ | ||
733 | 541 | <string>★★★★★</string> |
734 | 542 | </void> |
735 | 543 | <void property="title"> |
736 | - <string>幻影ヲ駆ケル太陽</string> | |
544 | + <string>世界征服~謀略のズヴィズダー~</string> | |
737 | 545 | </void> |
738 | 546 | </object> |
739 | 547 | </void> |
740 | 548 | <void method="add"> |
741 | 549 | <object class="tainavi.TraceKey"> |
742 | 550 | <void property="center"> |
743 | - <string>BS-TBS</string> | |
551 | + <string>BSイレブン</string> | |
744 | 552 | </void> |
745 | 553 | <void property="fazzyThreshold"> |
746 | 554 | <int>35</int> |
@@ -749,14 +557,14 @@ | ||
749 | 557 | <string>★★★★★</string> |
750 | 558 | </void> |
751 | 559 | <void property="title"> |
752 | - <string>恋愛ラボ</string> | |
560 | + <string>いなり、こんこん、恋いろは。</string> | |
753 | 561 | </void> |
754 | 562 | </object> |
755 | 563 | </void> |
756 | 564 | <void method="add"> |
757 | 565 | <object class="tainavi.TraceKey"> |
758 | 566 | <void property="center"> |
759 | - <string>TBSテレビ</string> | |
567 | + <string>BSイレブン</string> | |
760 | 568 | </void> |
761 | 569 | <void property="fazzyThreshold"> |
762 | 570 | <int>35</int> |
@@ -765,23 +573,7 @@ | ||
765 | 573 | <string>★★★★★</string> |
766 | 574 | </void> |
767 | 575 | <void property="title"> |
768 | - <string>恋愛ラボ</string> | |
769 | - </void> | |
770 | - </object> | |
771 | - </void> | |
772 | - <void method="add"> | |
773 | - <object class="tainavi.TraceKey"> | |
774 | - <void property="center"> | |
775 | - <string>テレビ東京</string> | |
776 | - </void> | |
777 | - <void property="fazzyThreshold"> | |
778 | - <int>80</int> | |
779 | - </void> | |
780 | - <void property="okiniiri"> | |
781 | - <string>★★★★★</string> | |
782 | - </void> | |
783 | - <void property="title"> | |
784 | - <string>戦勇。</string> | |
576 | + <string>中二病でも恋がしたい!戀</string> | |
785 | 577 | </void> |
786 | 578 | </object> |
787 | 579 | </void> |
@@ -797,14 +589,14 @@ | ||
797 | 589 | <string>★★★★★</string> |
798 | 590 | </void> |
799 | 591 | <void property="title"> |
800 | - <string>戦姫絶唱シンフォギアG</string> | |
592 | + <string>未確認で進行形</string> | |
801 | 593 | </void> |
802 | 594 | </object> |
803 | 595 | </void> |
804 | 596 | <void method="add"> |
805 | 597 | <object class="tainavi.TraceKey"> |
806 | 598 | <void property="center"> |
807 | - <string>TOKYO MX</string> | |
599 | + <string>日本テレビ</string> | |
808 | 600 | </void> |
809 | 601 | <void property="fazzyThreshold"> |
810 | 602 | <int>35</int> |
@@ -813,14 +605,14 @@ | ||
813 | 605 | <string>★★★★★</string> |
814 | 606 | </void> |
815 | 607 | <void property="title"> |
816 | - <string>戦姫絶唱シンフォギアG</string> | |
608 | + <string>はじめの一歩 Rising</string> | |
817 | 609 | </void> |
818 | 610 | </object> |
819 | 611 | </void> |
820 | 612 | <void method="add"> |
821 | 613 | <object class="tainavi.TraceKey"> |
822 | 614 | <void property="center"> |
823 | - <string>BSイレブン</string> | |
615 | + <string>日本テレビ</string> | |
824 | 616 | </void> |
825 | 617 | <void property="fazzyThreshold"> |
826 | 618 | <int>35</int> |
@@ -829,14 +621,14 @@ | ||
829 | 621 | <string>★★★★★</string> |
830 | 622 | </void> |
831 | 623 | <void property="title"> |
832 | - <string>有頂天家族</string> | |
624 | + <string>てさぐれ!部活もの あんこーる</string> | |
833 | 625 | </void> |
834 | 626 | </object> |
835 | 627 | </void> |
836 | 628 | <void method="add"> |
837 | 629 | <object class="tainavi.TraceKey"> |
838 | 630 | <void property="center"> |
839 | - <string>TOKYO MX</string> | |
631 | + <string>TBSテレビ</string> | |
840 | 632 | </void> |
841 | 633 | <void property="fazzyThreshold"> |
842 | 634 | <int>35</int> |
@@ -845,14 +637,14 @@ | ||
845 | 637 | <string>★★★★★</string> |
846 | 638 | </void> |
847 | 639 | <void property="title"> |
848 | - <string>有頂天家族</string> | |
640 | + <string>魔法戦争</string> | |
849 | 641 | </void> |
850 | 642 | </object> |
851 | 643 | </void> |
852 | 644 | <void method="add"> |
853 | 645 | <object class="tainavi.TraceKey"> |
854 | 646 | <void property="center"> |
855 | - <string>TOKYO MX</string> | |
647 | + <string>TBSテレビ</string> | |
856 | 648 | </void> |
857 | 649 | <void property="fazzyThreshold"> |
858 | 650 | <int>35</int> |
@@ -861,14 +653,14 @@ | ||
861 | 653 | <string>★★★★★</string> |
862 | 654 | </void> |
863 | 655 | <void property="title"> |
864 | - <string>機動戦士ガンダムSEED DESTINY HDリマスター</string> | |
656 | + <string>桜Trick</string> | |
865 | 657 | </void> |
866 | 658 | </object> |
867 | 659 | </void> |
868 | 660 | <void method="add"> |
869 | - <object id="TraceKey0" class="tainavi.TraceKey"> | |
661 | + <object class="tainavi.TraceKey"> | |
870 | 662 | <void property="center"> |
871 | - <string>BS日テレ</string> | |
663 | + <string>TBSテレビ</string> | |
872 | 664 | </void> |
873 | 665 | <void property="fazzyThreshold"> |
874 | 666 | <int>35</int> |
@@ -877,17 +669,14 @@ | ||
877 | 669 | <string>★★★★★</string> |
878 | 670 | </void> |
879 | 671 | <void property="title"> |
880 | - <string>犬とハサミは使いよう</string> | |
672 | + <string>鬼灯の冷徹</string> | |
881 | 673 | </void> |
882 | 674 | </object> |
883 | 675 | </void> |
884 | 676 | <void method="add"> |
885 | - <object idref="TraceKey0"/> | |
886 | - </void> | |
887 | - <void method="add"> | |
888 | 677 | <object class="tainavi.TraceKey"> |
889 | 678 | <void property="center"> |
890 | - <string>テレビ東京</string> | |
679 | + <string>TBSテレビ</string> | |
891 | 680 | </void> |
892 | 681 | <void property="fazzyThreshold"> |
893 | 682 | <int>35</int> |
@@ -896,14 +685,14 @@ | ||
896 | 685 | <string>★★★★★</string> |
897 | 686 | </void> |
898 | 687 | <void property="title"> |
899 | - <string>獣旋バトル モンスーノ</string> | |
688 | + <string>キルラキル</string> | |
900 | 689 | </void> |
901 | 690 | </object> |
902 | 691 | </void> |
903 | 692 | <void method="add"> |
904 | 693 | <object class="tainavi.TraceKey"> |
905 | 694 | <void property="center"> |
906 | - <string>BSイレブン</string> | |
695 | + <string>テレビ東京</string> | |
907 | 696 | </void> |
908 | 697 | <void property="fazzyThreshold"> |
909 | 698 | <int>35</int> |
@@ -912,14 +701,14 @@ | ||
912 | 701 | <string>★★★★★</string> |
913 | 702 | </void> |
914 | 703 | <void property="title"> |
915 | - <string>神さまのいない日曜日</string> | |
704 | + <string>弱虫ペダル</string> | |
916 | 705 | </void> |
917 | 706 | </object> |
918 | 707 | </void> |
919 | 708 | <void method="add"> |
920 | 709 | <object class="tainavi.TraceKey"> |
921 | 710 | <void property="center"> |
922 | - <string>TOKYO MX</string> | |
711 | + <string>テレビ東京</string> | |
923 | 712 | </void> |
924 | 713 | <void property="fazzyThreshold"> |
925 | 714 | <int>35</int> |
@@ -928,7 +717,7 @@ | ||
928 | 717 | <string>★★★★★</string> |
929 | 718 | </void> |
930 | 719 | <void property="title"> |
931 | - <string>神さまのいない日曜日</string> | |
720 | + <string>ディーふらぐ!</string> | |
932 | 721 | </void> |
933 | 722 | </object> |
934 | 723 | </void> |
@@ -944,7 +733,7 @@ | ||
944 | 733 | <string>★★★★★</string> |
945 | 734 | </void> |
946 | 735 | <void property="title"> |
947 | - <string>私がモテないのはどう考えてもお前らが悪い!</string> | |
736 | + <string>うーさーのその日暮らし 覚醒編</string> | |
948 | 737 | </void> |
949 | 738 | </object> |
950 | 739 | </void> |
@@ -960,14 +749,14 @@ | ||
960 | 749 | <string>★★★★★</string> |
961 | 750 | </void> |
962 | 751 | <void property="title"> |
963 | - <string>義風堂々!!兼続と慶次</string> | |
752 | + <string>ハマトラ</string> | |
964 | 753 | </void> |
965 | 754 | </object> |
966 | 755 | </void> |
967 | 756 | <void method="add"> |
968 | 757 | <object class="tainavi.TraceKey"> |
969 | 758 | <void property="center"> |
970 | - <string>BSイレブン</string> | |
759 | + <string>テレビ東京</string> | |
971 | 760 | </void> |
972 | 761 | <void property="fazzyThreshold"> |
973 | 762 | <int>35</int> |
@@ -976,14 +765,14 @@ | ||
976 | 765 | <string>★★★★★</string> |
977 | 766 | </void> |
978 | 767 | <void property="title"> |
979 | - <string>超次元ゲイム ネプテュ-ヌ</string> | |
768 | + <string>Z/X IGNITION</string> | |
980 | 769 | </void> |
981 | 770 | </object> |
982 | 771 | </void> |
983 | 772 | <void method="add"> |
984 | 773 | <object class="tainavi.TraceKey"> |
985 | 774 | <void property="center"> |
986 | - <string>TOKYO MX</string> | |
775 | + <string>テレビ東京</string> | |
987 | 776 | </void> |
988 | 777 | <void property="fazzyThreshold"> |
989 | 778 | <int>35</int> |
@@ -992,7 +781,7 @@ | ||
992 | 781 | <string>★★★★★</string> |
993 | 782 | </void> |
994 | 783 | <void property="title"> |
995 | - <string>超次元ゲイム ネプテューヌ</string> | |
784 | + <string>Wake Up Girls!</string> | |
996 | 785 | </void> |
997 | 786 | </object> |
998 | 787 | </void> |
@@ -1001,9 +790,6 @@ | ||
1001 | 790 | <void property="center"> |
1002 | 791 | <string>テレビ東京</string> |
1003 | 792 | </void> |
1004 | - <void property="disableRepeat"> | |
1005 | - <boolean>true</boolean> | |
1006 | - </void> | |
1007 | 793 | <void property="fazzyThreshold"> |
1008 | 794 | <int>35</int> |
1009 | 795 | </void> |
@@ -1011,14 +797,14 @@ | ||
1011 | 797 | <string>★★★★★</string> |
1012 | 798 | </void> |
1013 | 799 | <void property="title"> |
1014 | - <string>超速変形ジャイロゼッター</string> | |
800 | + <string>プピポー!</string> | |
1015 | 801 | </void> |
1016 | 802 | </object> |
1017 | 803 | </void> |
1018 | 804 | <void method="add"> |
1019 | 805 | <object class="tainavi.TraceKey"> |
1020 | 806 | <void property="center"> |
1021 | - <string>BSイレブン</string> | |
807 | + <string>テレビ東京</string> | |
1022 | 808 | </void> |
1023 | 809 | <void property="fazzyThreshold"> |
1024 | 810 | <int>35</int> |
@@ -1027,14 +813,14 @@ | ||
1027 | 813 | <string>★★★★★</string> |
1028 | 814 | </void> |
1029 | 815 | <void property="title"> |
1030 | - <string>進撃の巨人</string> | |
816 | + <string>ノブナガ・ザ・フール</string> | |
1031 | 817 | </void> |
1032 | 818 | </object> |
1033 | 819 | </void> |
1034 | 820 | <void method="add"> |
1035 | 821 | <object class="tainavi.TraceKey"> |
1036 | 822 | <void property="center"> |
1037 | - <string>TOKYO MX</string> | |
823 | + <string>テレビ東京</string> | |
1038 | 824 | </void> |
1039 | 825 | <void property="fazzyThreshold"> |
1040 | 826 | <int>35</int> |
@@ -1043,14 +829,14 @@ | ||
1043 | 829 | <string>★★★★★</string> |
1044 | 830 | </void> |
1045 | 831 | <void property="title"> |
1046 | - <string>進撃の巨人</string> | |
832 | + <string>咲-Saki-全国編</string> | |
1047 | 833 | </void> |
1048 | 834 | </object> |
1049 | 835 | </void> |
1050 | 836 | <void method="add"> |
1051 | 837 | <object class="tainavi.TraceKey"> |
1052 | 838 | <void property="center"> |
1053 | - <string>フジテレビ</string> | |
839 | + <string>テレビ東京</string> | |
1054 | 840 | </void> |
1055 | 841 | <void property="fazzyThreshold"> |
1056 | 842 | <int>35</int> |
@@ -1059,14 +845,14 @@ | ||
1059 | 845 | <string>★★★★★</string> |
1060 | 846 | </void> |
1061 | 847 | <void property="title"> |
1062 | - <string>銀の匙</string> | |
848 | + <string>となりの関くん</string> | |
1063 | 849 | </void> |
1064 | 850 | </object> |
1065 | 851 | </void> |
1066 | 852 | <void method="add"> |
1067 | 853 | <object class="tainavi.TraceKey"> |
1068 | 854 | <void property="center"> |
1069 | - <string>TOKYO MX</string> | |
855 | + <string>フジテレビ</string> | |
1070 | 856 | </void> |
1071 | 857 | <void property="fazzyThreshold"> |
1072 | 858 | <int>35</int> |
@@ -1075,14 +861,14 @@ | ||
1075 | 861 | <string>★★★★★</string> |
1076 | 862 | </void> |
1077 | 863 | <void property="title"> |
1078 | - <string>銀河機攻隊 マジェスティックプリンス</string> | |
864 | + <string>銀の匙 Silver Spoon <ノイタミナ></string> | |
1079 | 865 | </void> |
1080 | 866 | </object> |
1081 | 867 | </void> |
1082 | 868 | <void method="add"> |
1083 | 869 | <object class="tainavi.TraceKey"> |
1084 | 870 | <void property="center"> |
1085 | - <string>NHK Eテレ</string> | |
871 | + <string>フジテレビ</string> | |
1086 | 872 | </void> |
1087 | 873 | <void property="fazzyThreshold"> |
1088 | 874 | <int>35</int> |
@@ -1091,7 +877,7 @@ | ||
1091 | 877 | <string>★★★★★</string> |
1092 | 878 | </void> |
1093 | 879 | <void property="title"> |
1094 | - <string>黒魔女</string> | |
880 | + <string>サムライフラメンコ<ノイタミナ></string> | |
1095 | 881 | </void> |
1096 | 882 | </object> |
1097 | 883 | </void> |
@@ -29,6 +29,7 @@ import javax.swing.table.TableColumn; | ||
29 | 29 | |
30 | 30 | import tainavi.TVProgram.ProgSubtype; |
31 | 31 | import tainavi.TVProgram.ProgType; |
32 | +import tainavi.plugintv.Syobocal; | |
32 | 33 | |
33 | 34 | /** |
34 | 35 | * ChannelConver.datを編集するView |
@@ -90,15 +90,12 @@ public abstract class AbsToolBar extends JToolBar implements HDDRecorderSelectab | ||
90 | 90 | // メインウィンドウ |
91 | 91 | /** |
92 | 92 | * 親から呼ばないでくださいね! |
93 | - * @see #setToggleShowStatusButton(boolean) | |
94 | 93 | */ |
95 | 94 | protected abstract void setStatusVisible(boolean b); |
96 | 95 | /** |
97 | 96 | * 親から呼ばないでくださいね! |
98 | - * @see #setToggleFullScreenButton(boolean) | |
99 | 97 | */ |
100 | 98 | protected abstract void setFullScreen(boolean b); |
101 | - protected abstract void toggleSettingTabVisible(); | |
102 | 99 | protected abstract boolean isTabSelected(MWinTab tab); |
103 | 100 | // 部品 |
104 | 101 | protected abstract boolean addKeywordSearch(SearchKey search); |
@@ -216,7 +213,6 @@ public abstract class AbsToolBar extends JToolBar implements HDDRecorderSelectab | ||
216 | 213 | private JSlider jSlider_paperZoom = null; |
217 | 214 | private JToggleButton jToggleButton_timer = null; |
218 | 215 | private JButton jButton_logviewer = null; |
219 | - private JToggleButton jToggleButton_showsetting = null; | |
220 | 216 | private JToggleButton jToggleButton_showstatus = null; |
221 | 217 | private JToggleButton jToggleButton_fullScreen = null; |
222 | 218 | private JButton jButton_update = null; |
@@ -268,7 +264,6 @@ public abstract class AbsToolBar extends JToolBar implements HDDRecorderSelectab | ||
268 | 264 | this.add(getJSlider_paperZoom("番組枠表示拡大")); |
269 | 265 | this.add(getJButton_logviewer("ログビューア")); |
270 | 266 | this.add(getJToggleButton_timer("タイマー")); |
271 | - this.add(getJToggleButton_showsetting("設定タブを開く")); | |
272 | 267 | this.addSeparator(new Dimension(4,0)); |
273 | 268 | this.add(getJToggleButton_showstatus("ステータス領域")); |
274 | 269 | this.add(getJToggleButton_fullScreen("全")); |
@@ -996,13 +991,6 @@ public abstract class AbsToolBar extends JToolBar implements HDDRecorderSelectab | ||
996 | 991 | } |
997 | 992 | }; |
998 | 993 | |
999 | - // 設定タブを出したりしまったり | |
1000 | - private final ActionListener al_showsetting = new ActionListener(){ | |
1001 | - public void actionPerformed(ActionEvent e){ | |
1002 | - toggleSettingTabVisible(); | |
1003 | - } | |
1004 | - }; | |
1005 | - | |
1006 | 994 | // ステータスエリアを出したりしまったり |
1007 | 995 | private final ActionListener al_toggleShowStatus = new ActionListener() { |
1008 | 996 |
@@ -1339,20 +1327,6 @@ public abstract class AbsToolBar extends JToolBar implements HDDRecorderSelectab | ||
1339 | 1327 | return jButton_shutdown; |
1340 | 1328 | } |
1341 | 1329 | |
1342 | - // 「設定タブを表示」 | |
1343 | - private JToggleButton getJToggleButton_showsetting(String s) { | |
1344 | - if (jToggleButton_showsetting == null) { | |
1345 | - final ImageIcon icon = new ImageIcon(ICONFILE_SHOWSETTING); | |
1346 | - jToggleButton_showsetting = new JToggleButton(icon); | |
1347 | - jToggleButton_showsetting.setToolTipText(TIPS_SHOWSETTING); | |
1348 | - | |
1349 | - jToggleButton_showsetting.setSelected(bounds.getShowSettingTabs()); | |
1350 | - | |
1351 | - jToggleButton_showsetting.addActionListener(al_showsetting); | |
1352 | - } | |
1353 | - return jToggleButton_showsetting; | |
1354 | - } | |
1355 | - | |
1356 | 1330 | // 「ステータス領域」 |
1357 | 1331 | private JToggleButton getJToggleButton_showstatus(String s) { |
1358 | 1332 | if (jToggleButton_showstatus == null) { |
@@ -3,6 +3,7 @@ package tainavi; | ||
3 | 3 | import java.util.ArrayList; |
4 | 4 | |
5 | 5 | import tainavi.TVProgram.ProgType; |
6 | +import tainavi.plugintv.Syobocal; | |
6 | 7 | |
7 | 8 | /** |
8 | 9 | * <P>{@link TVProgram} のリストを実現するクラスです. |
@@ -60,6 +60,7 @@ public class VWMainWindow extends JPanel { | ||
60 | 60 | */ |
61 | 61 | |
62 | 62 | private JTabbedPane jTabbedPane = null; |
63 | + private JTabbedPane jTabbedPane_settings = null; | |
63 | 64 | |
64 | 65 | |
65 | 66 | /* |
@@ -69,9 +70,13 @@ public class VWMainWindow extends JPanel { | ||
69 | 70 | public VWMainWindow() { |
70 | 71 | this.setLayout(new BorderLayout()); |
71 | 72 | this.add(getJTabbedPane(), BorderLayout.CENTER); |
72 | - | |
73 | + getJTabbedPane_settings(); | |
74 | + | |
73 | 75 | // タブを全部準備する |
74 | 76 | for ( MWinTab tab : MWinTab.values() ) { |
77 | + if ( tab == MWinTab.SETTING ) { | |
78 | + jTabbedPane.add(jTabbedPane_settings, "設定"); | |
79 | + } | |
75 | 80 | addTab(null, tab); |
76 | 81 | } |
77 | 82 | } |
@@ -93,14 +98,21 @@ public class VWMainWindow extends JPanel { | ||
93 | 98 | |
94 | 99 | // タブを追加する |
95 | 100 | public boolean addTab(Component comp, MWinTab tab) { |
96 | - if ( jTabbedPane.getTabCount() < tab.getIndex() ) { | |
97 | - System.err.println(String.format("[DEBUG][メインウィンドウ] タブの数があわない: %d/%d",jTabbedPane.getTabCount(),tab.getIndex())); | |
101 | + if ( jTabbedPane.getTabCount() + jTabbedPane_settings.getTabCount() < tab.getIndex() ) { | |
102 | + System.err.println(String.format("[DEBUG][メインウィンドウ] タブの数があわない: %d/%d", jTabbedPane.getTabCount(), tab.getIndex())); | |
98 | 103 | return false; |
99 | 104 | } |
100 | - if ( jTabbedPane.getTabCount() > tab.getIndex() ) { | |
101 | - jTabbedPane.remove(tab.getIndex()); | |
105 | + | |
106 | + int tabIndex = tab.getIndex(); | |
107 | + JTabbedPane tabPane = jTabbedPane; | |
108 | + if ( tabIndex >= MWinTab.SETTING.getIndex() ) { | |
109 | + tabIndex -= MWinTab.SETTING.getIndex(); | |
110 | + tabPane = jTabbedPane_settings; | |
111 | + } | |
112 | + if ( tabPane.getTabCount() > tabIndex ) { | |
113 | + tabPane.remove(tabIndex); | |
102 | 114 | } |
103 | - jTabbedPane.add(comp, tab.getName(), tab.getIndex()); | |
115 | + tabPane.add(comp, tab.getName(), tabIndex); | |
104 | 116 | return true; |
105 | 117 | } |
106 | 118 |
@@ -108,24 +120,39 @@ public class VWMainWindow extends JPanel { | ||
108 | 120 | public void setSelectedTab(MWinTab tab) { |
109 | 121 | if ( tab == null ) { |
110 | 122 | jTabbedPane.setSelectedIndex(-1); |
123 | + return; | |
111 | 124 | } |
112 | - else if (jTabbedPane.getTabCount() > tab.getIndex()) { | |
113 | - jTabbedPane.setSelectedIndex(tab.getIndex()); | |
125 | + if ( tab.getIndex() >= MWinTab.SETTING.getIndex() ) { | |
126 | + jTabbedPane_settings.setSelectedIndex(tab.getIndex()-MWinTab.SETTING.getIndex()); | |
127 | + jTabbedPane.setSelectedIndex(MWinTab.SETTING.getIndex()); | |
128 | + return; | |
114 | 129 | } |
130 | + jTabbedPane.setSelectedIndex(tab.getIndex()); | |
115 | 131 | } |
116 | 132 | |
117 | 133 | // |
118 | 134 | public Component getTab(MWinTab tab) { |
119 | - return this.getComponent(tab.getIndex()); | |
135 | + if ( tab.getIndex() >= MWinTab.SETTING.getIndex() ) { | |
136 | + return jTabbedPane_settings.getComponent(tab.getIndex() - MWinTab.SETTING.getIndex()); | |
137 | + } | |
138 | + return jTabbedPane.getComponent(tab.getIndex()); | |
120 | 139 | } |
121 | 140 | |
122 | 141 | // タブが選択されているか確認する |
123 | 142 | public boolean isTabSelected(MWinTab tab) { |
143 | + if ( tab.getIndex() >= MWinTab.SETTING.getIndex() ) { | |
144 | + return (jTabbedPane.getSelectedIndex() == MWinTab.SETTING.getIndex() && jTabbedPane_settings.getSelectedIndex() == tab.getIndex()-MWinTab.SETTING.getIndex()); | |
145 | + } | |
124 | 146 | return (jTabbedPane.getSelectedIndex() == tab.getIndex()); |
125 | 147 | } |
126 | 148 | |
127 | 149 | // どのタブが選択されているのやら |
128 | - public MWinTab getSelectedTab() { return MWinTab.getAt(jTabbedPane.getSelectedIndex()); } | |
150 | + public MWinTab getSelectedTab() { | |
151 | + if ( jTabbedPane.getSelectedIndex() == MWinTab.SETTING.getIndex() ) { | |
152 | + return MWinTab.getAt(jTabbedPane.getSelectedIndex()); | |
153 | + } | |
154 | + return MWinTab.getAt(jTabbedPane.getSelectedIndex()); | |
155 | + } | |
129 | 156 | |
130 | 157 | // 設定タブをトグル切り替え |
131 | 158 | private final int firstSettingTab = MWinTab.SETTING.ordinal(); |
@@ -133,33 +160,13 @@ public class VWMainWindow extends JPanel { | ||
133 | 160 | private Component[] st_comp = new Component[countSettingTab]; |
134 | 161 | private String[] st_title = new String[countSettingTab]; |
135 | 162 | public boolean toggleShowSettingTabs() { |
136 | - if (st_comp[0] == null) { | |
137 | - for (int i=countSettingTab-1; i>=0; i--) { | |
138 | - st_comp[i] = this.jTabbedPane.getComponentAt(firstSettingTab+i); | |
139 | - st_title[i] = this.jTabbedPane.getTitleAt(firstSettingTab+i); | |
140 | - this.jTabbedPane.remove(firstSettingTab+i); | |
141 | - } | |
142 | - return false; | |
143 | - } | |
144 | - else { | |
145 | - for (int i=0; i<countSettingTab; i++) { | |
146 | - this.jTabbedPane.add(st_comp[i]); | |
147 | - this.jTabbedPane.setTitleAt(firstSettingTab+i, st_title[i]); | |
148 | - st_comp[i] = null; | |
149 | - } | |
150 | - this.jTabbedPane.setSelectedIndex(firstSettingTab); | |
151 | - return true; | |
152 | - } | |
163 | + return true; | |
153 | 164 | } |
154 | 165 | |
155 | 166 | public boolean getShowSettingTabs() { |
156 | - return (jTabbedPane.getTabCount() > firstSettingTab); | |
167 | + return true; | |
157 | 168 | } |
158 | 169 | public void setShowSettingTabs(boolean b) { |
159 | - if ((b && jTabbedPane.getTabCount() <= firstSettingTab) || | |
160 | - ( ! b && jTabbedPane.getTabCount() > firstSettingTab)) { | |
161 | - toggleShowSettingTabs(); | |
162 | - } | |
163 | 170 | } |
164 | 171 | |
165 | 172 |
@@ -173,6 +180,13 @@ public class VWMainWindow extends JPanel { | ||
173 | 180 | } |
174 | 181 | return jTabbedPane; |
175 | 182 | } |
183 | + | |
184 | + private JTabbedPane getJTabbedPane_settings() { | |
185 | + if (jTabbedPane_settings == null) { | |
186 | + jTabbedPane_settings = new JTabbedPane(); | |
187 | + } | |
188 | + return jTabbedPane_settings; | |
189 | + } | |
176 | 190 | |
177 | 191 | /** |
178 | 192 | * @deprecated |
@@ -5,7 +5,7 @@ import java.util.regex.Pattern; | ||
5 | 5 | |
6 | 6 | |
7 | 7 | public class VersionInfo { |
8 | - private static final String Version = "タイニー番組ナビゲータ 3.22.12β"; | |
8 | + private static final String Version = "タイニー番組ナビゲータ 3.22.13β"; | |
9 | 9 | |
10 | 10 | private static final String OSname = System.getProperty("os.name"); |
11 | 11 | private static final String OSvers = System.getProperty("os.version"); |
@@ -64,7 +64,6 @@ import javax.swing.event.ChangeEvent; | ||
64 | 64 | import javax.swing.event.ChangeListener; |
65 | 65 | |
66 | 66 | import tainavi.HDDRecorder.RecType; |
67 | -import tainavi.SearchKey.TargetId; | |
68 | 67 | import tainavi.TVProgram.ProgFlags; |
69 | 68 | import tainavi.TVProgram.ProgGenre; |
70 | 69 | import tainavi.TVProgram.ProgOption; |
@@ -73,6 +72,7 @@ import tainavi.TVProgram.ProgSubtype; | ||
73 | 72 | import tainavi.TVProgram.ProgType; |
74 | 73 | import tainavi.VWMainWindow.MWinTab; |
75 | 74 | import tainavi.VWUpdate.UpdateResult; |
75 | +import tainavi.plugintv.Syobocal; | |
76 | 76 | |
77 | 77 | |
78 | 78 | /** |
@@ -1386,11 +1386,6 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H | ||
1386 | 1386 | } |
1387 | 1387 | |
1388 | 1388 | @Override |
1389 | - protected void toggleSettingTabVisible() { | |
1390 | - mainWindow.toggleShowSettingTabs(); | |
1391 | - } | |
1392 | - | |
1393 | - @Override | |
1394 | 1389 | protected boolean isTabSelected(MWinTab tab) { |
1395 | 1390 | return mainWindow.isTabSelected(tab); |
1396 | 1391 | } |
@@ -3124,7 +3119,7 @@ public class Viewer extends JFrame implements ChangeListener,TickTimerListener,H | ||
3124 | 3119 | |
3125 | 3120 | /** |
3126 | 3121 | * Web番組表をDLする |
3127 | - * <P>単体実行の場合はこちらを呼び出す:{@link #doLoadTVProgram(LoadFor)} | |
3122 | + * <P>単体実行の場合はこちらを呼び出す:{@link #doLoadTVProgram(boolean, tainavi.Viewer.LoadFor)} | |
3128 | 3123 | * <P>部品実行の場合はこちらを呼び出す |
3129 | 3124 | */ |
3130 | 3125 | private boolean loadTVProgram(final boolean force, final LoadFor lf) { |
@@ -2275,7 +2275,7 @@ public class PlugIn_RecDIGA_DMR_BWT2100 extends HDDRecorderUtils implements HDDR | ||
2275 | 2275 | r = d[1]; |
2276 | 2276 | } |
2277 | 2277 | |
2278 | - if ( r.contains(DIGAMSG_PLEASELOGIN) ) { | |
2278 | + if ( r == null || r.contains(DIGAMSG_PLEASELOGIN) ) { | |
2279 | 2279 | // ログイン失敗だからもうだめぽ |
2280 | 2280 | break; |
2281 | 2281 | } |
@@ -1,517 +1,520 @@ | ||
1 | -package tainavi; | |
2 | - | |
3 | -import java.io.File; | |
4 | -import java.util.ArrayList; | |
5 | -import java.util.Calendar; | |
6 | -import java.util.GregorianCalendar; | |
7 | -import java.util.regex.Matcher; | |
8 | -import java.util.regex.Pattern; | |
9 | - | |
10 | -/** | |
11 | - * しょぼかるから番組表と放送局リストを取得する。プラグインではないよ。 | |
12 | - */ | |
13 | -public class Syobocal extends TVProgramUtils implements TVProgram,Cloneable { | |
14 | - | |
15 | - private final String thisEncoding = "UTF-8"; | |
16 | - | |
17 | - public void setDebug(boolean b) { debug = b; } | |
18 | - | |
19 | - private boolean debug = false; | |
20 | - | |
21 | - private boolean rss2 = false; | |
22 | - | |
23 | - /* 必須コード - ここから */ | |
24 | - | |
25 | - // 種族の特性 | |
26 | - private static final String tvProgId = "Syobocal"; | |
27 | - | |
28 | - //private final String progCacheFile = getProgDir()+File.separator+"syobocal.xml"; | |
29 | - private final String centerFile = "env"+File.separator+"center."+getTVProgramId()+".xml"; | |
30 | - | |
31 | - private final String MSGID = "[しょぼかる] "; | |
32 | - private final String ERRID = "[ERROR]"+MSGID; | |
33 | - private final String DBGID = "[DEBUG]"+MSGID; | |
34 | - | |
35 | - @Override | |
36 | - public String getTVProgramId() { return tvProgId; } | |
37 | - | |
38 | - @Override | |
39 | - public boolean isAreaSelectSupported() { return false; } | |
40 | - | |
41 | - @Override | |
42 | - public ProgType getType() { return ProgType.SYOBO; } | |
43 | - public ProgSubtype getSubtype() { return ProgSubtype.NONE; } | |
44 | - | |
45 | - @Override | |
46 | - public Syobocal clone() { | |
47 | - return (Syobocal) super.clone(); | |
48 | - } | |
49 | - | |
50 | - // 個体の特性 | |
51 | - | |
52 | - // | |
53 | - @Override | |
54 | - public int getTimeBarStart() {return 5;} | |
55 | - | |
56 | - private int getDogDays() { return ((getExpandTo8())?(8):(7)); } | |
57 | - | |
58 | - // | |
59 | - @Override | |
60 | - public void loadProgram(String areaCode, boolean force) { | |
61 | - | |
62 | - String progCacheFile = null; | |
63 | - if ( rss2 ) { | |
64 | - progCacheFile = getProgDir()+File.separator+"syobocal.xml"; | |
65 | - } | |
66 | - else { | |
67 | - progCacheFile = getProgDir()+File.separator+"syobocal.rss"; | |
68 | - } | |
69 | - | |
70 | - // 新しい番組データの入れ物を作る | |
71 | - ArrayList<ProgList> newplist = new ArrayList<ProgList>(); | |
72 | - | |
73 | - int cnt = 0; | |
74 | - | |
75 | - try { | |
76 | - String response = null; | |
77 | - | |
78 | - String cirtDateTimeYMD = CommonUtils.getCritDateTime().replaceAll("[/: ]", ""); | |
79 | - | |
80 | - File f = new File(progCacheFile); | |
81 | - if (force == true || | |
82 | - (f.exists() == true && isCacheOld(progCacheFile) == true) || | |
83 | - (f.exists() == false && isCacheOld(null) == true)) { | |
84 | - | |
85 | - String url = null; | |
86 | - if ( rss2 ) { | |
87 | - url = "http://cal.syoboi.jp/rss2.php?start="+cirtDateTimeYMD+"&days="+getDogDays()+"&titlefmt=$(Flag)^^^$(FlagW)^^^$(Cat)^^^$(ChName)^^^$(EdTime)^^^$(Title)^^^$(SubTitleB)"; | |
88 | - } | |
89 | - else { | |
90 | - url = "http://cal.syoboi.jp/rss.php?start=today&count=1500&days=8&days="+getDogDays()+"&titlefmt=$(Flag)^^^$(FlagW)^^^$(Cat)^^^$(ChName)^^^$(EdTime)^^^$(Title)^^^$(SubTitleB)"; | |
91 | - } | |
92 | - response = webToBuffer(url, thisEncoding, true); | |
93 | - if ( response == null ) { | |
94 | - reportProgress(ERRID+"RSS2.0(オンライン)の取得に失敗しました: "+url); | |
95 | - return; | |
96 | - } | |
97 | - | |
98 | - reportProgress(MSGID+"RSS2.0(オンライン)を取得しました: "+url); | |
99 | - CommonUtils.write2file(progCacheFile, response); | |
100 | - } | |
101 | - else if (f.exists()) { | |
102 | - // | |
103 | - response = CommonUtils.read4file(progCacheFile, true); | |
104 | - if ( response == null ) { | |
105 | - reportProgress(ERRID+"RSS2.0(キャッシュ)の取得に失敗しました: "+progCacheFile); | |
106 | - return; | |
107 | - } | |
108 | - reportProgress(MSGID+"RSS2.0(キャッシュ)を取得しました: "+progCacheFile); | |
109 | - } | |
110 | - else { | |
111 | - reportProgress(ERRID+"RSS2.0(キャッシュ)がみつかりません: "+progCacheFile); | |
112 | - return; | |
113 | - } | |
114 | - | |
115 | - // 情報解析 | |
116 | - | |
117 | - Matcher ma = Pattern.compile("<item(.+?)</item>",Pattern.DOTALL).matcher(response); | |
118 | - while (ma.find()) { | |
119 | - | |
120 | - // 入れ物 | |
121 | - ProgDetailList pDetail = new ProgDetailList(); | |
122 | - | |
123 | - // <title>金曜ロードショー ヱヴァンゲリヲン新劇場版:破 TV版</title> | |
124 | - Matcher mb = Pattern.compile("<title>(.+?)</title>",Pattern.DOTALL).matcher(ma.group(1)); | |
125 | - if ( ! mb.find()) { | |
126 | - continue; | |
127 | - } | |
128 | - | |
129 | - String[] t = mb.group(1).split("\\^\\^\\^",7); | |
130 | - | |
131 | - if (t.length < 7) { | |
132 | - System.err.println(ERRID+"書式が不正: "+mb.group(1)); | |
133 | - } | |
134 | - | |
135 | - pDetail.title = CommonUtils.unEscape(t[5]); | |
136 | - | |
137 | - pDetail.detail = CommonUtils.unEscape(t[6]); | |
138 | - if ( pDetail.detail.matches("^#1$|^#1[^0-9].*$") ) { | |
139 | - // まあなにもしなくていいか | |
140 | - } | |
141 | - | |
142 | - if (t[0] != null && t[0].length() > 0) { | |
143 | - int flag = Integer.valueOf(t[0]); | |
144 | - if (flag != 0) { | |
145 | - if ((flag & 0x01) != 0x00) { | |
146 | - pDetail.addOption(ProgOption.SPECIAL); | |
147 | - flag ^= 0x01; | |
148 | - } | |
149 | - if ((flag & 0x02) != 0x00) { | |
150 | - pDetail.flag = ProgFlags.NEW; | |
151 | - flag ^= 0x02; | |
152 | - } | |
153 | - if ((flag & 0x04) != 0x00) { | |
154 | - pDetail.flag = ProgFlags.LAST; | |
155 | - flag ^= 0x04; | |
156 | - } | |
157 | - if ((flag & 0x08) != 0x00) { | |
158 | - pDetail.addOption(ProgOption.REPEAT); | |
159 | - flag ^= 0x08; | |
160 | - } | |
161 | - if (flag != 0) { | |
162 | - System.out.println(DBGID+"未対応のマーク: "+flag); | |
163 | - } | |
164 | - } | |
165 | - } | |
166 | - if (t[1] != null && t[1].length() > 0) { | |
167 | - int flagw = Integer.valueOf(t[1]); | |
168 | - if (flagw != 0) { | |
169 | - if ((flagw & 0x01) != 0x00) { | |
170 | - if (pDetail.flag != ProgFlags.NEW && ! pDetail.isOptionEnabled(ProgOption.SPECIAL)) { | |
171 | - pDetail.addOption(ProgOption.MOVED); // 新番組や特番なら(移)はいらんやろ | |
172 | - } | |
173 | - flagw ^= 0x01; | |
174 | - } | |
175 | - if (flagw != 0) { | |
176 | - System.out.println(DBGID+"未対応の警告フラグ: "+flagw); | |
177 | - } | |
178 | - } | |
179 | - } | |
180 | - // <tv:genre>アニメ(終了/再放送)</tv:genre> | |
181 | - pDetail.genre = null; | |
182 | - pDetail.subgenre = null; | |
183 | - pDetail.genrelist = new ArrayList<TVProgram.ProgGenre>(); | |
184 | - pDetail.subgenrelist = new ArrayList<TVProgram.ProgSubgenre>(); | |
185 | - boolean anime_etc = true; | |
186 | - | |
187 | - if (t[2] != null && t[2].length() > 0) { | |
188 | - // ジャンル | |
189 | - if (t[2].equals("1") || t[2].equals("10") || t[2].equals("5")) { | |
190 | - // 1:アニメ 10:アニメ(終了/再放送) 5:アニメ関連 | |
191 | - } | |
192 | - else if (t[2].equals("7")) { | |
193 | - // 7:OVA | |
194 | - pDetail.genre = ProgGenre.ANIME; | |
195 | - pDetail.subgenre = ProgSubgenre.ANIME_KOKUNAI; | |
196 | - pDetail.genrelist.add(ProgGenre.ANIME); | |
197 | - pDetail.subgenrelist.add(ProgSubgenre.ANIME_KOKUNAI); | |
198 | - anime_etc = false; | |
199 | - } | |
200 | - else if (t[2].equals("4")) { | |
201 | - // 4:特撮 | |
202 | - pDetail.genre = ProgGenre.ANIME; | |
203 | - pDetail.subgenre = ProgSubgenre.ANIME_TOKUSATSU; | |
204 | - pDetail.genrelist.add(ProgGenre.ANIME); | |
205 | - pDetail.subgenrelist.add(ProgSubgenre.ANIME_TOKUSATSU); | |
206 | - anime_etc = false; | |
207 | - } | |
208 | - else if (t[2].equals("8")) { | |
209 | - // 8:映画 | |
210 | - pDetail.genre = ProgGenre.MOVIE; | |
211 | - pDetail.subgenre = ProgSubgenre.MOVIE_ETC; | |
212 | - pDetail.genrelist.add(ProgGenre.MOVIE); | |
213 | - pDetail.subgenrelist.add(ProgSubgenre.MOVIE_ETC); | |
214 | - pDetail.removeOption(ProgOption.MOVED); // 映画なら(移)はいらんやろ | |
215 | - } | |
216 | - else if (t[2].equals("0")) { | |
217 | - // 0:その他 | |
218 | - pDetail.genrelist.add(ProgGenre.NOGENRE); | |
219 | - pDetail.subgenrelist.add(ProgSubgenre.NOGENRE_ETC); | |
220 | - } | |
221 | - else if (t[2].equals("3") || t[2].equals("2") || t[2].equals("6")) { | |
222 | - // 3:テレビ 2:ラジオ 6:メモ | |
223 | - } | |
224 | - else { | |
225 | - System.out.println(DBGID+"未対応のジャンル: "+t[2]); | |
226 | - } | |
227 | - | |
228 | - // 最後に | |
229 | - if (pDetail.genre == null) { | |
230 | - pDetail.genre = ProgGenre.ANIME; | |
231 | - pDetail.subgenre = ProgSubgenre.ANIME_ETC; | |
232 | - } | |
233 | - if (pDetail.genrelist.size() == 0 || anime_etc) { | |
234 | - pDetail.genrelist.add(ProgGenre.ANIME); | |
235 | - pDetail.subgenrelist.add(ProgSubgenre.ANIME_ETC); | |
236 | - } | |
237 | - } | |
238 | - | |
239 | - // <dc:publisher>日本テレビ</dc:publisher> | |
240 | - if ( t[3] == null || t[3].length() == 0) { | |
241 | - System.err.println(ERRID+"放送局名がない: "+mb.group(1)); | |
242 | - continue; | |
243 | - } | |
244 | - | |
245 | - // ベアな放送局名と、ChannelConvert.datを適用した結果の放送局名 | |
246 | - String location = CommonUtils.unEscape(t[3]); | |
247 | - String modifiedloc = getChName(location); | |
248 | - | |
249 | - // <tv:startDatetime>2011-08-29T00:00:00+09:00</tv:startDatetime> | |
250 | - if ( rss2 ) { | |
251 | - mb = Pattern.compile("<pubDate>(.+?)\\+09:00</pubDate>",Pattern.DOTALL).matcher(ma.group(1)); | |
252 | - } | |
253 | - else { | |
254 | - mb = Pattern.compile("<tv:startDatetime>(.+?)\\+09:00</tv:startDatetime>",Pattern.DOTALL).matcher(ma.group(1)); | |
255 | - } | |
256 | - if ( ! mb.find()) { | |
257 | - System.err.println(ERRID+"開始日時がない"); | |
258 | - continue; | |
259 | - } | |
260 | - GregorianCalendar ca = CommonUtils.getCalendar(mb.group(1)); | |
261 | - if ( ca == null ) { | |
262 | - System.err.println(ERRID+"開始日時が不正: "+mb.group(1)); | |
263 | - continue; | |
264 | - } | |
265 | - | |
266 | - pDetail.startDateTime = CommonUtils.getDateTime(ca); | |
267 | - pDetail.start = pDetail.startDateTime.substring(11, 16); | |
268 | - pDetail.accurateDate = CommonUtils.getDate(ca); | |
269 | - | |
270 | - if ( t[4] == null || t[4].length() == 0) { | |
271 | - System.err.println(ERRID+"終了時刻がない: "+mb.group(1)); | |
272 | - continue; | |
273 | - } | |
274 | - | |
275 | - GregorianCalendar cz = CommonUtils.getCalendar(CommonUtils.getDate(ca)+" "+t[4]); | |
276 | - if (ca.compareTo(cz) > 0) { | |
277 | - cz.add(Calendar.DAY_OF_MONTH, 1); | |
278 | - } | |
279 | - | |
280 | - pDetail.endDateTime = CommonUtils.getDateTime(cz); | |
281 | - pDetail.end = pDetail.endDateTime.substring(11, 16); | |
282 | - | |
283 | - // 24:00~28:59までは前日なんだニャー | |
284 | - if (CommonUtils.isLateNight(ca.get(Calendar.HOUR_OF_DAY))) { | |
285 | - ca.add(Calendar.DAY_OF_MONTH, -1); | |
286 | - } | |
287 | - | |
288 | - // 番組情報を入れるべき日付 | |
289 | - String progdate = CommonUtils.getDate(ca); | |
290 | - | |
291 | - // <description>HD放送</description> | |
292 | - mb = Pattern.compile("<description>(.+?)</description>").matcher(ma.group(1)); | |
293 | - if (mb.find()) { | |
294 | - pDetail.detail += " <" + CommonUtils.unEscape(mb.group(1)) + ">"; | |
295 | - if (pDetail.detail.contains("無料放送")) { | |
296 | - pDetail.noscrumble = ProgScrumble.NOSCRUMBLE; | |
297 | - } | |
298 | - if (pDetail.detail.contains("先行放送")) { | |
299 | - pDetail.addOption(ProgOption.PRECEDING); | |
300 | - } | |
301 | - if (pDetail.detail.contains("変更の可能性")) { | |
302 | - pDetail.extension = true; | |
303 | - } | |
304 | - if ( pDetail.detail.contains("繰り下げ") ) { | |
305 | - pDetail.extension = true; | |
306 | - } | |
307 | - if (pDetail.detail.contains("副音声")) { | |
308 | - pDetail.addOption(ProgOption.MULTIVOICE); | |
309 | - } | |
310 | - } | |
311 | - | |
312 | - // <link>http://cal.syoboi.jp/tid/44#198593</link> | |
313 | - mb = Pattern.compile("<link>(.+?)</link>",Pattern.DOTALL).matcher(ma.group(1)); | |
314 | - if (mb.find()) { | |
315 | - pDetail.link = mb.group(1); | |
316 | - if ( ! ContentIdSyobo.isValid(pDetail.link)) { | |
317 | - System.out.println(DBGID+"TIDとPIDが取得できない: "+pDetail.link); | |
318 | - } | |
319 | - } | |
320 | - | |
321 | - // 追加詳細 | |
322 | - pDetail.setGenreStr(); | |
323 | - | |
324 | - // 統合 | |
325 | - { | |
326 | - // 放送局が存在するか | |
327 | - ProgList prog = null; | |
328 | - for (ProgList pl : newplist) { | |
329 | - if (pl.Center.equals(modifiedloc)) { | |
330 | - prog = pl; | |
331 | - break; | |
332 | - } | |
333 | - } | |
334 | - if (prog == null) { | |
335 | - // 番組表 | |
336 | - prog = new ProgList(); | |
337 | - prog.Center = modifiedloc; | |
338 | - prog.enabled = true; | |
339 | - prog.pdate = new ArrayList<ProgDateList>(); | |
340 | - | |
341 | - newplist.add(prog); | |
342 | - } | |
343 | - | |
344 | - // 日付が存在するか | |
345 | - ProgDateList pCenter = null; | |
346 | - for (ProgDateList pcl : prog.pdate) { | |
347 | - if (pcl.Date.equals(progdate)) { | |
348 | - pCenter = pcl; | |
349 | - break; | |
350 | - } | |
351 | - } | |
352 | - if (pCenter == null) { | |
353 | - pCenter = new ProgDateList(); | |
354 | - pCenter.Date = progdate; | |
355 | - pCenter.pdetail = new ArrayList<ProgDetailList>(); | |
356 | - prog.pdate.add(pCenter); | |
357 | - } | |
358 | - | |
359 | - // 連結 | |
360 | - pCenter.pdetail.add(pDetail); | |
361 | - | |
362 | - cnt++; | |
363 | - } | |
364 | - | |
365 | - // | |
366 | - pDetail.splitted_title = pDetail.title; | |
367 | - pDetail.splitted_detail = pDetail.detail; | |
368 | - | |
369 | - // 詳細を登録する | |
370 | - pDetail.titlePop = TraceProgram.replacePop(pDetail.title); | |
371 | - pDetail.detailPop = TraceProgram.replacePop(pDetail.detail); | |
372 | - pDetail.length = Integer.valueOf(CommonUtils.getRecMin(pDetail.start.substring(0,2),pDetail.start.substring(3,5),pDetail.end.substring(0,2),pDetail.end.substring(3,5))); | |
373 | - } | |
374 | - } | |
375 | - catch (Exception e) { | |
376 | - e.printStackTrace(); | |
377 | - return; | |
378 | - } | |
379 | - | |
380 | - pcenter = newplist; | |
381 | - System.out.println(DBGID+"番組の数: "+cnt); | |
382 | - } | |
383 | - | |
384 | - /* ここまで */ | |
385 | - | |
386 | - /* | |
387 | - * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | |
388 | - * ★★★★★ 放送地域を取得する(TVAreaから降格)-ここから ★★★★★ | |
389 | - * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | |
390 | - */ | |
391 | - | |
392 | - @Override | |
393 | - public void loadAreaCode() { | |
394 | - } | |
395 | - | |
396 | - @Override | |
397 | - public void saveAreaCode() { | |
398 | - } | |
399 | - | |
400 | - @Override | |
401 | - public String getCode(String area) { | |
402 | - return "1"; | |
403 | - } | |
404 | - | |
405 | - @Override | |
406 | - public String getDefaultArea() { | |
407 | - return "しょぼかる"; | |
408 | - } | |
409 | - | |
410 | - @Override | |
411 | - public String getSelectedArea() { | |
412 | - return "しょぼかる"; | |
413 | - } | |
414 | - | |
415 | - @Override | |
416 | - public String getSelectedCode() { | |
417 | - return "1"; | |
418 | - } | |
419 | - | |
420 | - /* | |
421 | - * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | |
422 | - * ★★★★★ 放送地域を取得する(TVAreaから降格)-ここまで ★★★★★ | |
423 | - * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | |
424 | - */ | |
425 | - | |
426 | - /* | |
427 | - * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | |
428 | - * ★★★★★ 放送局を選択する(TVCenterから降格)-ここから ★★★★★ | |
429 | - * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | |
430 | - */ | |
431 | - | |
432 | - @Override | |
433 | - public void loadCenter(String code, boolean force) { | |
434 | - | |
435 | - if ( code == null ) { | |
436 | - System.out.println(ERRID+"地域コードがnullです."); | |
437 | - return; | |
438 | - } | |
439 | - | |
440 | - if ( ! force && new File(centerFile).exists() ) { | |
441 | - // NOT FORFCEならキャッシュからどうぞ | |
442 | - @SuppressWarnings("unchecked") | |
443 | - ArrayList<Center> tmp = (ArrayList<Center>) CommonUtils.readXML(centerFile); | |
444 | - if ( tmp != null ) { | |
445 | - crlist = tmp; | |
446 | - return; | |
447 | - } | |
448 | - } | |
449 | - | |
450 | - String uri = "http://cal.syoboi.jp/mng?Action=ShowChList"; | |
451 | - String response = webToBuffer(uri,thisEncoding,true); | |
452 | - if ( response == null ) { | |
453 | - System.err.println(ERRID+"放送局リストの取得に失敗: "+uri); | |
454 | - return; | |
455 | - } | |
456 | - System.out.println(MSGID+"放送局リストを取得: "+uri); | |
457 | - | |
458 | - Matcher ma = Pattern.compile("<table class=\"tframe output\".*?>(.+?)</table>",Pattern.DOTALL).matcher(response); | |
459 | - if ( ! ma.find() ) { | |
460 | - System.err.println(ERRID+"放送局情報がない: "+uri); | |
461 | - return; | |
462 | - } | |
463 | - | |
464 | - // 新しい放送局リストの入れ物を作る | |
465 | - ArrayList<Center> newcrlist = new ArrayList<Center>(); | |
466 | - | |
467 | - int cnt = 1; | |
468 | - Matcher mb = Pattern.compile("<tr>(.+?)</tr>",Pattern.DOTALL).matcher(ma.group(1)); | |
469 | - while ( mb.find() ) { | |
470 | - String[] d = mb.group(1).split("<.*?>",9); | |
471 | - if ( d.length != 9 ) { | |
472 | - System.err.println(ERRID+"書式不正(カラム数が足りない): "+d.length); | |
473 | - continue; | |
474 | - } | |
475 | - if ( ! d[1].matches("^\\d+$") ) { | |
476 | - continue; | |
477 | - } | |
478 | - | |
479 | - // 放送局リスト | |
480 | - Center cr = new Center(); | |
481 | - cr.setLink(d[5]); | |
482 | - cr.setAreaCode("1"); | |
483 | - cr.setCenterOrig(CommonUtils.unEscape(d[7])); | |
484 | - //cr.setCenter(this.chconv.get(cr.getCenterOrig())); // ChannelConvert.datで入れ替えたもの | |
485 | - cr.setType(""); | |
486 | - cr.setEnabled(true); | |
487 | - cr.setOrder(cnt++); | |
488 | - | |
489 | - newcrlist.add(cr); | |
490 | - | |
491 | - if (debug) System.out.println(MSGID+"放送局を追加: "+cr.getCenterOrig()+" -> "+cr.getCenter()); | |
492 | - } | |
493 | - | |
494 | - if ( newcrlist.size() == 0 ) { | |
495 | - System.err.println(ERRID+"放送局情報の取得結果が0件だったため情報を更新しません"); | |
496 | - return; | |
497 | - } | |
498 | - | |
499 | - System.out.println(DBGID+"放送局の数: "+newcrlist.size()); | |
500 | - | |
501 | - crlist = newcrlist; | |
502 | - attachChFilters(); | |
503 | - setSortedCRlist(); | |
504 | - CommonUtils.writeXML(centerFile, crlist); | |
505 | - } | |
506 | - | |
507 | - @Override | |
508 | - public boolean saveCenter() { | |
509 | - return false; | |
510 | - } | |
511 | - | |
512 | - /* | |
513 | - * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | |
514 | - * ★★★★★ 放送局を選択する(TVCenterから降格)-ここまで ★★★★★ | |
515 | - * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | |
516 | - */ | |
517 | -} | |
1 | +package tainavi.plugintv; | |
2 | + | |
3 | +import tainavi.*; | |
4 | + | |
5 | +import java.io.File; | |
6 | +import java.util.ArrayList; | |
7 | +import java.util.Calendar; | |
8 | +import java.util.GregorianCalendar; | |
9 | +import java.util.regex.Matcher; | |
10 | +import java.util.regex.Pattern; | |
11 | + | |
12 | +/** | |
13 | + * しょぼかるから番組表と放送局リストを取得する。プラグインではないよ。 | |
14 | + */ | |
15 | +public class Syobocal extends TVProgramUtils implements TVProgram,Cloneable { | |
16 | + | |
17 | + private final String thisEncoding = "UTF-8"; | |
18 | + | |
19 | + public void setDebug(boolean b) { debug = b; } | |
20 | + | |
21 | + private boolean debug = false; | |
22 | + | |
23 | + private boolean rss2 = false; | |
24 | + | |
25 | + /* 必須コード - ここから */ | |
26 | + | |
27 | + // 種族の特性 | |
28 | + private static final String tvProgId = "Syobocal"; | |
29 | + | |
30 | + //private final String progCacheFile = getProgDir()+File.separator+"syobocal.xml"; | |
31 | + private final String centerFile = "env"+File.separator+"center."+getTVProgramId()+".xml"; | |
32 | + | |
33 | + private final String MSGID = "[しょぼかる] "; | |
34 | + private final String ERRID = "[ERROR]"+MSGID; | |
35 | + private final String DBGID = "[DEBUG]"+MSGID; | |
36 | + | |
37 | + @Override | |
38 | + public String getTVProgramId() { return tvProgId; } | |
39 | + | |
40 | + @Override | |
41 | + public boolean isAreaSelectSupported() { return false; } | |
42 | + | |
43 | + @Override | |
44 | + public ProgType getType() { return ProgType.SYOBO; } | |
45 | + public ProgSubtype getSubtype() { return ProgSubtype.NONE; } | |
46 | + | |
47 | + @Override | |
48 | + public Syobocal clone() { | |
49 | + return (Syobocal) super.clone(); | |
50 | + } | |
51 | + | |
52 | + // 個体の特性 | |
53 | + | |
54 | + // | |
55 | + @Override | |
56 | + public int getTimeBarStart() {return 5;} | |
57 | + | |
58 | + private int getDogDays() { return ((getExpandTo8())?(8):(7)); } | |
59 | + | |
60 | + // | |
61 | + @Override | |
62 | + public void loadProgram(String areaCode, boolean force) { | |
63 | + | |
64 | + String progCacheFile = null; | |
65 | + if ( rss2 ) { | |
66 | + progCacheFile = getProgDir()+File.separator+"syobocal.xml"; | |
67 | + } | |
68 | + else { | |
69 | + progCacheFile = getProgDir()+File.separator+"syobocal.rss"; | |
70 | + } | |
71 | + | |
72 | + // 新しい番組データの入れ物を作る | |
73 | + ArrayList<ProgList> newplist = new ArrayList<ProgList>(); | |
74 | + | |
75 | + int cnt = 0; | |
76 | + | |
77 | + try { | |
78 | + String response = null; | |
79 | + | |
80 | + String cirtDateTimeYMD = CommonUtils.getCritDateTime().replaceAll("[/: ]", ""); | |
81 | + | |
82 | + File f = new File(progCacheFile); | |
83 | + if (force == true || | |
84 | + (f.exists() == true && isCacheOld(progCacheFile) == true) || | |
85 | + (f.exists() == false && isCacheOld(null) == true)) { | |
86 | + | |
87 | + String url = null; | |
88 | + if ( rss2 ) { | |
89 | + url = "http://cal.syoboi.jp/rss2.php?start="+cirtDateTimeYMD+"&days="+getDogDays()+"&titlefmt=$(Flag)^^^$(FlagW)^^^$(Cat)^^^$(ChName)^^^$(EdTime)^^^$(Title)^^^$(SubTitleB)"; | |
90 | + } | |
91 | + else { | |
92 | + url = "http://cal.syoboi.jp/rss.php?start=today&count=1500&days=8&days="+getDogDays()+"&titlefmt=$(Flag)^^^$(FlagW)^^^$(Cat)^^^$(ChName)^^^$(EdTime)^^^$(Title)^^^$(SubTitleB)"; | |
93 | + } | |
94 | + response = webToBuffer(url, thisEncoding, true); | |
95 | + if ( response == null ) { | |
96 | + reportProgress(ERRID+"RSS2.0(オンライン)の取得に失敗しました: "+url); | |
97 | + return; | |
98 | + } | |
99 | + | |
100 | + reportProgress(MSGID+"RSS2.0(オンライン)を取得しました: "+url); | |
101 | + CommonUtils.write2file(progCacheFile, response); | |
102 | + } | |
103 | + else if (f.exists()) { | |
104 | + // | |
105 | + response = CommonUtils.read4file(progCacheFile, true); | |
106 | + if ( response == null ) { | |
107 | + reportProgress(ERRID+"RSS2.0(キャッシュ)の取得に失敗しました: "+progCacheFile); | |
108 | + return; | |
109 | + } | |
110 | + reportProgress(MSGID+"RSS2.0(キャッシュ)を取得しました: "+progCacheFile); | |
111 | + } | |
112 | + else { | |
113 | + reportProgress(ERRID+"RSS2.0(キャッシュ)がみつかりません: "+progCacheFile); | |
114 | + return; | |
115 | + } | |
116 | + | |
117 | + // 情報解析 | |
118 | + | |
119 | + Matcher ma = Pattern.compile("<item(.+?)</item>",Pattern.DOTALL).matcher(response); | |
120 | + while (ma.find()) { | |
121 | + | |
122 | + // 入れ物 | |
123 | + ProgDetailList pDetail = new ProgDetailList(); | |
124 | + | |
125 | + // <title>金曜ロードショー ヱヴァンゲリヲン新劇場版:破 TV版</title> | |
126 | + Matcher mb = Pattern.compile("<title>(.+?)</title>",Pattern.DOTALL).matcher(ma.group(1)); | |
127 | + if ( ! mb.find()) { | |
128 | + continue; | |
129 | + } | |
130 | + | |
131 | + String[] t = mb.group(1).split("\\^\\^\\^",7); | |
132 | + | |
133 | + if (t.length < 7) { | |
134 | + System.err.println(ERRID+"書式が不正: "+mb.group(1)); | |
135 | + } | |
136 | + | |
137 | + pDetail.title = CommonUtils.unEscape(t[5]); | |
138 | + | |
139 | + pDetail.detail = CommonUtils.unEscape(t[6]); | |
140 | + if ( pDetail.detail.matches("^#1$|^#1[^0-9].*$") ) { | |
141 | + // まあなにもしなくていいか | |
142 | + } | |
143 | + | |
144 | + if (t[0] != null && t[0].length() > 0) { | |
145 | + int flag = Integer.valueOf(t[0]); | |
146 | + if (flag != 0) { | |
147 | + if ((flag & 0x01) != 0x00) { | |
148 | + pDetail.addOption(ProgOption.SPECIAL); | |
149 | + flag ^= 0x01; | |
150 | + } | |
151 | + if ((flag & 0x02) != 0x00) { | |
152 | + pDetail.flag = ProgFlags.NEW; | |
153 | + flag ^= 0x02; | |
154 | + } | |
155 | + if ((flag & 0x04) != 0x00) { | |
156 | + pDetail.flag = ProgFlags.LAST; | |
157 | + flag ^= 0x04; | |
158 | + } | |
159 | + if ((flag & 0x08) != 0x00) { | |
160 | + pDetail.addOption(ProgOption.REPEAT); | |
161 | + flag ^= 0x08; | |
162 | + } | |
163 | + if (flag != 0) { | |
164 | + System.out.println(DBGID+"未対応のマーク: "+flag); | |
165 | + } | |
166 | + } | |
167 | + } | |
168 | + if (t[1] != null && t[1].length() > 0) { | |
169 | + int flagw = Integer.valueOf(t[1]); | |
170 | + if (flagw != 0) { | |
171 | + if ((flagw & 0x01) != 0x00) { | |
172 | + if (pDetail.flag != ProgFlags.NEW && ! pDetail.isOptionEnabled(ProgOption.SPECIAL)) { | |
173 | + pDetail.addOption(ProgOption.MOVED); // 新番組や特番なら(移)はいらんやろ | |
174 | + } | |
175 | + flagw ^= 0x01; | |
176 | + } | |
177 | + if (flagw != 0) { | |
178 | + System.out.println(DBGID+"未対応の警告フラグ: "+flagw); | |
179 | + } | |
180 | + } | |
181 | + } | |
182 | + // <tv:genre>アニメ(終了/再放送)</tv:genre> | |
183 | + pDetail.genre = null; | |
184 | + pDetail.subgenre = null; | |
185 | + pDetail.genrelist = new ArrayList<TVProgram.ProgGenre>(); | |
186 | + pDetail.subgenrelist = new ArrayList<TVProgram.ProgSubgenre>(); | |
187 | + boolean anime_etc = true; | |
188 | + | |
189 | + if (t[2] != null && t[2].length() > 0) { | |
190 | + // ジャンル | |
191 | + if (t[2].equals("1") || t[2].equals("10") || t[2].equals("5")) { | |
192 | + // 1:アニメ 10:アニメ(終了/再放送) 5:アニメ関連 | |
193 | + } | |
194 | + else if (t[2].equals("7")) { | |
195 | + // 7:OVA | |
196 | + pDetail.genre = ProgGenre.ANIME; | |
197 | + pDetail.subgenre = ProgSubgenre.ANIME_KOKUNAI; | |
198 | + pDetail.genrelist.add(ProgGenre.ANIME); | |
199 | + pDetail.subgenrelist.add(ProgSubgenre.ANIME_KOKUNAI); | |
200 | + anime_etc = false; | |
201 | + } | |
202 | + else if (t[2].equals("4")) { | |
203 | + // 4:特撮 | |
204 | + pDetail.genre = ProgGenre.ANIME; | |
205 | + pDetail.subgenre = ProgSubgenre.ANIME_TOKUSATSU; | |
206 | + pDetail.genrelist.add(ProgGenre.ANIME); | |
207 | + pDetail.subgenrelist.add(ProgSubgenre.ANIME_TOKUSATSU); | |
208 | + anime_etc = false; | |
209 | + } | |
210 | + else if (t[2].equals("8")) { | |
211 | + // 8:映画 | |
212 | + pDetail.genre = ProgGenre.MOVIE; | |
213 | + pDetail.subgenre = ProgSubgenre.MOVIE_ETC; | |
214 | + pDetail.genrelist.add(ProgGenre.MOVIE); | |
215 | + pDetail.subgenrelist.add(ProgSubgenre.MOVIE_ETC); | |
216 | + pDetail.removeOption(ProgOption.MOVED); // 映画なら(移)はいらんやろ | |
217 | + } | |
218 | + else if (t[2].equals("0")) { | |
219 | + // 0:その他 | |
220 | + pDetail.genrelist.add(ProgGenre.NOGENRE); | |
221 | + pDetail.subgenrelist.add(ProgSubgenre.NOGENRE_ETC); | |
222 | + } | |
223 | + else if (t[2].equals("3") || t[2].equals("2") || t[2].equals("6")) { | |
224 | + // 3:テレビ 2:ラジオ 6:メモ | |
225 | + } | |
226 | + else { | |
227 | + System.out.println(DBGID+"未対応のジャンル: "+t[2]); | |
228 | + } | |
229 | + | |
230 | + // 最後に | |
231 | + if (pDetail.genre == null) { | |
232 | + pDetail.genre = ProgGenre.ANIME; | |
233 | + pDetail.subgenre = ProgSubgenre.ANIME_ETC; | |
234 | + } | |
235 | + if (pDetail.genrelist.size() == 0 || anime_etc) { | |
236 | + pDetail.genrelist.add(ProgGenre.ANIME); | |
237 | + pDetail.subgenrelist.add(ProgSubgenre.ANIME_ETC); | |
238 | + } | |
239 | + } | |
240 | + | |
241 | + // <dc:publisher>日本テレビ</dc:publisher> | |
242 | + if ( t[3] == null || t[3].length() == 0) { | |
243 | + System.err.println(ERRID+"放送局名がない: "+mb.group(1)); | |
244 | + continue; | |
245 | + } | |
246 | + | |
247 | + // ベアな放送局名と、ChannelConvert.datを適用した結果の放送局名 | |
248 | + String location = CommonUtils.unEscape(t[3]); | |
249 | + String modifiedloc = getChName(location); | |
250 | + | |
251 | + // <tv:startDatetime>2011-08-29T00:00:00+09:00</tv:startDatetime> | |
252 | + if ( rss2 ) { | |
253 | + mb = Pattern.compile("<pubDate>(.+?)\\+09:00</pubDate>",Pattern.DOTALL).matcher(ma.group(1)); | |
254 | + } | |
255 | + else { | |
256 | + mb = Pattern.compile("<tv:startDatetime>(.+?)\\+09:00</tv:startDatetime>",Pattern.DOTALL).matcher(ma.group(1)); | |
257 | + } | |
258 | + if ( ! mb.find()) { | |
259 | + System.err.println(ERRID+"開始日時がない"); | |
260 | + continue; | |
261 | + } | |
262 | + GregorianCalendar ca = CommonUtils.getCalendar(mb.group(1)); | |
263 | + if ( ca == null ) { | |
264 | + System.err.println(ERRID+"開始日時が不正: "+mb.group(1)); | |
265 | + continue; | |
266 | + } | |
267 | + | |
268 | + pDetail.startDateTime = CommonUtils.getDateTime(ca); | |
269 | + pDetail.start = pDetail.startDateTime.substring(11, 16); | |
270 | + pDetail.accurateDate = CommonUtils.getDate(ca); | |
271 | + | |
272 | + if ( t[4] == null || t[4].length() == 0) { | |
273 | + System.err.println(ERRID+"終了時刻がない: "+mb.group(1)); | |
274 | + continue; | |
275 | + } | |
276 | + | |
277 | + GregorianCalendar cz = CommonUtils.getCalendar(CommonUtils.getDate(ca)+" "+t[4]); | |
278 | + if (ca.compareTo(cz) > 0) { | |
279 | + cz.add(Calendar.DAY_OF_MONTH, 1); | |
280 | + } | |
281 | + | |
282 | + pDetail.endDateTime = CommonUtils.getDateTime(cz); | |
283 | + pDetail.end = pDetail.endDateTime.substring(11, 16); | |
284 | + | |
285 | + // 24:00~28:59までは前日なんだニャー | |
286 | + if (CommonUtils.isLateNight(ca.get(Calendar.HOUR_OF_DAY))) { | |
287 | + ca.add(Calendar.DAY_OF_MONTH, -1); | |
288 | + } | |
289 | + | |
290 | + // 番組情報を入れるべき日付 | |
291 | + String progdate = CommonUtils.getDate(ca); | |
292 | + | |
293 | + // <description>HD放送</description> | |
294 | + mb = Pattern.compile("<description>(.+?)</description>").matcher(ma.group(1)); | |
295 | + if (mb.find()) { | |
296 | + pDetail.detail += " <" + CommonUtils.unEscape(mb.group(1)) + ">"; | |
297 | + if (pDetail.detail.contains("無料放送")) { | |
298 | + pDetail.noscrumble = ProgScrumble.NOSCRUMBLE; | |
299 | + } | |
300 | + if (pDetail.detail.contains("先行放送")) { | |
301 | + pDetail.addOption(ProgOption.PRECEDING); | |
302 | + } | |
303 | + if (pDetail.detail.contains("変更の可能性")) { | |
304 | + pDetail.extension = true; | |
305 | + } | |
306 | + if ( pDetail.detail.contains("繰り下げ") ) { | |
307 | + pDetail.extension = true; | |
308 | + } | |
309 | + if (pDetail.detail.contains("副音声")) { | |
310 | + pDetail.addOption(ProgOption.MULTIVOICE); | |
311 | + } | |
312 | + } | |
313 | + | |
314 | + // <link>http://cal.syoboi.jp/tid/44#198593</link> | |
315 | + mb = Pattern.compile("<link>(.+?)</link>",Pattern.DOTALL).matcher(ma.group(1)); | |
316 | + if (mb.find()) { | |
317 | + pDetail.link = mb.group(1); | |
318 | + if ( ! ContentIdSyobo.isValid(pDetail.link)) { | |
319 | + System.out.println(DBGID+"TIDとPIDが取得できない: "+pDetail.link); | |
320 | + } | |
321 | + } | |
322 | + | |
323 | + // 追加詳細 | |
324 | + pDetail.setGenreStr(); | |
325 | + | |
326 | + // 統合 | |
327 | + { | |
328 | + // 放送局が存在するか | |
329 | + ProgList prog = null; | |
330 | + for (ProgList pl : newplist) { | |
331 | + if (pl.Center.equals(modifiedloc)) { | |
332 | + prog = pl; | |
333 | + break; | |
334 | + } | |
335 | + } | |
336 | + if (prog == null) { | |
337 | + // 番組表 | |
338 | + prog = new ProgList(); | |
339 | + prog.Center = modifiedloc; | |
340 | + prog.enabled = true; | |
341 | + prog.pdate = new ArrayList<ProgDateList>(); | |
342 | + | |
343 | + newplist.add(prog); | |
344 | + } | |
345 | + | |
346 | + // 日付が存在するか | |
347 | + ProgDateList pCenter = null; | |
348 | + for (ProgDateList pcl : prog.pdate) { | |
349 | + if (pcl.Date.equals(progdate)) { | |
350 | + pCenter = pcl; | |
351 | + break; | |
352 | + } | |
353 | + } | |
354 | + if (pCenter == null) { | |
355 | + pCenter = new ProgDateList(); | |
356 | + pCenter.Date = progdate; | |
357 | + pCenter.pdetail = new ArrayList<ProgDetailList>(); | |
358 | + prog.pdate.add(pCenter); | |
359 | + } | |
360 | + | |
361 | + // 連結 | |
362 | + pCenter.pdetail.add(pDetail); | |
363 | + | |
364 | + cnt++; | |
365 | + } | |
366 | + | |
367 | + // | |
368 | + pDetail.splitted_title = pDetail.title; | |
369 | + pDetail.splitted_detail = pDetail.detail; | |
370 | + | |
371 | + // 詳細を登録する | |
372 | + pDetail.titlePop = TraceProgram.replacePop(pDetail.title); | |
373 | + pDetail.splitted_titlePop = pDetail.titlePop; | |
374 | + pDetail.detailPop = TraceProgram.replacePop(pDetail.detail); | |
375 | + pDetail.length = Integer.valueOf(CommonUtils.getRecMin(pDetail.start.substring(0,2),pDetail.start.substring(3,5),pDetail.end.substring(0,2),pDetail.end.substring(3,5))); | |
376 | + } | |
377 | + } | |
378 | + catch (Exception e) { | |
379 | + e.printStackTrace(); | |
380 | + return; | |
381 | + } | |
382 | + | |
383 | + pcenter = newplist; | |
384 | + System.out.println(DBGID+"番組の数: "+cnt); | |
385 | + } | |
386 | + | |
387 | + /* ここまで */ | |
388 | + | |
389 | + /* | |
390 | + * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | |
391 | + * ★★★★★ 放送地域を取得する(TVAreaから降格)-ここから ★★★★★ | |
392 | + * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | |
393 | + */ | |
394 | + | |
395 | + @Override | |
396 | + public void loadAreaCode() { | |
397 | + } | |
398 | + | |
399 | + @Override | |
400 | + public void saveAreaCode() { | |
401 | + } | |
402 | + | |
403 | + @Override | |
404 | + public String getCode(String area) { | |
405 | + return "1"; | |
406 | + } | |
407 | + | |
408 | + @Override | |
409 | + public String getDefaultArea() { | |
410 | + return "しょぼかる"; | |
411 | + } | |
412 | + | |
413 | + @Override | |
414 | + public String getSelectedArea() { | |
415 | + return "しょぼかる"; | |
416 | + } | |
417 | + | |
418 | + @Override | |
419 | + public String getSelectedCode() { | |
420 | + return "1"; | |
421 | + } | |
422 | + | |
423 | + /* | |
424 | + * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | |
425 | + * ★★★★★ 放送地域を取得する(TVAreaから降格)-ここまで ★★★★★ | |
426 | + * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | |
427 | + */ | |
428 | + | |
429 | + /* | |
430 | + * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | |
431 | + * ★★★★★ 放送局を選択する(TVCenterから降格)-ここから ★★★★★ | |
432 | + * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | |
433 | + */ | |
434 | + | |
435 | + @Override | |
436 | + public void loadCenter(String code, boolean force) { | |
437 | + | |
438 | + if ( code == null ) { | |
439 | + System.out.println(ERRID+"地域コードがnullです."); | |
440 | + return; | |
441 | + } | |
442 | + | |
443 | + if ( ! force && new File(centerFile).exists() ) { | |
444 | + // NOT FORFCEならキャッシュからどうぞ | |
445 | + @SuppressWarnings("unchecked") | |
446 | + ArrayList<Center> tmp = (ArrayList<Center>) CommonUtils.readXML(centerFile); | |
447 | + if ( tmp != null ) { | |
448 | + crlist = tmp; | |
449 | + return; | |
450 | + } | |
451 | + } | |
452 | + | |
453 | + String uri = "http://cal.syoboi.jp/mng?Action=ShowChList"; | |
454 | + String response = webToBuffer(uri,thisEncoding,true); | |
455 | + if ( response == null ) { | |
456 | + System.err.println(ERRID+"放送局リストの取得に失敗: "+uri); | |
457 | + return; | |
458 | + } | |
459 | + System.out.println(MSGID+"放送局リストを取得: "+uri); | |
460 | + | |
461 | + Matcher ma = Pattern.compile("<table class=\"tframe output\".*?>(.+?)</table>",Pattern.DOTALL).matcher(response); | |
462 | + if ( ! ma.find() ) { | |
463 | + System.err.println(ERRID+"放送局情報がない: "+uri); | |
464 | + return; | |
465 | + } | |
466 | + | |
467 | + // 新しい放送局リストの入れ物を作る | |
468 | + ArrayList<Center> newcrlist = new ArrayList<Center>(); | |
469 | + | |
470 | + int cnt = 1; | |
471 | + Matcher mb = Pattern.compile("<tr>(.+?)</tr>",Pattern.DOTALL).matcher(ma.group(1)); | |
472 | + while ( mb.find() ) { | |
473 | + String[] d = mb.group(1).split("<.*?>",9); | |
474 | + if ( d.length != 9 ) { | |
475 | + System.err.println(ERRID+"書式不正(カラム数が足りない): "+d.length); | |
476 | + continue; | |
477 | + } | |
478 | + if ( ! d[1].matches("^\\d+$") ) { | |
479 | + continue; | |
480 | + } | |
481 | + | |
482 | + // 放送局リスト | |
483 | + Center cr = new Center(); | |
484 | + cr.setLink(d[5]); | |
485 | + cr.setAreaCode("1"); | |
486 | + cr.setCenterOrig(CommonUtils.unEscape(d[7])); | |
487 | + //cr.setCenter(this.chconv.get(cr.getCenterOrig())); // ChannelConvert.datで入れ替えたもの | |
488 | + cr.setType(""); | |
489 | + cr.setEnabled(true); | |
490 | + cr.setOrder(cnt++); | |
491 | + | |
492 | + newcrlist.add(cr); | |
493 | + | |
494 | + if (debug) System.out.println(MSGID+"放送局を追加: "+cr.getCenterOrig()+" -> "+cr.getCenter()); | |
495 | + } | |
496 | + | |
497 | + if ( newcrlist.size() == 0 ) { | |
498 | + System.err.println(ERRID+"放送局情報の取得結果が0件だったため情報を更新しません"); | |
499 | + return; | |
500 | + } | |
501 | + | |
502 | + System.out.println(DBGID+"放送局の数: "+newcrlist.size()); | |
503 | + | |
504 | + crlist = newcrlist; | |
505 | + attachChFilters(); | |
506 | + setSortedCRlist(); | |
507 | + CommonUtils.writeXML(centerFile, crlist); | |
508 | + } | |
509 | + | |
510 | + @Override | |
511 | + public boolean saveCenter() { | |
512 | + return false; | |
513 | + } | |
514 | + | |
515 | + /* | |
516 | + * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | |
517 | + * ★★★★★ 放送局を選択する(TVCenterから降格)-ここまで ★★★★★ | |
518 | + * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ | |
519 | + */ | |
520 | +} |