int id;
String name;
String shortName;
+ String iconUrl;
public Channel(int id, String name, String shortName) {
this.id = id;
this.name = name;
this.name = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(name);
this.shortName = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(shortName);
}
+ public void setIconUrl(String url) {
+ this.iconUrl = url;
+ }
}
FileUtils.forceMkdir(configFile.getParentFile());
PrintWriter out = new PrintWriter(new OutputStreamWriter( new FileOutputStream( configFile )));
for(Channel c: channels) {
- out.println(c.id + ": " + c.name);
+ out.print(c.id + ": " + escape(c.name));
+ if (c.iconUrl != null) {
+ out.print(" : " + escape(c.iconUrl));
+ }
+ out.println();
}
out.close();
}
+ public static String unescape(String s) {
+ String result = s.trim();
+ result = result.substring(1, result.length()-1);
+ result = result.replaceAll("\\\"", "\"");
+ return result;
+ }
+
+ public static String escape(String s) {
+ return "\"" + s.replaceAll("\"", "\\\"") + "\"";
+ }
+
+ public static String[] splitLine(String s) {
+ int colon = 0;
+ while (true) {
+ colon = s.indexOf(':', colon+1);
+ if (colon<0 || s.charAt(colon-1) != '\\') {
+ break;
+ }
+ }
+ if (colon<0) {
+ String[] parts = {s};
+ return parts;
+ }
+ String id = s.substring(0, colon).trim();
+ int firstColon = colon;
+ while (true) {
+ colon = s.indexOf(':', colon+1);
+ if (colon<0 || s.charAt(colon-1) != '\\') {
+ break;
+ }
+ }
+ if (colon<0) {
+ String name = unescape(s.substring(firstColon+1));
+
+ String[] parts = {id, name};
+ return parts;
+ }
+ String name = unescape(s.substring(firstColon+1, colon));
+ String icon = unescape(s.substring(colon+1));
+ String[] parts = {id,name,icon};
+ return parts;
+ }
+
public static Config readConfig(File file) throws IOException {
Config result = new Config();
BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream( file)));
if(s==null) break;
if (!s.contains(":")) continue;
if (s.startsWith("#")) continue;
- String[] parts = s.split("[[:space:]]*:[[:space:]]*", 2);
- Channel c = new Channel(Integer.parseInt(parts[0]), parts[1].trim(), "");
+ String[] parts = splitLine(s);
+ Channel c = new Channel(Integer.parseInt(parts[0]), parts[1], "");
+ if (parts.length>2) {
+ c.setIconUrl(parts[2]);
+ }
channels.add(c);
}
result.setChannels(channels);
String regisseur;
String zender_id;
- public void fixup() {
- this.titel = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(titel);
- this.genre = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(genre);
- System.out.println("synop was:" + synop);
- this.synop = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(synop);
- System.out.println("synop werd:" + synop);
- this.presentatie = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(presentatie);
- this.acteursnamen_rolverdeling = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(acteursnamen_rolverdeling);
- this.regisseur = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(regisseur);
- }
-
+ public void fixup(Programme p) {
+ this.titel = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(titel);
+ this.genre = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(genre);
+ this.synop = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(synop);
+ if (synop.isEmpty() && ( genre.toLowerCase().equals("movies") || genre.toLowerCase().equals("film"))) {
+ System.out.println("Splitting title: \"" + p.titel + "\"");
+ String[] parts = p.titel.split("[[:space:]]*:[[:space:]]*", 2);
+ titel = parts[0].trim();
+ p.titel = titel;
+ synop = parts[1].trim();
+ System.out.println("Splitting title to : \"" + p.titel + "\"; synop: \"" + synop + "\"");
+ }
+ this.presentatie = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(presentatie);
+ this.acteursnamen_rolverdeling = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(acteursnamen_rolverdeling);
+ this.regisseur = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(regisseur);
+ }
public String getDb_id() {
return db_id;
//System.out.println( "id: " + zender.getString("id"));
//System.out.println( "name: " + zender.getString("name"));
Channel c = new Channel(zender.getInt("id"), zender.getString("name"), zender.getString("name_short"));
+ c.setIconUrl("http://tvgidsassets.nl/img/channels/53x27/" + c.id + ".png");
c.fixup();
result.add(c);
}
Programme p = (Programme) JSONObject.toBean(programme, Programme.class);
p.fixup();
if (fetchDetails) {
- p.details = getDetails(p.db_id);
+ p.details = cache.getDetails(p.db_id);
+ if ( p.details == null ) {
+ p.details = getDetails(p.db_id);
+ p.details.fixup(p);
+ cache.add(p.db_id, p.details);
+ }
}
p.channel = c;
result.add( p );
}
private ProgrammeDetails getDetails(String db_id) throws Exception {
- ProgrammeDetails d = cache.getDetails(db_id);
- if ( d != null ) {
- return d;
- }
URL url = detailUrl(db_id);
JSONObject json = fetchJSON(url);
//System.out.println( json );
- d = (ProgrammeDetails) JSONObject.toBean(json, ProgrammeDetails.class);
- d.fixup();
- cache.add(db_id, d);
- return d;
+ return (ProgrammeDetails) JSONObject.toBean(json, ProgrammeDetails.class);
}
}
for(Channel c: channels) {
writer.writeStartElement("channel");
writer.writeAttribute("id", c.getChannelId());
- writer.writeStartElement("display-name");
- writer.writeAttribute("lang", "nl");
- writer.writeCharacters(c.name);
- writer.writeEndElement();
+ writer.writeStartElement("display-name");
+ writer.writeAttribute("lang", "nl");
+ writer.writeCharacters(c.name);
+ writer.writeEndElement();
+
+ if (c.iconUrl != null) {
+ writer.writeStartElement("icon");
+ writer.writeAttribute("src", c.iconUrl);
+ writer.writeEndElement();
+ }
+
writer.writeEndElement();
writer.writeCharacters("\n");
}