From b63828700b8969fcf6e27f5894917995ea0fa720 Mon Sep 17 00:00:00 2001 From: Jan-Pascal van Best Date: Wed, 14 Mar 2012 14:16:33 +0100 Subject: [PATCH] Translate categories --- .../src/org/vanbest/xmltv/Config.java | 70 +++++++++++++++++-- .../src/org/vanbest/xmltv/Main.java | 23 ++---- .../src/org/vanbest/xmltv/Programme.java | 5 +- .../src/org/vanbest/xmltv/ProgrammeCache.java | 15 +++- .../src/org/vanbest/xmltv/TvGids.java | 9 ++- .../src/org/vanbest/xmltv/XmlTvWriter.java | 25 ++++--- 6 files changed, 111 insertions(+), 36 deletions(-) diff --git a/tv_grab_nl_java/src/org/vanbest/xmltv/Config.java b/tv_grab_nl_java/src/org/vanbest/xmltv/Config.java index 45a2687..095f8c1 100644 --- a/tv_grab_nl_java/src/org/vanbest/xmltv/Config.java +++ b/tv_grab_nl_java/src/org/vanbest/xmltv/Config.java @@ -11,19 +11,57 @@ import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.apache.commons.io.FileUtils; public class Config { public List channels; + public Map cattrans; + protected File cacheFile; - public Config() { + private Config() { } + public Map getCategories() { + return cattrans; + } + + public static File defaultCacheFile() { + return FileUtils.getFile(FileUtils.getUserDirectory(), ".xmltv", "tv_grab_nl_java.cache"); + } + + static private Map getDefaultCattrans() { + Map result = new HashMap(); + result.put("amusement", "Animated"); + result.put("comedy", "Comedy"); + result.put("documentaire", "Documentary"); + result.put("educatief", "Educational"); + result.put("erotiek", "Adult"); + result.put("film", "Film"); + result.put("muziek", "Art/Music"); + result.put("informatief", "Educational"); + result.put("jeugd", "Children"); + result.put("kunst/cultuur", "Arts/Culture"); + result.put("misdaad", "Crime/Mystery"); + result.put("muziek", "Music"); + result.put("natuur", "Science/Nature"); + result.put("nieuws/actualiteiten", "News"); + result.put("overige", "Unknown"); + result.put("religieus", "Religion"); + result.put("serie/soap", "Drama"); + result.put("sport", "Sports"); + result.put("theater", "Arts/Culture"); + result.put("wetenschap", "Science/Nature"); + return result; + } + public void writeConfig(File configFile) throws IOException { FileUtils.forceMkdir(configFile.getParentFile()); PrintWriter out = new PrintWriter(new OutputStreamWriter( new FileOutputStream( configFile ))); + out.println("cache-file: " + escape(cacheFile.getPath())); for(Channel c: channels) { if (!c.selected) { out.print("#"); @@ -34,11 +72,14 @@ public class Config { } out.println(); } + for(Map.Entry entry: cattrans.entrySet()) { + out.println("category: " + escape(entry.getKey()) + ": " + escape(entry.getValue())); + } out.close(); } public static String escape(String s) { - return "\"" + s.replaceAll("\\\"", "\\\\\"") + "\""; + return "\"" + s.replace("\\", "\\\\").replaceAll("\\\"", "\\\\\"") + "\""; } public static List splitLine(String s) { @@ -52,7 +93,8 @@ public class Config { for (; pos channels = new ArrayList(); + Map cattrans = new HashMap(); + File cacheFile = defaultCacheFile(); while(true) { String s = reader.readLine(); if(s==null) break; @@ -90,17 +134,35 @@ public class Config { if (parts.size()>3) { c.setIconUrl(parts.get(3)); } - channels.add(c); + channels.add(c); + } + if (parts.get(0).toLowerCase().equals("category")) { + cattrans.put(parts.get(1), parts.get(2)); + } + if (parts.get(0).toLowerCase().equals("cache-file")) { + cacheFile = new File(parts.get(1)); } } result.setChannels(channels); + result.cattrans = cattrans; + result.cacheFile = cacheFile; + System.out.println("CAche file: "+cacheFile.getPath()); } catch (IOException e) { e.printStackTrace(); System.out.println("Cannot read configuration file, continuing with empty configuration"); + return getDefaultConfig(); } return result; } + public static Config getDefaultConfig() { + Config result = new Config(); + result.channels = new ArrayList(); + result.cattrans = getDefaultCattrans(); + result.cacheFile = defaultCacheFile(); + return result; + } + public void setChannels(List channels) { this.channels = channels; } diff --git a/tv_grab_nl_java/src/org/vanbest/xmltv/Main.java b/tv_grab_nl_java/src/org/vanbest/xmltv/Main.java index f30467b..bef8acd 100644 --- a/tv_grab_nl_java/src/org/vanbest/xmltv/Main.java +++ b/tv_grab_nl_java/src/org/vanbest/xmltv/Main.java @@ -25,10 +25,9 @@ import org.apache.commons.cli.Parser; import org.apache.commons.io.FileUtils; public class Main { - private File configFile; + private Config config; private PrintStream outputWriter; - private File cacheFile; private int days = 5; private int offset = 0; private boolean quiet = false; @@ -39,22 +38,19 @@ public class Main { public Main() { this.configFile = defaultConfigFile(); this.outputWriter = System.out; - this.cacheFile = defaultCacheFile(); } public void run() throws FactoryConfigurationError, Exception { - Config config = Config.readConfig(configFile); - if (!quiet) { System.out.println("Fetching programme data for days " + this.offset + "-" + (this.offset+this.days-1)); System.out.println("... from " + config.channels.size() + " channels"); - System.out.println("... using cache file " + cacheFile.getCanonicalPath()); + System.out.println("... using cache file " + config.cacheFile.getCanonicalPath()); } XmlTvWriter writer = new XmlTvWriter(outputWriter); writer.writeChannels(config.channels); - TvGids gids = new TvGids(cacheFile); + TvGids gids = new TvGids(config); for (int day=offset; day channels = gids.getChannels(); @@ -128,7 +124,6 @@ public class Main { } } - Config config = new Config(); config.setChannels(channels); try { config.writeConfig(configFile); @@ -140,8 +135,6 @@ public class Main { // TODO Auto-generated catch block e.printStackTrace(); } - - } public void processOptions(String[] args) throws FileNotFoundException { @@ -182,11 +175,13 @@ public class Main { if(line.hasOption("f")) { configFile = new File(line.getOptionValue("f")); } + config = Config.readConfig(configFile); + if (line.hasOption("o")) { this.outputWriter = new PrintStream( new FileOutputStream(line.getOptionValue("o"))); } if (line.hasOption("h")) { - this.cacheFile = new File(line.getOptionValue("h")); + config.cacheFile = new File(line.getOptionValue("h")); } if (line.hasOption("y")) { this.days = Integer.parseInt(line.getOptionValue("y")); @@ -217,10 +212,6 @@ public class Main { return FileUtils.getFile(FileUtils.getUserDirectory(), ".xmltv", "tv_grab_nl_java.conf"); } - public static File defaultCacheFile() { - return FileUtils.getFile(FileUtils.getUserDirectory(), ".xmltv", "tv_grab_nl_java.cache"); - } - public static void main(String[] args) { Main main = new Main(); try { diff --git a/tv_grab_nl_java/src/org/vanbest/xmltv/Programme.java b/tv_grab_nl_java/src/org/vanbest/xmltv/Programme.java index b90def7..e5ae3e1 100644 --- a/tv_grab_nl_java/src/org/vanbest/xmltv/Programme.java +++ b/tv_grab_nl_java/src/org/vanbest/xmltv/Programme.java @@ -105,11 +105,14 @@ public class Programme { ProgrammeDetails details = null; Channel channel = null; - public void fixup() { + public void fixup(Config config) { this.titel = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(titel); this.genre = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(genre); this.soort = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(soort); this.highlight_content = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(highlight_content); + if(config.getCategories().containsKey(genre.toLowerCase())) { + genre = config.getCategories().get(genre.toLowerCase()); + } } public String toString() { diff --git a/tv_grab_nl_java/src/org/vanbest/xmltv/ProgrammeCache.java b/tv_grab_nl_java/src/org/vanbest/xmltv/ProgrammeCache.java index 97da8e6..c9a9858 100644 --- a/tv_grab_nl_java/src/org/vanbest/xmltv/ProgrammeCache.java +++ b/tv_grab_nl_java/src/org/vanbest/xmltv/ProgrammeCache.java @@ -6,6 +6,7 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.InvalidClassException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.HashMap; @@ -22,7 +23,19 @@ public class ProgrammeCache { if (cacheFile.canRead()) { try { cache = (Map) new ObjectInputStream( new FileInputStream( cacheFile ) ).readObject(); - } catch (Exception e) { + } catch (InvalidClassException e) { + // TODO Auto-generated catch block + + cache = new HashMap(); + } catch (ClassNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + cache = new HashMap(); + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + cache = new HashMap(); + } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); cache = new HashMap(); diff --git a/tv_grab_nl_java/src/org/vanbest/xmltv/TvGids.java b/tv_grab_nl_java/src/org/vanbest/xmltv/TvGids.java index 652e0b2..30e6a31 100644 --- a/tv_grab_nl_java/src/org/vanbest/xmltv/TvGids.java +++ b/tv_grab_nl_java/src/org/vanbest/xmltv/TvGids.java @@ -30,14 +30,16 @@ public class TvGids { static String programme_base_url="http://www.tvgids.nl/json/lists/programs.php"; static String detail_base_url = "http://www.tvgids.nl/json/lists/program.php"; + Config config; ProgrammeCache cache; static boolean initialised = false; int fetchErrors = 0; int cacheHits = 0; int cacheMisses = 0; - public TvGids(File cacheFile) { - cache = new ProgrammeCache(cacheFile); + public TvGids(Config config) { + this.config = config; + cache = new ProgrammeCache(config.cacheFile); if ( ! initialised ) { init(); initialised = true; @@ -148,7 +150,7 @@ public class TvGids { for( int i=0; i channels) throws XMLStreamException { @@ -49,8 +53,7 @@ public class XmlTvWriter { } writer.writeEndElement(); - writer.writeCharacters("\n"); - } + writeln(); } } /* TODO: @@ -67,20 +70,20 @@ public class XmlTvWriter { writer.writeAttribute("start", df.format(p.datum_start)); writer.writeAttribute("stop", df.format(p.datum_end)); writer.writeAttribute("channel", ""+p.channel.getChannelId()); - writer.writeCharacters("\n"); + writeln(); writer.writeStartElement("title"); writer.writeAttribute("lang", "nl"); writer.writeCharacters(p.titel); writer.writeEndElement(); - writer.writeCharacters("\n"); - + writeln(); + if(p.details.synop != null && ! p.details.synop.isEmpty()) { writer.writeStartElement("desc"); writer.writeAttribute("lang", "nl"); writer.writeCharacters(p.details.synop); writer.writeEndElement(); - writer.writeCharacters("\n"); + writeln(); } if (p.details != null) { @@ -126,13 +129,13 @@ public class XmlTvWriter { } } writer.writeEndElement(); - writer.writeCharacters("\n"); + writeln(); } writer.writeStartElement("category"); writer.writeAttribute("lang", "en"); writer.writeCharacters(p.genre); // soort? FIXME translation to mythtv categories writer.writeEndElement(); - writer.writeCharacters("\n"); + writeln(); if (p.details.kijkwijzer != null && !p.details.kijkwijzer.isEmpty()) { writer.writeStartElement("rating"); @@ -141,11 +144,11 @@ public class XmlTvWriter { writer.writeCharacters(p.details.kijkwijzer); writer.writeEndElement(); writer.writeEndElement(); - writer.writeCharacters("\n"); + writeln(); } } writer.writeEndElement(); - writer.writeCharacters("\n"); + writeln(); } } -- 2.39.5