2019 Commits

Author SHA1 Message Date
Lars Henriksen
3f7bd331c8 Use "struct rpt" to shorten argument lists
Also, prepare for extension of the structure, shorten names and
rearrange comments.

Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-04-28 07:32:44 -04:00
Lars Henriksen
e9deb6fff3 Extend use of note file for iCal import
iCal import to an item note file is extended from DESCRIPTION to
LOCATION, COMMENT and STATUS for both events and todos.

Addresses GitHub issue #9.

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-04-28 07:32:44 -04:00
Lars Henriksen
214a761564 Accept empty DESCRIPTION in ical import
Adresses GitHub issue #274.

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-04-28 07:32:44 -04:00
Jerem-K
37d326cbe1 Fix formatting of DTSTART for recurrent events
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-04-28 07:32:44 -04:00
Matthias Braun
18f50e1dd4 Fix typos in calcurse.1.txt
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-04-28 07:32:44 -04:00
Lukas Fleischer
5a3664bf73 Release 4.6.0
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-03-27 18:59:20 -04:00
Lukas Fleischer
5e571c72d8 po/: Translation updates from Transifex
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-03-27 18:59:20 -04:00
Lars Henriksen
41ac4bd96f Fix missing EOL in imported note
Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-03-27 13:41:07 -04:00
Lars Henriksen
e535eff904 Extend iCalendar import tests
Tests ical-010.sh and ical-011.sh assume that Github issue #265 has been fixed
(escape-encoding by export).

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-03-22 13:45:40 -04:00
Lars Henriksen
ffbf714c9e Fix decoding of escaped characters in imported text
Stick strictly to RFC 5545, 3.3.11, Text, for SUMMARY and DESCRIPTION.
Adresses Github issue #271.

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-03-22 13:40:28 -04:00
Lars Henriksen
1cb2691342 Fix ical import logging
The following issues have been fixed:

Functions ical_read_event() and ical_read__todo() do not check the return value
of functions which may fail, in which case an item is not skipped even though
a problem may have been logged by the called function.

Function ical_read_note() fails on empty DESCRIPTION, but does not log it.

Function ical_read_exdate() may log a failure, but cannot fail itself.

Function ical_read_summary() can fail, but not log a failure.

Function ical_read_todo() do not skip a todo with an invalid priority.

Additionally:

A safety check has been added to ical_get_value(), and log messages resulting
from failures have been made uniform.

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-03-22 13:40:28 -04:00
Lars Henriksen
63c2d4d503 Fix display of interactively imported todos
Todos were imported (and saved), but not loaded into the listbox for display.

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-03-22 13:40:28 -04:00
Lars Henriksen
467815d465 Improve ical import logging
The log file is not deleted if items were skipped (adresses Github issue #269).
The log file includes the import file name and time.
The import line numbers have been corrected (and tests amended).

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-03-22 13:40:28 -04:00
Kelvin Jackson
80b60d63cb Escape necessary characters in SUMMARY on export
Escape semicolons, commas, and backslashes when exporting a calendar
item to iCal format.

Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-03-22 13:40:28 -04:00
hoijui
96c0790804 gitignore: ignore lots of auto-generated files
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-02-18 14:37:42 +01:00
hoijui
1c29997254 gitignore: fix config.* ignore
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-02-18 14:37:42 +01:00
Nitroretro
ada0d98bde caldav: Fix XDG_CONFIG_HOME not defaulting to ~/.config
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-02-04 22:46:19 +01:00
Lukas Fleischer
5ad76df5fe Update copyright ranges
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-01-30 19:22:23 +01:00
Lukas Fleischer
f4e621d58d Update message catalog
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-01-30 19:14:56 +01:00
Lars Henriksen
12863ff7c0 Refactor cut and paste registers
Register REG_BLACK_HOLE can neither be copied into nor pasted from and
has been removed from the input routine.

Register 36 was not used.

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2020-01-13 20:45:25 +01:00
Nitroretro
002cf305a5 Optimize error handling in io_check_dir()
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-12-29 13:22:57 +01:00
Nitroretro
0cd8c210bd Improve manual readability
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-12-29 13:22:55 +01:00
Nitroretro
9266232170 Improve man page readability
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-12-29 13:22:48 +01:00
Nitroretro
4a2f5e2183 Test for the directory structure
Ensure that calcurse uses the right data and configuration directories
depending on the conditions.

Helped-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-12-23 13:16:39 -05:00
Nitroretro
992cf45dc9 Use $XDG_{CONFIG,DATA}_HOME in hooks
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-12-23 13:16:39 -05:00
Nitroretro
023ca55493 calcurse-upgrade: use $XDG_CONFIG_HOME
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-12-23 13:16:39 -05:00
Nitroretro
c7faa1f61f calcurse-vdirsyncer: use $XDG_DATA_HOME
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-12-23 13:16:39 -05:00
Nitroretro
d85691ebee calcurse-caldav: use $XDG_{CONFIG,DATA}_HOME
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-12-23 13:16:39 -05:00
Nitroretro
19d2d9229e Change documentation to reflect the new file structure
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-12-23 13:16:39 -05:00
Nitroretro
04162de6dd Add XDG Base Directory Support
* Use "$XDG_DATA_HOME/calcurse" for data files
* Use "$XDG_CONFIG_HOME/calcurse" for config files
* "$XDG_DATA_HOME" defaults to "$HOME/.local/share"
* "$XDG_CONFIG_HOME" defaults to "$HOME/.config"
* If "$HOME/.calcurse" exists, then it will be used instead for backward
compatibility.

Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-12-23 13:16:39 -05:00
Nitroretro
250a233ff7 Make io_check_dir() create parent directories
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-12-23 13:16:39 -05:00
Lars Henriksen
a0129d6751 Fix next recurrent appointment deleted
If the notify bar displays a recurrent appointment after midnight as next
upcoming appointment, the bar is not updated when the appointment/occurrence is
deleted.  The problem is not seen in 4.3.0 because of the bug described in
commit 8cbd456, Fix next recurring appointment.  The problem and the solution is
the same, this time in the function notify_same_recur_item().

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-12-23 13:16:39 -05:00
Lars Henriksen
b7eb9a9e94 Fix empty string in updatestring()
If the update results in an empty string (return value GETSTRING_RET), the
original string remains whereas it should be empty.

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-12-23 13:16:39 -05:00
Lukas Fleischer
9befae484d .gitignore: add test/*.{log,trs}
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-12-23 13:16:39 -05:00
Lukas Fleischer
41143c5a83 calcurse-caldav: Document configuration for Yahoo
Suggested-by: Tony Barganski <tonybarganski@outlook.com>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-11-09 12:49:32 -05:00
Lars Henriksen
d8d7dce2b8 Make the text for empty days configurable
The default is "--"; a single space makes the text invisible.

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-11-03 10:56:47 -05:00
Lukas Fleischer
f49ec4ad6e Allow discarding a todo item from the priority prompt
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-11-03 10:56:47 -05:00
Issam Maghni
ade5216f68 Support RET to set the todo item priority to 0
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-11-03 10:56:47 -05:00
Lars Henriksen
4aae26e601 Fix save of interactively imported data
Adresses Github issue #249.

Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-11-03 10:56:47 -05:00
Si Yong Kim
b293b1829d calcurse-caldav: handle objects with status code 404
Display a warning if any of the events reported by the server cannot be
found instead of bailing out.

Addresses GitHub issue #137 and #245.

Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-11-03 10:56:47 -05:00
Lukas Fleischer
35eaa4a737 Release 4.5.1
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-10-18 17:18:01 -04:00
Lukas Fleischer
1b43893c4c test/Makefile.am: Add apts-dst to EXTRA_DIST
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-10-18 17:18:01 -04:00
Lars Henriksen
e25710f650 Test for DST and recurrent items
Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-10-18 16:29:34 -04:00
Lars Henriksen
0e46881746 DST and recurrent items
The patch adresses two issues with the function recur_item_find
ocurrence(), one major: mktime(), and one minor: item duration. In
addition, some refactoring is done.

The following recurrent appointments demonstrate the problems (as
described in the message) and are used as test cases in the associated
test commit.

03/29/2019 @ 12:00 -> 03/30/2019 @ 11:00 {2D -> 04/03/2019} |two-day - every other day - not on 1/4
03/31/2019 @ 12:00 -> 03/31/2019 @ 13:00 {1D -> 04/01/2019} |daily - not on 31/3, twice on 1/4
03/31/2019 @ 04:00 -> 03/31/2019 @ 05:00 {1W} |weekly - appears after one week
03/31/2019 @ 12:00 -> 03/31/2019 @ 12:00 {1M} |monthly - never appears
03/31/2019 @ 12:00 -> 03/31/2019 @ 12:00 {1Y} |yearly - never appears
10/20/2019 @ 00:00 -> 10/21/2019 @ 01:00 {1W -> 11/03/2019} |25 hours - ends on 27th, but continues on 28th
03/24/2019 @ 00:00 -> 03/25/2019 @ 00:00 {1W -> 04/07/2019} |24 hours - does not continue on April 1

The root cause is two mktime() calls in recur_item_find_occurrence(),
both of which use an inherited tm_isdst value in the tm structure. In
such cases mktime() will "normalize" the tm stucture if tm_isdst is 0 or
1 and in disagreement with the rest of the tm contents (just like 32 May
will be normalized to 1 June).

Example. In 2019 DST started on 31/3 at 02:00:00 (in the European
Union). If the (local) time "31/3/2018 00:00:00" is passed to mktime()
with tm_isdst = 0, the return value is (say) T sec and the tm structure
is unchanged, because DST is not in effect at midnight. If the same call
is performed with tm_isdst = 1, the return value becomes (T - 3600) sec
and the tm structure is normalized to "30/3/2018 23:00:00", tm_isdst =
0.

In recur_item_find_occurrence(), the normalized tm structure with wrong
day and time is used in ensuing calculations, leading to wrong dates and
the errors observed.

The first mktime() call is used to calculate the "day span" of the
occurrence before the occurrence itself has been determined. But once
the occurence is known, the "day span" is easily determined, and there
is no need for the first mktime() call.

Events have no explicit duration. However, recur_event_find_occurrence()
and recur_event_inday() set the duration of an event to DAYINSEC before
passing it on to recur_item_find_occurrence(). The value is not correct
on the day when DST begins or ends. The interpretation of the daylength
should be left to the called function. Hence, duration is set to -1 to
signal no (explicit) duration.

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-10-18 16:29:34 -04:00
Lars Henriksen
1db1108e86 Test cases for "Fix monthly and yearly recurrence algorithms"
Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-09-06 18:17:23 -04:00
Lars Henriksen
2ae30b223e Set time-of-day consistently to midnight for until day
A day begins on midnight (inclusive) and ends on midnight (exclusive). A
day as a whole is represented by the initial midnight, i.e. time-of-day
is 00:00.

On load of recurrent appointments (but not events) time-of-day for the
until day is set to 23:59. For a newly created recurrent appointment the
setting depends on the input method: time-of-day is set to 00:00 if
until day is given as a date (day, month and year), but to time-of-day
for the start day if given as an offset (+dd).

The resulting behaviour is only visible in interactive use of calcurse
as proved by the following scenario.

1) Create an appointment with start time 12:00, end time 11:59 (multi
   day).

2) Turn it into a recurrent appointment of type daily, frequency 3,
   until day +3.

The appointment is correctly displayed with two 2-day occurrences three
days apart.

3) Edit the appointment and select Repetition. Accept existing type,
   frequency and end day (now as a date).

The second day of the second occurrence disappears.

4) Repeat 3), but set the end day as an offset (+3).

The second day of the second occurrence reappears.

The inconsistencies have been eliminated, and time-of-day for the until
day is now always 00:00.

Also, until day may equal start day, so midnights should be compared.

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-09-06 18:15:36 -04:00
k0ral
b0ba01d2a7 Document the HTTPS option in the sample configuration file
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-09-06 18:15:36 -04:00
Lars Henriksen
a0305d754f DST: fix date_change() thoroughly
Explicit setting of Daylight Saving Time should be avoided before as well as
after the mktime() call.

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-09-06 18:15:36 -04:00
Lars Henriksen
5fbc499886 Fix monthly and yearly recurrence algorithms
The calculation of the year of the most recent occurrence for year dates before
the start date (disregarding the year) is incorrect for frequencies greater than
one. The most recent occurrence (for a date as mentioned) is either too far or
too close in the past. In most cases it does no harm because the most recent
ocurrence is in the past and does not span the date (i.e. there is no occurrence
on the day). But the following appointment shows the presence of the bug:

12/31/2019 @ 12:00 -> 01/01/2020 @ 12:00 {2Y} |new year

The occurence on 1 Jan 2020 is missing, because the most recent occurrence is
too far in the past (31 Dec 2018 instead of 31 Dec 2019). An occurrence appears
on 1 Jan 2021, because the most recent occurence is too close in the past (31
Dec 2020 instead of 31 Dec 2019).

A similar miscalculation affects the monthly rule as proved by

3/31/2019 @ 12:00 -> 4/1/2019 @ 11:00 {2M} |change of month

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-09-06 18:15:36 -04:00
Lars Henriksen
8a0354e6da Fix edit of empty exception day list
Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
2019-07-10 07:38:50 -04:00