]> www.vanbest.org Git - tv_grab_nl_java/commitdiff
Implemented channel icons
authorJP <jp@here>
Mon, 12 Mar 2012 14:31:42 +0000 (15:31 +0100)
committerJP <jp@here>
Mon, 12 Mar 2012 14:31:42 +0000 (15:31 +0100)
tv_grab_nl_java/src/org/vanbest/xmltv/Channel.java
tv_grab_nl_java/src/org/vanbest/xmltv/Config.java
tv_grab_nl_java/src/org/vanbest/xmltv/ProgrammeDetails.java
tv_grab_nl_java/src/org/vanbest/xmltv/TvGids.java
tv_grab_nl_java/src/org/vanbest/xmltv/XmlTvWriter.java

index 737d29f5048dffd99b2c251dfd86dd72994134fb..9f06133346ed4531d0211de03ab0a0e8939f0e32 100644 (file)
@@ -4,6 +4,7 @@ public class Channel {
        int id;
     String name;
     String shortName;
+       String iconUrl;
     public Channel(int id, String name, String shortName) {
        this.id = id;
        this.name = name;
@@ -21,4 +22,7 @@ public class Channel {
                 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;
+       }
 }
index 556a3f3e83616797b0532e7efb28b1db9ec01bbb..9ad9e604f2a4399b5eb1c04c7d965433b1298e5b 100644 (file)
@@ -25,11 +25,58 @@ public class Config {
                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)));
@@ -39,8 +86,11 @@ public class Config {
                        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);
index 304c9b7e912a665ad9b7e499f62f561b08d49843..05f7ab9ae23e35f1194e705a62ac27336e5dc27b 100644 (file)
@@ -16,17 +16,22 @@ public class ProgrammeDetails implements Serializable {
        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;
index 507f13523777f07638e6c0f00f45a902c67b7c2b..127cd5f6c9597e3ee1ebbd1c74b8f76e5d265221 100644 (file)
@@ -93,6 +93,7 @@ public class TvGids {
                        //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);
                }
@@ -146,7 +147,12 @@ public class TvGids {
                                        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 );
@@ -182,16 +188,9 @@ public class TvGids {
        }
 
        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);
        }
 }
index 953d1218e3dcf8b3322fb892fc4c6e0f70b57029..889326a4deb7ad65765644dec020760c8cdcc824 100644 (file)
@@ -50,10 +50,17 @@ public class XmlTvWriter {
                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");
                }