mirror of
https://github.com/GothenburgBitFactory/timewarrior.git
synced 2025-07-07 20:06:39 +02:00
Filter, Timeline: Converted from a pair of Datetime objects to a Daterange
This commit is contained in:
parent
590aab02b9
commit
a4ed7c9def
6 changed files with 48 additions and 72 deletions
|
@ -31,33 +31,21 @@
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Filter::empty () const
|
||||
{
|
||||
return _start.toEpoch () == 0 &&
|
||||
_end.toEpoch () == 0 &&
|
||||
_tags.size () == 0;
|
||||
return _range.start ().toEpoch () == 0 &&
|
||||
_range.end ().toEpoch () == 0 &&
|
||||
_tags.size () == 0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Datetime Filter::start () const
|
||||
Daterange Filter::range () const
|
||||
{
|
||||
return _start;
|
||||
return _range;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void Filter::start (Datetime value)
|
||||
void Filter::range (const Daterange& range)
|
||||
{
|
||||
_start = value;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Datetime Filter::end () const
|
||||
{
|
||||
return _end;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void Filter::end (Datetime value)
|
||||
{
|
||||
_end = value;
|
||||
_range = range;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -78,10 +66,10 @@ std::string Filter::dump () const
|
|||
{
|
||||
std::stringstream out;
|
||||
|
||||
out << "Filter _start '"
|
||||
<< _start.toEpoch ()
|
||||
<< "' _end '"
|
||||
<< _end.toEpoch ()
|
||||
out << "Filter _range.start '"
|
||||
<< _range.start ().toEpoch ()
|
||||
<< "' _range.end '"
|
||||
<< _range.end ().toEpoch ()
|
||||
<< "' _tags";
|
||||
|
||||
for (auto& tag : _tags)
|
||||
|
|
12
src/Filter.h
12
src/Filter.h
|
@ -27,7 +27,7 @@
|
|||
#ifndef INCLUDED_FILTER
|
||||
#define INCLUDED_FILTER
|
||||
|
||||
#include <Datetime.h>
|
||||
#include <Daterange.h>
|
||||
#include <string>
|
||||
#include <set>
|
||||
|
||||
|
@ -37,11 +37,8 @@ public:
|
|||
Filter () = default;
|
||||
bool empty () const;
|
||||
|
||||
Datetime start () const;
|
||||
void start (Datetime);
|
||||
|
||||
Datetime end () const;
|
||||
void end (Datetime);
|
||||
Daterange range () const;
|
||||
void range (const Daterange&);
|
||||
|
||||
std::set <std::string> tags () const;
|
||||
void tag (const std::string&);
|
||||
|
@ -49,8 +46,7 @@ public:
|
|||
std::string dump () const;
|
||||
|
||||
private:
|
||||
Datetime _start {0};
|
||||
Datetime _end {0};
|
||||
Daterange _range {};
|
||||
std::set <std::string> _tags {};
|
||||
};
|
||||
|
||||
|
|
|
@ -49,15 +49,9 @@
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void Timeline::start (const Datetime& when)
|
||||
void Timeline::range (const Daterange& range)
|
||||
{
|
||||
_range.start (when);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void Timeline::end (const Datetime& when)
|
||||
{
|
||||
_range.end (when);
|
||||
_range = range;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -102,7 +96,7 @@ std::string Timeline::dump () const
|
|||
{
|
||||
std::stringstream out;
|
||||
|
||||
out << "Timeline _range " << _range.dump ();
|
||||
out << "Timeline _range " << _range.start ().toISO () << " - " << _range.end ().toISO () << "\n";
|
||||
for (auto& i : _inclusions)
|
||||
out << " " << i.dump ();
|
||||
for (auto& e : _exclusions)
|
||||
|
|
|
@ -27,9 +27,9 @@
|
|||
#ifndef INCLUDED_TIMELINE
|
||||
#define INCLUDED_TIMELINE
|
||||
|
||||
#include <Datetime.h>
|
||||
#include <Interval.h>
|
||||
#include <Exclusion.h>
|
||||
#include <Daterange.h>
|
||||
#include <Rules.h>
|
||||
#include <vector>
|
||||
|
||||
|
@ -37,8 +37,7 @@ class Timeline
|
|||
{
|
||||
public:
|
||||
Timeline () = default;
|
||||
void start (const Datetime&);
|
||||
void end (const Datetime&);
|
||||
void range (const Daterange&);
|
||||
void include (const Interval&);
|
||||
void exclude (const Exclusion&);
|
||||
|
||||
|
@ -48,7 +47,7 @@ public:
|
|||
std::string dump () const;
|
||||
|
||||
private:
|
||||
Interval _range {};
|
||||
Daterange _range {};
|
||||
std::vector <Interval> _inclusions {};
|
||||
std::vector <Exclusion> _exclusions {};
|
||||
};
|
||||
|
|
|
@ -84,8 +84,8 @@ int CmdReport (
|
|||
auto intervals = timeline.tracked (rules);
|
||||
|
||||
// Compose Header info.
|
||||
rules.set ("temp.report.start", filter.start ().toEpoch () > 0 ? filter.start ().toISO () : "");
|
||||
rules.set ("temp.report.end", filter.end ().toEpoch () > 0 ? filter.end ().toISO () : "");
|
||||
rules.set ("temp.report.start", filter.range ().start ().toEpoch () > 0 ? filter.range ().start ().toISO () : "");
|
||||
rules.set ("temp.report.end", filter.range ().end ().toEpoch () > 0 ? filter.range ().end ().toISO () : "");
|
||||
std::string combinedTags;
|
||||
for (auto& tag : filter.tags ())
|
||||
{
|
||||
|
|
|
@ -177,8 +177,8 @@ Filter createFilterFromCLI (const CLI& cli)
|
|||
if (args.size () == 1 &&
|
||||
args[0] == "<date>")
|
||||
{
|
||||
filter.start (Datetime (start));
|
||||
filter.end (Datetime ("now"));
|
||||
filter.range ().start (Datetime (start));
|
||||
filter.range ().end (Datetime ("now"));
|
||||
}
|
||||
|
||||
// from <date>
|
||||
|
@ -186,8 +186,8 @@ Filter createFilterFromCLI (const CLI& cli)
|
|||
args[0] == "from" &&
|
||||
args[1] == "<date>")
|
||||
{
|
||||
filter.start (Datetime (start));
|
||||
filter.end (Datetime ("now"));
|
||||
filter.range ().start (Datetime (start));
|
||||
filter.range ().end (Datetime ("now"));
|
||||
}
|
||||
|
||||
// <date> to/- <date>
|
||||
|
@ -196,8 +196,8 @@ Filter createFilterFromCLI (const CLI& cli)
|
|||
(args[1] == "to" || args[1] == "-") &&
|
||||
args[2] == "<date>")
|
||||
{
|
||||
filter.start (Datetime (start));
|
||||
filter.end (Datetime (end));
|
||||
filter.range ().start (Datetime (start));
|
||||
filter.range ().end (Datetime (end));
|
||||
}
|
||||
|
||||
// from/since <date> to/- <date>
|
||||
|
@ -207,8 +207,8 @@ Filter createFilterFromCLI (const CLI& cli)
|
|||
(args[2] == "to" || args[2] == "-") &&
|
||||
args[3] == "<date>")
|
||||
{
|
||||
filter.start (Datetime (start));
|
||||
filter.end (Datetime (end));
|
||||
filter.range ().start (Datetime (start));
|
||||
filter.range ().end (Datetime (end));
|
||||
}
|
||||
|
||||
// <date> for <duration>
|
||||
|
@ -217,8 +217,8 @@ Filter createFilterFromCLI (const CLI& cli)
|
|||
args[1] == "for" &&
|
||||
args[2] == "<duration>")
|
||||
{
|
||||
filter.start (Datetime (start));
|
||||
filter.end (Datetime (start) + Duration (duration).toTime_t ());
|
||||
filter.range ().start (Datetime (start));
|
||||
filter.range ().end (Datetime (start) + Duration (duration).toTime_t ());
|
||||
}
|
||||
|
||||
// from/since <date> for <duration>
|
||||
|
@ -228,8 +228,8 @@ Filter createFilterFromCLI (const CLI& cli)
|
|||
args[2] == "for" &&
|
||||
args[3] == "<duration>")
|
||||
{
|
||||
filter.start (Datetime (start));
|
||||
filter.end (Datetime (start) + Duration (duration).toTime_t ());
|
||||
filter.range ().start (Datetime (start));
|
||||
filter.range ().end (Datetime (start) + Duration (duration).toTime_t ());
|
||||
}
|
||||
|
||||
// <duration> before <date>
|
||||
|
@ -238,8 +238,8 @@ Filter createFilterFromCLI (const CLI& cli)
|
|||
args[1] == "before" &&
|
||||
args[2] == "<date>")
|
||||
{
|
||||
filter.end (Datetime (start) - Duration (duration).toTime_t ());
|
||||
filter.end (Datetime (start));
|
||||
filter.range ().end (Datetime (start) - Duration (duration).toTime_t ());
|
||||
filter.range ().end (Datetime (start));
|
||||
}
|
||||
|
||||
// <duration> after <date>
|
||||
|
@ -248,16 +248,16 @@ Filter createFilterFromCLI (const CLI& cli)
|
|||
args[1] == "after" &&
|
||||
args[2] == "<date>")
|
||||
{
|
||||
filter.start (Datetime (start));
|
||||
filter.end (Datetime (start) + Duration (duration).toTime_t ());
|
||||
filter.range ().start (Datetime (start));
|
||||
filter.range ().end (Datetime (start) + Duration (duration).toTime_t ());
|
||||
}
|
||||
|
||||
// <duration>
|
||||
else if (args.size () == 1 &&
|
||||
args[0] == "<duration>")
|
||||
{
|
||||
filter.start (Datetime ("now") - Duration (duration).toTime_t ());
|
||||
filter.end (Datetime ("now"));
|
||||
filter.range ().start (Datetime ("now") - Duration (duration).toTime_t ());
|
||||
filter.range ().end (Datetime ("now"));
|
||||
}
|
||||
|
||||
// Unrecognized date range construct.
|
||||
|
@ -273,8 +273,8 @@ Filter createFilterFromCLI (const CLI& cli)
|
|||
Interval createIntervalFromFilter (const Filter& filter)
|
||||
{
|
||||
Interval interval;
|
||||
interval.start (filter.start ());
|
||||
interval.end (filter.end ());
|
||||
interval.range ().start (filter.range ().start ());
|
||||
interval.range ().end (filter.range ().end ());
|
||||
|
||||
for (auto& tag : filter.tags ())
|
||||
interval.tag (tag);
|
||||
|
@ -303,8 +303,7 @@ Timeline createTimelineFromData (
|
|||
const Filter& filter)
|
||||
{
|
||||
Timeline t;
|
||||
t.start (filter.start ());
|
||||
t.end (filter.end ());
|
||||
t.range (filter.range ());
|
||||
|
||||
// Add filtered intervals.
|
||||
for (auto& line : database.allLines ())
|
||||
|
@ -348,13 +347,13 @@ Interval getLatestInterval (Database& database)
|
|||
// are found in the interval.
|
||||
bool intervalMatchesFilter (const Interval& interval, const Filter& filter)
|
||||
{
|
||||
if ((filter.start ().toEpoch () == 0 &&
|
||||
filter.end ().toEpoch () == 0)
|
||||
if ((filter.range ().start ().toEpoch () == 0 &&
|
||||
filter.range ().end ().toEpoch () == 0)
|
||||
|
||||
||
|
||||
|
||||
(interval.end () > filter.start () &&
|
||||
interval.start () < filter.end ()))
|
||||
(interval.end () > filter.range ().start () &&
|
||||
interval.start () < filter.range ().end ()))
|
||||
{
|
||||
for (auto& tag : filter.tags ())
|
||||
if (! interval.hasTag (tag))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue