• R/O
  • HTTP
  • SSH
  • HTTPS

TinyBannavi: Commit

タイニー番組ナビゲータ本体


Commit MetaInfo

Revisión0bfdfd27b6bc570a7029a2fd4b491d186b585d3e (tree)
Tiempo2014-01-20 17:55:24
Autorpeeweedee <peeweedee@user...>
Commiterpeeweedee

Log Message

BWT650対応α版

Cambiar Resumen

Diferencia incremental

--- a/TinyBannavi/05_history.txt
+++ b/TinyBannavi/05_history.txt
@@ -10,8 +10,9 @@
1010 2chの番ナビスレ:http://toro.2ch.net/test/read.cgi/av/1352223253/
1111 ★☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆★
1212
13-3.22.12β+1.5.12(2013-12-XX)
13+3.22.12β+1.5.12(2014-01-XX)
1414 ■変更点
15+ ・(レコーダ対応[DIGA BWT650]) 追加(>>673.)
1516  ・(新聞形式)番組枠内テキストの描画を、LineBreakMeasurerからdrawGlyphVectorに変更。それに伴い番組詳細の描画行数制限を廃止
1617 ■バグ修正
1718  ・(新聞形式)現在時刻表示、日跨りがおきたときに表示が05:00の座標へ移動しない問題を修正(>>649.)
--- /dev/null
+++ b/TinyBannavi/env/RdChannelCode.dat.DIGA DMR-BWT650
@@ -0,0 +1,20 @@
1+# 2013/03/15 23:19
2+"NHK総合","地上D 011","011:e"
3+"NHK Eテレ","地上D 021","021:e"
4+"日本テレビ","地上D 041","041:e"
5+"TBSテレビ","地上D 061","061:e"
6+"フジテレビ","地上D 081","081:e"
7+"テレビ朝日","地上D 051","051:e"
8+"テレビ東京","地上D 071","071:e"
9+"TOKYO MX","地上D 091","091:e"
10+"ちばテレビ","地上D 031","031:e"
11+"BS日テレ","BS 141","141:4"
12+"BS朝日","BS 151","151:4"
13+"BS-TBS","BS 161","161:4"
14+"BSジャパン","BS 171","171:4"
15+"BSフジ","BS 181","181:4"
16+"WOWOW","BS 191","191:4"
17+"BSイレブン","BS 211","211:4"
18+"e2)Ch.333 アニメシアターX(AT-X)","CS2 333","333:7"
19+"NHK BS1","BS 101","101:4"
20+"NHK BSプレミアム","BS 103","103:4"
--- a/TinyBannavi/src/niseRD/Server.java
+++ b/TinyBannavi/src/niseRD/Server.java
@@ -159,8 +159,9 @@ public class Server extends Thread {
159159 ma = Pattern.compile("/([^/]+\\.(cgi|htm|css|png))").matcher(location);
160160 if (ma.find()) {
161161 file = ma.group(1);
162- if ( ma.group(1).equals("dvdr_ctrl.cgi") || /*ma.group(1).equals("reserve_list.cgi") ||*/ ma.group(1).equals("dispframe.cgi") ) {
162+ if ( ma.group(1).equals("dvdr_ctrl.cgi") || ma.group(1).equals("reserve_list.cgi") || ma.group(1).equals("dispframe.cgi") ) {
163163 String ps = new String(c);
164+ ps = ps.replaceAll("(cCMD_[A-Z]+\\.[xy]=)\\d+", "$1");
164165 filename = folder+File.separator+ma.group(1)+"."+ps;
165166 if ( ps.contains("cCMD_") ) {
166167 int a = ps.indexOf("cCMD_");
--- a/TinyBannavi/src/tainavi/PlugIn_RecDIGA_DMR_BWT2100.java
+++ b/TinyBannavi/src/tainavi/PlugIn_RecDIGA_DMR_BWT2100.java
@@ -103,10 +103,10 @@ public class PlugIn_RecDIGA_DMR_BWT2100 extends HDDRecorderUtils implements HDDR
103103 private static final String MISS_HDR = "★★DIGAが追跡に失敗★★ ";
104104 private static final String MISS_TITLE = "★★番組詳細を取得しなおしてください★★";
105105
106- private static final int RETCODE_SUCCESS = 0;
107-// private static final int RETCODE_BUSY = -1;
108-// private static final int RETCODE_REDO = -2;
109- private static final int RETCODE_FATAL = -99;
106+ protected static final int RETCODE_SUCCESS = 0;
107+// protected static final int RETCODE_BUSY = -1;
108+// protectede static final int RETCODE_REDO = -2;
109+ protected static final int RETCODE_FATAL = -99;
110110
111111 private static final int DIGAEVID_NONE = 0;
112112 private static final int DIGAEVID_CANNOTFOLLOW = 0xFFFE;
@@ -1286,188 +1286,208 @@ public class PlugIn_RecDIGA_DMR_BWT2100 extends HDDRecorderUtils implements HDDR
12861286 return n;
12871287 }
12881288
1289- private int _getDigaReserveList(ArrayList<ReserveList> newReserveList, String response) {
1290-
1289+ /**
1290+ * 予約全エントリを通しての処理
1291+ */
1292+ protected int _getDigaReserveList(ArrayList<ReserveList> newReserveList, String response) {
12911293 // 予約詳細を作る
12921294 Matcher ma = Pattern.compile("<tr class=\".*?\">(.+?)</tr>",Pattern.DOTALL).matcher(response);
12931295 while ( ma.find() ) {
1294-
1295- ReserveList reqr = new ReserveList();
1296-
1297- // 予約内容の部分を切り出す
1298- String id = null;
1299- String date = null;
1300- int wday = 0;
1301- String channel = null;
1302- String ch_name = null;
1303- String ahh = null;
1304- String amm = null;
1305- String zhh = null;
1306- String zmm = null;
1307- String rec_min = null;
1308- String rec_mode = null;
1309-
1310- boolean pursues = false;
1311- boolean exec = true;
1312- boolean tunershort = false;
1313- String rec_type = ITEM_REC_TYPE_PROG;
1314-
1315- boolean repeat_everyday = false;
1316- boolean repeat_mon2fri = false;
1317- boolean repeat_mon2sat = false;
1318- boolean repeat_wday = false;
1319- boolean repeat_none = false;
1296+ _getDigaReserveProg(newReserveList, ma.group(1));
1297+ }
1298+ return(RETCODE_SUCCESS);
1299+ }
1300+
1301+ /**
1302+ * 予約1エントリずつの処理
1303+ */
1304+ protected int _getDigaReserveProg(ArrayList<ReserveList> newReserveList, String progdata) {
1305+
1306+ ReserveList reqr = new ReserveList();
1307+
1308+ // 予約内容の部分を切り出す
1309+ String id = null;
1310+ String date = null;
1311+ int wday = 0;
1312+ String channel = null;
1313+ String ch_name = null;
1314+ String ahh = null;
1315+ String amm = null;
1316+ String zhh = null;
1317+ String zmm = null;
1318+ String rec_min = null;
1319+ String rec_mode = null;
1320+
1321+ boolean pursues = false;
1322+ boolean exec = true;
1323+ boolean tunershort = false;
1324+ String rec_type = ITEM_REC_TYPE_PROG;
1325+
1326+ boolean repeat_everyday = false;
1327+ boolean repeat_mon2fri = false;
1328+ boolean repeat_mon2sat = false;
1329+ boolean repeat_wday = false;
1330+ boolean repeat_none = false;
13201331
1321- Matcher mb = Pattern.compile("<td(.*?)</td>",Pattern.DOTALL).matcher(ma.group(1));
1322- Matcher mc = null;
1323- for ( int i=0; mb.find(); i++ ) {
1324- switch (i) {
1325- case 0: // 予約ID
1326- mc = Pattern.compile("\\?ANC_RSVLSTNO=(\\d+)&",Pattern.DOTALL).matcher(mb.group(1));
1327- if ( mc.find() ) {
1328- id = mc.group(1);
1332+ Matcher mb = Pattern.compile("<td(.*?)</td>",Pattern.DOTALL).matcher(progdata);
1333+ Matcher mc = null;
1334+ for ( int i=0; mb.find(); i++ ) {
1335+ switch (i) {
1336+ case 0: // 予約ID
1337+ mc = Pattern.compile("\\?ANC_RSVLSTNO=(\\d+)&",Pattern.DOTALL).matcher(mb.group(1));
1338+ if ( mc.find() ) {
1339+ id = mc.group(1);
1340+ }
1341+ break;
1342+ case 2: // 日付
1343+ mc = Pattern.compile(">\\s*(\\d+)/(\\d+)\\((.)\\)",Pattern.DOTALL).matcher(mb.group(1));
1344+ if ( mc.find() ) {
1345+ wday = CommonUtils.getWday(mc.group(3));
1346+ date = CommonUtils.getDateByMD(Integer.valueOf(mc.group(1)), Integer.valueOf(mc.group(2)), wday, true);
1347+ }
1348+ break;
1349+ case 3: // CH
1350+ mc = Pattern.compile(">\\s*(.+?)\\s*$",Pattern.DOTALL).matcher(mb.group(1));
1351+ if ( mc.find() ) {
1352+ String recChName = CommonUtils.unEscape(mc.group(1)).trim();
1353+ channel = cc.getCH_REC2CODE(recChName);
1354+ if ( channel != null ) {
1355+ ch_name = cc.getCH_CODE2WEB(channel);
13291356 }
1330- break;
1331- case 2: // 日付
1332- mc = Pattern.compile(">\\s*(\\d+)/(\\d+)\\((.)\\)",Pattern.DOTALL).matcher(mb.group(1));
1333- if ( mc.find() ) {
1334- wday = CommonUtils.getWday(mc.group(3));
1335- date = CommonUtils.getDateByMD(Integer.valueOf(mc.group(1)), Integer.valueOf(mc.group(2)), wday, true);
1357+ else {
1358+ ch_name = recChName;
13361359 }
1337- break;
1338- case 3: // CH
1339- mc = Pattern.compile(">\\s*(.+?)\\s*$",Pattern.DOTALL).matcher(mb.group(1));
1340- if ( mc.find() ) {
1341- String recChName = CommonUtils.unEscape(mc.group(1)).trim();
1342- channel = cc.getCH_REC2CODE(recChName);
1343- if ( channel != null ) {
1344- ch_name = cc.getCH_CODE2WEB(channel);
1345- }
1360+ }
1361+ break;
1362+ case 4: // 時刻
1363+ mc = Pattern.compile(">\\s*(\\d+):(\\d+)~((\\d+):(\\d+)|未定)",Pattern.DOTALL).matcher(mb.group(1));
1364+ if ( mc.find() ) {
1365+ if ( mc.group(4) == null ) {
1366+ // 終了時刻='未定(fefe)'の場合はcopyattributes()で過去情報から補完するか、または2時間後に仮置き
1367+ System.out.println(DBGID+"終了時刻がみつかりません");
1368+ String[] db = _hhmm2hhmm_min(mc.group(1)+":"+mc.group(2),"00:00");
1369+ ahh = db[0];
1370+ amm = db[1];
13461371 }
1347- break;
1348- case 4: // 時刻
1349- mc = Pattern.compile(">\\s*(\\d+):(\\d+)~((\\d+):(\\d+)|未定)",Pattern.DOTALL).matcher(mb.group(1));
1350- if ( mc.find() ) {
1351- if ( mc.group(4) == null ) {
1352- // 終了時刻='未定(fefe)'の場合はcopyattributes()で過去情報から補完するか、または2時間後に仮置き
1353- System.out.println(DBGID+"終了時刻がみつかりません");
1354- String[] db = _hhmm2hhmm_min(mc.group(1)+":"+mc.group(2),"00:00");
1355- ahh = db[0];
1356- amm = db[1];
1357- }
1358- else {
1359- String[] db = _hhmm2hhmm_min(mc.group(1)+":"+mc.group(2),mc.group(4)+":"+mc.group(5));
1360- ahh = db[0];
1361- amm = db[1];
1362- zhh = db[2];
1363- zmm = db[3];
1364- rec_min = db[4];
1365- }
1372+ else {
1373+ String[] db = _hhmm2hhmm_min(mc.group(1)+":"+mc.group(2),mc.group(4)+":"+mc.group(5));
1374+ ahh = db[0];
1375+ amm = db[1];
1376+ zhh = db[2];
1377+ zmm = db[3];
1378+ rec_min = db[4];
13661379 }
1367- break;
1368- case 5: // 録画モード
1369- mc = Pattern.compile(">\\s*(.+?)\\s*<").matcher(mb.group(1));
1380+ }
1381+ break;
1382+ case 5: // 録画モード
1383+ mc = Pattern.compile(">\\s*([^<]+?)\\s*<",Pattern.DOTALL).matcher(mb.group(1));
1384+ if ( mc.find() ) {
1385+ rec_mode = CommonUtils.unEscape(mc.group(1)).trim().replaceFirst("\\(HDD\\)", "");
1386+ }
1387+ else {
1388+ // BWT650
1389+ mc = Pattern.compile(">\\s*(.+?)\\s*$",Pattern.DOTALL).matcher(mb.group(1));
13701390 if ( mc.find() ) {
13711391 rec_mode = CommonUtils.unEscape(mc.group(1)).trim().replaceFirst("\\(HDD\\)", "");
13721392 }
1373- break;
1374- case 6: // 補足情報
1375- if ( mb.group(1).contains("毎日") ) {
1376- repeat_everyday = true;
1377- }
1378- else if ( mb.group(1).contains("月金") ) {
1379- repeat_mon2fri = true;
1380- }
1381- else if ( mb.group(1).contains("月土") ) {
1382- repeat_mon2sat = true;
1383- }
1384- else if ( mb.group(1).contains("毎週") || mb.group(1).contains("曜日指定") ) {
1385- repeat_wday = true;
1386- }
1387- else {
1388- repeat_none = true;
1389- }
1390-
1391- if ( mb.group(1).contains("実行切") ) {
1392- exec = false;
1393- }
1394- if ( mb.group(1).contains("重複") ) {
1395- tunershort = true;
1396- }
1397- if ( mb.group(1).contains("番組予約") ) {
1398- pursues = true;
1399- rec_type = ITEM_REC_TYPE_EPG;
1400- }
1401- break;
14021393 }
1394+ break;
1395+ case 6: // 補足情報
1396+ if ( mb.group(1).contains("毎日") ) {
1397+ repeat_everyday = true;
1398+ }
1399+ else if ( mb.group(1).contains("月金") ) {
1400+ repeat_mon2fri = true;
1401+ }
1402+ else if ( mb.group(1).contains("月土") ) {
1403+ repeat_mon2sat = true;
1404+ }
1405+ else if ( mb.group(1).contains("毎週") || mb.group(1).contains("曜日指定") ) {
1406+ repeat_wday = true;
1407+ }
1408+ else {
1409+ repeat_none = true;
1410+ }
1411+
1412+ if ( mb.group(1).contains("実行切") ) {
1413+ exec = false;
1414+ }
1415+ if ( mb.group(1).contains("重複") ) {
1416+ tunershort = true;
1417+ }
1418+ if ( mb.group(1).contains("番組予約") ) {
1419+ pursues = true;
1420+ rec_type = ITEM_REC_TYPE_EPG;
1421+ }
1422+ break;
14031423 }
1404-
1405- // 予約情報更新
1406- reqr.setId(id);
1407-
1408- reqr.setAhh(ahh);
1409- reqr.setAmm(amm);
1410-
1411- reqr.setZhh(zhh);
1412- reqr.setZmm(zmm);
1413- reqr.setRec_min(rec_min);
1414-
1415- if ( repeat_everyday ) {
1416- // 毎日
1417- reqr.setRec_pattern(HDDRecorder.RPTPTN[HDDRecorder.RPTPTN_ID_EVERYDAY]);
1418- reqr.setRec_pattern_id(HDDRecorder.RPTPTN_ID_EVERYDAY);
1419- }
1420- else if ( repeat_mon2sat ) {
1421- // 毎月~土
1422- reqr.setRec_pattern(HDDRecorder.RPTPTN[HDDRecorder.RPTPTN_ID_MON2SAT]);
1423- reqr.setRec_pattern_id(HDDRecorder.RPTPTN_ID_MON2SAT);
1424- }
1425- else if ( repeat_mon2fri ) {
1426- // 毎月~金
1427- reqr.setRec_pattern(HDDRecorder.RPTPTN[HDDRecorder.RPTPTN_ID_MON2FRI]);
1428- reqr.setRec_pattern_id(HDDRecorder.RPTPTN_ID_MON2FRI);
1429- }
1430- else if ( repeat_wday && wday > 0 ) {
1431- // 毎週
1432- reqr.setRec_pattern(HDDRecorder.RPTPTN[wday-1]);
1433- reqr.setRec_pattern_id(wday-1);
1434- }
1435- else {
1436- // 単日
1437- reqr.setRec_pattern(date);
1438- reqr.setRec_pattern_id(HDDRecorder.RPTPTN_ID_BYDATE);
1439- }
1440- if ( zhh != null && zmm != null ) {
1441- reqr.setRec_nextdate(CommonUtils.getNextDate(reqr));
1442- getStartEndDateTime(reqr);
1443- }
1444- else {
1445- // 終了時刻="未定"の場合(setRec_nextdateとかは↓の中で)
1446- setAttributesDiga(reqr,null);
1447- }
1448-
1449- if ( pursues && ! repeat_none ) {
1450- reqr.setAutoreserved(true);
1451- }
1452-
1453- reqr.setRec_mode(rec_mode);
1454- reqr.setTitle(MISS_TITLE);
1455- reqr.setTitlePop("");
1456- reqr.setChannel(channel);
1457- reqr.setCh_name(ch_name);
1458-
1459- reqr.setPursues(pursues);
1460- reqr.setExec(exec);
1461- reqr.setContentId(null);
1462- reqr.setRec_audio(rec_type);
1424+ }
1425+
1426+ // 予約情報更新
1427+ reqr.setId(id);
1428+
1429+ reqr.setAhh(ahh);
1430+ reqr.setAmm(amm);
1431+
1432+ reqr.setZhh(zhh);
1433+ reqr.setZmm(zmm);
1434+ reqr.setRec_min(rec_min);
1435+
1436+ if ( repeat_everyday ) {
1437+ // 毎日
1438+ reqr.setRec_pattern(HDDRecorder.RPTPTN[HDDRecorder.RPTPTN_ID_EVERYDAY]);
1439+ reqr.setRec_pattern_id(HDDRecorder.RPTPTN_ID_EVERYDAY);
1440+ }
1441+ else if ( repeat_mon2sat ) {
1442+ // 毎月~土
1443+ reqr.setRec_pattern(HDDRecorder.RPTPTN[HDDRecorder.RPTPTN_ID_MON2SAT]);
1444+ reqr.setRec_pattern_id(HDDRecorder.RPTPTN_ID_MON2SAT);
1445+ }
1446+ else if ( repeat_mon2fri ) {
1447+ // 毎月~金
1448+ reqr.setRec_pattern(HDDRecorder.RPTPTN[HDDRecorder.RPTPTN_ID_MON2FRI]);
1449+ reqr.setRec_pattern_id(HDDRecorder.RPTPTN_ID_MON2FRI);
1450+ }
1451+ else if ( repeat_wday && wday > 0 ) {
1452+ // 毎週
1453+ reqr.setRec_pattern(HDDRecorder.RPTPTN[wday-1]);
1454+ reqr.setRec_pattern_id(wday-1);
1455+ }
1456+ else {
1457+ // 単日
1458+ reqr.setRec_pattern(date);
1459+ reqr.setRec_pattern_id(HDDRecorder.RPTPTN_ID_BYDATE);
1460+ }
1461+ if ( zhh != null && zmm != null ) {
1462+ reqr.setRec_nextdate(CommonUtils.getNextDate(reqr));
1463+ getStartEndDateTime(reqr);
1464+ }
1465+ else {
1466+ // 終了時刻="未定"の場合(setRec_nextdateとかは↓の中で)
1467+ setAttributesDiga(reqr,null);
1468+ }
1469+
1470+ if ( pursues && ! repeat_none ) {
1471+ reqr.setAutoreserved(true);
1472+ }
1473+
1474+ reqr.setRec_mode(rec_mode);
1475+ reqr.setTitle(MISS_TITLE);
1476+ reqr.setTitlePop("");
1477+ reqr.setChannel(channel);
1478+ reqr.setCh_name(ch_name);
1479+
1480+ reqr.setPursues(pursues);
1481+ reqr.setExec(exec);
1482+ reqr.setContentId(null);
1483+ reqr.setRec_audio(rec_type);
14631484
1464- reqr.setTunershort(tunershort);
1485+ reqr.setTunershort(tunershort);
14651486
1466- // 予約情報を保存
1467- newReserveList.add(reqr);
1468- }
1487+ // 予約情報を保存
1488+ newReserveList.add(reqr);
14691489
1470- return(RETCODE_SUCCESS);
1490+ return 0;
14711491 }
14721492
14731493 /*******************************************************************************
@@ -1763,7 +1783,7 @@ public class PlugIn_RecDIGA_DMR_BWT2100 extends HDDRecorderUtils implements HDDR
17631783 }
17641784
17651785 /*******************************************************************************
1766- * 予約のタイトル一覧を取得する。詳細は{@link #getDigaReserveDetail}で。
1786+ * 録画結果の一覧を取得する
17671787 ******************************************************************************/
17681788
17691789 private int getDigaRecordedList(ArrayList<RecordedInfo> newRecordedList) {
--- /dev/null
+++ b/TinyBannavi/src/tainavi/PlugIn_RecDIGA_DMR_BWT650.java
@@ -0,0 +1,59 @@
1+package tainavi;
2+
3+import java.util.ArrayList;
4+import java.util.HashMap;
5+import java.util.regex.Matcher;
6+import java.util.regex.Pattern;
7+
8+
9+/*
10+ *
11+ */
12+
13+public class PlugIn_RecDIGA_DMR_BWT650 extends PlugIn_RecDIGA_DMR_BZT720 implements HDDRecorder,Cloneable {
14+
15+ @Override
16+ public PlugIn_RecDIGA_DMR_BWT650 clone() {
17+ return (PlugIn_RecDIGA_DMR_BWT650) super.clone();
18+ }
19+
20+ /* 必須コード - ここから */
21+
22+ // 種族の特性
23+ @Override
24+ public String getRecorderId() { return "DIGA DMR-BWT650"; }
25+ @Override
26+ public RecType getType() { return RecType.RECORDER; }
27+
28+ @Override
29+ protected int get_com_try_count() { return 5; }
30+
31+ public PlugIn_RecDIGA_DMR_BWT650() {
32+ super();
33+ this.setTunerNum(3);
34+ }
35+
36+ /*
37+ * 公開メソッド
38+ */
39+
40+ /*
41+ * 非公開メソッド
42+ */
43+
44+ /**
45+ * 予約全エントリを通しての処理
46+ */
47+ @Override
48+ protected int _getDigaReserveList(ArrayList<ReserveList> newReserveList, String response) {
49+ // 予約詳細を作る
50+ Matcher mx = Pattern.compile("<table class=\"reclist\">.+?<tbody>(.+?)</tbody>",Pattern.DOTALL).matcher(response);
51+ if ( mx.find() ) {
52+ Matcher ma = Pattern.compile("<tr>(.+?)</tr>",Pattern.DOTALL).matcher(mx.group(1));
53+ while ( ma.find() ) {
54+ _getDigaReserveProg(newReserveList, ma.group(1));
55+ }
56+ }
57+ return(RETCODE_SUCCESS);
58+ }
59+}
--- a/TinyBannavi/src/tainavi/VersionInfo.java
+++ b/TinyBannavi/src/tainavi/VersionInfo.java
@@ -5,7 +5,7 @@ import java.util.regex.Pattern;
55
66
77 public class VersionInfo {
8- private static final String Version = "タイニー番組ナビゲータ 3.22.11β";
8+ private static final String Version = "タイニー番組ナビゲータ 3.22.12β";
99
1010 private static final String OSname = System.getProperty("os.name");
1111 private static final String OSvers = System.getProperty("os.version");
Show on old repository browser