From b29f458a7b98468ac42c27d0ec5ae44978380fcb Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 10 Apr 2016 16:33:42 -0400 Subject: [PATCH] Database: Exclusions are back to being strings again --- src/Database.cpp | 7 ++++++- src/Database.h | 9 ++++----- src/init.cpp | 16 ++++++++-------- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/Database.cpp b/src/Database.cpp index 6ae72238..ef0468d2 100644 --- a/src/Database.cpp +++ b/src/Database.cpp @@ -57,6 +57,11 @@ void Database::initialize (const std::string& location) { Datafile df; df.initialize (file); + + // New files need the set of current exclusions. + if (! File (file).exists ()) + df.setExclusions (_exclusion); + _files.push_back (df); } } @@ -115,7 +120,7 @@ void Database::clearExclusions () } //////////////////////////////////////////////////////////////////////////////// -void Database::addExclusion (const Exclusion& exclusion) +void Database::addExclusion (const std::string& exclusion) { _exclusions.push_back (exclusion); } diff --git a/src/Database.h b/src/Database.h index 54f91d81..fa65db70 100644 --- a/src/Database.h +++ b/src/Database.h @@ -29,7 +29,6 @@ #include #include -#include #include #include @@ -45,7 +44,7 @@ public: std::vector getAllIntervals (); void clearExclusions (); - void addExclusion (const Exclusion&); + void addExclusion (const std::string&); void addInterval (const Interval&); void modifyInterval (const Interval&); @@ -55,9 +54,9 @@ private: std::string currentDataFile () const; private: - std::string _location {"~/.timewarrior/data"}; - std::vector _files {}; - std::vector _exclusions {}; + std::string _location {"~/.timewarrior/data"}; + std::vector _files {}; + std::vector _exclusions {}; }; #endif diff --git a/src/init.cpp b/src/init.cpp index 3cc40750..c5b13527 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -161,14 +161,17 @@ void initializeDataAndRules ( if (shinyNewDatabase) rules.set ("temp.shiny", 1); + // Provide the exclusions from configuration to the database. These are used + // to seed new Diatafile objects. + initializeDatabaseExclusions (database, rules); + // Initialize the database (no data read), but files are enumerated. database.initialize (data._data); - - // Provide the exclusions from configuration to the database. - initializeDatabaseExclusions (database, rules); } //////////////////////////////////////////////////////////////////////////////// +// The exclusions are read from configuration as strings, and passed to the +// database object as strings. void initializeDatabaseExclusions (Database& database, const Rules& rules) { database.clearExclusions (); @@ -176,13 +179,10 @@ void initializeDatabaseExclusions (Database& database, const Rules& rules) for (auto& name : rules.all ("exclusions.")) { name = lowerCase (name); - Exclusion e; if (name.substr (0, 16) == "exclusions.days.") - e.initialize ("exc day " + rules.get (name) + " " + name.substr (16)); + database.addExclusion ("exc day " + rules.get (name) + " " + name.substr (16)); else - e.initialize ("exc " + name.substr (11) + " " + rules.get (name)); - - database.addExclusion (e); + database.addExclusion ("exc " + name.substr (11) + " " + rules.get (name)); } }