private static final String MISS_HDR = "★★DIGAが追跡に失敗★★ ";\r
private static final String MISS_TITLE = "★★番組詳細を取得しなおしてください★★";\r
\r
- private static final int RETCODE_SUCCESS = 0;\r
-// private static final int RETCODE_BUSY = -1;\r
-// private static final int RETCODE_REDO = -2;\r
- private static final int RETCODE_FATAL = -99;\r
+ protected static final int RETCODE_SUCCESS = 0;\r
+// protected static final int RETCODE_BUSY = -1;\r
+// protectede static final int RETCODE_REDO = -2;\r
+ protected static final int RETCODE_FATAL = -99;\r
\r
private static final int DIGAEVID_NONE = 0;\r
private static final int DIGAEVID_CANNOTFOLLOW = 0xFFFE;\r
return n;\r
}\r
\r
- private int _getDigaReserveList(ArrayList<ReserveList> newReserveList, String response) {\r
- \r
+ /**\r
+ * 予約全エントリを通しての処理\r
+ */\r
+ protected int _getDigaReserveList(ArrayList<ReserveList> newReserveList, String response) {\r
// 予約詳細を作る\r
Matcher ma = Pattern.compile("<tr class=\".*?\">(.+?)</tr>",Pattern.DOTALL).matcher(response);\r
while ( ma.find() ) {\r
- \r
- ReserveList reqr = new ReserveList();\r
- \r
- // 予約内容の部分を切り出す\r
- String id = null;\r
- String date = null;\r
- int wday = 0;\r
- String channel = null;\r
- String ch_name = null;\r
- String ahh = null;\r
- String amm = null;\r
- String zhh = null;\r
- String zmm = null;\r
- String rec_min = null;\r
- String rec_mode = null;\r
- \r
- boolean pursues = false;\r
- boolean exec = true;\r
- boolean tunershort = false;\r
- String rec_type = ITEM_REC_TYPE_PROG;\r
- \r
- boolean repeat_everyday = false;\r
- boolean repeat_mon2fri = false;\r
- boolean repeat_mon2sat = false;\r
- boolean repeat_wday = false;\r
- boolean repeat_none = false;\r
+ _getDigaReserveProg(newReserveList, ma.group(1));\r
+ }\r
+ return(RETCODE_SUCCESS);\r
+ }\r
+ \r
+ /**\r
+ * 予約1エントリずつの処理\r
+ */\r
+ protected int _getDigaReserveProg(ArrayList<ReserveList> newReserveList, String progdata) {\r
+ \r
+ ReserveList reqr = new ReserveList();\r
+ \r
+ // 予約内容の部分を切り出す\r
+ String id = null;\r
+ String date = null;\r
+ int wday = 0;\r
+ String channel = null;\r
+ String ch_name = null;\r
+ String ahh = null;\r
+ String amm = null;\r
+ String zhh = null;\r
+ String zmm = null;\r
+ String rec_min = null;\r
+ String rec_mode = null;\r
+ \r
+ boolean pursues = false;\r
+ boolean exec = true;\r
+ boolean tunershort = false;\r
+ String rec_type = ITEM_REC_TYPE_PROG;\r
+ \r
+ boolean repeat_everyday = false;\r
+ boolean repeat_mon2fri = false;\r
+ boolean repeat_mon2sat = false;\r
+ boolean repeat_wday = false;\r
+ boolean repeat_none = false;\r
\r
- Matcher mb = Pattern.compile("<td(.*?)</td>",Pattern.DOTALL).matcher(ma.group(1));\r
- Matcher mc = null;\r
- for ( int i=0; mb.find(); i++ ) {\r
- switch (i) {\r
- case 0: // 予約ID\r
- mc = Pattern.compile("\\?ANC_RSVLSTNO=(\\d+)&",Pattern.DOTALL).matcher(mb.group(1));\r
- if ( mc.find() ) {\r
- id = mc.group(1);\r
+ Matcher mb = Pattern.compile("<td(.*?)</td>",Pattern.DOTALL).matcher(progdata);\r
+ Matcher mc = null;\r
+ for ( int i=0; mb.find(); i++ ) {\r
+ switch (i) {\r
+ case 0: // 予約ID\r
+ mc = Pattern.compile("\\?ANC_RSVLSTNO=(\\d+)&",Pattern.DOTALL).matcher(mb.group(1));\r
+ if ( mc.find() ) {\r
+ id = mc.group(1);\r
+ }\r
+ break;\r
+ case 2: // 日付\r
+ mc = Pattern.compile(">\\s*(\\d+)/(\\d+)\\((.)\\)",Pattern.DOTALL).matcher(mb.group(1));\r
+ if ( mc.find() ) {\r
+ wday = CommonUtils.getWday(mc.group(3));\r
+ date = CommonUtils.getDateByMD(Integer.valueOf(mc.group(1)), Integer.valueOf(mc.group(2)), wday, true);\r
+ }\r
+ break;\r
+ case 3: // CH\r
+ mc = Pattern.compile(">\\s*(.+?)\\s*$",Pattern.DOTALL).matcher(mb.group(1));\r
+ if ( mc.find() ) {\r
+ String recChName = CommonUtils.unEscape(mc.group(1)).trim();\r
+ channel = cc.getCH_REC2CODE(recChName);\r
+ if ( channel != null ) {\r
+ ch_name = cc.getCH_CODE2WEB(channel);\r
}\r
- break;\r
- case 2: // 日付\r
- mc = Pattern.compile(">\\s*(\\d+)/(\\d+)\\((.)\\)",Pattern.DOTALL).matcher(mb.group(1));\r
- if ( mc.find() ) {\r
- wday = CommonUtils.getWday(mc.group(3));\r
- date = CommonUtils.getDateByMD(Integer.valueOf(mc.group(1)), Integer.valueOf(mc.group(2)), wday, true);\r
+ else {\r
+ ch_name = recChName;\r
}\r
- break;\r
- case 3: // CH\r
- mc = Pattern.compile(">\\s*(.+?)\\s*$",Pattern.DOTALL).matcher(mb.group(1));\r
- if ( mc.find() ) {\r
- String recChName = CommonUtils.unEscape(mc.group(1)).trim();\r
- channel = cc.getCH_REC2CODE(recChName);\r
- if ( channel != null ) {\r
- ch_name = cc.getCH_CODE2WEB(channel);\r
- }\r
+ }\r
+ break;\r
+ case 4: // 時刻\r
+ mc = Pattern.compile(">\\s*(\\d+):(\\d+)~((\\d+):(\\d+)|未定)",Pattern.DOTALL).matcher(mb.group(1));\r
+ if ( mc.find() ) {\r
+ if ( mc.group(4) == null ) {\r
+ // 終了時刻='未定(fefe)'の場合はcopyattributes()で過去情報から補完するか、または2時間後に仮置き\r
+ System.out.println(DBGID+"終了時刻がみつかりません");\r
+ String[] db = _hhmm2hhmm_min(mc.group(1)+":"+mc.group(2),"00:00");\r
+ ahh = db[0];\r
+ amm = db[1];\r
}\r
- break;\r
- case 4: // 時刻\r
- mc = Pattern.compile(">\\s*(\\d+):(\\d+)~((\\d+):(\\d+)|未定)",Pattern.DOTALL).matcher(mb.group(1));\r
- if ( mc.find() ) {\r
- if ( mc.group(4) == null ) {\r
- // 終了時刻='未定(fefe)'の場合はcopyattributes()で過去情報から補完するか、または2時間後に仮置き\r
- System.out.println(DBGID+"終了時刻がみつかりません");\r
- String[] db = _hhmm2hhmm_min(mc.group(1)+":"+mc.group(2),"00:00");\r
- ahh = db[0];\r
- amm = db[1];\r
- }\r
- else {\r
- String[] db = _hhmm2hhmm_min(mc.group(1)+":"+mc.group(2),mc.group(4)+":"+mc.group(5));\r
- ahh = db[0];\r
- amm = db[1];\r
- zhh = db[2];\r
- zmm = db[3];\r
- rec_min = db[4];\r
- }\r
+ else {\r
+ String[] db = _hhmm2hhmm_min(mc.group(1)+":"+mc.group(2),mc.group(4)+":"+mc.group(5));\r
+ ahh = db[0];\r
+ amm = db[1];\r
+ zhh = db[2];\r
+ zmm = db[3];\r
+ rec_min = db[4];\r
}\r
- break;\r
- case 5: // 録画モード\r
- mc = Pattern.compile(">\\s*(.+?)\\s*<").matcher(mb.group(1));\r
+ }\r
+ break;\r
+ case 5: // 録画モード\r
+ mc = Pattern.compile(">\\s*([^<]+?)\\s*<",Pattern.DOTALL).matcher(mb.group(1));\r
+ if ( mc.find() ) {\r
+ rec_mode = CommonUtils.unEscape(mc.group(1)).trim().replaceFirst("\\(HDD\\)", "");\r
+ }\r
+ else {\r
+ // BWT650\r
+ mc = Pattern.compile(">\\s*(.+?)\\s*$",Pattern.DOTALL).matcher(mb.group(1));\r
if ( mc.find() ) {\r
rec_mode = CommonUtils.unEscape(mc.group(1)).trim().replaceFirst("\\(HDD\\)", "");\r
}\r
- break;\r
- case 6: // 補足情報\r
- if ( mb.group(1).contains("毎日") ) {\r
- repeat_everyday = true;\r
- }\r
- else if ( mb.group(1).contains("月金") ) {\r
- repeat_mon2fri = true;\r
- }\r
- else if ( mb.group(1).contains("月土") ) {\r
- repeat_mon2sat = true;\r
- }\r
- else if ( mb.group(1).contains("毎週") || mb.group(1).contains("曜日指定") ) {\r
- repeat_wday = true;\r
- }\r
- else {\r
- repeat_none = true;\r
- }\r
- \r
- if ( mb.group(1).contains("実行切") ) {\r
- exec = false;\r
- }\r
- if ( mb.group(1).contains("重複") ) {\r
- tunershort = true;\r
- }\r
- if ( mb.group(1).contains("番組予約") ) {\r
- pursues = true;\r
- rec_type = ITEM_REC_TYPE_EPG;\r
- }\r
- break;\r
}\r
+ break;\r
+ case 6: // 補足情報\r
+ if ( mb.group(1).contains("毎日") ) {\r
+ repeat_everyday = true;\r
+ }\r
+ else if ( mb.group(1).contains("月金") ) {\r
+ repeat_mon2fri = true;\r
+ }\r
+ else if ( mb.group(1).contains("月土") ) {\r
+ repeat_mon2sat = true;\r
+ }\r
+ else if ( mb.group(1).contains("毎週") || mb.group(1).contains("曜日指定") ) {\r
+ repeat_wday = true;\r
+ }\r
+ else {\r
+ repeat_none = true;\r
+ }\r
+ \r
+ if ( mb.group(1).contains("実行切") ) {\r
+ exec = false;\r
+ }\r
+ if ( mb.group(1).contains("重複") ) {\r
+ tunershort = true;\r
+ }\r
+ if ( mb.group(1).contains("番組予約") ) {\r
+ pursues = true;\r
+ rec_type = ITEM_REC_TYPE_EPG;\r
+ }\r
+ break;\r
}\r
- \r
- // 予約情報更新\r
- reqr.setId(id);\r
- \r
- reqr.setAhh(ahh);\r
- reqr.setAmm(amm);\r
- \r
- reqr.setZhh(zhh);\r
- reqr.setZmm(zmm);\r
- reqr.setRec_min(rec_min);\r
- \r
- if ( repeat_everyday ) {\r
- // 毎日\r
- reqr.setRec_pattern(HDDRecorder.RPTPTN[HDDRecorder.RPTPTN_ID_EVERYDAY]);\r
- reqr.setRec_pattern_id(HDDRecorder.RPTPTN_ID_EVERYDAY);\r
- }\r
- else if ( repeat_mon2sat ) {\r
- // 毎月~土\r
- reqr.setRec_pattern(HDDRecorder.RPTPTN[HDDRecorder.RPTPTN_ID_MON2SAT]);\r
- reqr.setRec_pattern_id(HDDRecorder.RPTPTN_ID_MON2SAT);\r
- }\r
- else if ( repeat_mon2fri ) {\r
- // 毎月~金\r
- reqr.setRec_pattern(HDDRecorder.RPTPTN[HDDRecorder.RPTPTN_ID_MON2FRI]);\r
- reqr.setRec_pattern_id(HDDRecorder.RPTPTN_ID_MON2FRI);\r
- }\r
- else if ( repeat_wday && wday > 0 ) {\r
- // 毎週\r
- reqr.setRec_pattern(HDDRecorder.RPTPTN[wday-1]);\r
- reqr.setRec_pattern_id(wday-1);\r
- }\r
- else {\r
- // 単日\r
- reqr.setRec_pattern(date);\r
- reqr.setRec_pattern_id(HDDRecorder.RPTPTN_ID_BYDATE);\r
- }\r
- if ( zhh != null && zmm != null ) {\r
- reqr.setRec_nextdate(CommonUtils.getNextDate(reqr));\r
- getStartEndDateTime(reqr);\r
- }\r
- else {\r
- // 終了時刻="未定"の場合(setRec_nextdateとかは↓の中で)\r
- setAttributesDiga(reqr,null);\r
- }\r
- \r
- if ( pursues && ! repeat_none ) {\r
- reqr.setAutoreserved(true);\r
- }\r
- \r
- reqr.setRec_mode(rec_mode);\r
- reqr.setTitle(MISS_TITLE);\r
- reqr.setTitlePop("");\r
- reqr.setChannel(channel);\r
- reqr.setCh_name(ch_name);\r
- \r
- reqr.setPursues(pursues);\r
- reqr.setExec(exec);\r
- reqr.setContentId(null);\r
- reqr.setRec_audio(rec_type);\r
+ }\r
+ \r
+ // 予約情報更新\r
+ reqr.setId(id);\r
+ \r
+ reqr.setAhh(ahh);\r
+ reqr.setAmm(amm);\r
+ \r
+ reqr.setZhh(zhh);\r
+ reqr.setZmm(zmm);\r
+ reqr.setRec_min(rec_min);\r
+ \r
+ if ( repeat_everyday ) {\r
+ // 毎日\r
+ reqr.setRec_pattern(HDDRecorder.RPTPTN[HDDRecorder.RPTPTN_ID_EVERYDAY]);\r
+ reqr.setRec_pattern_id(HDDRecorder.RPTPTN_ID_EVERYDAY);\r
+ }\r
+ else if ( repeat_mon2sat ) {\r
+ // 毎月~土\r
+ reqr.setRec_pattern(HDDRecorder.RPTPTN[HDDRecorder.RPTPTN_ID_MON2SAT]);\r
+ reqr.setRec_pattern_id(HDDRecorder.RPTPTN_ID_MON2SAT);\r
+ }\r
+ else if ( repeat_mon2fri ) {\r
+ // 毎月~金\r
+ reqr.setRec_pattern(HDDRecorder.RPTPTN[HDDRecorder.RPTPTN_ID_MON2FRI]);\r
+ reqr.setRec_pattern_id(HDDRecorder.RPTPTN_ID_MON2FRI);\r
+ }\r
+ else if ( repeat_wday && wday > 0 ) {\r
+ // 毎週\r
+ reqr.setRec_pattern(HDDRecorder.RPTPTN[wday-1]);\r
+ reqr.setRec_pattern_id(wday-1);\r
+ }\r
+ else {\r
+ // 単日\r
+ reqr.setRec_pattern(date);\r
+ reqr.setRec_pattern_id(HDDRecorder.RPTPTN_ID_BYDATE);\r
+ }\r
+ if ( zhh != null && zmm != null ) {\r
+ reqr.setRec_nextdate(CommonUtils.getNextDate(reqr));\r
+ getStartEndDateTime(reqr);\r
+ }\r
+ else {\r
+ // 終了時刻="未定"の場合(setRec_nextdateとかは↓の中で)\r
+ setAttributesDiga(reqr,null);\r
+ }\r
+ \r
+ if ( pursues && ! repeat_none ) {\r
+ reqr.setAutoreserved(true);\r
+ }\r
+ \r
+ reqr.setRec_mode(rec_mode);\r
+ reqr.setTitle(MISS_TITLE);\r
+ reqr.setTitlePop("");\r
+ reqr.setChannel(channel);\r
+ reqr.setCh_name(ch_name);\r
+ \r
+ reqr.setPursues(pursues);\r
+ reqr.setExec(exec);\r
+ reqr.setContentId(null);\r
+ reqr.setRec_audio(rec_type);\r
\r
- reqr.setTunershort(tunershort);\r
+ reqr.setTunershort(tunershort);\r
\r
- // 予約情報を保存\r
- newReserveList.add(reqr);\r
- }\r
+ // 予約情報を保存\r
+ newReserveList.add(reqr);\r
\r
- return(RETCODE_SUCCESS);\r
+ return 0;\r
}\r
\r
/*******************************************************************************\r
}\r
\r
/*******************************************************************************\r
- * 予約のタイトル一覧を取得する。詳細は{@link #getDigaReserveDetail}で。\r
+ * 録画結果の一覧を取得する\r
******************************************************************************/\r
\r
private int getDigaRecordedList(ArrayList<RecordedInfo> newRecordedList) {\r