From: Jan-Pascal van Best Date: Sat, 24 Mar 2012 22:22:39 +0000 (+0100) Subject: Refactoring for generic guide data sources, working on Channel class and X-Git-Tag: 0.9.0~30 X-Git-Url: http://www.vanbest.org/gitweb/?a=commitdiff_plain;h=dcac720153062d9aa63ac54045c6887b2f59f04e;p=tv_grab_nl_java Refactoring for generic guide data sources, working on Channel class and handling, does not compile at the moment --- diff --git a/src/main/java/org/vanbest/xmltv/Channel.java b/src/main/java/org/vanbest/xmltv/Channel.java index 97babf2..4857561 100644 --- a/src/main/java/org/vanbest/xmltv/Channel.java +++ b/src/main/java/org/vanbest/xmltv/Channel.java @@ -1,46 +1,66 @@ -package org.vanbest.xmltv; - -/* - Copyright (c) 2012 Jan-Pascal van Best - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - The full license text can be found in the LICENSE file. -*/ - -public class Channel { - int id; - String name; - String shortName; - String iconUrl; - boolean selected; - - public Channel(int id, String name, String shortName) { - this.id = id; - this.name = name; - this.shortName = shortName; - } - public String toString() { - return "id: " + id + "; name: " + name + "; shortName: " + shortName; - } - - public String getChannelId() { - return id+".tvgids.nl"; - } - - public void fixup() { - 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; - } -} +package org.vanbest.xmltv; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamWriter; + +public class Channel { + String id; + List names; // at least one name is obligatory + List icons; + List urls; + protected boolean selected; + + protected Channel() { + names = new ArrayList(); + icons = new ArrayList(); + urls = new ArrayList(); + } + + public String defaultName() { + return names.get(0); + } + + static Channel getChannel(String id, String name) { + Channel c = new Channel(); + c.names.add(name); + return c; + } + + static Channel getChannel(String id, String name, String iconUrl) { + Channel c = new Channel(); + c.names.add(name); + c.icons.add(new Icon(iconUrl)); + return c; + } + + public void serialize(XMLStreamWriter writer) throws XMLStreamException { + writer.writeStartElement("channel"); + writer.writeAttribute("id", id); + for(String name: names) { + writer.writeStartElement("display-name"); + writer.writeAttribute("lang", "nl"); + writer.writeCharacters(name); + writer.writeEndElement(); + } + for(Icon i: icons) { + i.serialize(writer); + } + for(String url: urls) { + writer.writeStartElement("url"); + writer.writeCharacters(url); + writer.writeEndElement(); + } + writer.writeEndElement(); + writer.writeCharacters(System.getProperty("line.separator")); + } + + // Convenience method + public void addIcon(String url) { + icons.add(new Icon(url)); + } +} \ No newline at end of file diff --git a/src/main/java/org/vanbest/xmltv/Config.java b/src/main/java/org/vanbest/xmltv/Config.java index e43cf9a..9bb6a57 100644 --- a/src/main/java/org/vanbest/xmltv/Config.java +++ b/src/main/java/org/vanbest/xmltv/Config.java @@ -117,9 +117,10 @@ public class Config { if (!c.selected) { out.print("#"); } - out.print("channel: " + c.id + ": " + escape(c.name)); - if (c.iconUrl != null) { - out.print(" : " + escape(c.iconUrl)); + // FIXME: handle multiple channels names, icons and urls + out.print("channel: " + c.id + ": " + escape(c.defaultName())); + if (!c.icons.isEmpty()) { + out.print(" : " + escape(c.icons.get(0).url)); } out.println(); } @@ -181,9 +182,9 @@ public class Config { if (s.startsWith("#")) continue; List parts = splitLine(s); if (parts.get(0).toLowerCase().equals("channel")) { - Channel c = new Channel(Integer.parseInt(parts.get(1)), parts.get(2), ""); + Channel c = Channel.getChannel(parts.get(1), parts.get(2)); if (parts.size()>3) { - c.setIconUrl(parts.get(3)); + c.addIcon(parts.get(3)); } result.channels.add(c); } diff --git a/src/main/java/org/vanbest/xmltv/Main.java b/src/main/java/org/vanbest/xmltv/Main.java index 900039f..39ad63e 100644 --- a/src/main/java/org/vanbest/xmltv/Main.java +++ b/src/main/java/org/vanbest/xmltv/Main.java @@ -75,9 +75,9 @@ public class Main { for (int day=offset; day programmes = new HashSet(); - for( Channel c: config.channels ) { + for(Channel c: config.channels) { if (!config.quiet) System.out.print("."); - ArrayList cs = new ArrayList(2); + ArrayList cs = new ArrayList(2); cs.add(c); Set p = gids.getProgrammes(cs, day, true); writer.writePrograms(p); @@ -108,7 +108,7 @@ public class Main { TvGids gids = new TvGids(config); Set oldChannels = new HashSet(); - for (Channel c: config.channels) { + for (TvGidsChannel c: config.channels) { oldChannels.add(c.id); } List channels = gids.getChannels(); @@ -119,7 +119,7 @@ public class Main { boolean keep = false; for (Channel c: channels) { boolean selected = oldChannels.contains(c.id); - System.out.print("add channel " + c.id + " (" + c.name + ") [[y]es,[n]o,[a]ll,[none],[k]eep selection (default=" + (selected?"yes":"no") + ")] "); + System.out.print("add channel " + c.id + " (" + c.defaultName() + ") [[y]es,[n]o,[a]ll,[none],[k]eep selection (default=" + (selected?"yes":"no") + ")] "); if (keep) { c.selected = selected; System.out.println(selected?"Y":"N"); diff --git a/src/main/java/org/vanbest/xmltv/Programme.java b/src/main/java/org/vanbest/xmltv/Programme.java index 21c7e02..de8dce3 100644 --- a/src/main/java/org/vanbest/xmltv/Programme.java +++ b/src/main/java/org/vanbest/xmltv/Programme.java @@ -119,7 +119,7 @@ public class Programme { String highlight_afbeelding; String highlight_content; ProgrammeDetails details = null; - Channel channel = null; + TvGidsChannel channel = null; public void fixup(Config config) { this.titel = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(titel); diff --git a/src/main/java/org/vanbest/xmltv/TvGids.java b/src/main/java/org/vanbest/xmltv/TvGids.java index cf26f54..6d33c99 100644 --- a/src/main/java/org/vanbest/xmltv/TvGids.java +++ b/src/main/java/org/vanbest/xmltv/TvGids.java @@ -117,9 +117,12 @@ public class TvGids { JSONObject zender = jsonArray.getJSONObject(i); //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(); + //TvGidsChannel c = new TvGidsChannel(zender.getInt("id"), zender.getString("name"), zender.getString("name_short")); + //c.setIconUrl("http://tvgidsassets.nl/img/channels/53x27/" + c.id + ".png"); + int id = zender.getInt("id"); + String name = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(zender.getString("name")); + String icon = "http://tvgidsassets.nl/img/channels/53x27/" + id + ".png"; + Channel c = Channel.getChannel(Integer.toString(id), name, icon); result.add(c); } @@ -127,14 +130,14 @@ public class TvGids { } - public static URL programmeUrl(List channels, int day) throws Exception { + public static URL programmeUrl(List channels, int day) throws Exception { StringBuilder s = new StringBuilder(programme_base_url); if (channels.size() < 1) { throw new Exception("should have at least one channel"); } s.append("?channels="); boolean first = true; - for(Channel i: channels) { + for(TvGidsChannel i: channels) { if (first) { s.append(i.id); first = false; @@ -162,14 +165,14 @@ public class TvGids { return new URL(s.toString()); } - public Set getProgrammes(List channels, int day, boolean fetchDetails) throws Exception { + public Set getProgrammes(List channels, int day, boolean fetchDetails) throws Exception { Set result = new HashSet(); URL url = programmeUrl(channels, day); JSONObject jsonObject = fetchJSON(url); //System.out.println( jsonObject ); - for( Channel c: channels) { + for( TvGidsChannel c: channels) { JSON ps = (JSON) jsonObject.get(""+c.id); if ( ps.isArray() ) { JSONArray programs = (JSONArray) ps; diff --git a/src/main/java/org/vanbest/xmltv/TvGidsChannel.java b/src/main/java/org/vanbest/xmltv/TvGidsChannel.java new file mode 100644 index 0000000..1526384 --- /dev/null +++ b/src/main/java/org/vanbest/xmltv/TvGidsChannel.java @@ -0,0 +1,46 @@ +package org.vanbest.xmltv; + +/* + Copyright (c) 2012 Jan-Pascal van Best + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + The full license text can be found in the LICENSE file. +*/ + +public class TvGidsChannel { + int id; + String name; + String shortName; + String iconUrl; + boolean selected; + + public TvGidsChannel(int id, String name, String shortName) { + this.id = id; + this.name = name; + this.shortName = shortName; + } + public String toString() { + return "id: " + id + "; name: " + name + "; shortName: " + shortName; + } + + public String getChannelId() { + return id+".tvgids.nl"; + } + + public void fixup() { + 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; + } +} diff --git a/src/main/java/org/vanbest/xmltv/XmlTvWriter.java b/src/main/java/org/vanbest/xmltv/XmlTvWriter.java index 2690e9e..d56635f 100644 --- a/src/main/java/org/vanbest/xmltv/XmlTvWriter.java +++ b/src/main/java/org/vanbest/xmltv/XmlTvWriter.java @@ -57,21 +57,9 @@ public class XmlTvWriter { public void writeChannels(List channels) throws XMLStreamException { 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(); - - if (c.iconUrl != null) { - writer.writeStartElement("icon"); - writer.writeAttribute("src", c.iconUrl); - writer.writeEndElement(); - } - - writer.writeEndElement(); - writeln(); } + c.serialize(writer); + writeln(); + } } /* TODO: