Recurring Tasks - new "weekdays" frequency

- Added support for "weekdays" as a recurrence frequency, which skips
  Saturday and Sunday, but is otherwise a daily recurrence.  Thanks
  to Chris Pride.
This commit is contained in:
Paul Beckingham 2009-03-18 23:29:25 -04:00
parent 3c196230dd
commit 3d3d788961
8 changed files with 249 additions and 164 deletions

View file

@ -8,6 +8,7 @@ Contributing Authors:
Stefan Dorn Stefan Dorn
Michael Greb Michael Greb
Benjamin Tegarden Benjamin Tegarden
Chris Pride
With thanks to: With thanks to:
Eugene Kramer Eugene Kramer

230
ChangeLog
View file

@ -4,6 +4,8 @@
1.6.0 (?) 1.6.0 (?)
+ Added support for new "append" command that adds more description text to + Added support for new "append" command that adds more description text to
an existing task. an existing task.
+ Added support for the "weekdays" recurrence, which means a task can recur
five times a week, and not on weekends (thanks to Chris Pride).
------ old releases ------------------------------ ------ old releases ------------------------------
@ -52,12 +54,12 @@
1.4.3 (11/1/2008) 8639e9260646c8c9224e0fc47e5d2443b46eecfc 1.4.3 (11/1/2008) 8639e9260646c8c9224e0fc47e5d2443b46eecfc
+ Fixed misleading task count at bottom on "info" report. + Fixed misleading task count at bottom on "info" report.
+ Added support for a shadow file that contains a plain text task report, + Added support for a shadow file that contains a plain text task report,
with the "shadow.file" and "shadow.command" configuration variables with the "shadow.file" and "shadow.command" configuration variables.
The shadow file is automatically updated whenever the task database The shadow file is automatically updated whenever the task database
changes. Useful for integrating with "Samurize" changes. Useful for integrating with "Samurize".
+ Task now displays a message whenever a shadow file is updated, if the + Task now displays a message whenever a shadow file is updated, if the
"shadow.notify" configuration variable is set "on" "shadow.notify" configuration variable is set "on".
+ Bug: adding a task with a \n, \r or \f in it now fails properly + Bug: adding a task with a \n, \r or \f in it now fails properly.
+ Removed "usage" command, and support for "command.logging" configuration + Removed "usage" command, and support for "command.logging" configuration
variable. variable.
+ Added documentation for Shadow files. + Added documentation for Shadow files.
@ -65,111 +67,111 @@
1.4.2 (9/18/2008) e7304e86ce9bb80978c7055fd2a9e999619a6fb8 1.4.2 (9/18/2008) e7304e86ce9bb80978c7055fd2a9e999619a6fb8
+ "task undo" can now retract a "task done" command, provided no reports + "task undo" can now retract a "task done" command, provided no reports
have been run (and therefore TDB::gc run) have been run (and therefore TDB::gc run).
+ Task now correctly sorts on entire strings, instead of just the first + Task now correctly sorts on entire strings, instead of just the first
character (thanks to Andy Lester) character (thanks to Andy Lester).
+ Task now uses dashes (-----) to column underlines when color is disabled + Task now uses dashes (-----) to column underlines when color is disabled
(thanks to Vincent Fleuranceau) (thanks to Vincent Fleuranceau).
+ Task now allows mixed case attribute names (pri:, PRI:, Pri: ...) and + Task now allows mixed case attribute names (pri:, PRI:, Pri: ...) and
commands (add, ADD, Add ...) (thanks to Vincent Fleuranceau) commands (add, ADD, Add ...) (thanks to Vincent Fleuranceau).
+ Task now supports a default project and priority for new tasks, via + Task now supports a default project and priority for new tasks, via
the new "default.project" and "default.priority" configuration variables the new "default.project" and "default.priority" configuration variables
(thanks to Vincent Fleuranceau) (thanks to Vincent Fleuranceau).
+ Task supports improved word-wrapping to the terminal width + Task supports improved word-wrapping to the terminal width.
+ Task now supports "default.command" configuration variable (for example + Task now supports "default.command" configuration variable (for example
it could contain "list due:tomorrow") that is the command that is run it could contain "list due:tomorrow") that is the command that is run
whenever task is invoked with no arguments. whenever task is invoked with no arguments.
+ Task supports modifying the existing description of a task, with the + Task supports modifying the existing description of a task, with the
following syntax: task <id> "new description ...". following syntax: task <id> "new description ...".
+ Bug: Now properly supports relative dates in filters (task list due:eom, + Bug: Now properly supports relative dates in filters (task list due:eom,
task list due:tomorrow, task list due:23rd ...) task list due:tomorrow, task list due:23rd ...).
+ Bug: Source now properly includes <string.h> in order to build clean + Bug: Source now properly includes <string.h> in order to build clean
using gcc 4.3 (thanks to H. İbrahim Güngör) using gcc 4.3 (thanks to H. İbrahim Güngör).
1.4.1 (7/18/2008) e080c3168c6064628ab85b21bd859d9875a3a9a7 1.4.1 (7/18/2008) e080c3168c6064628ab85b21bd859d9875a3a9a7
+ Bug: Descriptions can not be altered with "task 123 New description" + Bug: Descriptions can not be altered with "task 123 New description".
+ Tweak: For "task calendar" month names are now centered over the month + Tweak: For "task calendar" month names are now centered over the month.
+ Removed TUTORIAL file contents in favor of online version + Removed TUTORIAL file contents in favor of online version.
+ Provided Mac .pkg binary + Provided Mac .pkg binary.
1.4.0 (7/10/2008) 60b7d15a1d22e064acf0974c5d7eabbb57dd8071 1.4.0 (7/10/2008) 60b7d15a1d22e064acf0974c5d7eabbb57dd8071
+ New recurring tasks feature + New recurring tasks feature.
+ "task undelete" can now undelete erroneously deleted tasks, provided no + "task undelete" can now undelete erroneously deleted tasks, provided no
reports have been run (and therefore TDB::gc run) reports have been run (and therefore TDB::gc run).
+ Added averages to the "task history" report + Added averages to the "task history" report.
+ Added ability to override ~/.taskrc with rc:<file> + Added ability to override ~/.taskrc with rc:<file>.
+ Added bar chart history report "task ghistory" + Added bar chart history report "task ghistory".
+ Added task filtering on all reports + Added task filtering on all reports.
+ Automatically shuts off color, curses when output is not a tty + Automatically shuts off color, curses when output is not a tty.
+ Supports relative due: dates (tomorrow, wednesday, 23rd, eom ...) + Supports relative due: dates (tomorrow, wednesday, 23rd, eom ...).
+ Supports the ~ character in .taskrc data.location + Supports the ~ character in .taskrc data.location.
+ Allows colons on the description, provided what is to the left of the colon + Allows colons on the description, provided what is to the left of the colon
is not a standard attribute name is not a standard attribute name.
+ Bug: Fixed where Esc[0m sequences were being emitted for no good reason + Bug: Fixed where Esc[0m sequences were being emitted for no good reason.
+ Bug: Fixed underlined table headers when color is turned off + Bug: Fixed underlined table headers when color is turned off.
+ Bug: Adding a blank priority resulted in an assigned garbage value + Bug: Adding a blank priority resulted in an assigned garbage value.
+ Bug: Fixed parsing of date "07/08/2008" when using dateformat "m/d/Y" + Bug: Fixed parsing of date "07/08/2008" when using dateformat "m/d/Y".
1.3.1 (6/21/2008) 3a6de7d9402f2609a773a73b16eff97b14a32869 1.3.1 (6/21/2008) 3a6de7d9402f2609a773a73b16eff97b14a32869
+ New configuration variable, "defaultwidth" that determines the width + New configuration variable, "defaultwidth" that determines the width
of tables when ncurses support is not available of tables when ncurses support is not available.
+ Bug: "showage" configuration variable should apply to all reports, not + Bug: "showage" configuration variable should apply to all reports, not
just the ones based on "list" just the ones based on "list".
+ Bug: Fixed segmentation faults on Ubuntu when the "dateformat" + Bug: Fixed segmentation faults on Ubuntu when the "dateformat"
configuration variables was missing. This was a code bug, and should configuration variables was missing. This was a code bug, and should
have affected more platforms have affected more platforms.
+ Bug: Task now will recreate a missing ~/.taskrc file, OR a missing + Bug: Task now will recreate a missing ~/.taskrc file, OR a missing
~/.task directory ~/.task directory.
1.3.0 (6/18/2008) 6673e408a223af98c38779c20b08524042c0edfa 1.3.0 (6/18/2008) 6673e408a223af98c38779c20b08524042c0edfa
+ "task calendar" now displays multiple months per line, adjustable by the + "task calendar" now displays multiple months per line, adjustable by the
"monthsperline" configuration variable. Feature added by Damian Glenny "monthsperline" configuration variable. Feature added by Damian Glenny.
+ "task export" can now filter tasks like the reports + "task export" can now filter tasks like the reports.
+ Factored out code to filter tasks + Factored out code to filter tasks.
+ Displays shorter message when a command is entered incorrectly, and the + Displays shorter message when a command is entered incorrectly, and the
full usage for "task help" full usage for "task help".
+ "task oldest" shows the oldest tasks + "task oldest" shows the oldest tasks.
+ "task newest" shows the newest tasks + "task newest" shows the newest tasks.
+ Bug: Segmentation fault when no "dateformat" configuration variable + Bug: Segmentation fault when no "dateformat" configuration variable
specified specified.
+ Bug: Fixed bug whereby if you have more than one task with a due date, 7 + Bug: Fixed bug whereby if you have more than one task with a due date, 7
days gets added to the entry date of task 2..n days gets added to the entry date of task 2..n.
+ Bug: Fixed bug whereby "1 wks" was being improperly pluralized + Bug: Fixed bug whereby "1 wks" was being improperly pluralized.
1.2.0 (6/13/2008) c393d47cdfe7e197a31e94f4bb764474fa05ad8d 1.2.0 (6/13/2008) c393d47cdfe7e197a31e94f4bb764474fa05ad8d
+ Bug: "dateformat" configuration variable used to display dates, but + Bug: "dateformat" configuration variable used to display dates, but
not parse them not parse them.
+ "task list x" now performs a caseless comparison between "x" and the + "task list x" now performs a caseless comparison between "x" and the
description description.
+ Task sub projects supported + Task sub projects supported.
+ "showage" confguration determines whether "Age" column appears on the + "showage" confguration determines whether "Age" column appears on the
"list" and "next" reports "list" and "next" reports.
+ Improved TUTORIAL + Improved TUTORIAL.
1.1.0 (6/7/2008) 73286e86628725b346db2a25fbcd4bd68efb9b3a 1.1.0 (6/7/2008) 73286e86628725b346db2a25fbcd4bd68efb9b3a
+ "blanklines" configuration to stop displaying unnecessary white + "blanklines" configuration to stop displaying unnecessary white
space and thus work better on small-screen devices space and thus work better on small-screen devices.
+ "dateformat" configuration now determines how dates are formatted + "dateformat" configuration now determines how dates are formatted.
+ Better formatting of "task tags" output + Better formatting of "task tags" output.
+ http://www.beckingham.net/task.html home page set up + http://www.beckingham.net/task.html home page set up.
+ Added tags to the "task long" report + Added tags to the "task long" report.
1.0.1 (6/4/2008) d216d401217027d93581808fc8944ab7d6b85fb0 1.0.1 (6/4/2008) d216d401217027d93581808fc8944ab7d6b85fb0
+ Bug: UUID generator not properly terminating string. + Bug: UUID generator not properly terminating string.
+ Bug: srandom/srand not called prior to UUID generation. + Bug: srandom/srand not called prior to UUID generation.
1.0.0 (6/3/2008) f3de5c07118c597091a05c7d7fe8bdeae95474c1 1.0.0 (6/3/2008) f3de5c07118c597091a05c7d7fe8bdeae95474c1
+ New movie made, uploaded + New movie made, uploaded.
+ Bug: assertion fails on mobile for t v + Bug: assertion fails on mobile for t v.
+ Bug: configure.ac does not properly determine ncurses availability + Bug: configure.ac does not properly determine ncurses availability.
+ Bug: Cannot seem to use the percent character in a task description + Bug: Cannot seem to use the percent character in a task description.
+ Bug: New installation "task stats" reports newest task 12/31/1969 + Bug: New installation "task stats" reports newest task 12/31/1969.
+ Bug: New installation task projects displays header but no data - should short-circuit + Bug: New installation task projects displays header but no data - should short-circuit.
+ Bug: incorrect color specification in sample .taskrc file + Bug: incorrect color specification in sample .taskrc file.
+ Bug: when run without arguments, task dumps core on Solaris 10 + Bug: when run without arguments, task dumps core on Solaris 10.
+ "task calendar" now reports all months with due pending tasks + "task calendar" now reports all months with due pending tasks.
+ Added rules for colorization by tag, project and keyword + Added rules for colorization by tag, project and keyword.
+ Added legend to "task calendar" + Added legend to "task calendar".
0.9.9 (5/27/2008) 2ecf50032226c91b406f247417a063dc17c8e324 0.9.9 (5/27/2008) 2ecf50032226c91b406f247417a063dc17c8e324
+ Autoconf/automake behaving properly. + Autoconf/automake behaving properly.
@ -184,8 +186,8 @@
+ Completed documentation. + Completed documentation.
0.9.7 (5/24/2008) 25dc4150947a3e612c8118838d04b3bbe68441f7 0.9.7 (5/24/2008) 25dc4150947a3e612c8118838d04b3bbe68441f7
+ Migrated old compiler flags into Makefile.am + Migrated old compiler flags into Makefile.am.
+ Added ncurses endwin function check to configure.ac + Added ncurses endwin function check to configure.ac.
+ Set up structure for AUTHORS file. + Set up structure for AUTHORS file.
+ Set up NEWS file, with pleas for feedback. + Set up NEWS file, with pleas for feedback.
+ Added welcome message to README. + Added welcome message to README.
@ -196,31 +198,31 @@
+ Removed unnecessary SAMPLE_taskrc, and assorted references. + Removed unnecessary SAMPLE_taskrc, and assorted references.
+ Cleaned up ChangeLog. + Cleaned up ChangeLog.
+ Minor mods to standard docs. + Minor mods to standard docs.
+ Bumped version to 0.9.7 + Bumped version to 0.9.7.
+ Changed some autoconf details + Changed some autoconf details.
+ Corrected comment in T.cpp + Corrected comment in T.cpp.
+ Made unit tests compile and run again. + Made unit tests compile and run again.
+ Removed tests from distibution. + Removed tests from distibution.
0.9.6 (5/13/208) 0.9.6 (5/13/208)
+ Corrected wrong include file in Table.cpp + Corrected wrong include file in Table.cpp.
+ Replaced color management code. + Replaced color management code.
+ Improved color rules code. + Improved color rules code.
0.9.5 (5/12/2008) 0.9.5 (5/12/2008)
+ Replaced Table storage with Grid. + Replaced Table storage with Grid.
+ Added Grid.cpp to configure.ac + Added Grid.cpp to configure.ac.
+ Added Makefile to src/.gitignore + Added Makefile to src/.gitignore.
+ Makefile should not be part of the repository. + Makefile should not be part of the repository.
+ Added Grid.cpp + Added Grid.cpp.
+ Added Grid::Cell::operator== + Added Grid::Cell::operator==.
+ ChangeLog file begun. + ChangeLog file begun.
+ Bumped version to 0.9.5 for next release. + Bumped version to 0.9.5 for next release.
0.9.4 (4/26/2008) 0.9.4 (4/26/2008)
+ Integrated new Grid object into build - not yet integrated into Table. + Integrated new Grid object into build - not yet integrated into Table.
+ More .gitignore tweaks. + More .gitignore tweaks.
+ Added .gitignore + Added .gitignore.
+ Added more missing files. + Added more missing files.
+ Added all source code. + Added all source code.
+ Generic OSS files added. + Generic OSS files added.
@ -241,29 +243,29 @@
+ Consolidated header files, removed unnecessary ones. + Consolidated header files, removed unnecessary ones.
0.9.0 (3/23/2008) 0.9.0 (3/23/2008)
+ flat source directory + flat source directory.
+ autoconf complete + autoconf complete.
+ "task next" + "task next".
+ "task stats" + "task stats".
+ "task export" + "task export".
+ Rules-based colorization + Rules-based colorization.
0.8.1 (1/28/2008) - 0.8.16 (3/13/2008) 0.8.1 (1/28/2008) - 0.8.16 (3/13/2008)
+ autoconf conversion (many builds) + autoconf conversion (many builds).
0.8.0 Polish (1/25/2008) 0.8.0 Polish (1/25/2008)
+ Code cleanup, reorganization + Code cleanup, reorganization.
+ "task overdue" + "task overdue".
+ Add "age" column to list and long + Add "age" column to list and long.
+ Use 'conf' for build, version tracking + Use 'conf' for build, version tracking.
+ Add "/from/to/" description editing + Add "/from/to/" description editing.
0.7.0 Multi-user, File handling, atomicity (1/8/2008) 0.7.0 Multi-user, File handling, atomicity (1/8/2008)
+ Clean, publishable API reimplementation + Clean, publishable API reimplementation.
+ File locking + File locking.
+ retain deleted tasks + retain deleted tasks.
+ "task info ID" report showing all metadata + "task info ID" report showing all metadata.
+ File format v2, including UUID + File format v2, including UUID.
[Development hiatus while planning for T, TDB API, new features and the future [Development hiatus while planning for T, TDB API, new features and the future
of the project. Seeded to two testers for feedback, suggestions. Development of the project. Seeded to two testers for feedback, suggestions. Development
@ -271,40 +273,40 @@ deliberately stopped to allow extended use of task, allowing command logging and
regular usage to determine which features were needed or unnecessary.] regular usage to determine which features were needed or unnecessary.]
0.6.0 Reports (12/27/2006) 0.6.0 Reports (12/27/2006)
+ "task history" + "task history".
+ "task summary" + "task summary".
+ "task calendar" + "task calendar".
+ due support + due support.
+ Table sorting + Table sorting.
0.5.0 Multi-user support (12/10/2006) 0.5.0 Multi-user support (12/10/2006)
+ Command logging + Command logging.
+ "task usage" report + "task usage" report.
0.4.0 Destructive / modification commands (12/3/2006) 0.4.0 Destructive / modification commands (12/3/2006)
+ "task delete" complete + "task delete" complete.
+ "task id ..." complete + "task id ..." complete.
+ "task list ..." synonym for "task find ..." + "task list ..." synonym for "task find ...".
0.3.0 Work in progress support (12/3/2006) 0.3.0 Work in progress support (12/3/2006)
+ "task start" complete + "task start" complete.
+ "task done" complete + "task done" complete.
+ completed.data support + completed.data support.
0.2.0 Neutral commands (12/2/2006) 0.2.0 Neutral commands (12/2/2006)
+ "task find" complete + "task find" complete.
+ "task projects" complete + "task projects" complete.
+ "task tags" complete + "task tags" complete.
0.1.0 Constructive commands (12/1/2006) 0.1.0 Constructive commands (12/1/2006)
+ "task add" complete + "task add" complete.
+ completed.data support + completed.data support.
+ ~/.taskrc support + ~/.taskrc support.
0.0.1 Basic infrastructure (11/29/2006) 0.0.1 Basic infrastructure (11/29/2006)
+ Command line parsing + Command line parsing.
+ API layer + API layer.
+ Usage + Usage.
------ start ----------------------------------- ------ start -----------------------------------

View file

@ -116,6 +116,13 @@ recurrences of this same task? (y/n) y</code></pre>
<td class="table_d">daily, day, 1d, 2d ...</td> <td class="table_d">daily, day, 1d, 2d ...</td>
<td class="table_d">Every day, or a number of days</td> <td class="table_d">Every day, or a number of days</td>
</tr> </tr>
<tr>
<td class="table_d">weekdays</td>
<td class="table_d">
Monday, Tuesday, Wednesday, Thursday and Friday,
skipping weekend days
</td>
</tr>
<tr> <tr>
<td class="table_d">weekly, 1w, 2w ...</td> <td class="table_d">weekly, 1w, 2w ...</td>
<td class="table_d">Every week, or a number of weeks</td> <td class="table_d">Every week, or a number of weeks</td>

View file

@ -1,109 +1,109 @@
Hello, and welcome to this quick demo of the task program. Hello, and welcome to this quick demo of the task program.
task add do laundry Let's add some tasks task add do laundry Let's add some tasks
I need to do laundry I need to do laundry
task add project:garage order dumpster Oh yeah, I need to order the dumpster task add project:garage order dumpster Oh yeah, I need to order the dumpster
task add +phone tell mom i loveher Must call Mom (that "phone" there is a tag - they can task add +phone tell mom i loveher Must call Mom (that "phone" there is a tag - they can
be useful for searching and categorizing) be useful for searching and categorizing)
task add +phone pro:garage schedule task add +phone pro:garage schedule
goodwill pickup goodwill pickup
task ad +email pro:garage ask Tom if Notice I can abbreviate commands task ad +email pro:garage ask Tom if Notice I can abbreviate commands
he wants that old bkie he wants that old bkie
task ls Let's see what we've got task ls Let's see what we've got
Oh, I spelled bike wrong Oh, I spelled bike wrong
task 5 /bkie/bike/ task 5 /bkie/bike/
task ls That's better task ls That's better
task 1 pro:home Let's assign projects task 1 pro:home Let's assign projects
task 3 pro:home tell mom I love her task 3 pro:home tell mom I love her
task ls pro:garage task ls pro:garage
task long pro:garage Let's see all the columns task long pro:garage Let's see all the columns
task list pro:garage There are different ways to list task list pro:garage There are different ways to list
task lis +phone By tag task lis +phone By tag
task li pro:garage +phone By project and tag task li pro:garage +phone By project and tag
task l mom By word task l mom By word
task 1 priority:H Priorities can be High, Medium or Low task 1 priority:H Priorities can be High, Medium or Low
task pri:H 3 task pri:H 3
task 1 pri:M task 1 pri:M
task li The list is sorted by priority. task li The list is sorted by priority.
task 2 pri:L task 2 pri:L
task li task li
task done 3 Suppose task 3 is done task done 3 Suppose task 3 is done
task li ...and it's gone task li ...and it's gone
task 2 +phone +mistake Lets add tags task 2 +phone +mistake Lets add tags
# Oops! # Oops!
task 2 -mistake or remove tags task 2 -mistake or remove tags
task tags or look at all the tags task tags or look at all the tags
task info 2 or all the details task info 2 or all the details
task projects or all the projects task projects or all the projects
task 3 fg:bold Let's make it colorful task 3 fg:bold Let's make it colorful
task 4 fg:bold_green task 4 fg:bold_green
task li task li
task 3 fg:bold_underline_white task 3 fg:bold_underline_white
task li task li
task 4 bg:on_bright_red fg:bold_yellow task 4 bg:on_bright_red fg:bold_yellow
task li Oh that's just nasty - let's get rid of that. task li Oh that's just nasty - let's get rid of that.
task 4 bg: task 4 bg:
task li task li
task 4 fg: task 4 fg:
task 3 fg: task 3 fg:
task colors There are many combinations to choose from task colors There are many combinations to choose from
(Slashes!!!) (Slashes!!!)
task 1 due:6/8/2008 Let's add a due date task 1 due:6/8/2008 Let's add a due date
date date
task li task li
task calendar Notice the due task is in yellow, today is marked cyan task calendar Notice the due task is in yellow, today is marked cyan
task 1 due:5/20/2008 This is now an overdue task task 1 due:5/20/2008 This is now an overdue task
task li and it shows up red task li and it shows up red
task overdue task overdue
task cal task cal
task export file.csv You can export the tasks to a spreadsheet task export file.csv You can export the tasks to a spreadsheet
cat file.csv cat file.csv
task start 1 Started tasks can be used as reminders task start 1 Started tasks can be used as reminders
of what you are supposed to be doing of what you are supposed to be doing
task active They show up as active task active They show up as active
task done 1 Let's clear out a couple task done 1 Let's clear out a couple
task li task li
task done 3 task done 3
task active task active
task summary Summary shows progress on all projects task summary Summary shows progress on all projects
task history History shows general activity - how many added, task history History shows general activity - how many added,
completed etc, by month completed etc, by month
task ghistory This report shows a histogram of tasks that were task ghistory This report shows a histogram of tasks that were
added (in red), completed (in green) and deleted added (in red), completed (in green) and deleted
(in yellow), all by month. (in yellow), all by month.
And that's it. There are more commands than this And that's it. There are more commands than this
covered in the online documentation, but this should give covered in the online documentation, but this should give
the basic idea. the basic idea.
Thank you for watching. Thank you for watching.

View file

@ -565,6 +565,18 @@ Date getNextRecurrence (Date& current, std::string& period)
return Date (m, d, y); return Date (m, d, y);
} }
if (period == "weekdays")
{
int dow = current.dayOfWeek ();
int days;
if (dow == 5) days = 3;
else if (dow == 6) days = 2;
else days = 1;
return current + (days * 86400);
}
if (isdigit (period[0]) && period[period.length () - 1] == 'm') if (isdigit (period[0]) && period[period.length () - 1] == 'm')
{ {
std::string numeric = period.substr (0, period.length () - 1); std::string numeric = period.substr (0, period.length () - 1);

View file

@ -54,9 +54,6 @@ $output = qx{../task rc:recur.rc desc};
like ($output, qr/second .* third .* first/msx, 'weekly 3d daily'); like ($output, qr/second .* third .* first/msx, 'weekly 3d daily');
# Cleanup. # Cleanup.
unlink 'shadow.txt';
ok (!-r 'shadow.txt', 'Removed shadow.txt');
unlink 'pending.data'; unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data'); ok (!-r 'pending.data', 'Removed pending.data');

64
src/tests/recur.weekdays.t Executable file
View file

@ -0,0 +1,64 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2009, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 7;
# Create the rc file.
if (open my $fh, '>', 'recur.rc')
{
print $fh "data.location=.\n";
close $fh;
ok (-r 'recur.rc', 'Created recur.rc');
}
# Create a few recurring tasks, and test the sort order of the recur column.
qx{../task rc:recur.rc add due:friday recur:weekdays one};
my $output = qx{../task rc:recur.rc list};
like ($output, qr/one/, 'recur weekdays');
$output = qx{../task rc:recur.rc info 1};
like ($output, qr/Status\s+Recurring/, 'task is recurring');
like ($output, qr/Recurrence\s+weekdays/, 'task recurs every weekday');
qx{../task rc:recur.rc do 1};
$output = qx{../task rc:recur.rc list};
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'completed.data';
ok (!-r 'completed.data', 'Removed completed.data');
unlink 'recur.rc';
ok (!-r 'recur.rc', 'Removed recur.rc');
exit 0;

View file

@ -250,6 +250,7 @@ int convertDuration (const std::string& input)
std::vector <std::string> supported; std::vector <std::string> supported;
supported.push_back ("daily"); supported.push_back ("daily");
supported.push_back ("day"); supported.push_back ("day");
supported.push_back ("weekdays");
supported.push_back ("weekly"); supported.push_back ("weekly");
supported.push_back ("sennight"); supported.push_back ("sennight");
supported.push_back ("biweekly"); supported.push_back ("biweekly");
@ -269,6 +270,7 @@ int convertDuration (const std::string& input)
std::string found = matches[0]; std::string found = matches[0];
if (found == "daily" || found == "day") return 1; if (found == "daily" || found == "day") return 1;
else if (found == "weekdays") return 1;
else if (found == "weekly" || found == "sennight") return 7; else if (found == "weekly" || found == "sennight") return 7;
else if (found == "biweekly" || found == "fortnight") return 14; else if (found == "biweekly" || found == "fortnight") return 14;
else if (found == "monthly") return 30; else if (found == "monthly") return 30;