Update use of note file for import

Removes the parts of commit 'Extend use of note file for ical import' that
relate to STATUS. The STATUS property is (partly) supported for todos already.

Corrects insertion of a separator: always insert it before imported properties
(also when there is no description).

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
This commit is contained in:
Lars Henriksen 2020-08-21 11:12:39 +02:00 committed by Lukas Fleischer
parent 7b28e38d13
commit e3cfca7568
8 changed files with 41 additions and 113 deletions

View File

@ -59,8 +59,7 @@ typedef enum {
SUMMARY,
DESCRIPTION,
LOCATION,
COMMENT,
STATUS
COMMENT
} ical_property_e;
typedef struct {
@ -1194,9 +1193,6 @@ static char *ical_read_note(char *line, ical_property_e property, unsigned *nosk
case COMMENT:
pname = "comment";
break;
case STATUS:
pname = "status";
break;
default:
pname = "no property";
@ -1270,7 +1266,7 @@ ical_read_event(FILE * fdi, FILE * log, unsigned *noevents,
struct {
llist_t exc;
ical_rpt_t *rpt;
char *mesg, *desc, *loc, *comm, *stat, *imp, *note;
char *mesg, *desc, *loc, *comm, *imp, *note;
time_t start, end;
long dur;
int has_alarm;
@ -1339,9 +1335,9 @@ ical_read_event(FILE * fdi, FILE * log, unsigned *noevents,
if (vevent.desc) {
string_catf(&s, "%s", vevent.desc);
mem_free(vevent.desc);
}
if (separator)
string_catf(&s, SEPARATOR);
}
if (vevent.loc) {
string_catf(&s, _("Location: %s"),
vevent.loc);
@ -1352,11 +1348,6 @@ ical_read_event(FILE * fdi, FILE * log, unsigned *noevents,
vevent.comm);
mem_free(vevent.comm);
}
if (vevent.stat) {
string_catf(&s, _("Status: %s"),
vevent.stat);
mem_free(vevent.stat);
}
if (vevent.imp) {
string_catf(&s, ("Import: %s\n"),
vevent.imp);
@ -1369,7 +1360,7 @@ ical_read_event(FILE * fdi, FILE * log, unsigned *noevents,
* creation fails below.
*/
vevent.desc = vevent.loc = vevent.comm =
vevent.stat = vevent.imp = NULL;
vevent.imp = NULL;
}
char *msg = _("rrule does not match start day (%s).");
switch (vevent_type) {
@ -1529,8 +1520,6 @@ ical_read_event(FILE * fdi, FILE * log, unsigned *noevents,
property = LOCATION;
} else if (starts_with_ci(buf, "COMMENT")) {
property = COMMENT;
} else if (starts_with_ci(buf, "STATUS")) {
property = STATUS;
}
if (property) {
note = ical_read_note(buf, property, noskipped,
@ -1568,21 +1557,6 @@ ical_read_event(FILE * fdi, FILE * log, unsigned *noevents,
} else
vevent.comm = note;
break;
case STATUS:
if (vevent.stat) {
ical_log(log, ICAL_VEVENT, ITEMLINE,
_("only one status allowed."));
goto skip;
}
if (!(starts_with(note, "TENTATIVE") ||
starts_with(note, "CONFIRMED") ||
starts_with(note, "CANCELLED"))) {
ical_log(log, ICAL_VEVENT, ITEMLINE,
_("invalid status value."));
goto skip;
}
vevent.stat = note;
break;
default:
break;
}
@ -1601,8 +1575,6 @@ cleanup:
mem_free(vevent.loc);
if (vevent.comm)
mem_free(vevent.comm);
if (vevent.stat)
mem_free(vevent.stat);
if (vevent.imp)
mem_free(vevent.imp);
if (vevent.mesg)
@ -1622,7 +1594,7 @@ ical_read_todo(FILE * fdi, FILE * log, unsigned *notodos, unsigned *noskipped,
const char *SEPARATOR = "-- \n";
struct string s;
struct {
char *mesg, *desc, *loc, *comm, *stat, *note;
char *mesg, *desc, *loc, *comm, *note;
int priority;
int completed;
} vtodo;
@ -1654,9 +1626,9 @@ ical_read_todo(FILE * fdi, FILE * log, unsigned *notodos, unsigned *noskipped,
if (vtodo.desc) {
string_catf(&s, "%s", vtodo.desc);
mem_free(vtodo.desc);
}
if (separator)
string_catf(&s, SEPARATOR);
}
if (vtodo.loc) {
string_catf(&s, _("Location: %s"),
vtodo.loc);
@ -1667,11 +1639,6 @@ ical_read_todo(FILE * fdi, FILE * log, unsigned *notodos, unsigned *noskipped,
vtodo.comm);
mem_free(vtodo.comm);
}
if (vtodo.stat) {
string_catf(&s, _("Status: %s"),
vtodo.stat);
mem_free(vtodo.stat);
}
vtodo.note = generate_note(string_buf(&s));
mem_free(s.buf);
}
@ -1690,7 +1657,6 @@ ical_read_todo(FILE * fdi, FILE * log, unsigned *notodos, unsigned *noskipped,
}
} else if (starts_with_ci(buf, "STATUS:COMPLETED")) {
vtodo.completed = 1;
property = STATUS;
} else if (starts_with_ci(buf, "SUMMARY")) {
vtodo.mesg =
ical_read_summary(buf, noskipped, ICAL_VTODO,
@ -1705,8 +1671,6 @@ ical_read_todo(FILE * fdi, FILE * log, unsigned *notodos, unsigned *noskipped,
property = LOCATION;
} else if (starts_with_ci(buf, "COMMENT")) {
property = COMMENT;
} else if (starts_with_ci(buf, "STATUS")) {
property = STATUS;
}
if (property) {
note = ical_read_note(buf, property, noskipped,
@ -1744,22 +1708,6 @@ ical_read_todo(FILE * fdi, FILE * log, unsigned *notodos, unsigned *noskipped,
} else
vtodo.comm = note;
break;
case STATUS:
if (vtodo.stat) {
ical_log(log, ICAL_VTODO, ITEMLINE,
_("only one status allowed."));
goto skip;
}
if (!(starts_with(note, "NEEDS-ACTION") ||
starts_with(note, "COMPLETED") ||
starts_with(note, "IN-PROCESS") ||
starts_with(note, "CANCELLED"))) {
ical_log(log, ICAL_VTODO, ITEMLINE,
_("invalid status value."));
goto skip;
}
vtodo.stat = note;
break;
default:
break;
}
@ -1778,8 +1726,6 @@ cleanup:
mem_free(vtodo.loc);
if (vtodo.comm)
mem_free(vtodo.comm);
if (vtodo.stat)
mem_free(vtodo.stat);
if (vtodo.mesg)
mem_free(vtodo.mesg);
}

View File

@ -18,6 +18,6 @@ TRANSP:TRANSPARENT
END:VEVENT
BEGIN:VEVENT
SUMMARY:On day 2
DTSTART;VALUE=DATE:20131003
DTSTART;VALUE=DATE:20131004
END:VEVENT
END:VCALENDAR

View File

@ -66,12 +66,6 @@ END:VTODO
BEGIN:VEVENT
DTSTART:20200406T221300
DURATION:PT0H15M0S
SUMMARY:Invalid STATUS
STATUS:confirmed
END:VEVENT
BEGIN:VEVENT
DTSTART:20200406T221300
DURATION:PT0H15M0S
SUMMARY:LOCATION twice
LOCATION:first
LOCATION:second

View File

@ -19,9 +19,8 @@ END:VEVENT
BEGIN:VEVENT
DTSTART:20200404T084100
DURATION:PT1H30M0S
SUMMARY:No description. Comment and status
SUMMARY:no description\, but comment
COMMENT:Event without description: a comment\nstreching over\nthree lines
STATUS:CONFIRMED
END:VEVENT
BEGIN:VEVENT
@ -42,11 +41,10 @@ END:VEVENT
BEGIN:VEVENT
DTSTART:20200404T204500
DURATION:PT1H30M0S
SUMMARY:description\, status\, comment and location
DESCRIPTION:event with\ndescription\nstatus\ncomment\nand location
SUMMARY:description\, comment and location
DESCRIPTION:event with\ndescription\ncomment\nand location
LOCATION: Right here
COMMENT:just a repetition of description:\nevent with\ndescription\nstatus\ncomment\nand location
STATUS:CANCELLED
COMMENT:just a repetition of description:\nevent with\ndescription\ncomment\nand location
END:VEVENT
BEGIN:VTODO
@ -64,9 +62,8 @@ END:VTODO
BEGIN:VTODO
PRIORITY:4
SUMMARY:Comment and status
SUMMARY:no description\, but comment
COMMENT:Todo without description. A comment\nstreching over\nthree lines
STATUS:NEEDS-ACTION
END:VTODO
BEGIN:VTODO
@ -77,17 +74,16 @@ END:VTODO
BEGIN:VTODO
PRIORITY:6
SUMMARY:Empty description\,but status
SUMMARY:Empty description
DESCRIPTION:
STATUS:COMPLETED
END:VTODO
BEGIN:VTODO
SUMMARY:todo with description\, status\, comment and location
DESCRIPTION:todo with\ndescription\nstatus\ncomment\nand location\,\nbut no priority
SUMMARY:todo with description\, comment and location
DESCRIPTION:todo with\ndescription\ncomment\nand location\,\nbut no priority
LOCATION: Right here
COMMENT:mostly a repetition of description:\ntodo with\ndescription\nstatus\ncomment\nand location
STATUS:IN-PROCESS
COMMENT:mostly a repetition of description:\ntodo with\ndescription\ncomment\nand location
STATUS:COMPLETED
END:VTODO
END:VCALENDAR

View File

@ -16,11 +16,12 @@ Import process report: 0023 lines read
10/03/13:
* All day
* On day 1
* On day 2
* Two days
10/04/13:
* On day 2
* Two days
--
Import: multi-day event changed to one-day event
EOD
else

View File

@ -21,6 +21,7 @@ Import process report: 0018 lines read
UTC
- 11:00 -> 12:00
Local time
--
Import: TZID=CET
EOD
else

View File

@ -17,8 +17,8 @@ if [ "$1" = 'actual' ]; then
rm -rf .calcurse || exit 1
elif [ "$1" = 'expected' ]; then
cat <<EOD
Import process report: 0127 lines read
2 apps / 0 events / 1 todo / 20 skipped
Import process report: 0121 lines read
2 apps / 0 events / 1 todo / 19 skipped
VEVENT [12]: invalid or malformed event start time.
VEVENT [17]: rrule frequency not supported.
VEVENT [23]: malformed summary line.
@ -28,17 +28,16 @@ VEVENT [39]: line break in summary.
VEVENT [44]: malformed description line.
VEVENT [50]: malformed description.
VTODO [62]: malformed summary.
VEVENT [66]: invalid status value.
VEVENT [72]: only one location allowed.
VEVENT [79]: invalid duration.
VEVENT [84]: invalid or malformed event start time.
VEVENT [89]: invalid end time value type.
VEVENT [94]: invalid until format.
VEVENT [100]: invalid exception date value type.
VEVENT [107]: invalid exception.
VEVENT [114]: either end or duration.
VEVENT [120]: end must be later than start.
VTODO [125]: The ical file seems to be malformed. The end of item was not found.
VEVENT [66]: only one location allowed.
VEVENT [73]: invalid duration.
VEVENT [78]: invalid or malformed event start time.
VEVENT [83]: invalid end time value type.
VEVENT [88]: invalid until format.
VEVENT [94]: invalid exception date value type.
VEVENT [101]: invalid exception.
VEVENT [108]: either end or duration.
VEVENT [114]: end must be later than start.
VTODO [119]: The ical file seems to be malformed. The end of item was not found.
101
EOD
else

View File

@ -14,11 +14,10 @@ if [ "$1" = 'actual' ]; then
rm -rf .calcurse || exit 1
elif [ "$1" = 'expected' ]; then
cat <<EOD
Import process report: 0093 lines read
Import process report: 0089 lines read
6 apps / 0 events / 6 todos / 0 skipped
todo with
description
status
comment
and location,
but no priority
@ -27,13 +26,10 @@ Location: Right here
Comment: mostly a repetition of description:
todo with
description
status
comment
and location
Status: IN-PROCESS
event with
description
status
comment
and location
--
@ -41,18 +37,16 @@ Location: Right here
Comment: just a repetition of description:
event with
description
status
comment
and location
Status: CANCELLED
Comment: Todo with out description. A comment
streching over
three lines
Status: NEEDS-ACTION
--
Comment: Event without description: a comment
streching over
three lines
Status: CONFIRMED
--
Comment: Todo without description. A comment
streching over
three lines
event with description
and location
--
@ -67,9 +61,6 @@ Comment: event with empty description
event with one-line description
todo with one-line description
--
Status: COMPLETED
EOD
else
./run-test "$0"