From beea88e5feb6f14b4912c6aa4878c39a7632977c Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Sun, 17 Jan 2016 22:46:24 +0100 Subject: Use a separate field for the completed status 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 --- src/io.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'src/io.c') diff --git a/src/io.c b/src/io.c index b0eca77..4ff16cd 100644 --- a/src/io.c +++ b/src/io.c @@ -630,7 +630,7 @@ void io_load_todo(struct item_filter *filter) FILE *data_file; char *newline; int nb_tod = 0; - int c, id; + int c, id, completed; char buf[BUFSIZ], e_todo[BUFSIZ], note[MAX_NOTESIZ + 1]; unsigned line = 0; @@ -642,7 +642,15 @@ void io_load_todo(struct item_filter *filter) c = getc(data_file); if (c == EOF) { break; - } else if (c == '[') { /* new style with id */ + } else if (c == '[') { + /* new style with id */ + c = getc(data_file); + if (c == '-') { + completed = 1; + } else { + completed = 0; + ungetc(c, data_file); + } if (fscanf(data_file, " %d ", &id) != 1 || getc(data_file) != ']') io_load_error(path_todo, line, @@ -651,6 +659,7 @@ void io_load_todo(struct item_filter *filter) ungetc(c, data_file); } else { id = 9; + completed = 0; ungetc(c, data_file); } /* Now read the attached note, if any. */ @@ -678,13 +687,13 @@ void io_load_todo(struct item_filter *filter) continue; if (filter->priority && id != filter->priority) continue; - if (filter->completed && id > 0) + if (filter->completed && !completed) continue; - if (filter->uncompleted && id < 0) + if (filter->uncompleted && completed) continue; } - struct todo *todo = todo_add(e_todo, id, note); + struct todo *todo = todo_add(e_todo, id, completed, note); /* Filter by hash. */ if (filter && filter->hash) { -- cgit v1.2.3-54-g00ecf