3 import java.util.ArrayList;
\r
6 * Web番組表の設定や、実際の番組情報などを保持するクラスです。
\r
8 * @see TVProgramUtils
\r
9 * @see TVProgramIterator
\r
11 public interface TVProgram {
\r
14 public enum ProgScrumble { NONE, NOSCRUMBLE, SCRUMBLED };
\r
15 public enum ProgFlags { NOFLAG, NEW, LAST };
\r
16 public enum ProgType { PROG, SYOBO, PASSED, PICKED, SEARCHED, OTHERS };
\r
17 public enum ProgSubtype { TERRA, CS, CS2, CS3, RADIO, NONE };
\r
20 * NOSCRUMBLEは間違って(?)ProgScrumbleを使うこととなってしまったのだ。ここにあるのはマーク表示のための一覧用なのだ。
\r
22 public enum ProgOption { HIDDEN_NEW, HIDDEN_LAST, HIDDEN_NOSCRUMBLE, FIRST, REPEAT, LIVE, SPECIAL, NOSYOBO, SUBTITLE, BILINGUAL, STANDIN, PV, MULTIVOICE, DATA, SURROUND, NEWARRIVAL, MODIFIED, NONREPEATED, MOVED, PRECEDING, RATING };
\r
24 public static enum ProgGenre {
\r
25 NEWS ("ニュース/報道", "0"),
\r
26 SPORTS ("スポーツ", "1"),
\r
27 VARIETYSHOW ("情報/ワイドショー", "2"),
\r
28 DORAMA ("ドラマ", "3"),
\r
30 VARIETY ("バラエティー", "5"),
\r
32 ANIME ("アニメ/特撮", "7"),
\r
33 DOCUMENTARY ("ドキュメンタリー/教養", "8"),
\r
34 THEATER ("劇場/公演", "9"),
\r
35 HOBBY ("趣味/教育", "A"),
\r
36 WELFARE ("福祉", "B"),
\r
37 //KIDS ("キッズ", "ZZZ"), // もとからなかったらしい
\r
38 //EXTENTION ("拡張", "E"), // 非対応とする
\r
39 NOGENRE ("その他", "F");
\r
41 private String name;
\r
42 private String iepg;
\r
44 private ProgGenre(String name, String iepg) {
\r
50 public String toString() {
\r
54 public String toIEPG() {
\r
59 * ジャンル名文字列に一致するものを返す
\r
61 public static ProgGenre get(String name) {
\r
62 for ( ProgGenre g : ProgGenre.values() ) {
\r
63 if ( g.name.equals(name) ) {
\r
73 public static ProgGenre getByIEPG(String iepg) {
\r
74 for ( ProgGenre g : ProgGenre.values() ) {
\r
75 if ( g.iepg.equals(iepg) ) {
\r
83 public static enum ProgSubgenre {
\r
84 NEWS_TEIJI (ProgGenre.NEWS, "定時・総合", "0"),
\r
85 NEWS_TENKI (ProgGenre.NEWS, "天気", "1"),
\r
86 NEWS_TOKUSHU (ProgGenre.NEWS, "特集・ドキュメント", "2"),
\r
87 NEWS_SEIJI (ProgGenre.NEWS, "政治・国会", "3"),
\r
88 NEWS_KEIZAI (ProgGenre.NEWS, "経済・市況", "4"),
\r
89 NEWS_KAIGAI (ProgGenre.NEWS, "海外・国際", "5"),
\r
90 NEWS_KAISETU (ProgGenre.NEWS, "解説", "6"),
\r
91 NEWS_TOURON (ProgGenre.NEWS, "討論・会談", "7"),
\r
92 NEWS_HOUDOU (ProgGenre.NEWS, "報道特番", "8"),
\r
93 NEWS_LOCAL (ProgGenre.NEWS, "ローカル・地域", "9"),
\r
94 NEWS_KOTSU (ProgGenre.NEWS, "交通", "A"),
\r
95 NEWS_ETC (ProgGenre.NEWS, "その他", "F"),
\r
97 SPORTS_NEWS (ProgGenre.SPORTS, "スポーツニュース", "0"),
\r
98 SPORTS_BASEBALL (ProgGenre.SPORTS, "野球", "1"),
\r
99 SPORTS_FOOTBALL (ProgGenre.SPORTS, "サッカー", "2"),
\r
100 SPORTS_GOLF (ProgGenre.SPORTS, "ゴルフ", "3"),
\r
101 SPORTS_BALLGAME (ProgGenre.SPORTS, "その他の球技", "4"),
\r
102 SPORTS_SUMO (ProgGenre.SPORTS, "相撲・格闘技", "5"),
\r
103 SPORTS_OLYNPIC (ProgGenre.SPORTS, "オリンピック・国際大会", "6"),
\r
104 SPORTS_MARATHON (ProgGenre.SPORTS, "マラソン・陸上・水泳", "7"),
\r
105 SPORTS_MORTAR (ProgGenre.SPORTS, "モータースポーツ", "8"),
\r
106 SPORTS_MARINE (ProgGenre.SPORTS, "マリン・ウィンタースポーツ","9"),
\r
107 SPORTS_KEIBA (ProgGenre.SPORTS, "競馬・公営競技", "A"),
\r
108 SPORTS_ETC (ProgGenre.SPORTS, "その他", "F"),
\r
110 VSHOW_GEINO (ProgGenre.VARIETYSHOW, "芸能・ワイドショー", "0"),
\r
111 VSHOW_FASHION (ProgGenre.VARIETYSHOW, "ファッション", "1"),
\r
112 VSHOW_LIFE (ProgGenre.VARIETYSHOW, "暮らし・住まい", "2"),
\r
113 VSHOW_HEALTH (ProgGenre.VARIETYSHOW, "健康・医療", "3"),
\r
114 VSHOW_SHOPPING (ProgGenre.VARIETYSHOW, "ショッピング・通販", "4"),
\r
115 VSHOW_GOURMET (ProgGenre.VARIETYSHOW, "グルメ・料理", "5"),
\r
116 VSHOW_EVENT (ProgGenre.VARIETYSHOW, "イベント", "6"),
\r
117 VSHOW_INFO (ProgGenre.VARIETYSHOW, "番組紹介・お知らせ", "7"),
\r
118 VSHOW_ETC (ProgGenre.VARIETYSHOW, "その他", "F"),
\r
120 DRAMA_KOKUNAI (ProgGenre.DORAMA, "国内ドラマ", "0"),
\r
121 DRAMA_KAIGAI (ProgGenre.DORAMA, "海外ドラマ", "1"),
\r
122 DRAMA_JIDAI (ProgGenre.DORAMA, "時代劇", "2"),
\r
123 DRAMA_ETC (ProgGenre.DORAMA, "その他", "F"),
\r
125 MUSIC_KOKUNAI (ProgGenre.MUSIC, "国内ロック・ポップス", "0"),
\r
126 MUSIC_KAIGAI (ProgGenre.MUSIC, "海外ロック・ポップス", "1"),
\r
127 MUSIC_CLASSIC (ProgGenre.MUSIC, "クラシック・オペラ", "2"),
\r
128 MUSIC_JAZZ (ProgGenre.MUSIC, "ジャズ・フュージョン", "3"),
\r
129 MUSIC_KAYOKYOKU (ProgGenre.MUSIC, "歌謡曲・演歌", "4"),
\r
130 MUSIC_LIVE (ProgGenre.MUSIC, "ライブ・コンサート", "5"),
\r
131 MUSIC_RANKING (ProgGenre.MUSIC, "ランキング・リクエスト", "6"),
\r
132 MUSIC_KARAOKE (ProgGenre.MUSIC, "カラオケ・のど自慢", "7"),
\r
133 MUSIC_MINYO (ProgGenre.MUSIC, "民謡・邦楽", "8"),
\r
134 MUSIC_DOYO (ProgGenre.MUSIC, "童謡・キッズ", "9"),
\r
135 MUSIC_MINZOKU (ProgGenre.MUSIC, "民族音楽・ワールドミュージック", "A"),
\r
136 MUSIC_ETC (ProgGenre.MUSIC, "その他", "F"),
\r
138 VARIETY_QUIZ (ProgGenre.VARIETY, "クイズ", "0"),
\r
139 VARIETY_GAME (ProgGenre.VARIETY, "ゲーム", "1"),
\r
140 VARIETY_TALK (ProgGenre.VARIETY, "トークバラエティ", "2"),
\r
141 VARIETY_OWARAI (ProgGenre.VARIETY, "お笑い・コメディ", "3"),
\r
142 VARIETY_MUSIC (ProgGenre.VARIETY, "音楽バラエティ", "4"),
\r
143 VARIETY_TABI (ProgGenre.VARIETY, "旅バラエティ", "5"),
\r
144 VARIETY_RYORI (ProgGenre.VARIETY, "料理バラエティ", "6"),
\r
145 VARIETY_ETC (ProgGenre.VARIETY, "その他", "F"),
\r
147 MOVIE_YOGA (ProgGenre.MOVIE, "洋画", "0"),
\r
148 MOVIE_HOGA (ProgGenre.MOVIE, "邦画", "1"),
\r
149 MOVIE_ANIME (ProgGenre.MOVIE, "アニメ", "2"),
\r
150 MOVIE_ETC (ProgGenre.MOVIE, "その他", "F"),
\r
152 ANIME_KOKUNAI (ProgGenre.ANIME, "国内アニメ", "0"),
\r
153 ANIME_KAIGAI (ProgGenre.ANIME, "海外アニメ", "1"),
\r
154 ANIME_TOKUSATSU (ProgGenre.ANIME, "特撮", "2"),
\r
155 ANIME_ETC (ProgGenre.ANIME, "その他", "F"),
\r
157 DOC_SOCIAL (ProgGenre.DOCUMENTARY, "社会・時事", "0"),
\r
158 DOC_HISTORY (ProgGenre.DOCUMENTARY, "歴史・紀行", "1"),
\r
159 DOC_NATURE (ProgGenre.DOCUMENTARY, "自然・動物・環境", "2"),
\r
160 DOC_SPACE (ProgGenre.DOCUMENTARY, "宇宙・科学・医学", "3"),
\r
161 DOC_CULTURE (ProgGenre.DOCUMENTARY, "カルチャー・伝統文化", "4"),
\r
162 DOC_BUNGEI (ProgGenre.DOCUMENTARY, "文学・文芸", "5"),
\r
163 DOC_SPORTS (ProgGenre.DOCUMENTARY, "スポーツ", "6"),
\r
164 DOC_DOCUMENTARY (ProgGenre.DOCUMENTARY, "ドキュメンタリー全般", "7"),
\r
165 DOC_INTERVIEW (ProgGenre.DOCUMENTARY, "インタビュー・討論", "8"),
\r
166 DOC_ETC (ProgGenre.DOCUMENTARY, "その他", "F"),
\r
168 THEATER_GENDAI (ProgGenre.THEATER, "現代劇・新劇", "0"),
\r
169 THEATER_MUSICAL (ProgGenre.THEATER, "ミュージカル", "1"),
\r
170 THEATER_DANCE (ProgGenre.THEATER, "ダンス・バレエ", "2"),
\r
171 THEATER_RAKUGO (ProgGenre.THEATER, "落語・演芸", "3"),
\r
172 THEATER_KABUKI (ProgGenre.THEATER, "歌舞伎・古典", "4"),
\r
173 THEATER_ETC (ProgGenre.THEATER, "その他", "F"),
\r
175 HOBBY_TABI (ProgGenre.HOBBY, "旅・釣り・アウトドア", "0"),
\r
176 HOBBY_ENGEI (ProgGenre.HOBBY, "園芸・ペット・手芸", "1"),
\r
177 HOBBY_MUSIC (ProgGenre.HOBBY, "音楽・美術・工芸", "2"),
\r
178 HOBBY_IGO (ProgGenre.HOBBY, "囲碁・将棋", "3"),
\r
179 HOBBY_MAHJONG (ProgGenre.HOBBY, "麻雀・パチンコ", "4"),
\r
180 HOBBY_CAR (ProgGenre.HOBBY, "車・オートバイ", "5"),
\r
181 HOBBY_COMPUTER (ProgGenre.HOBBY, "コンピュータ・TVゲーム", "6"),
\r
182 HOBBY_KAIWA (ProgGenre.HOBBY, "会話・語学", "7"),
\r
183 HOBBY_YOJI (ProgGenre.HOBBY, "幼児・小学生", "8"),
\r
184 HOBBY_CHUGAKU (ProgGenre.HOBBY, "中学生・高校生", "9"),
\r
185 HOBBY_DAIGAKU (ProgGenre.HOBBY, "大学生・受験", "A"),
\r
186 HOBBY_SHOGAI (ProgGenre.HOBBY, "生涯教育・資格", "B"),
\r
187 HOBBY_KYOIKU (ProgGenre.HOBBY, "教育問題", "C"),
\r
188 HOBBY_ETC (ProgGenre.HOBBY, "その他", "F"),
\r
190 WELFARE_KOUREI (ProgGenre.WELFARE, "高齢者", "0"),
\r
191 WELFARE_SHOGAI (ProgGenre.WELFARE, "障害者", "1"),
\r
192 WELFARE_HUKUSHI (ProgGenre.WELFARE, "社会福祉", "2"),
\r
193 WELFARE_VULNTEER(ProgGenre.WELFARE, "ボランティア", "3"),
\r
194 WELFARE_SHUWA (ProgGenre.WELFARE, "手話", "4"),
\r
195 WELFARE_MOJI (ProgGenre.WELFARE, "文字(字幕)", "5"),
\r
196 WELFARE_ONSEI (ProgGenre.WELFARE, "音声解説", "6"),
\r
197 WELFARE_ETC (ProgGenre.WELFARE, "その他", "F"),
\r
199 NOGENRE_ETC (ProgGenre.NOGENRE, "その他", "F"),
\r
203 private ProgGenre genre;
\r
204 private String name;
\r
205 private String iepg;
\r
207 private ProgSubgenre(ProgGenre genre, String name, String iepg) {
\r
208 this.genre = genre;
\r
214 public String toString() {
\r
218 public String toFullString() {
\r
219 return genre.toString()+" - "+name;
\r
222 public String toIEPG() {
\r
226 public ProgGenre getGenre() {
\r
230 public static ArrayList<ProgSubgenre> values(ProgGenre gr) {
\r
231 ArrayList<ProgSubgenre> ga = new ArrayList<TVProgram.ProgSubgenre>();
\r
232 for ( ProgSubgenre g : ProgSubgenre.values() ) {
\r
233 if ( g.genre == gr ) {
\r
239 public static ProgSubgenre get(ProgGenre gr, String s) {
\r
240 for ( ProgSubgenre g : ProgSubgenre.values(gr) ) {
\r
241 if ( g.name.equals(s) ) {
\r
247 public static ProgSubgenre get(String s) {
\r
251 boolean isfull = (s.indexOf(" - ") != -1);
\r
252 for ( ProgSubgenre g : ProgSubgenre.values() ) {
\r
253 if ( s.equals(isfull ? g.toFullString() : g.toString()) ) {
\r
260 public static ProgSubgenre getByIEPG(ProgGenre gr, String iepg) {
\r
261 for ( ProgSubgenre g : ProgSubgenre.values(gr) ) {
\r
262 if ( g.iepg.equals(iepg) ) {
\r
270 public static final Object[][] optMarks = {
\r
271 { ProgOption.HIDDEN_NEW, "【新】新番組" },
\r
272 { ProgOption.HIDDEN_LAST, "【終】最終回" },
\r
273 { ProgOption.HIDDEN_NOSCRUMBLE, "【無料】無料放送" },
\r
274 { ProgOption.FIRST, "【初】初回放送" },
\r
275 { ProgOption.PRECEDING, "【先】先行放送" },
\r
276 { ProgOption.NONREPEATED, "[初]リピート放送の初回放送回" },
\r
277 //{ false, ProgOption.REPEAT, "[再]再放送" },
\r
278 { ProgOption.LIVE, "[生]生放送" },
\r
279 { ProgOption.SPECIAL, "[特]特番" },
\r
280 { ProgOption.RATING, "[R]視聴制限あり" },
\r
281 { ProgOption.SUBTITLE, "[字]文字多重放送" },
\r
282 { ProgOption.MULTIVOICE, "[多]音声多重放送" },
\r
283 { ProgOption.BILINGUAL, "[二]二か国語放送" },
\r
284 { ProgOption.STANDIN, "[吹]吹替放送" },
\r
285 { ProgOption.SURROUND, "[5.1]5.1chサラウンド" },
\r
286 { ProgOption.DATA, "[デ]データ放送" },
\r
287 { ProgOption.PV, "[PV]ペイパービュー" },
\r
288 { ProgOption.NOSYOBO, "[!]しょぼかる未定義" },
\r
289 { ProgOption.NEWARRIVAL, "[NEW]予約待機の新着" },
\r
290 { ProgOption.MODIFIED, "(更)番組詳細に更新あり - 予約待機分のみ" },
\r
291 { ProgOption.MOVED, "(移)先週無かったか時間が違う" },
\r
294 public static final String[] OKINIIRI = {"★★★★★","★★★★","★★★","★★","★",""};
\r
297 public static final String allCode = "all";
\r
298 public static final String trCode = "tr";
\r
299 public static final String bsCode = "bs";
\r
300 public static final String csCode = "cs";
\r
303 public static final String titlePrefixRemoveExpr = "^(\\[(新|無|字|終|HV|SS|無料)\\]|無料≫|【無料】)+\\s*";
\r
304 public static final String epnoNormalizeExpr = "([第#(])(\\d\\D|\\d$)";
\r
307 public String getTVProgramId();
\r
308 public TVProgram clone();
\r
309 //public void setProperties(TVProgramUtils from);
\r
310 public boolean isAreaSelectSupported();
\r
316 * TVProgramRefreshクラスを継承する部分 ←そんなクラスあったっけ…?
\r
318 public ArrayList<ProgList> getCenters();
\r
319 public ArrayList<Center> getCRlist();
\r
320 public ArrayList<Center> getSortedCRlist();
\r
321 public void setSortedCRlist();
\r
322 public void refresh();
\r
323 public void setExtension(String spoexSearchStart, String spoexSearchEnd, boolean spoexLimitation, ArrayList<SearchKey> extKeys);
\r
324 public void abon(ArrayList<String> ngword);
\r
325 public String chkComplete();
\r
327 //public void setAbnormal(boolean b);
\r
328 //public boolean getAbnormal();
\r
330 public ProgType getType();
\r
331 public ProgSubtype getSubtype();
\r
333 public void setDebug(boolean b);
\r
334 //public boolean setProxy(String host, String port);
\r
339 public void loadProgram(String areaCode, boolean force);
\r
340 public int getTimeBarStart();
\r
341 public void setExpandTo8(boolean b);
\r
342 public void setUseDetailCache(boolean b);
\r
347 public ArrayList<AreaCode> getAClist();
\r
348 public void loadAreaCode();
\r
349 public void saveAreaCode();
\r
350 public String getDefaultArea();
\r
351 public String getArea(String code);
\r
352 public String getCode(String Area);
\r
353 public String setSelectedAreaByName(String area);
\r
354 public String setSelectedAreaByCode(String code);
\r
355 public String getSelectedArea();
\r
356 public String getSelectedCode();
\r
361 //public void loadCenter();
\r
362 public void loadCenter(String code, boolean force);
\r
363 public boolean saveCenter();
\r
368 public void setUserAgent(String s);
\r
369 public void setProgDir(String s);
\r
370 public void setCacheExpired(int h);
\r
371 //public void setProgressArea(StatusWindow o);
\r
372 //public void setChConv(ChannelConvert chconv);
\r
373 public void setContinueTomorrow(boolean b);
\r
374 public void setSplitEpno(boolean b);
\r
375 //public String[] doSplitEpno(ProgGenre genre, String title);
\r
378 public boolean setOptString(String s);
\r
379 public String getOptString();
\r