mirror of
https://github.com/GothenburgBitFactory/timewarrior.git
synced 2025-07-07 20:06:39 +02:00
Database: Switch the natural order from newest inclusion to oldest
The inclusion database for the user always starts with the most recent entry. It is now the same way in the code as well.
This commit is contained in:
parent
623db0c8e4
commit
5dcf226d20
4 changed files with 52 additions and 44 deletions
|
@ -39,12 +39,15 @@ Database::iterator::iterator (files_iterator fbegin, files_iterator fend) :
|
|||
files_it(fbegin),
|
||||
files_end(fend)
|
||||
{
|
||||
if (files_end != files_it) {
|
||||
if (files_end != files_it)
|
||||
{
|
||||
auto &lines = files_it->allLines ();
|
||||
lines_it = lines.begin ();
|
||||
lines_end = lines.end ();
|
||||
lines_it = lines.rbegin ();
|
||||
lines_end = lines.rend ();
|
||||
while ((lines_it == lines_end) && (files_it != files_end))
|
||||
{
|
||||
++files_it;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -66,8 +69,8 @@ Database::iterator& Database::iterator::operator++()
|
|||
if (files_it != files_end)
|
||||
{
|
||||
auto& lines = files_it->allLines ();
|
||||
lines_it = lines.begin ();
|
||||
lines_end = lines.end ();
|
||||
lines_it = lines.rbegin ();
|
||||
lines_end = lines.rend ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -114,10 +117,12 @@ Database::reverse_iterator::reverse_iterator (files_iterator fbegin,
|
|||
{
|
||||
if (files_end != files_it)
|
||||
{
|
||||
lines_it = files_it->allLines ().rbegin ();
|
||||
lines_end = files_it->allLines ().rend ();
|
||||
lines_it = files_it->allLines ().begin ();
|
||||
lines_end = files_it->allLines ().end ();
|
||||
while ((lines_it == lines_end) && (files_it != files_end))
|
||||
{
|
||||
++files_it;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -138,8 +143,8 @@ Database::reverse_iterator& Database::reverse_iterator::operator++()
|
|||
++files_it;
|
||||
if (files_it != files_end)
|
||||
{
|
||||
lines_it = files_it->allLines ().rbegin ();
|
||||
lines_end = files_it->allLines ().rend ();
|
||||
lines_it = files_it->allLines ().begin ();
|
||||
lines_end = files_it->allLines ().end ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -187,13 +192,18 @@ Database::iterator Database::begin ()
|
|||
initializeDatafiles ();
|
||||
}
|
||||
|
||||
return iterator(_files.begin (), _files.end ());
|
||||
return iterator (_files.rbegin (), _files.rend ());
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Database::iterator Database::end ()
|
||||
{
|
||||
return iterator (_files.end (), _files.end ());
|
||||
if (_files.empty ())
|
||||
{
|
||||
initializeDatafiles ();
|
||||
}
|
||||
|
||||
return iterator (_files.rend (), _files.rend ());
|
||||
}
|
||||
|
||||
|
||||
|
@ -205,7 +215,7 @@ Database::reverse_iterator Database::rbegin ()
|
|||
initializeDatafiles ();
|
||||
}
|
||||
|
||||
return reverse_iterator (_files.rbegin (), _files.rend ());
|
||||
return reverse_iterator(_files.begin (), _files.end ());
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -216,7 +226,7 @@ Database::reverse_iterator Database::rend ()
|
|||
initializeDatafiles ();
|
||||
}
|
||||
|
||||
return reverse_iterator (_files.rend (), _files.rend ());
|
||||
return reverse_iterator (_files.end (), _files.end ());
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -251,15 +261,16 @@ std::vector <std::string> Database::files () const
|
|||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Walk backwards through the files until an interval is found.
|
||||
std::string Database::lastLine ()
|
||||
// Return most recent line from database
|
||||
std::string Database::firstLine ()
|
||||
{
|
||||
auto it = rbegin ();
|
||||
auto end = rend ();
|
||||
|
||||
while (it != end)
|
||||
if (! it->empty ())
|
||||
return *it;
|
||||
for (auto& line : *this)
|
||||
{
|
||||
if (! line.empty ())
|
||||
{
|
||||
return line;
|
||||
}
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
@ -424,8 +435,8 @@ void Database::initializeTagDatabase ()
|
|||
|
||||
if (!File::read (_location + "/tags.data", content))
|
||||
{
|
||||
auto it = rbegin ();
|
||||
auto end = rend ();
|
||||
auto it = Database::begin ();
|
||||
auto end = Database::end ();
|
||||
|
||||
if (it == end)
|
||||
return;
|
||||
|
|
|
@ -44,8 +44,8 @@ public:
|
|||
{
|
||||
private:
|
||||
friend class Database;
|
||||
typedef std::vector <Datafile>::iterator files_iterator;
|
||||
typedef std::vector <std::string>::const_iterator lines_iterator;
|
||||
typedef std::vector <Datafile>::reverse_iterator files_iterator;
|
||||
typedef std::vector <std::string>::const_reverse_iterator lines_iterator;
|
||||
typedef std::string value_type;
|
||||
|
||||
files_iterator files_it;
|
||||
|
@ -70,8 +70,8 @@ public:
|
|||
{
|
||||
private:
|
||||
friend class Database;
|
||||
typedef std::vector <Datafile>::reverse_iterator files_iterator;
|
||||
typedef std::vector <std::string>::const_reverse_iterator lines_iterator;
|
||||
typedef std::vector <Datafile>::iterator files_iterator;
|
||||
typedef std::vector <std::string>::const_iterator lines_iterator;
|
||||
typedef std::string value_type;
|
||||
|
||||
files_iterator files_it;
|
||||
|
@ -98,7 +98,7 @@ public:
|
|||
void commit ();
|
||||
std::vector <std::string> files () const;
|
||||
|
||||
std::string lastLine ();
|
||||
std::string firstLine ();
|
||||
|
||||
void addInterval (const Interval&, bool verbose);
|
||||
void deleteInterval (const Interval&);
|
||||
|
|
23
src/data.cpp
23
src/data.cpp
|
@ -315,10 +315,11 @@ std::vector <Range> getAllExclusions (
|
|||
std::vector <Interval> getAllInclusions (Database& database)
|
||||
{
|
||||
std::vector <Interval> all;
|
||||
for (auto& line : database)
|
||||
auto it = database.rbegin ();
|
||||
auto end = database.rend ();
|
||||
for ( ;it != end; ++it)
|
||||
{
|
||||
Interval i = IntervalFactory::fromSerialization (line);
|
||||
all.push_back (i);
|
||||
all.push_back (IntervalFactory::fromSerialization (*it));
|
||||
}
|
||||
|
||||
return all;
|
||||
|
@ -572,8 +573,8 @@ std::vector <Interval> getTracked (
|
|||
// Avoid assigning a zero-width range - leave it unstarted instead.
|
||||
if (! filter.is_started ())
|
||||
{
|
||||
auto begin = database.begin ();
|
||||
auto end = database.end ();
|
||||
auto begin = database.rbegin ();
|
||||
auto end = database.rend ();
|
||||
if (begin != end)
|
||||
{
|
||||
filter.start = IntervalFactory::fromSerialization (*begin).start;
|
||||
|
@ -588,11 +589,9 @@ std::vector <Interval> getTracked (
|
|||
int id_skip = 0;
|
||||
std::deque <Interval> intervals;
|
||||
|
||||
auto it = database.rbegin ();
|
||||
auto end = database.rend ();
|
||||
for (; it != end; ++it)
|
||||
for (auto& line : database)
|
||||
{
|
||||
Interval interval = IntervalFactory::fromSerialization(*it);
|
||||
Interval interval = IntervalFactory::fromSerialization(line);
|
||||
|
||||
// Since we are moving backwards, and the intervals are in sorted order,
|
||||
// if the filter is after the interval, we know there will be no more
|
||||
|
@ -668,9 +667,9 @@ std::vector <Range> getUntracked (
|
|||
Interval getLatestInterval (Database& database)
|
||||
{
|
||||
Interval i;
|
||||
auto lastLine = database.lastLine ();
|
||||
if (! lastLine.empty ())
|
||||
i = IntervalFactory::fromSerialization (lastLine);
|
||||
auto firstLine = database.firstLine ();
|
||||
if (! firstLine.empty ())
|
||||
i = IntervalFactory::fromSerialization (firstLine);
|
||||
|
||||
return i;
|
||||
}
|
||||
|
|
|
@ -87,11 +87,9 @@ std::string intervalSummarize (
|
|||
// acceptable definition of "the current task".
|
||||
time_t total_recorded = 0;
|
||||
|
||||
auto i = database.rbegin ();
|
||||
auto end = database.rend ();
|
||||
for (; i != end; ++i)
|
||||
for (auto& line : database)
|
||||
{
|
||||
Interval current = IntervalFactory::fromSerialization (*i);
|
||||
Interval current = IntervalFactory::fromSerialization (line);
|
||||
if (interval.tags () == current.tags ())
|
||||
total_recorded += current.total ();
|
||||
else
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue