1 package tainavi.pluginrec;
\r
4 import java.io.UnsupportedEncodingException;
\r
5 import java.net.Authenticator;
\r
6 import java.net.URLEncoder;
\r
7 import java.util.ArrayList;
\r
8 import java.util.Hashtable;
\r
9 import java.util.regex.Matcher;
\r
10 import java.util.regex.Pattern;
\r
12 import tainavi.ChannelCode;
\r
13 import tainavi.CommonUtils;
\r
14 import tainavi.HDDRecorder;
\r
15 import tainavi.HDDRecorderUtils;
\r
16 import tainavi.ReserveList;
\r
17 import tainavi.TVProgram;
\r
18 import tainavi.TextValueSet;
\r
19 import tainavi.TraceProgram;
\r
20 import tainavi.HDDRecorder.RecType;
\r
21 import tainavi.HDDRecorderUtils.MyAuthenticator;
\r
22 import tainavi.TVProgram.ProgGenre;
\r
27 public class PlugIn_RecRD_X5 extends HDDRecorderUtils implements HDDRecorder,Cloneable {
\r
29 public PlugIn_RecRD_X5 clone() {
\r
30 return (PlugIn_RecRD_X5) super.clone();
\r
33 private static final String thisEncoding = "MS932";
\r
35 /*******************************************************************************
\r
37 ******************************************************************************/
\r
40 public String getRecorderId() { return "RD-X5"; }
\r
42 public RecType getType() { return RecType.RECORDER; }
\r
46 public boolean isChValueAvailable() { return true; }
\r
49 public boolean isChCodeNeeded() { return false; }
\r
51 /*******************************************************************************
\r
52 * 予約ダイアログなどのテキストのオーバーライド
\r
53 ******************************************************************************/
\r
56 public String getLabel_XChapter() { return "無音部分チャプタ分割"; }
\r
57 public String getLabel_MsChapter() { return "DVD時チャプタ分割"; }
\r
58 public String getLabel_MvChapter() { return "音多連動チャプタ分割"; }
\r
59 public String getLabel_DVDCompat() { return "DVD互換モード"; }
\r
60 public String getLabel_Aspect() { return "DVD記録時画面比"; }
\r
61 public String getLabel_BVperf() { return "高レート節約"; }
\r
62 public String getLabel_LVoice() { return "ライン音声選択"; }
\r
64 /*******************************************************************************
\r
66 ******************************************************************************/
\r
70 private final String MSGID = "["+getRecorderId()+"] ";
\r
71 private final String ERRID = "[ERROR]"+MSGID;
\r
72 private final String DBGID = "[DEBUG]"+MSGID;
\r
74 /*******************************************************************************
\r
76 ******************************************************************************/
\r
78 public ChannelCode getChCode() {
\r
82 private ChannelCode cc = new ChannelCode(getRecorderId());
\r
84 public String getErrmsg() {
\r
85 return(errmsg.replaceAll("\\\\r\\\\n", ""));
\r
88 protected void setErrmsg(String s) { errmsg = s; }
\r
90 private String errmsg = "";
\r
92 /*******************************************************************************
\r
94 ******************************************************************************/
\r
96 protected void setRsvedFile(String s) { rsvedFile = s; }
\r
97 protected String getRsvedFile() { return rsvedFile; }
\r
99 private String rsvedFile = "";
\r
101 /*******************************************************************************
\r
103 ******************************************************************************/
\r
107 /*******************************************************************************
\r
109 ******************************************************************************/
\r
111 public boolean ChangeChannel(String Channel) {
\r
116 /*******************************************************************************
\r
118 ******************************************************************************/
\r
120 public boolean GetRdReserve(boolean force)
\r
122 System.out.println("Run: GetRdReserve("+force+")");
\r
127 rsvedFile = "env/reserved."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
128 String vrateTFile = "env/videorate."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
129 String arateTFile = "env/audiorate."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
130 String folderTFile = "env/folders."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
131 String encoderTFile = "env/encoders."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
132 String dvdcompatTFile = "env/dvdcompat."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
133 String deviceTFile = "env/device."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
134 String xChapterTFile = "env/xchapter."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
135 String msChapterTFile = "env/mschapter."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
136 String mvChapterTFile = "env/mvchapter."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
137 String chValueTFile = "env/chvalue."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
138 String aspectTFile = "env/aspect."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
139 String bvperfTFile = "env/bvperf."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
140 String lvoiceTFile = "env/lvoice."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
143 File f = new File(rsvedFile);
\r
144 if ( force == false && f.exists()) {
\r
145 // キャッシュから読み出し(録画設定ほか)
\r
146 vrate = TVSload(vrateTFile);
\r
147 arate = TVSload(arateTFile);
\r
148 folder = TVSload(folderTFile);
\r
149 encoder = TVSload(encoderTFile);
\r
150 dvdcompat = TVSload(dvdcompatTFile);
\r
151 device = TVSload(deviceTFile);
\r
154 xchapter = TVSload(xChapterTFile);
\r
155 mschapter = TVSload(msChapterTFile);
\r
156 mvchapter = TVSload(mvChapterTFile);
\r
159 aspect = TVSload(aspectTFile);
\r
160 bvperf = TVSload(bvperfTFile);
\r
161 lvoice = TVSload(lvoiceTFile);
\r
164 chvalue = TVSload(chValueTFile);
\r
166 // キャッシュから読み出し(予約一覧)
\r
167 setReservesV1(ReservesFromFile(rsvedFile));
\r
168 if (getReserves().size() > 0) {
\r
169 System.out.println("+read from="+rsvedFile);
\r
172 // なぜか設定ファイルが空になっている場合があるので、その際は再取得する
\r
173 if (vrate.size()>0 && arate.size()>0 &&
\r
174 folder.size()>0 && encoder.size()>0 &&
\r
175 xchapter.size()>0 && mschapter.size()>0 && mvchapter.size()>0) {
\r
181 Authenticator.setDefault(new MyAuthenticator(getUser(), getPasswd()));
\r
188 reportProgress("get reserved list(1/4).");
\r
189 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/b_prgrm.htm",null);
\r
192 ma = Pattern.compile("/program/(\\d+?)/program.htm").matcher(response);
\r
195 reportProgress("get reserved list(2/4).");
\r
196 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/program.htm",null);
\r
203 reportProgress("get reserved list(3/4).");
\r
204 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/b_proginfo.htm?0",null);
\r
207 reportProgress("get reserved list(4/4).");
\r
208 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/proginfo.htm",null);
\r
212 setSettingEtc(vrate, "\"vrate\"", 1, res, vrateTFile);
\r
215 setSettingEtc(arate, "amode", 0, res, arateTFile);
\r
218 setSettingFolder(folder, res, folderTFile);
\r
221 setSettingEncoder(encoder, res, encoderTFile);
\r
224 setSettingEtc(dvdcompat, "dvdr", 1, res, dvdcompatTFile);
\r
227 setSettingEtc(device, "disc", 0, res, deviceTFile);
\r
230 setSettingEtc(xchapter, "bAutoChapter", 0, res, xChapterTFile);
\r
232 setSettingEtc(mschapter, "bDvdAutoChapter", 0, res, msChapterTFile);
\r
234 setSettingEtc(mvchapter, "bAudioAutoChapter", 0, res, mvChapterTFile);
\r
236 // (1-8)チャンネルコードバリュー
\r
237 setSettingEtc(chvalue, "channel", 1, res, chValueTFile);
\r
240 setSettingEtc(aspect, "aspect", 0, res, aspectTFile);
\r
243 setSettingEtc(bvperf, "bVPerform", 0, res, bvperfTFile);
\r
246 setSettingEtc(lvoice, "lVoice", 0, res, lvoiceTFile);
\r
250 setReservesV1(GetRdReservedList(response));
\r
253 System.out.println("---Reserved List Start---");
\r
254 for ( int i = 0; i<getReserves().size(); i++ ) {
\r
256 ReserveList e = getReserves().get(i);
\r
257 System.out.println(String.format("[%s] %s\t%s\t%s\t%s:%s\t%s:%s\t%sm\t%s\t%s\t%s\t%s",
\r
258 (i+1), e.getId(), e.getRec_pattern(), e.getRec_nextdate(), e.getAhh(), e.getAmm(), e.getZhh(), e.getZmm(), e.getRec_min(), e.getRec_mode(), e.getTitle(), e.getChannel(), e.getCh_name()));
\r
260 System.out.println("---Reserved List End---");
\r
263 ReservesToFile(getReserves(), rsvedFile);
\r
268 /*******************************************************************************
\r
270 ******************************************************************************/
\r
272 public boolean PostRdEntry(ReserveList r)
\r
275 if (getChCode().getCH_WEB2CODE(r.getCh_name()) == null) {
\r
276 errmsg = ERRID+"【警告】Web番組表の放送局名「"+r.getCh_name()+"」をCHコードに変換できません。CHコード設定を修正してください。" ;
\r
277 System.out.println(errmsg);
\r
281 System.out.println("Run: PostRdEntry("+r.getTitle()+")");
\r
286 Authenticator.setDefault(new MyAuthenticator(getUser(), getPasswd()));
\r
293 reportProgress("get reserved list(1/5).");
\r
294 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/b_prgrm.htm",null);
\r
297 ma = Pattern.compile("/program/(\\d+?)/program.htm").matcher(response);
\r
300 reportProgress("get reserved list(2/5).");
\r
301 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/program.htm",null);
\r
306 ma = Pattern.compile("\"b_proginfo.htm\\?(\\d+?)\"").matcher(response);
\r
307 while (ma.find()) {
\r
308 lineno = Integer.valueOf(ma.group(1));
\r
315 reportProgress("get program.(3/5)");
\r
316 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/b_proginfo.htm?"+lineno,null);
\r
318 reportProgress("get program.(4/5)");
\r
319 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/proginfo.htm",null);
\r
323 Hashtable<String, String> pdat = modPostdata(r);
\r
326 String pstr = joinPoststr(pdat);
\r
330 reportProgress("send request.(5/5)");
\r
331 String[] d = reqPOST("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/entry.htm", pstr, null);
\r
335 //System.out.println("#"+response);
\r
338 ma = Pattern.compile("msg=\"(.+?)\"").matcher(response);
\r
340 errmsg = ma.group(1);
\r
341 System.out.printf("\n<<< Message from RD >>> \"%s\"\n\n", errmsg);
\r
343 ma = Pattern.compile("(正常に登録できました。|予約時間が一部重複しています。|現在のHDD残量では入りません。|画質を.*に修正しました。)").matcher(errmsg);
\r
344 if ( ! ma.find()) {
\r
353 // キャッシュ上の予約情報を更新する(ライン入力放送局名引継対応)(2.6β)
\r
354 getReserves().add(r);
\r
358 reportProgress("get identifier(6/7).");
\r
359 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/b_prgrm.htm",null);
\r
362 ma = Pattern.compile("/program/(\\d+?)/program.htm").matcher(response);
\r
365 reportProgress("get identifier(7/7).");
\r
366 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/program.htm",null);
\r
370 setReservesV1(GetRdReservedList(response));
\r
373 ReservesToFile(getReserves(), rsvedFile);
\r
375 System.out.printf("\n<<< Message from RD >>> \"%s\"\n\n", "正常に登録できました。");
\r
381 /*******************************************************************************
\r
383 ******************************************************************************/
\r
385 public boolean UpdateRdEntry(ReserveList o, ReserveList r) {
\r
387 if (getChCode().getCH_WEB2CODE(r.getCh_name()) == null) {
\r
388 errmsg = ERRID+"【警告】Web番組表の放送局名「"+r.getCh_name()+"」をCHコードに変換できません。CHコード設定を修正してください。" ;
\r
389 System.out.println(errmsg);
\r
393 System.out.println("Run: UpdateRdEntry()");
\r
398 Authenticator.setDefault(new MyAuthenticator(getUser(), getPasswd()));
\r
402 ReserveList rx = null;
\r
403 for ( ReserveList reserve : getReserves() ) {
\r
404 if (reserve.getId().equals(o.getId())) {
\r
410 errmsg = "キャッシュ上に操作対象が見つかりません。";
\r
420 reportProgress("get identifier(1/7).");
\r
421 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/b_prgrm.htm",null);
\r
424 ma = Pattern.compile("/program/(\\d+?)/program.htm").matcher(response);
\r
427 reportProgress("get identifier(2/7).");
\r
428 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/program.htm",null);
\r
434 for ( ReserveList cr : GetRdReservedList(response) ) {
\r
435 if (matchReserveV1(cr, o)) {
\r
436 System.out.println("次のエントリを: "+cr.getTitle()+"; "+cr.getChannel()+"; "+cr.getRec_pattern()+"; "+cr.getAhh()+":"+cr.getAmm());
\r
442 errmsg = ERRID+"レコーダ上に操作対象が見つかりません。";
\r
445 System.out.println("次の情報に更新します: "+r.getTitle()+"; "+r.getChannel()+"; "+r.getRec_pattern()+"; "+r.getAhh()+":"+r.getAmm());
\r
450 reportProgress("get program.(3/7)");
\r
451 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/b_proginfo.htm?"+id,null);
\r
453 reportProgress("get program.(4/7)");
\r
454 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/proginfo.htm",null);
\r
458 Hashtable<String, String> pdat = modPostdata(r);
\r
461 String pstr = joinPoststr(pdat);
\r
465 reportProgress("send request.(5/7)");
\r
466 String[] d = reqPOST("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/entry.htm", pstr, null);
\r
471 ma = Pattern.compile("msg=\"(.+?)\"").matcher(response);
\r
473 errmsg = ma.group(1);
\r
474 System.out.printf("\n<<< Message from RD >>> \"%s\"\n\n", errmsg);
\r
476 ma = Pattern.compile("(正常に登録できました。|予約時間が一部重複しています。|現在のHDD残量では入りません。|画質を.*に修正しました。)").matcher(errmsg);
\r
477 if ( ! ma.find()) {
\r
482 System.out.printf("\n<<< Message from RD >>> \"%s\"\n\n", "正常に更新できました。");
\r
487 // キャッシュ上の予約情報を更新する(ライン入力放送局名引継対応)
\r
488 getReserves().remove(o);
\r
489 getReserves().add(r);
\r
493 reportProgress("get identifier(6/7).");
\r
494 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/b_prgrm.htm",null);
\r
497 ma = Pattern.compile("/program/(\\d+?)/program.htm").matcher(response);
\r
500 reportProgress("get identifier(7/7).");
\r
501 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/program.htm",null);
\r
505 setReservesV1(GetRdReservedList(response));
\r
508 ReservesToFile(getReserves(), rsvedFile);
\r
514 /*******************************************************************************
\r
516 ******************************************************************************/
\r
518 public ReserveList RemoveRdEntry(String delid) {
\r
519 System.out.println("Run: RemoveRdEntry()");
\r
524 Authenticator.setDefault(new MyAuthenticator(getUser(), getPasswd()));
\r
527 ReserveList rx = null;
\r
528 for ( ReserveList reserve : getReserves() ) {
\r
529 if (reserve.getId().equals(delid)) {
\r
535 errmsg = ERRID+"キャッシュ上に操作対象が見つかりません。";
\r
544 reportProgress("get identifier(1/7).");
\r
545 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/b_prgrm.htm",null);
\r
548 ma = Pattern.compile("/program/(\\d+?)/program.htm").matcher(response);
\r
551 reportProgress("get identifier(2/7).");
\r
552 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/program.htm",null);
\r
558 for ( ReserveList cr : GetRdReservedList(response) ) {
\r
559 if (matchReserveV1(cr, rx)) {
\r
560 System.out.println("次のエントリを削除します: "+cr.getTitle()+"; "+cr.getChannel()+"; "+cr.getRec_pattern()+"; "+cr.getAhh()+":"+cr.getAmm());
\r
566 errmsg = ERRID+"レコーダ上に操作対象が見つかりません。";
\r
573 reportProgress("get program.(3/7)");
\r
574 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/b_proginfo.htm?"+id,null);
\r
576 reportProgress("get program.(4/7)");
\r
577 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/proginfo.htm",null);
\r
581 reportProgress("send request.(5/7)");
\r
582 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/delete.htm", null);
\r
587 ma = Pattern.compile("msg=\"(.+?)\"").matcher(response);
\r
589 errmsg = ma.group(1);
\r
590 System.out.printf("\n<<< Message from RD >>> \"%s\"\n\n", errmsg);
\r
592 ma = Pattern.compile("(正しく削除できました。)").matcher(errmsg);
\r
593 if ( ! ma.find()) {
\r
601 // キャッシュ上の予約情報を更新する(ライン入力放送局名引継対応)
\r
602 getReserves().remove(rx);
\r
606 reportProgress("get identifier(6/7).");
\r
607 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/b_prgrm.htm",null);
\r
610 ma = Pattern.compile("/program/(\\d+?)/program.htm").matcher(response);
\r
613 reportProgress("get identifier(7/7).");
\r
614 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/program/"+idx+"/program.htm",null);
\r
618 setReservesV1(GetRdReservedList(response));
\r
621 ReservesToFile(getReserves(), rsvedFile);
\r
623 System.out.printf("\n<<< Message from RD >>> \"%s\"\n\n", "正常に削除できました。");
\r
637 /*******************************************************************************
\r
639 ******************************************************************************/
\r
641 protected String joinPoststr(Hashtable<String, String> pdat)
\r
653 "enc_type", // for X5
\r
657 "folder", // for X5
\r
659 "lVoice", // for X5
\r
663 "bDvdAutoChapter", // for X5
\r
664 "bAudioAutoChapter", // for X5
\r
668 "net_link", // for X5
\r
673 for ( String key : pkeys ) {
\r
674 if (pdat.get(key) == null) {
\r
678 pstr += key+"="+pdat.get(key)+"&";
\r
681 pstr = pstr.substring(0, pstr.length()-1);
\r
686 private Hashtable<String, String> modPostdata(ReserveList r) {
\r
688 Hashtable<String, String> newdat = new Hashtable<String, String>();
\r
691 newdat.put("bExec", (r.getExec())?("ON"):("OFF"));
\r
695 newdat.put("title_name", URLEncoder.encode(r.getTitle(),thisEncoding));
\r
696 } catch (UnsupportedEncodingException e1) {
\r
697 e1.printStackTrace();
\r
702 newdat.put("detail", URLEncoder.encode(r.getDetail().replaceAll("\n", Matcher.quoteReplacement("\r\n")),thisEncoding));
\r
703 } catch (UnsupportedEncodingException e) {
\r
704 e.printStackTrace();
\r
708 newdat.put("genre", _recstr2genre(r.getRec_genre()));
\r
711 newdat.put("dvdr", text2value(dvdcompat,r.getRec_dvdcompat()));
\r
714 String channel = getChCode().getCH_WEB2CODE(r.getCh_name());
\r
715 newdat.put("channel", channel);
\r
716 String ch_no = getChCode().getCH_CODE2REC(channel);
\r
717 r.setChannel(ch_no);
\r
720 newdat.put("enc_type", text2value(encoder,r.getTuner()));
\r
723 newdat.put("vrate", text2value(vrate,r.getRec_mode()));
\r
726 newdat.put("amode", text2value(arate,r.getRec_audio()));
\r
729 Matcher ma = Pattern.compile("^\\d").matcher(r.getRec_pattern());
\r
731 newdat.put("date", r.getRec_pattern());
\r
735 for ( String s : RPTPTN ) {
\r
736 if ( s.equals(r.getRec_pattern()) == true ) {
\r
737 newdat.put("date", String.valueOf(i));
\r
744 //newdat.put("detail", r.getDetail()); // 上書きしてた…('д`)
\r
748 newdat.put("folder", URLEncoder.encode(text2value(folder,r.getRec_folder()),thisEncoding));
\r
749 } catch (UnsupportedEncodingException e) {
\r
750 e.printStackTrace();
\r
754 newdat.put("start_hour", r.getAhh());
\r
755 newdat.put("start_minute", r.getAmm());
\r
756 newdat.put("end_hour", r.getZhh());
\r
757 newdat.put("end_minute", r.getZmm());
\r
759 newdat.put("bAutoChapter" , text2value(xchapter, r.getRec_xchapter()));
\r
760 newdat.put("bDvdAutoChapter" , text2value(mschapter, r.getRec_mschapter()));
\r
761 newdat.put("bAudioAutoChapter" , text2value(mvchapter, r.getRec_mvchapter()));
\r
765 val = text2value(device, r.getRec_device());
\r
766 newdat.put("disc", (val!=null)?(val):("0"));
\r
768 val = text2value(aspect, r.getRec_aspect());
\r
769 newdat.put("aspect", (val!=null)?(val):("1"));
\r
771 val = text2value(lvoice, r.getRec_lvoice());
\r
772 newdat.put("lVoice", (val!=null)?(val):("1"));
\r
774 val = text2value(bvperf, r.getRec_bvperf());
\r
775 newdat.put("bVPerform", (val!=null)?(val):("0"));
\r
778 //newdat.put("disc" , "0");
\r
779 //newdat.put("aspect" , "1");
\r
780 //newdat.put("lVoice" , "1");
\r
781 //newdat.put("bVPerform" , "0");
\r
782 //newdat.put("bAutoChapter" , "0");
\r
783 //newdat.put("bDvdAutoChapter" , "0");
\r
784 //newdat.put("bAudioAutoChapter" , "0");
\r
785 newdat.put("dtv_sid" , "0");
\r
786 newdat.put("dtv_nid" , "0");
\r
787 newdat.put("net_link" , "0");
\r
788 newdat.put("end_form" , "0");
\r
793 private String _recstr2genre(String genre)
\r
795 if (genre.equals(TVProgram.ProgGenre.MOVIE.toString())) {
\r
798 else if (genre.equals(TVProgram.ProgGenre.MUSIC.toString())) {
\r
801 else if (genre.equals(TVProgram.ProgGenre.DORAMA.toString())) {
\r
804 else if (genre.equals(TVProgram.ProgGenre.ANIME.toString())) {
\r
807 else if (genre.equals(TVProgram.ProgGenre.SPORTS.toString())) {
\r
810 else if (genre.equals(TVProgram.ProgGenre.DOCUMENTARY.toString())) {
\r
813 else if (genre.equals(TVProgram.ProgGenre.THEATER.toString())) {
\r
816 else if (genre.equals(TVProgram.ProgGenre.HOBBY.toString())) {
\r
819 else if (genre.equals(TVProgram.ProgGenre.VARIETY.toString())) {
\r
830 protected ArrayList<ReserveList> GetRdReservedList(String response) {
\r
832 System.out.println("X5's GetRdReservedList()");
\r
835 response = response.replaceAll("\n", "");
\r
837 ArrayList<ReserveList> newReserveList = new ArrayList<ReserveList>();
\r
840 Matcher ma = Pattern.compile("<tr [^>]*?>([\\s\\S]*?)</tr>").matcher(response);
\r
841 while (ma.find()) {
\r
846 ReserveList entry = new ReserveList();
\r
848 String[] d = new String[10];
\r
849 Matcher mb = Pattern.compile("<td.*?>(.*?)</td>").matcher(buf);
\r
850 for (int i=0; i<d.length; i++) {
\r
852 d[i] = mb.group(1);
\r
854 //System.out.println(i+") "+d[i]);
\r
857 Matcher mc = Pattern.compile(">新規予約<").matcher(buf);
\r
863 entry.setId(String.valueOf(Integer.valueOf(d[0])-1));
\r
866 mb = Pattern.compile("check_off\\.gif").matcher(d[1]);
\r
868 entry.setExec(false);
\r
872 String title = CommonUtils.unEscape(d[2]).replaceAll("<[bB][rR]>","");
\r
873 mb = Pattern.compile("<[aA] .*?>(.+?)</[aA]>").matcher(title);
\r
874 if (mb.find()) title = mb.group(1);
\r
875 entry.setTitle(title);
\r
876 entry.setTitlePop(TraceProgram.replacePop(title));
\r
879 mb = Pattern.compile("act_(.+?)\\.gif").matcher(d[3]);
\r
881 entry.setTuner(mb.group(1));
\r
884 entry.setTuner("R1");
\r
888 entry.setRec_pattern(d[5]);
\r
889 entry.setRec_pattern_id(getRec_pattern_Id(entry.getRec_pattern()));
\r
890 mb = Pattern.compile("(\\d\\d):(\\d\\d).*?(\\d\\d):(\\d\\d)").matcher(d[6]);
\r
892 entry.setAhh(mb.group(1));
\r
893 entry.setAmm(mb.group(2));
\r
894 entry.setZhh(mb.group(3));
\r
895 entry.setZmm(mb.group(4));
\r
897 entry.setRec_nextdate(CommonUtils.getNextDate(entry));
\r
898 entry.setRec_min(CommonUtils.getRecMin(entry.getAhh(), entry.getAmm(), entry.getZhh(), entry.getZmm()));
\r
899 getStartEndDateTime(entry);
\r
901 entry.setChannel(d[4]);
\r
902 entry.setCh_name(getChCode().getCH_REC2WEB(d[4]));
\r
904 entry.setRec_mode(d[8]);
\r
905 entry.setRec_audio(d[9]);
\r
907 //entry.rec_folder = data.get(); // 予約一覧からはとれない
\r
908 //entry.rec_genre = data.get(); // 予約一覧からはとれない
\r
911 newReserveList.add(entry);
\r
914 return(newReserveList);
\r
923 protected boolean setSettingFolder(ArrayList<TextValueSet> tvs, String res, String savefile) {
\r
924 ArrayList<TextValueSet> newtvs = new ArrayList<TextValueSet>();
\r
925 Matcher mb = Pattern.compile("obj\\.folder\\[n\\]\\.text=\"(.+?)\";\\s*?obj\\.folder\\[n\\]\\.value=\"(.+?)\";").matcher(res);
\r
926 while (mb.find()) {
\r
927 boolean dub = false;
\r
928 for ( TextValueSet t : newtvs ) {
\r
929 if (t.getText().equals(mb.group(1))) {
\r
934 if (dub == false) {
\r
935 TextValueSet t = new TextValueSet();
\r
936 t.setText(mb.group(1));
\r
937 t.setValue(mb.group(2));
\r
942 if ( newtvs.size() == 0 ) {
\r
943 errmsg = ERRID+"レコーダ設定情報が取得できなかった: "+"folder";
\r
944 System.err.println(errmsg);
\r
949 for ( TextValueSet t : newtvs ) {
\r
952 TVSsave(tvs,savefile);
\r
956 private boolean setSettingEncoder(ArrayList<TextValueSet> tvs, String res, String savefile) {
\r
957 ArrayList<TextValueSet> newtvs = new ArrayList<TextValueSet>();
\r
958 Matcher mb = Pattern.compile("<input type=\"radio\" [^>]*? name=enc_type value=\"(.+?)\".*?><img src=\"/img/parts/toru_(.+?)\\.gif\">").matcher(res);
\r
959 while (mb.find()) {
\r
960 TextValueSet t = new TextValueSet();
\r
961 t.setText(mb.group(2));
\r
962 t.setValue(mb.group(1));
\r
966 if (newtvs.size() == 0) {
\r
967 errmsg = ERRID+"レコーダ設定情報が取得できなかった: "+"enc_type";
\r
968 System.err.println(errmsg);
\r
973 for ( TextValueSet t : newtvs ) {
\r
976 TVSsave(tvs,savefile);
\r
980 protected boolean setSettingEtc(ArrayList<TextValueSet> tvs, String key, int typ, String res, String savefile) {
\r
981 ArrayList<TextValueSet> newtvs = new ArrayList<TextValueSet>();
\r
982 String valExpr = "(\\d+)";
\r
984 valExpr = "\"(.+?)\"";
\r
986 Matcher mb = Pattern.compile("<(SELECT|select)[^>]+?name="+key+"[^.]*?>([\\s\\S]+?)</(SELECT|select)>").matcher(res);
\r
988 Matcher mc = Pattern.compile("<(OPTION|option)\\s+(VALUE|value)\\s*=\\s*"+valExpr+"\\s*( selected)?>\\s*(.+?)\\s*</(OPTION|option)>").matcher(mb.group(2));
\r
989 while (mc.find()) {
\r
990 TextValueSet t = new TextValueSet();
\r
991 if (key.equals("\"vrate\"")) {
\r
992 t.setText(mc.group(5).replaceAll(" ", ""));
\r
994 else if (key.equals("channel")) {
\r
995 t.setText(mc.group(5).replaceAll("^CH ", "CH"));
\r
998 t.setText(mc.group(5));
\r
1000 t.setValue(mc.group(3));
\r
1001 if (mc.group(4) != null) {
\r
1002 t.setDefval(true);
\r
1008 if ( newtvs.size() == 0 ) {
\r
1009 errmsg = ERRID+"レコーダ設定情報が取得できなかった: "+key;
\r
1010 System.err.println(errmsg);
\r
1015 for ( TextValueSet t : newtvs ) {
\r
1018 TVSsave(tvs,savefile);
\r