diff options
author | Brendan Long <self@brendanlong.com> | 2019-05-27 22:46:57 +0300 |
---|---|---|
committer | Brendan Long <self@brendanlong.com> | 2019-05-27 22:57:26 +0300 |
commit | efe36f89b49812e750b1a0c5493c7b88d2386da9 (patch) | |
tree | 925b2d4949a90da731e5e030fcbd8fd6fbbb8377 | |
parent | 9ea9b37d9077e1abeb00a263ad1bf672e9fe9844 (diff) |
Fix delete old articles logic
- Fix double-negative in delete query
- Change logic to use days instead of weeks
- Use to_start_date() consistently
-rw-r--r-- | plugins/backend/decsync/decsyncInterface.vala | 4 | ||||
-rw-r--r-- | src/Backend/FeedServer.vala | 6 | ||||
-rw-r--r-- | src/DataBaseWriteAccess.vala | 8 | ||||
-rw-r--r-- | src/Enums.vala | 24 |
4 files changed, 20 insertions, 22 deletions
diff --git a/plugins/backend/decsync/decsyncInterface.vala b/plugins/backend/decsync/decsyncInterface.vala index fa1650d6..fd0f89a6 100644 --- a/plugins/backend/decsync/decsyncInterface.vala +++ b/plugins/backend/decsync/decsyncInterface.vala @@ -482,9 +482,7 @@ public class FeedReader.decsyncInterface : FeedServerInterface { var feeds = DataBase.readOnly().read_feeds(); var articles = new Gee.ArrayList<Article>(); GLib.Mutex mutex = GLib.Mutex(); - var now = new GLib.DateTime.now_local(); - int? weeks = ((DropArticles)Settings.general().get_enum("drop-articles-after")).to_weeks(); - var dropDate = weeks == null ? null : now.add_weeks(-(int)weeks); + DateTime? dropDate = ((DropArticles)Settings.general().get_enum("drop-articles-after")).to_start_date(); try { diff --git a/src/Backend/FeedServer.vala b/src/Backend/FeedServer.vala index f12baa90..76600454 100644 --- a/src/Backend/FeedServer.vala +++ b/src/Backend/FeedServer.vala @@ -279,10 +279,10 @@ public class FeedReader.FeedServer : GLib.Object { Notification.send(newArticles, new_and_unread); } - var drop_weeks = drop_articles.to_weeks(); - if(drop_weeks != null) + var article_max_age_days = drop_articles.to_days(); + if(article_max_age_days != null) { - db.dropOldArticles(-(int)drop_weeks); + db.dropOldArticles(article_max_age_days); } int last_modified = db.getLastModified(); diff --git a/src/DataBaseWriteAccess.vala b/src/DataBaseWriteAccess.vala index 26274b7f..cfae9673 100644 --- a/src/DataBaseWriteAccess.vala +++ b/src/DataBaseWriteAccess.vala @@ -83,12 +83,12 @@ public class FeedReader.DataBase : DataBaseReadOnly { Settings.state().set_int("last-spring-cleaning", (int)now.to_unix()); } - public void dropOldArticles(int weeks) + public void dropOldArticles(int max_age_days) { var query = new QueryBuilder(QueryType.SELECT, "main.articles"); query.select_field("articleID"); query.select_field("feedID"); - query.where("datetime(date, 'unixepoch', 'localtime') <= datetime('now', '-%i days')".printf(weeks*7)); + query.where(@"datetime(date, 'unixepoch', 'localtime') <= datetime('now', '-$(max_age_days) days')"); query.where_equal_int("marked", ArticleStatus.UNMARKED.to_int()); if(FeedServer.get_default().useMaxArticles()) { @@ -456,6 +456,7 @@ public class FeedReader.DataBase : DataBaseReadOnly { assert (guidHash_position > 0); assert (modified_position > 0); + DateTime? drop_date = ((DropArticles)Settings.general().get_enum("drop-articles-after")).to_start_date(); foreach(var article in articles) { // if article time is in the future @@ -465,8 +466,7 @@ public class FeedReader.DataBase : DataBaseReadOnly { article.SetDate(now); } - int? weeks = ((DropArticles)Settings.general().get_enum("drop-articles-after")).to_weeks(); - if(weeks != null && article.getDate().compare(now.add_weeks(-(int)weeks)) == -1) + if(drop_date != null && article.getDate().compare(drop_date) == -1) { Logger.info("Ignoring old article: %s".printf(article.getTitle())); continue; diff --git a/src/Enums.vala b/src/Enums.vala index 1fe545f9..9212e7f9 100644 --- a/src/Enums.vala +++ b/src/Enums.vala @@ -177,32 +177,32 @@ namespace FeedReader { ONE_MONTH, SIX_MONTHS; - public int? to_weeks() + public int? to_days() { switch(this) { - case NEVER: + case NEVER: return null; - case ONE_WEEK: - return 1; - case ONE_MONTH: - return 4; - case SIX_MONTHS: - return 24; - default: + case ONE_WEEK: + return 7; + case ONE_MONTH: + return 31; + case SIX_MONTHS: + return 186; + default: assert_not_reached(); } } public DateTime? to_start_date() { - int? weeks = to_weeks(); - if(weeks == null) + int? days = to_days(); + if(days == null) { return null; } - return new DateTime.now_utc().add_weeks(-(int)weeks); + return new DateTime.now_utc().add_days(-(int)days); } } |