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
16 public class PlugIn_RecRD_E300 extends HDDRecorderUtils implements HDDRecorder,Cloneable {
\r
18 public PlugIn_RecRD_E300 clone() {
\r
19 return (PlugIn_RecRD_E300) super.clone();
\r
22 private static final String thisEncoding = "MS932";
\r
27 public String getRecorderId() { return "VARDIA RD-E300"; }
\r
28 public RecType getType() { return RecType.RECORDER; }
\r
31 private GetRDStatus gs = new GetRDStatus();
\r
32 private ChannelCode cc = new ChannelCode(getRecorderId());
\r
33 private String rsvedFile = "";
\r
35 private String errmsg = "";
\r
42 public ChannelCode getChCode() {
\r
49 public boolean ChangeChannel(String Channel) {
\r
51 if (Channel == null) {
\r
67 for (int i=0; i<3 && (ch = gs.getCurChannel(getIPAddr())) == null; i++) {
\r
68 CommonUtils.milSleep(500);
\r
71 errmsg = "レコーダへのアクセスに失敗しました(チャンネルリモコン)。";
\r
72 System.err.println(errmsg);
\r
76 byte[] ba = ch.getBytes();
\r
78 ch = ch.substring(1,5);
\r
80 if (ch.matches("^\\d.+")) {
\r
83 else if (ch.startsWith("BS")) {
\r
86 else if (ch.startsWith("CS")) {
\r
90 errmsg = "現在のチャンネルが認識できません("+ch+")。";
\r
91 System.err.println(errmsg);
\r
101 String cd = cc.getCH_WEB2CODE(Channel);
\r
102 String ch = cc.getCH_CODE2REC(cd);
\r
103 String typ = text2value(chtype, cd);
\r
105 errmsg = "鯛ナビに情報が同期されていないチャンネルです("+Channel+", "+ch+")。";
\r
106 System.err.println(errmsg);
\r
109 else if (typ.matches("^l[123]$")) {
\r
110 errmsg = "外部入力にアサインされているチャンネルには変更できません("+Channel+", "+ch+", "+typ+")。";
\r
111 System.err.println(errmsg);
\r
114 else if (typ.equals("uvd")) {
\r
117 else if (typ.equals("bsd")) {
\r
120 else if (typ.equals("csd")) {
\r
124 errmsg = "放送種別が識別できません。プログラム異常です("+Channel+", "+ch+")。";
\r
125 System.err.println(errmsg);
\r
130 Matcher ma = Pattern.compile("(\\d\\d\\d)").matcher(ch);
\r
132 chNo = ma.group(1);
\r
135 errmsg = "CH番号が取得できません("+Channel+", "+ch+")。";
\r
136 System.err.println(errmsg);
\r
146 Authenticator.setDefault(new MyAuthenticator(getUser(), getPasswd()));
\r
149 for (int i=0; i<4 && newBC != (cBC = (curBC+i)%4); i++) {
\r
150 // 地上アナログ(3)が選択できるのはRE(0x06)だけ
\r
151 if (enc != 0x06 && cBC == 3) {
\r
156 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/remote/remote.htm?key=21", null);
\r
158 // 地上波→BS・BS→CSは切り替え完了までに時間がかかる
\r
159 CommonUtils.milSleep((cBC == 0 || cBC == 1)?(3000):(1000));
\r
162 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/remote/remote.htm?key=25", null);
\r
163 CommonUtils.milSleep(1000);
\r
164 for (int i=0; i<3; i++) {
\r
165 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/remote/remote.htm?key=0"+chNo.substring(i,i+1), null);
\r
166 CommonUtils.milSleep(200);
\r
168 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/remote/remote.htm?key=44", null);
\r
174 * レコーダーから予約一覧を取得する
\r
176 public boolean GetRdReserve(boolean force)
\r
178 System.out.println("Run: GetRdReserve("+force+")");
\r
183 rsvedFile = "env/reserved."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
184 String vrateTFile = "env/videorate."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
185 String arateTFile = "env/audiorate."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
186 String folderTFile = "env/folders."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
187 String encoderTFile = "env/encoders."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
188 String dvdcompatTFile = "env/dvdcompat."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
189 String deviceTFile = "env/device."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
190 String xChapterTFile = "env/xchapter."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
191 String msChapterTFile = "env/mschapter."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
192 String mvChapterTFile = "env/mvchapter."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
193 String chValueTFile = "env/chvalue."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
194 String chTypeTFile = "env/chtype."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml";
\r
196 File f = new File(rsvedFile);
\r
197 if ( force == false && f.exists()) {
\r
198 // キャッシュから読み出し(録画設定ほか)
\r
199 vrate = TVSload(vrateTFile);
\r
200 arate = TVSload(arateTFile);
\r
201 folder = TVSload(folderTFile);
\r
202 encoder = TVSload(encoderTFile);
\r
203 dvdcompat = TVSload(dvdcompatTFile);
\r
204 device = TVSload(deviceTFile);
\r
205 xchapter = TVSload(xChapterTFile);
\r
206 mschapter = TVSload(msChapterTFile);
\r
207 mvchapter = TVSload(mvChapterTFile);
\r
208 chvalue = TVSload(chValueTFile);
\r
209 chtype = TVSload(chTypeTFile);
\r
211 // キャッシュから読み出し(予約一覧)
\r
212 setReserves(ReservesFromFile(rsvedFile));
\r
214 // なぜか設定ファイルが空になっている場合があるので、その際は再取得する
\r
215 if (vrate.size()>0 && arate.size()>0 &&
\r
216 folder.size()>0 && encoder.size()>0 && device.size()>0 &&
\r
217 xchapter.size()>0 && mschapter.size()>0 && mvchapter.size()>0 &&
\r
218 chvalue.size()>0 && chtype.size()>0) {
\r
224 Authenticator.setDefault(new MyAuthenticator(getUser(), getPasswd()));
\r
230 String response="";
\r
232 reportProgress("get reserved list(1/4).");
\r
233 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/b_rsv.htm",null);
\r
237 if (response == null) {
\r
238 errmsg = "レコーダーが反応しません";
\r
242 ma = Pattern.compile("/reserve/(\\d+?)/reserve.htm").matcher(response);
\r
245 reportProgress("get reserved list(2/4).");
\r
246 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/"+idx+"/reserve.htm",null);
\r
250 if (response == null) {
\r
251 errmsg = "レコーダーが反応しません";
\r
258 ma = Pattern.compile("RsvCnt\\s*=\\s*(\\d+?);").matcher(response);
\r
259 if ( ! ma.find()) {
\r
260 errmsg = "レコーダーからの情報取得に失敗しました(予約一覧)";
\r
263 RsvCnt = Integer.valueOf(ma.group(1));
\r
268 reportProgress("get reserved list(3/4).");
\r
269 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/"+idx+"/b_rsvinfo.htm?0&"+(RsvCnt+1),null);
\r
272 reportProgress("get reserved list(4/4).");
\r
273 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/"+idx+"/rsvinfo.htm",null);
\r
279 if ( ! res.matches("[\\s\\S]*var hdd_folder_text[\\s\\S]*")) {
\r
280 errmsg = "レコーダーからの情報取得に失敗しました(録画設定)";
\r
285 setSettingEtc(vrate,"vrate",1,res);
\r
286 TVSsave(vrate, vrateTFile);
\r
289 setSettingEtc(arate,"amode",0,res);
\r
290 TVSsave(arate, arateTFile);
\r
293 setSettingEtc(folder,"hdd_folder",1,res);
\r
294 TVSsave(folder, folderTFile);
\r
299 mb = Pattern.compile("var double_encode_flg = (\\d+?);").matcher(res);
\r
301 Matcher mc = Pattern.compile("\\n\\s*?switch \\( double_encode_flg \\) \\{([\\s\\S]+?default:)").matcher(res);
\r
303 Matcher md = Pattern.compile("(case "+mb.group(1)+":[\\s\\S]+?break;)").matcher(mc.group(1));
\r
305 Matcher me = Pattern.compile("name=enc_type value=.\"(\\d+?).\"[\\s\\S]+?act_(.+?)\\.gif").matcher(md.group(1));
\r
306 while (me.find()) {
\r
307 TextValueSet t = new TextValueSet();
\r
308 t.setText(me.group(2));
\r
309 t.setValue(me.group(1));
\r
316 TVSsave(encoder, encoderTFile);
\r
319 setSettingEtc(dvdcompat,"dvdr",1,res);
\r
320 TVSsave(dvdcompat, dvdcompatTFile);
\r
323 setSettingEtc(device,"media",0,res);
\r
324 TVSsave(device, deviceTFile);
\r
327 setSettingEtc(xchapter,"mutechapter",0,res);
\r
328 TVSsave(xchapter, xChapterTFile);
\r
330 setSettingEtc(mschapter,"magicchapter",0,res);
\r
331 TVSsave(mschapter, msChapterTFile);
\r
333 setSettingEtc(mvchapter,"cmchapter",0,res);
\r
334 TVSsave(mvchapter, mvChapterTFile);
\r
336 // (1-8)チャンネルコードバリュー
\r
339 for ( String typ : new String[] { "uvd","bsd","csd","uva","bsa","l1","l2","l3" } ) {
\r
340 String txtkey = typ+"_ch_text";
\r
341 String valkey = typ+"_ch_value";
\r
342 Matcher mc = Pattern.compile("var "+txtkey+"\\s*= new Array\\(([\\s\\S]+?)\\);").matcher(res);
\r
343 Matcher md = Pattern.compile("var "+valkey+"\\s*= new Array\\(([\\s\\S]+?)\\);").matcher(res);
\r
344 if ( mc.find() && md.find() ) {
\r
345 Matcher me = Pattern.compile("\"(.+?)\",?").matcher(mc.group(1));
\r
347 if ( typ.equals("uva") ) {
\r
348 mf = Pattern.compile("(\\d+),").matcher(md.group(1));
\r
351 mf = Pattern.compile("\"([^\"]+?)\",").matcher(md.group(1));
\r
353 while ( me.find() && mf.find() ) {
\r
354 TextValueSet t = new TextValueSet();
\r
355 t.setText(me.group(1));
\r
356 t.setValue(mf.group(1));
\r
359 TextValueSet x = new TextValueSet();
\r
360 x.setText(mf.group(1));
\r
366 TVSsave(chvalue, chValueTFile);
\r
367 TVSsave(chtype, chTypeTFile);
\r
373 var c1 = new Array(RsvCnt); // 予約ID
\r
374 var c2 = new Array(RsvCnt); // 実行フラグ
\r
375 var c3 = new Array(RsvCnt); // 予約名
\r
376 var c4 = new Array(RsvCnt); // REC1/REC2
\r
377 var c5 = new Array(RsvCnt); // 表示CH
\r
378 var c6 = new Array(RsvCnt); // 録画日付
\r
379 var c7 = new Array(RsvCnt); // 録画開始時刻
\r
380 var c8 = new Array(RsvCnt); // 録画終了時刻
\r
381 var c9 = new Array(RsvCnt); // 記録先
\r
382 var c10 = new Array(RsvCnt); // 画質
\r
383 var c11 = new Array(RsvCnt); // 音質
\r
384 var c12 = new Array(RsvCnt); // 録画開始時刻の文字色
\r
385 var c13 = new Array(RsvCnt); // 録画終了時刻の文字色
\r
386 var c14 = new Array(RsvCnt); // おすすめ
\r
387 var c15 = new Array(RsvCnt); // 番組追っかけ
\r
388 var c16 = new Array(RsvCnt); // スポーツ延長
\r
389 var c17 = new Array(RsvCnt); // 優先度
\r
393 ArrayList<ReserveList> newReserveList = new ArrayList<ReserveList>();
\r
395 ma = Pattern.compile("(c1\\[\\d+?\\]=[\\s\\S]+?\";)\\n").matcher(response);
\r
396 while ( ma.find() ) {
\r
398 ReserveList entry = new ReserveList();
\r
402 String[] d = new String[17];
\r
403 mb = Pattern.compile("c\\d+?\\[\\d+?\\]=\"(.*?)\";").matcher(ma.group(1));
\r
404 for (int i=0; i<d.length; i++) {
\r
406 d[i] = mb.group(1);
\r
414 if ( ! d[1].equals("1")) {
\r
415 entry.setExec(false);
\r
419 entry.setTitle(CommonUtils.unEscape(d[2]).replaceAll("<BR>", ""));
\r
420 entry.setTitlePop(TraceProgram.replacePop(entry.getTitle()));
\r
423 entry.setTuner(value2text(encoder, d[3]));
\r
426 entry.setChannel(d[4]);
\r
427 entry.setCh_name(cc.getCH_REC2WEB(d[4]));
\r
430 entry.setRec_pattern(d[5]);
\r
431 entry.setRec_pattern_id(getRec_pattern_Id(entry.getRec_pattern()));
\r
432 mb = Pattern.compile("(\\d\\d):(\\d\\d).*?(\\d\\d):(\\d\\d)").matcher(d[6]+"-"+d[7]);
\r
434 entry.setAhh(mb.group(1));
\r
435 entry.setAmm(mb.group(2));
\r
436 entry.setZhh(mb.group(3));
\r
437 entry.setZmm(mb.group(4));
\r
439 entry.setRec_nextdate(CommonUtils.getNextDate(entry));
\r
440 entry.setRec_min(CommonUtils.getRecMin(entry.getAhh(), entry.getAmm(), entry.getZhh(), entry.getZmm()));
\r
441 getStartEndDateTime(entry);
\r
444 entry.setRec_device(d[8]);
\r
447 entry.setRec_mode(d[9]);
\r
448 entry.setRec_audio(d[10]);
\r
450 // タイトル自動補完フラグなど本体からは取得できない情報を引き継ぐ
\r
451 copyAttributes(entry, getReserves());
\r
454 newReserveList.add(entry.clone());
\r
456 setReserves(newReserveList);
\r
460 System.out.println("---Reserved List Start---");
\r
461 for ( int i = 0; i<getReserves().size(); i++ ) {
\r
463 ReserveList e = getReserves().get(i);
\r
464 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
465 (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
467 System.out.println("---Reserved List End---");
\r
470 ReservesToFile(getReserves(), rsvedFile);
\r
478 public boolean PostRdEntry(ReserveList r)
\r
481 if (cc.getCH_WEB2CODE(r.getCh_name()) == null) {
\r
482 errmsg = "【警告】Web番組表の放送局名「"+r.getCh_name()+"」をCHコードに変換できません。CHコード設定を修正してください。" ;
\r
483 System.out.println(errmsg);
\r
487 System.out.println("Run: PostRdEntry("+r.getTitle()+")");
\r
492 Authenticator.setDefault(new MyAuthenticator(getUser(), getPasswd()));
\r
500 reportProgress("get reserved list(1/7).");
\r
501 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/b_rsv.htm",null);
\r
505 if ( response == null ) {
\r
506 errmsg = "レコーダーが反応しません。";
\r
510 ma = Pattern.compile("/reserve/(\\d+?)/reserve.htm").matcher(response);
\r
512 reportProgress("get reserved list(2/7).");
\r
514 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/"+idx+"/reserve.htm",null);
\r
518 if ( response == null ) {
\r
519 errmsg = "レコーダーが反応しません。";
\r
526 ma = Pattern.compile("RsvCnt\\s*=\\s*(\\d+?);").matcher(response);
\r
528 RsvCnt = Integer.valueOf(ma.group(1));
\r
534 reportProgress("get program(3/7).");
\r
535 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/"+idx+"/b_rsvinfo.htm?0&"+(RsvCnt+1),null);
\r
537 reportProgress("get program(4/7).");
\r
538 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/"+idx+"/rsvinfo.htm",null);
\r
542 Hashtable<String, String> pdat = modPostdata(r);
\r
545 String pstr = joinPoststr(pdat);
\r
549 reportProgress("send request.(5/7)");
\r
550 String[] d = reqPOST("http://"+getIPAddr()+":"+getPortNo()+"/reserve/"+idx+"/entry.htm", pstr, null);
\r
556 ma = Pattern.compile("alert\\(msg\\)").matcher(response);
\r
558 Matcher mb = Pattern.compile("\\bmsg=\"([\\s\\S]+?)\";").matcher(response);
\r
560 errmsg = mb.group(1);
\r
561 System.out.printf("\n<<< Message from RD >>> \"%s\"\n\n", errmsg);
\r
562 Matcher mc = Pattern.compile("(予約時間が重複しています。|修正しました。)").matcher(errmsg);
\r
563 if ( ! mc.find() ) {
\r
575 // 予約ID番号を取得(キャッシュに存在しない番号が新番号)
\r
577 reportProgress("get identifier(6/7).");
\r
578 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/b_rsv.htm",null);
\r
582 ma = Pattern.compile("/reserve/(\\d+?)/reserve.htm").matcher(response);
\r
585 reportProgress("get identifier(7/7).");
\r
586 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/"+idx+"/reserve.htm",null);
\r
590 r.setId(getNewId(response));
\r
593 r.setRec_pattern_id(getRec_pattern_Id(r.getRec_pattern()));
\r
596 r.setRec_nextdate(CommonUtils.getNextDate(r));
\r
597 //r.setRec_nextdate(getNextDate(r.getRec_pattern(), r.getZhh()+":"+r.getZmm()));
\r
600 r.setRec_min(CommonUtils.getRecMin(r.getAhh(),r.getAmm(),r.getZhh(),r.getZmm()));
\r
603 getStartEndDateTime(r);
\r
606 getReserves().add(r);
\r
609 ReservesToFile(getReserves(), rsvedFile);
\r
611 System.out.printf("\n<<< Message from RD >>> \"%s\"\n\n", "正常に登録できました。");
\r
619 public boolean UpdateRdEntry(ReserveList o, ReserveList r) {
\r
621 if (cc.getCH_WEB2CODE(r.getCh_name()) == null) {
\r
622 errmsg = "【警告】Web番組表の放送局名「"+r.getCh_name()+"」をCHコードに変換できません。CHコード設定を修正してください。" ;
\r
623 System.out.println(errmsg);
\r
627 System.out.println("Run: UpdateRdEntry()");
\r
632 Authenticator.setDefault(new MyAuthenticator(getUser(), getPasswd()));
\r
641 reportProgress("get identifier(1/5).");
\r
642 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/b_rsv.htm",null);
\r
646 ma = Pattern.compile("/reserve/(\\d+?)/reserve.htm").matcher(response);
\r
649 reportProgress("get identifier(2/5).");
\r
650 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/"+idx+"/reserve.htm",null);
\r
654 ma = Pattern.compile("c1\\[(\\d+?)\\]=\""+r.getId()+"\";").matcher(response);
\r
656 lineno = Integer.valueOf(ma.group(1))+1;
\r
662 reportProgress("get program(3/5).");
\r
663 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/"+idx+"/b_rsvinfo.htm?"+r.getId()+"&"+lineno,null);
\r
665 reportProgress("get program(4/5).");
\r
666 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/"+idx+"/rsvinfo.htm",null);
\r
670 Hashtable<String, String> pdat = modPostdata(r);
\r
673 String pstr = joinPoststr(pdat);
\r
677 reportProgress("send request.(5/5)");
\r
678 String[] d = reqPOST("http://"+getIPAddr()+":"+getPortNo()+"/reserve/"+idx+"/entry.htm", pstr, null);
\r
684 ma = Pattern.compile("alert\\(msg\\)").matcher(response);
\r
686 Matcher mb = Pattern.compile("\\bmsg=\"([\\s\\S]+?)\";").matcher(response);
\r
688 errmsg = mb.group(1);
\r
689 System.out.printf("\n<<< Message from RD >>> \"%s\"\n\n", errmsg);
\r
690 Matcher mc = Pattern.compile("(予約時間が重複しています。|修正しました。)").matcher(errmsg);
\r
691 if ( ! mc.find() ) {
\r
697 System.out.printf("\n<<< Message from RD >>> \"%s\"\n\n", "正常に更新できました。");
\r
704 r.setRec_pattern_id(getRec_pattern_Id(r.getRec_pattern()));
\r
707 r.setRec_nextdate(CommonUtils.getNextDate(r));
\r
708 //r.setRec_nextdate(getNextDate(r.getRec_pattern(), r.getZhh()+":"+r.getZmm()));
\r
711 r.setRec_min(CommonUtils.getRecMin(r.getAhh(),r.getAmm(),r.getZhh(),r.getZmm()));
\r
714 getStartEndDateTime(r);
\r
717 getReserves().remove(o);
\r
718 getReserves().add(r);
\r
721 ReservesToFile(getReserves(), rsvedFile);
\r
729 public ReserveList RemoveRdEntry(String delid) {
\r
730 System.out.println("Run: RemoveRdEntry()");
\r
735 Authenticator.setDefault(new MyAuthenticator(getUser(), getPasswd()));
\r
738 ReserveList rx = null;
\r
739 for ( ReserveList reserve : getReserves() ) {
\r
740 if (reserve.getId().equals(delid)) {
\r
756 reportProgress("get identifier(1/5).");
\r
757 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/b_rsv.htm",null);
\r
761 ma = Pattern.compile("/reserve/(\\d+?)/reserve.htm").matcher(response);
\r
764 reportProgress("get identifier(2/5).");
\r
765 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/"+idx+"/reserve.htm",null);
\r
769 ma = Pattern.compile("c1\\[(\\d+?)\\]=\""+rx.getId()+"\";").matcher(response);
\r
771 lineno = Integer.valueOf(ma.group(1))+1;
\r
777 reportProgress("get program(3/5).");
\r
778 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/"+idx+"/b_rsvinfo.htm?"+rx.getId()+"&"+lineno,null);
\r
780 reportProgress("get program(4/5).");
\r
781 reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/"+idx+"/rsvinfo.htm",null);
\r
784 reportProgress("send request.(5/5)");
\r
785 String[] d = reqGET("http://"+getIPAddr()+":"+getPortNo()+"/reserve/"+idx+"/delete.htm", null);
\r
791 ma = Pattern.compile("alert\\(msg\\)").matcher(response);
\r
793 Matcher mb = Pattern.compile("\\bmsg=\"([\\s\\S]+?)\";").matcher(response);
\r
795 errmsg = mb.group(1);
\r
796 System.out.printf("\n<<< Message from RD >>> \"%s\"\n\n", errmsg);
\r
802 getReserves().remove(rx);
\r
805 ReservesToFile(getReserves(), rsvedFile);
\r
807 System.out.printf("\n<<< Message from RD >>> \"%s\"\n\n", "正常に削除できました。");
\r
814 public String getErrmsg() {
\r
815 return(errmsg.replaceAll("\\\\r\\\\n", ""));
\r
826 /* 個別コード-ここから最後まで */
\r
832 private String joinPoststr(Hashtable<String, String> pdat)
\r
870 "sport_ext_submit",
\r
871 "title_link_submit",
\r
876 for ( String key : pkeys ) {
\r
877 if (pdat.containsKey(key)) {
\r
878 pstr += key+"="+pdat.get(key)+"&";
\r
881 pstr = pstr.substring(0, pstr.length()-1);
\r
886 private Hashtable<String, String> modPostdata(ReserveList r) {
\r
888 Hashtable<String, String> newdat = new Hashtable<String, String>();
\r
891 newdat.put("bExec", (r.getExec())?("ON"):("OFF"));
\r
892 if (r.getUpdateOnlyExec()) {
\r
897 if ( r.getAutocomplete() ) {
\r
898 newdat.put("title_name", "");
\r
899 newdat.put("detail", "");
\r
903 newdat.put("title_name", URLEncoder.encode(r.getTitle(),thisEncoding));
\r
904 } catch (UnsupportedEncodingException e1) {
\r
905 e1.printStackTrace();
\r
910 newdat.put("detail", URLEncoder.encode(r.getDetail().replaceAll("\n", Matcher.quoteReplacement("\r\n")), thisEncoding));
\r
911 } catch (UnsupportedEncodingException e) {
\r
912 e.printStackTrace();
\r
918 newdat.put("folder", URLEncoder.encode(text2value(folder, r.getRec_folder()),thisEncoding));
\r
919 } catch (UnsupportedEncodingException e) {
\r
920 e.printStackTrace();
\r
924 newdat.put("genre", _recstr2genre(r.getRec_genre()));
\r
927 newdat.put("dvdr", text2value(dvdcompat, r.getRec_dvdcompat()));
\r
930 String channel = cc.getCH_WEB2CODE(r.getCh_name());
\r
931 String ch_no = cc.getCH_CODE2REC(channel);
\r
932 if (chtype.size() > 0) {
\r
933 String typ = text2value(chtype, channel);
\r
934 if (typ.equals("uva")) {
\r
935 newdat.put("broadcast","0"); // 地上アナログ
\r
937 else if (typ.equals("bsa")) {
\r
938 newdat.put("broadcast","1"); // BSアナログ
\r
940 else if (typ.equals("l1")) {
\r
941 newdat.put("broadcast","2"); // 外部入力(L1)
\r
943 else if (typ.equals("l2")) {
\r
944 newdat.put("broadcast","3"); // 外部入力(L2)
\r
946 else if (typ.equals("l3")) {
\r
947 newdat.put("broadcast","4"); // 外部入力(L3)
\r
949 else if (typ.equals("bsd")) {
\r
950 newdat.put("broadcast","10"); // BSデジタル
\r
952 else if (typ.equals("csd")) {
\r
953 newdat.put("broadcast","11"); // 110度CSデジタル
\r
955 else if (typ.equals("uvd")) {
\r
956 newdat.put("broadcast","12"); // 地上デジタル
\r
960 if (ch_no.startsWith("C")) {
\r
961 newdat.put("broadcast","2"); // "C***"は外部入力(L1)
\r
963 else if (ch_no.startsWith("SP")) {
\r
964 newdat.put("broadcast","4"); // "SP***"は外部入力(L3)
\r
967 newdat.put("broadcast","3"); // 未定義は全部外部入力(L2)
\r
971 newdat.put("channel_list", channel);
\r
972 newdat.put("channel_no", channel);
\r
976 Matcher ma = Pattern.compile("^(.)(.)").matcher(ch_no);
\r
978 if ((ma.group(1)+ma.group(2)).equals("CH")) {
\r
979 newdat.put("broadcast","0"); // 地上アナログ
\r
981 else if ((ma.group(1)+ma.group(2)).equals("BS")) {
\r
982 newdat.put("broadcast","10"); // BSデジタル
\r
984 else if ((ma.group(1)+ma.group(2)).equals("CS")) {
\r
985 newdat.put("broadcast","11"); // 110度CSデジタル
\r
987 else if (ma.group(1).equals("L")) {
\r
988 newdat.put("broadcast", String.valueOf(Integer.valueOf(ma.group(2))+1)); // ライン入力ABC
\r
991 newdat.put("broadcast","12"); // 地上デジタル
\r
994 newdat.put("channel_list", channel);
\r
995 newdat.put("channel_no", channel);
\r
1000 newdat.put("enc_type", text2value(encoder, r.getTuner()));
\r
1001 newdat.put("vrate", text2value(vrate, r.getRec_mode()));
\r
1004 newdat.put("amode", text2value(arate, r.getRec_audio()));
\r
1007 if (r.getTuner().equals("TS")) {
\r
1008 r.setRec_mode("TS");
\r
1009 r.setRec_audio("");
\r
1013 Matcher ma = Pattern.compile("^\\d").matcher(r.getRec_pattern());
\r
1015 newdat.put("maiyoubi_type","0");
\r
1016 newdat.put("date", r.getRec_pattern());
\r
1019 newdat.put("maiyoubi_type", "1");
\r
1021 for ( String s : RPTPTN ) {
\r
1022 if ( s.equals(r.getRec_pattern()) == true ) {
\r
1023 newdat.put("date", String.valueOf(i));
\r
1030 newdat.put("start_hour", r.getAhh());
\r
1031 newdat.put("start_minute", r.getAmm());
\r
1032 newdat.put("end_hour", r.getZhh());
\r
1033 newdat.put("end_minute", r.getZmm());
\r
1036 newdat.put("disc", text2value(device, r.getRec_device()));
\r
1039 newdat.put("bAutoChapter" , text2value(xchapter, r.getRec_xchapter()));
\r
1040 newdat.put("MagicChapter" , text2value(mschapter, r.getRec_mschapter()));
\r
1041 newdat.put("CM_Chapter" , text2value(mvchapter, r.getRec_mvchapter()));
\r
1044 newdat.put("start_form" , "");
\r
1045 newdat.put("rec_priority" , "150");
\r
1046 newdat.put("title_link" , "0");
\r
1047 newdat.put("auto_delete" , "0");
\r
1048 newdat.put("video_es" , "00");
\r
1049 newdat.put("audio_es" , "10");
\r
1050 newdat.put("edge_left" , "0"); // 録画のりしろ
\r
1051 //newdat.put("bAutoChapter" , "0");
\r
1052 //newdat.put("MagicChapter" , "0");
\r
1053 //newdat.put("CM_Chapter" , "0");
\r
1054 newdat.put("add_ch_text" , "");
\r
1055 newdat.put("add_ch_value" , "");
\r
1056 //newdat.put("sport_ext_submit" , "undefined");
\r
1057 //newdat.put("title_link_submit" , "undefined");
\r
1058 newdat.put("end_form" , "0");
\r
1063 private String _recstr2genre(String genre)
\r
1065 if (genre.equals(TVProgram.ProgGenre.MOVIE.toString())) {
\r
1068 else if (genre.equals(TVProgram.ProgGenre.MUSIC.toString())) {
\r
1071 else if (genre.equals(TVProgram.ProgGenre.DORAMA.toString())) {
\r
1074 else if (genre.equals(TVProgram.ProgGenre.ANIME.toString())) {
\r
1077 else if (genre.equals(TVProgram.ProgGenre.SPORTS.toString())) {
\r
1080 else if (genre.equals(TVProgram.ProgGenre.DOCUMENTARY.toString())) {
\r
1083 else if (genre.equals(TVProgram.ProgGenre.THEATER.toString())) {
\r
1086 else if (genre.equals(TVProgram.ProgGenre.HOBBY.toString())) {
\r
1089 else if (genre.equals(TVProgram.ProgGenre.VARIETY.toString())) {
\r
1097 private void setSettingEtc(ArrayList<TextValueSet> tvs, String key, int typ, String res) {
\r
1099 String valExpr = "(\\d+),?";
\r
1101 valExpr = "\"(.+?)\",?";
\r
1103 Matcher mc = Pattern.compile("var "+key+"_text\\s*= new Array\\(([\\s\\S]+?)\\);").matcher(res);
\r
1104 Matcher md = Pattern.compile("var "+key+"_value\\s*= new Array\\(([\\s\\S]+?)\\);").matcher(res);
\r
1105 if (mc.find() && md.find()) {
\r
1106 Matcher me = Pattern.compile("\"(.+?)\",?").matcher(mc.group(1));
\r
1107 Matcher mf = Pattern.compile(valExpr).matcher(md.group(1));
\r
1108 while (me.find() && mf.find()) {
\r
1109 TextValueSet t = new TextValueSet();
\r
1110 t.setText(me.group(1));
\r
1111 t.setValue(mf.group(1));
\r