OSDN Git Service

キーワード検索ダイアログ等にESCキーでのキャンセル動作を追加
[tainavi/TinyBannavi.git] / TinyBannavi / src / tainavi / PlugIn_RecRD_iEPG.java
1 package tainavi;\r
2 \r
3 import java.io.BufferedWriter;\r
4 import java.io.File;\r
5 import java.io.FileNotFoundException;\r
6 import java.io.FileOutputStream;\r
7 import java.io.IOException;\r
8 import java.io.OutputStreamWriter;\r
9 import java.io.UnsupportedEncodingException;\r
10 import java.util.regex.Matcher;\r
11 import java.util.regex.Pattern;\r
12 \r
13 \r
14 /*\r
15  * \r
16  */\r
17 \r
18 public class PlugIn_RecRD_iEPG extends HDDRecorderUtils implements HDDRecorder,Cloneable {\r
19 \r
20         public PlugIn_RecRD_iEPG clone() {\r
21                 return (PlugIn_RecRD_iEPG) super.clone();\r
22         }\r
23 \r
24         /* 必須コード  - ここから */\r
25         \r
26         // 種族の特性\r
27         public String getRecorderId() { return "iEPG"; }\r
28         public RecType getType() { return RecType.EPG; }\r
29         \r
30         // 個体の特性\r
31         private ChannelCode cc = new ChannelCode(getRecorderId());\r
32         private String rsvedFile = "";\r
33 \r
34         private String errmsg = "";\r
35 \r
36         // 公開メソッド\r
37         \r
38         /*\r
39          * \r
40          */\r
41         public ChannelCode getChCode() {\r
42                 return cc;\r
43         }\r
44         \r
45         // 繰り返し予約をサポートしていない\r
46         @Override\r
47         public boolean isRepeatReserveSupported() { return false; }\r
48         \r
49         /*\r
50          * \r
51          */\r
52         public boolean ChangeChannel(String Channel) {\r
53                 return false;\r
54         }\r
55 \r
56         /*\r
57          *      レコーダーから予約一覧を取得する \r
58          */\r
59         public boolean GetRdReserve(boolean force)\r
60         {\r
61                 System.out.println("Run: GetRdReserve("+force+")");\r
62                 \r
63                 setRsvedFile("env/reserved."+getIPAddr()+"_"+getPortNo()+"_"+getRecorderId()+".xml");\r
64                 \r
65                 // チューナー数は自動生成\r
66                 {\r
67                         encoder.clear();\r
68                         if ( getTunerNum() >= 2 ) {\r
69                                 for ( int i=1; i<=getTunerNum(); i++ ) {\r
70                                         TextValueSet t = new TextValueSet();\r
71                                         t.setText("E"+i);\r
72                                         t.setValue("E"+i);\r
73                                         encoder.add(t);\r
74                                 }\r
75                         }\r
76                 }\r
77                 \r
78                 File f = new File(getRsvedFile());\r
79                 if ( f.exists()) {\r
80                         // キャッシュから読み出し(予約一覧)\r
81                         setReserves(ReservesFromFile(getRsvedFile()));\r
82                 }\r
83                 \r
84                 return(true);\r
85         }\r
86         \r
87         /*\r
88          *      予約を実行する\r
89          */\r
90         public boolean PostRdEntry(ReserveList r)\r
91         {\r
92                 //\r
93                 if (getCC().getCH_WEB2CODE(r.getCh_name()) == null) {\r
94                         errmsg = "【警告】Web番組表の放送局名「"+r.getCh_name()+"」をCHコードに変換できません。CHコード設定を修正してください。" ;\r
95                         System.out.println(getErrmsg());\r
96                         return(false);\r
97                 }\r
98                 \r
99                 System.out.println("Run: PostRdEntry("+r.getTitle()+")");\r
100                 \r
101                 setErrmsg("");\r
102 \r
103                 String iepgFile = "env/hogehoge.tvpi";\r
104 \r
105                 //\r
106                 BufferedWriter bw = null;\r
107                 OutputStreamWriter sw = null;\r
108                 FileOutputStream os = null;\r
109                 try {\r
110                         Matcher ma = Pattern.compile("^(\\d\\d\\d\\d)/(\\d\\d)/(\\d\\d)").matcher(r.getRec_pattern());\r
111                         if ( ! ma.find()) {\r
112                                 setErrmsg("日付指定しか利用出来ません。");\r
113                                 return(false) ;\r
114                         }\r
115                         \r
116                         os = new FileOutputStream(iepgFile);\r
117                         sw = new OutputStreamWriter(os,"MS932");\r
118                         bw = new BufferedWriter(sw);\r
119                         bw.write("Content-type: application/x-tv-program-info; charset=Shift_JIS\r\n");\r
120                         bw.write("version: 1\r\n");\r
121                         bw.write("station: "+getCC().getCH_WEB2CODE(r.getCh_name())+"\r\n");\r
122                         bw.write(String.format("year: %04d\r\n", Integer.valueOf(ma.group(1))));\r
123                         bw.write(String.format("month: %02d\r\n", Integer.valueOf(ma.group(2))));\r
124                         bw.write(String.format("date: %02d\r\n", Integer.valueOf(ma.group(3))));\r
125                         bw.write("start: "+r.getAhh()+":"+r.getAmm()+"\r\n");\r
126                         bw.write("end: "+r.getZhh()+":"+r.getZmm()+"\r\n");\r
127                         bw.write("program-title: "+r.getTitle()+"\r\n");\r
128                         \r
129                 } catch (UnsupportedEncodingException e) {\r
130                         // TODO Auto-generated catch block\r
131                         e.printStackTrace();\r
132                 } catch (FileNotFoundException e) {\r
133                         // TODO Auto-generated catch block\r
134                         e.printStackTrace();\r
135                 } catch (IOException e) {\r
136                         // TODO Auto-generated catch block\r
137                         e.printStackTrace();\r
138                 }\r
139                 finally {\r
140                         if (bw != null) try { bw.close(); } catch (IOException e) {};\r
141                         if (sw != null) try { sw.close(); } catch (IOException e) {};\r
142                         if (os != null) try { os.close(); } catch (IOException e) {};\r
143                 }\r
144 \r
145                 // iEPGファイルを開く\r
146                 String emsg = CommonUtils.openFile(iepgFile);\r
147                 if (emsg != null) {\r
148                         setErrmsg(emsg);\r
149                         return false;\r
150                 }\r
151                 \r
152                 //\r
153                 long no = 0;\r
154                 for (ReserveList x : getReserves()) {\r
155                         if (Long.valueOf(x.getId()) > no) {\r
156                                 no = Long.valueOf(x.getId());\r
157                         }\r
158                 }\r
159                 r.setId(String.valueOf(++no));\r
160 \r
161                 // 予約パターンID\r
162                 r.setRec_pattern_id(getRec_pattern_Id(r.getRec_pattern()));\r
163                 \r
164                 // 次回予定日\r
165                 r.setRec_nextdate(CommonUtils.getNextDate(r));\r
166                 //r.setRec_nextdate(getNextDate(r.getRec_pattern(), r.getZhh()+":"+r.getZmm()));\r
167                 \r
168                 // 録画長\r
169                 r.setRec_min(CommonUtils.getRecMin(r.getAhh(),r.getAmm(),r.getZhh(),r.getZmm()));\r
170                 \r
171                 // 開始日時・終了日時\r
172                 getStartEndDateTime(r);\r
173                 \r
174                 // 予約リストを更新\r
175                 getReserves().add(r);\r
176                 \r
177                 // キャッシュに保存\r
178                 ReservesToFile(getReserves(), getRsvedFile());\r
179                 \r
180                 return(true);\r
181         }\r
182 \r
183         /*\r
184          *      予約を更新する\r
185          */\r
186         public boolean UpdateRdEntry(ReserveList o, ReserveList r) {\r
187                 System.out.println("Through: UpdateRdEntry()");\r
188                 \r
189                 setErrmsg("更新処理は無効です。");\r
190 \r
191                 return(false);\r
192         }\r
193 \r
194         /*\r
195          *      予約を削除する\r
196          */\r
197         public ReserveList RemoveRdEntry(String delid) {\r
198                 \r
199                 System.out.println("Run: RemoveRdEntry()");\r
200 \r
201                 setErrmsg("");\r
202 \r
203                 // 削除対象を探す\r
204                 ReserveList rx = null;\r
205                 for (  ReserveList reserve : getReserves() )  {\r
206                         if (reserve.getId().equals(delid)) {\r
207                                 rx = reserve;\r
208                                 break;\r
209                         }\r
210                 }\r
211                 if (rx == null) {\r
212                         return(null);\r
213                 }\r
214                 \r
215                 // 予約リストを更新\r
216                 getReserves().remove(rx);\r
217                 \r
218                 // キャッシュに保存\r
219                 ReservesToFile(getReserves(), getRsvedFile());\r
220 \r
221                 System.out.printf("\n<<< Message from RD >>> \"%s\"\n\n", "正常に削除できました。");\r
222 \r
223                 return(rx);\r
224         }\r
225         \r
226         /*\r
227          * \r
228          */\r
229         public String getErrmsg() {\r
230                 return(errmsg.replaceAll("[\r\n]", ""));\r
231         }\r
232         protected void setErrmsg(String s) {\r
233                 errmsg = s;\r
234         }\r
235         \r
236         /*\r
237          * \r
238          */\r
239         protected String getRsvedFile() {\r
240                 return(rsvedFile);\r
241         }\r
242         protected void setRsvedFile(String s) {\r
243                 rsvedFile = s;\r
244         }\r
245         \r
246         /*\r
247          * \r
248          */\r
249         protected ChannelCode getCC() {\r
250                 return(cc);\r
251         }\r
252 \r
253         public PlugIn_RecRD_iEPG() {\r
254                 super();\r
255                 this.setTunerNum(4);\r
256         }\r
257 }\r