Fixes a regression introduced in 9e160fa (Do not assume that days always
have 86400 seconds, 2016-03-27).
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Make that date membership is computed correctly, even if a day has less
than 86400 seconds (e.g. after changing clocks).
Reported-by: Hakan Jerning <jerning@home.se>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
When spending the end date of recurring items, allow date duration
specifiers such as "+5d" or "+3w2d".
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Add a function that makes sure a string does not exceed a given display
size. If the string is too long, dots ("...") are appended.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
We need to manually force a reinitialization of the todo item list box
before reloading the items. Otherwise, the list box contains dangling
references to the linked list of todo items which has already been
cleared at this point. After the pre-load hook is called, the windows
are redrawn by wins_unprepare_external() and these invalid references
are accessed, leading to a segmentation fault.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
* Order by start time first.
* Order items with the same start time by priority.
* Order items with the same start and priority by description.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
In commit 3eae7ce (Add --list-imported command line option, 2016-01-12),
we added an option to print the hashes of imported items to stdout.
Extend this command line option such that it dumps the items using the
specified formatting strings. With the new behavior it is, for example,
easier to check items for import errors.
Also, rename the option from --list-imported to --dump-imported (it is
not part of any official release yet so we do not need to care about
backwards compatibility).
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Add a new Makefile to build and install calcurse-caldav and include it
in the top-level build process.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
The post-save and post-sync hooks now automatically detect whether the
data directory contains a .git/ directory and skip the commit creation
process if it does not.
The post-save hook and the new pre-load hook now also run
calcurse-caldav in the background if that script is available and the
data directory contains a caldav/ directory.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
In commit 2857bac (Fix segfault when running hooks in non-interactive
mode, 2016-01-16), we added checks to fix a segmentation fault in
non-interactive mode. However, at the same time, that commit broke
window preparation in interactive mode.
When wins_prepare_external() is called, the UI mode is changed to
command line, such that we cannot determine whether we need to call
wins_unprepare_external() when returning from the hook. As a workaround,
we now store the mode in a temporary variable.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Introduce pre-sync and post-sync hooks which need to be located under
~/.calcurse/caldav/hooks/ and are executed before/after synchronization
with a CalDAV server.
Also, add an example post-sync hook and change the example post-save
hook such that it does not create tiny commits during synchronization.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
The contrib/ directory now contains another script that is not directly
related to hooks. Clean things up by placing example hooks in a separate
subdirectory.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Instead of reimplementing the code to generate object hashes in the
synchronization script, use format strings to print the hashes in grep
mode.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Honor --format-* parameters when using the -G operation. In the case of
recurring items, the first occurrence is used.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Split io_save_{apts,todo}() into functions that write raw data to a file
and functions that write formatted items to stdout such that one can
easily extend the grep mode for format string support in a follow-up
commit.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
In addition to storing ETag-hash tuples in the synchronization database,
also store the URI of each object. This makes the synchronization
process a bit more robust as we do not need to depend on ETags being
globally unique. It also allows us to detect conflicts which occur when
an object is modified locally and on the server at the same time.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Since commit 41389ab (args.c: Revise help/usage/version output,
2016-01-28), the version string starts with "calcurse" (lowercase).
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
When importing iCal files, VTODO entries without an priority are now
imported with undefined priority (internally represented as zero), not
with lowest priority 9.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
The previous behavior of --todo was to always only list uncompleted
items, unless zero was specified as additional argument. Restore and
document this behavior.
Also, fix two tests that failed because the --todo output is now sorted.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Remove obsolete options from the help text, add new options, clean
everything up, cut translatable strings into atomic chunks.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
When specifying --daemon, calcurse immediately forks and runs the
notification daemon in the background.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
We now support todo items with undefined priority and currently display
them above todo items with a strictly positive priority. Change this and
always list items with a priority greater than zero first.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
In 45417bc (Add configuration option to notify all appointments,
2011-07-31), we added an option that allows for choosing whether the
user receives notifications only for flagged or only for unflagged
appointments. Convert this setting into a three-state option and allow
the user to additionally enable notifications for *all* appointments.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
In commit 7f62fb1 (Let SIGUSR1 trigger a reload, 2014-10-10), we added
support for reloading the data files by sending SIGUSR1 to an
interactive calcurse process. Add the same functionality to the daemon
mode.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Some CalDAV servers do not support calendar-query with a UID filter. Use
a calendar-multiget request to obtain the ETag of submitted objects
instead.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Fix a TypeError that occurred during string formatting by putting
parentheses around the multi-line string.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
`echo -n` is non-portable and does not work under some operating
systems, such as OS X. Replace it with printf.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
This was partly fixed by 475c341 (calcurse-caldav: Fix late retrieval of
ETag, 2016-01-25). However, the case where the server does not return
ETag after creating a new item still wasn't handled properly. This patch
hopefully addresses this and also makes sure that the ETag header is
matched case-insensitively.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
In die_atnode(), we currently print a full dump of the XML node if
verbose mode is enabled. Change this behavior such that a dump is only
created in debug mode.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Add support for specifying additional HTTP headers, such as the
User-Agent, in the configuration file.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Specify application/xml in the Content-Type of requests except for PUT,
where we actually submit calendar data.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Make sure we print the headers and the body of a HTTP response in debug
mode, even if the HTTP status code indicates failure.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Python versions prior to 3.4 do not check certificates by default and
thus do not support ssl._create_unverified_context(). Add a workaround.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Introduce calcurse-caldav, a Python script that can be used to
synchronize calcurse instances with CalDAV servers.
The script was tested with an instance of the Radicale CalDAV server but
it is still alpha software. Make backups before giving it a try!
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
* Automatically focus new todo items after adding them to the list.
* Keep selection when an item is moved (e.g. by changing its priority).
* Focus the next item in the list when an item is removed.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
* Show uncompleted items first.
* Order uncompleted and completed items by priority.
* Order items with the same priority alphabetically.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
In the todo panel, all uncompleted items are currently prefixed with
their priorities. Drop this prefix from items with priority 0, i.e.
undefined priority.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Add a configuration option appearance.todoview and use it to
automatically save the currently active todo panel view and restore it
when restarting calcurse.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
In addition to priorities 1-9, support todo items without any specific
priority, internally represented by priority 0.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Add a new field that indicates whether a todo item is completed or not
instead of encoding completed todo items by negative priorities.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Do not run wins_prepare_external() and wins_unprepare_external() before
and after running hooks in non-interactive mode.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Add a new --export-uid command line option that adds each item's hash to
the UID property when exporting.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Support "-" as file name to the -i/--import option and read from stdin
when that file is specified.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Do not skip completed todo items when exporting to an iCal file.
Instead, mark them as "STATUS:COMPLETED".
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Do not show the import summary when system dialogs are disabled or when
the --quiet option is specified, even if calcurse is executed in
non-interactive mode.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
When this option is used together with -i/--import, the object
identifiers of imported objects are printed to stdout.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Add a new -F mode that is identical to -G but writes the result back to
the calcurse data files instead of stdout.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Implement a new --filter-hash option to filter by object identifiers.
Each object having an identifier that has the specified pattern as a
prefix is matched. Patterns starting with an exclamation mark (!) are
interpreted as negative patterns.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Introduce support for strings which support concatenating the current
value with a printf-style formatted value, thereby growing in size
dynamically.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
This adds support for hooks which are executed before/after saving
calcurse data. Hooks can be placed under hooks/pre-save and
hooks/post-save in the data directory and need to be executable.
Potential use cases include:
* Automatically commit any changes to the data files using a VCS.
* Automatically sync with some sever component on data file changes.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Also, determine the number of displayed options on the general
configuration screen automatically (statically) instead of hard-coding
the value to prevent from future fallouts.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
A natural convention is to specify the end time of an event as 23:59:59
on the day it is scheduled.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
Show a warning when the user presses the generic-help binding and the
main help document is not available.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
* Add build instructions.
* List the current maintainer first in AUTHORS and README.
* Remove outdated information on the TODO file.
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>