From b144b19964fcd5cfb99526641751823dea9bee9d Mon Sep 17 00:00:00 2001
From: Ambika Eshwar <cepheac@protonmail.ch>
Date: Tue, 29 Sep 2020 02:16:25 -0400
Subject: Implemented rendering of notes in todo view

Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
---
 src/calcurse.h |  1 +
 src/note.c     | 11 +++++++++++
 src/ui-todo.c  | 22 +++++++++++++++++++++-
 3 files changed, 33 insertions(+), 1 deletion(-)

(limited to 'src')

diff --git a/src/calcurse.h b/src/calcurse.h
index dca9d8b..7f03b68 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -1019,6 +1019,7 @@ void edit_note(char **, const char *);
 void view_note(const char *, const char *);
 void erase_note(char **);
 void note_read(char *, FILE *);
+void note_read_contents(char *, size_t, FILE *);
 void note_gc(void);
 
 /* notify.c */
diff --git a/src/note.c b/src/note.c
index 92c1ecf..40e0882 100644
--- a/src/note.c
+++ b/src/note.c
@@ -155,6 +155,17 @@ void note_read(char *buffer, FILE * fp)
 	buffer[MAX_NOTESIZ] = '\0';
 }
 
+/* Read the contents of a note file */
+void note_read_contents(char *buffer, size_t buffer_len, FILE * fp)
+{
+	size_t read_count = fread(buffer, 1, buffer_len, fp);
+	if (read_count != buffer_len)
+		buffer[read_count] = '\0';
+	else
+		memcpy(&buffer[buffer_len - 4], "...\0", 4);
+}
+
+
 static void
 note_gc_extract_key(struct note_gc_hash *data, const char **key, int *len)
 {
diff --git a/src/ui-todo.c b/src/ui-todo.c
index b546720..876f570 100644
--- a/src/ui-todo.c
+++ b/src/ui-todo.c
@@ -314,7 +314,27 @@ void ui_todo_popup_item(void)
 	if (!item)
 		return;
 
-	item_in_popup(NULL, NULL, item->mesg, _("TODO:"));
+	if (item->note) {
+		/* Assign a sane default note size that will cleanly
+		 * truncate long notes */
+		const char *note_heading = _("Note:");
+		size_t note_size = 3500;
+		char note[note_size];
+		char *notepath, *msg;
+		FILE *fp;
+
+		asprintf(&notepath, "%s%s", path_notes, item->note);
+		fp = fopen(notepath, "r");
+		note_read_contents(note, note_size, fp);
+		fclose(fp);
+		mem_free(notepath);
+
+		asprintf(&msg, "%s\n\n%s\n%s", item->mesg, note_heading, note);
+		item_in_popup(NULL, NULL, msg, _("TODO:"));
+		mem_free(msg);
+	} else {
+		item_in_popup(NULL, NULL, item->mesg, _("TODO:"));
+	}
 }
 
 void ui_todo_flag(void)
-- 
cgit v1.2.3-70-g09d2