diff --git a/src/freeguide/common/plugininterfaces/BaseModuleReminder.java b/src/freeguide/common/plugininterfaces/BaseModuleReminder.java index 377d080..22d7c66 100644 --- a/src/freeguide/common/plugininterfaces/BaseModuleReminder.java +++ b/src/freeguide/common/plugininterfaces/BaseModuleReminder.java @@ -9,6 +9,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; +import java.util.Calendar; import java.util.Iterator; import java.util.List; import java.util.logging.Level; @@ -28,13 +29,6 @@ abstract public class BaseModuleReminder extends BaseModule protected Scheduler thread; /** - * The maximal age of a selection. If it's older, it gets deleted in - * cleanup() 86400 (seconds in 1 day) 7 (days/week) 4 (weeks) 1000 (to - * make milliseconds) - */ - private static final long MAX_SELECTION_AGE = (long)86400 * 7 * 4 * 1000; - - /** * Start scheduler thread. */ public void start( ) @@ -354,13 +348,18 @@ abstract public class BaseModuleReminder extends BaseModule */ public void cleanup( long timeNow ) { + Calendar nowCal = Calendar.getInstance(); + nowCal.setTimeInMillis(timeNow); + nowCal.add(Calendar.DATE, -Application.getInstance().getHistoryDays()); + long timeThen = nowCal.getTimeInMillis(); + ArrayList to_remove = new ArrayList(); List selections = getReminderConfig( ).manualSelectionList; for( Iterator sit = selections.iterator(); sit.hasNext(); ) { ManualSelection sel = (ManualSelection)sit.next(); - if( timeNow - sel.programmeTime > MAX_SELECTION_AGE ) + if( sel.programmeTime <= timeThen ) { to_remove.add( sel ); } diff --git a/src/freeguide/common/plugininterfaces/IApplication.java b/src/freeguide/common/plugininterfaces/IApplication.java index 4457e57..e4bfeb7 100644 --- a/src/freeguide/common/plugininterfaces/IApplication.java +++ b/src/freeguide/common/plugininterfaces/IApplication.java @@ -43,6 +43,8 @@ public interface IApplication String getLocalizedMessage( final String key, final Object[] params ); String getWorkingDirectory( ); + + int getHistoryDays( ); String getInstallDirectory( ); diff --git a/src/freeguide/plugins/program/freeguide/FreeGuide.java b/src/freeguide/plugins/program/freeguide/FreeGuide.java index e7444f4..5e02aa0 100644 --- a/src/freeguide/plugins/program/freeguide/FreeGuide.java +++ b/src/freeguide/plugins/program/freeguide/FreeGuide.java @@ -551,6 +551,9 @@ public static String preStartup( String[] args ) throws IOException, Exception /** Working directory dor store all data. */ public String workingDirectory; + /** Maximum age for historical data */ + public int historyDays; + /** Privacy info mode. */ public String privacyInfo; @@ -568,6 +571,8 @@ public static String preStartup( String[] args ) throws IOException, Exception workingDirectory = System.getProperty( "user.home" ) + File.separatorChar + ".freeguide"; + historyDays = 28; + countryID = "UK"; privacyInfo = "no"; diff --git a/src/freeguide/plugins/program/freeguide/viewer/MainController.java b/src/freeguide/plugins/program/freeguide/viewer/MainController.java index c0cc4d4..534a9eb 100644 --- a/src/freeguide/plugins/program/freeguide/viewer/MainController.java +++ b/src/freeguide/plugins/program/freeguide/viewer/MainController.java @@ -661,6 +661,16 @@ public class MainController extends BaseModule implements IApplication /** * DOCUMENT_ME! + * + * @return DOCUMENT_ME! + */ + public int getHistoryDays( ) + { + return FreeGuide.config.historyDays; + } + + /** + * DOCUMENT_ME! */ public void restart( ) { diff --git a/src/freeguide/plugins/storage/serfiles/StorageSerFilesByDay.java b/src/freeguide/plugins/storage/serfiles/StorageSerFilesByDay.java index f787045..e5c7b0d 100644 --- a/src/freeguide/plugins/storage/serfiles/StorageSerFilesByDay.java +++ b/src/freeguide/plugins/storage/serfiles/StorageSerFilesByDay.java @@ -23,6 +23,7 @@ import java.io.ObjectOutputStream; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Date; import java.util.Iterator; import java.util.Map; @@ -45,12 +46,6 @@ public class StorageSerFilesByDay extends BaseModule implements IModuleStorage protected static long MSEC_PARTS = 6L * 60L * 60L * 1000L; protected static long OLD_DATA = 10L * 24L * 60L * 60L * 1000L; // 10 days - /** - * The maximal age of a file. If it's older, it gets deleted in - * cleanup() 86400 (seconds in 1 day) 7 (days/week) 4 (weeks) 1000 (to - * make milliseconds) - */ - protected static final long MAX_FILE_AGE = (long)86400 * 7 * 4 * 1000; protected SimpleDateFormat dateFormat; protected Info cachedInfo; @@ -207,10 +202,12 @@ public class StorageSerFilesByDay extends BaseModule implements IModuleStorage try { + Calendar thenCal = Calendar.getInstance(); + thenCal.add(Calendar.DATE, -Application.getInstance().getHistoryDays()); + Date fileDate = dateFormat.parse( m.group( 1 ) ); - return fileDate.getTime( ) < - ( System.currentTimeMillis( ) - OLD_DATA ); + return fileDate.getTime( ) < thenCal.getTimeInMillis(); } catch( ParseException ex ) { @@ -386,11 +383,14 @@ public class StorageSerFilesByDay extends BaseModule implements IModuleStorage } /** - * Deletes all the files older than four (4) weeks. Have a look at - * the MAX_FILE_AGE class constant to get the real maximum age. + * Deletes all the files older than user selected history age */ public void cleanup( ) { + Calendar thenCal = Calendar.getInstance(); + thenCal.add(Calendar.DATE, -Application.getInstance().getHistoryDays()); + long thenTime = thenCal.getTimeInMillis(); + File[] files = getStorageDirectory( ).listFiles( new FilterFiles( ) ); @@ -398,8 +398,7 @@ public class StorageSerFilesByDay extends BaseModule implements IModuleStorage { for( int i = 0; i < files.length; i++ ) { - if( - ( System.currentTimeMillis( ) - files[i].lastModified( ) ) > MAX_FILE_AGE ) + if( files[i].lastModified() < thenTime) { files[i].delete( ); } @@ -451,10 +450,11 @@ public class StorageSerFilesByDay extends BaseModule implements IModuleStorage */ public void onProgramme( TVProgramme programme ) { + Calendar thenCal = Calendar.getInstance(); + thenCal.add(Calendar.DATE, -Application.getInstance().getHistoryDays()); + if( !debugIncludeOldProgrammes && ( - programme.getStart( ) < ( System.currentTimeMillis( ) - - OLD_DATA ) ) - ) + programme.getStart( ) < thenCal.getTimeInMillis())) { return; // This is old programme } diff --git a/src/freeguide/test/fast/FakeApplication.java b/src/freeguide/test/fast/FakeApplication.java index 6c79a25..6eab37f 100644 --- a/src/freeguide/test/fast/FakeApplication.java +++ b/src/freeguide/test/fast/FakeApplication.java @@ -148,6 +148,11 @@ public class FakeApplication implements IApplication return null; } + public int getHistoryDays() + { + return 1; + } + public boolean isUnix() { return false; diff --git a/src/freeguide/test/slow/ImportPerformanceSlowTest.java b/src/freeguide/test/slow/ImportPerformanceSlowTest.java index dd89fe1..5842997 100644 --- a/src/freeguide/test/slow/ImportPerformanceSlowTest.java +++ b/src/freeguide/test/slow/ImportPerformanceSlowTest.java @@ -205,6 +205,11 @@ public class ImportPerformanceSlowTest return null; } + public int getHistoryDays() + { + return 1; + } + public boolean isUnix() { return false;