From 58cfb864c7282ce4454bf4372745b1bfe19557cb Mon Sep 17 00:00:00 2001 From: Jan-Pascal van Best Date: Wed, 25 Apr 2012 20:31:45 +0200 Subject: [PATCH] Have the --clear-cache option only clear the cache once. Fixes #9 --- .../org/vanbest/xmltv/AbstractEPGSource.java | 4 +--- src/main/java/org/vanbest/xmltv/Main.java | 7 +++++-- .../java/org/vanbest/xmltv/ProgrammeCache.java | 17 +++++++++++++++++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/vanbest/xmltv/AbstractEPGSource.java b/src/main/java/org/vanbest/xmltv/AbstractEPGSource.java index b24e27a..57769ac 100644 --- a/src/main/java/org/vanbest/xmltv/AbstractEPGSource.java +++ b/src/main/java/org/vanbest/xmltv/AbstractEPGSource.java @@ -76,8 +76,6 @@ public abstract class AbstractEPGSource implements EPGSource { } public void clearCache() { - ProgrammeCache cache = new ProgrammeCache(config); - cache.clear(); - cache.close(); + cache.clear(sourceId); } } \ No newline at end of file diff --git a/src/main/java/org/vanbest/xmltv/Main.java b/src/main/java/org/vanbest/xmltv/Main.java index 843b9dc..60c0d25 100644 --- a/src/main/java/org/vanbest/xmltv/Main.java +++ b/src/main/java/org/vanbest/xmltv/Main.java @@ -79,7 +79,11 @@ public class Main { System.out.println("... from " + enabledCount + " channels"); System.out.println("... using cache at " + config.cacheDbHandle); } - + if (clearCache) { + ProgrammeCache cache = new ProgrammeCache(config); + cache.clear(); + cache.close(); + } Map guides = new HashMap(); EPGSourceFactory factory = EPGSourceFactory.newInstance(); //EPGSource gids = new TvGids(config); @@ -106,7 +110,6 @@ public class Main { if (!config.quiet) System.out.print("."); if(!guides.containsKey(c.source)) { guides.put(c.source, factory.createEPGSource(c.source, config)); - if (clearCache) guides.get(c.source).clearCache(); } List programmes = guides.get(c.source).getProgrammes(c, day); for (Programme p: programmes) p.serialize(writer); diff --git a/src/main/java/org/vanbest/xmltv/ProgrammeCache.java b/src/main/java/org/vanbest/xmltv/ProgrammeCache.java index 55272bb..c48f165 100644 --- a/src/main/java/org/vanbest/xmltv/ProgrammeCache.java +++ b/src/main/java/org/vanbest/xmltv/ProgrammeCache.java @@ -45,6 +45,7 @@ public class ProgrammeCache { private PreparedStatement putStatement; private PreparedStatement removeStatement; private PreparedStatement clearStatement; + private PreparedStatement clearSourceStatement; private final static Integer SCHEMA_VERSION=1; private final static String SCHEMA_KEY="TV_GRAB_NL_JAVA_SCHEMA_VERSION"; @@ -133,6 +134,7 @@ public class ProgrammeCache { putStatement = db.prepareStatement("INSERT INTO cache VALUES (?,?,?,?)"); removeStatement = db.prepareStatement("DELETE FROM cache WHERE source=? AND id=?"); clearStatement = db.prepareStatement("DELETE FROM cache"); + clearSourceStatement = db.prepareStatement("DELETE FROM cache WHERE source=?"); } catch (SQLException e) { if (!config.quiet) { System.out.println("Unable to prepare statements, proceeding without cache"); @@ -226,6 +228,19 @@ public class ProgrammeCache { } } + public void clear(int source) { + if (db==null) return; + try { + clearSourceStatement.setInt(1, source); + int count = clearSourceStatement.executeUpdate(); + if (!config.quiet && count>0) { + System.out.println("Cleared " + count + " entries from cache for source " + source); + } + } catch (SQLException e) { + if (config.logLevel>=Config.LOG_DEBUG) e.printStackTrace(); + } + } + public void close() { cleanup(); if (db != null) { @@ -234,6 +249,7 @@ public class ProgrammeCache { putStatement.close(); removeStatement.close(); clearStatement.close(); + clearSourceStatement.close(); db.close(); } catch (SQLException e) { // TODO Auto-generated catch block @@ -241,4 +257,5 @@ public class ProgrammeCache { } } } + } -- 2.39.5