From 7fb25a84d427f4a3cb79ea02908daf9ce8ba07ca Mon Sep 17 00:00:00 2001
From: Lukas Fleischer <calcurse@cryptocrack.de>
Date: Sat, 7 Jul 2012 11:55:10 +0200
Subject: Refactor note removal

Remove the note removal code from *_delete()/*_erase() and create a new
wrapper function called day_item_erase_note() that is be used to drop
the note being associated to an item.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
---
 src/apoint.c      |  3 ---
 src/calcurse.h    |  2 +-
 src/day.c         | 19 +++++++++++++++++++
 src/event.c       |  3 ---
 src/interaction.c | 28 ++++++++++------------------
 src/recur.c       |  8 +-------
 6 files changed, 31 insertions(+), 32 deletions(-)

(limited to 'src')

diff --git a/src/apoint.c b/src/apoint.c
index 694c318..a308b26 100644
--- a/src/apoint.c
+++ b/src/apoint.c
@@ -224,9 +224,6 @@ void apoint_delete(struct apoint *apt, enum eraseflg flag)
     EXIT(_("no such appointment"));
 
   switch (flag) {
-  case ERASE_FORCE_ONLY_NOTE:
-    erase_note(&apt->note);
-    break;
   case ERASE_CUT:
     if (notify_bar())
       need_check_notify = notify_same_item(apt->start);
diff --git a/src/calcurse.h b/src/calcurse.h
index c9b0307..b0f1477 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -524,7 +524,6 @@ enum item_type {
 enum eraseflg {
   ERASE_DONT_FORCE,
   ERASE_FORCE,
-  ERASE_FORCE_ONLY_NOTE,
   ERASE_CUT
 };
 
@@ -669,6 +668,7 @@ void custom_config_main(void);
 void day_free_list(void);
 char *day_item_get_mesg(struct day_item *);
 char *day_item_get_note(struct day_item *);
+void day_item_erase_note(struct day_item *);
 long day_item_get_duration(struct day_item *);
 int day_item_get_state(struct day_item *);
 void day_item_fork(struct day_item *, struct day_item *);
diff --git a/src/day.c b/src/day.c
index 26ae3e0..10caa05 100644
--- a/src/day.c
+++ b/src/day.c
@@ -123,6 +123,25 @@ char *day_item_get_note(struct day_item *day)
   }
 }
 
+/* Get the note attached to an item. */
+void day_item_erase_note(struct day_item *day)
+{
+  switch (day->type) {
+  case APPT:
+    erase_note(&day->item.apt->note);
+    break;
+  case EVNT:
+    erase_note(&day->item.ev->note);
+    break;
+  case RECUR_APPT:
+    erase_note(&day->item.rapt->note);
+    break;
+  case RECUR_EVNT:
+    erase_note(&day->item.rev->note);
+    break;
+  }
+}
+
 /* Get the duration of an item. */
 long day_item_get_duration(struct day_item *day)
 {
diff --git a/src/event.c b/src/event.c
index de0ce02..b53ec2f 100644
--- a/src/event.c
+++ b/src/event.c
@@ -158,9 +158,6 @@ void event_delete(struct event *ev, enum eraseflg flag)
     EXIT(_("no such appointment"));
 
   switch (flag) {
-  case ERASE_FORCE_ONLY_NOTE:
-    erase_note(&ev->note);
-    break;
   case ERASE_CUT:
     LLIST_REMOVE(&eventlist, i);
     break;
diff --git a/src/interaction.c b/src/interaction.c
index b619992..4d71520 100644
--- a/src/interaction.c
+++ b/src/interaction.c
@@ -389,32 +389,26 @@ static int day_erase_item(long date, int item_number, enum eraseflg flag)
   unsigned delete_whole;
 
   p = day_get_item(item_number);
-  if (flag == ERASE_DONT_FORCE) {
-    if (day_item_get_note(p) == NULL)
-      ans = 1;
-    else
-      ans = status_ask_choice(note_warning, note_choices, nb_note_choices);
-
-    switch (ans) {
+  if (flag == ERASE_DONT_FORCE && day_item_get_note(p)) {
+    switch (status_ask_choice(note_warning, note_choices, nb_note_choices)) {
     case 1:
-      flag = ERASE_FORCE;
       break;
     case 2:
-      flag = ERASE_FORCE_ONLY_NOTE;
-      break;
+      day_item_erase_note(p);
+      return 0;
     default:                   /* User escaped */
       return 0;
     }
   }
+
+  flag = ERASE_FORCE;
+
   if (p->type == EVNT) {
     event_delete(p->item.ev, flag);
   } else if (p->type == APPT) {
     apoint_delete(p->item.apt, flag);
   } else {
-    if (flag == ERASE_FORCE_ONLY_NOTE)
-      ans = 1;
-    else
-      ans = status_ask_choice(erase_warning, erase_choices, nb_erase_choices);
+    ans = status_ask_choice(erase_warning, erase_choices, nb_erase_choices);
 
     switch (ans) {
     case 1:
@@ -433,10 +427,8 @@ static int day_erase_item(long date, int item_number, enum eraseflg flag)
       recur_apoint_erase(p->item.rapt, date, delete_whole, flag);
     }
   }
-  if (flag == ERASE_FORCE_ONLY_NOTE)
-    return 0;
-  else
-    return p->type;
+
+  return p->type;
 }
 
 /* Pipe an appointment or event to an external program. */
diff --git a/src/recur.c b/src/recur.c
index 0a17414..d8215d1 100644
--- a/src/recur.c
+++ b/src/recur.c
@@ -687,9 +687,6 @@ recur_event_erase(struct recur_event *rev, long start, unsigned delete_whole,
 
   if (delete_whole) {
     switch (flag) {
-    case ERASE_FORCE_ONLY_NOTE:
-      erase_note(&rev->note);
-      break;
     case ERASE_CUT:
       LLIST_REMOVE(&recur_elist, i);
       return;
@@ -723,13 +720,10 @@ recur_apoint_erase(struct recur_apoint *rapt, long start,
     EXIT(_("appointment not found"));
 
   LLIST_TS_LOCK(&recur_alist_p);
-  if (notify_bar() && flag != ERASE_FORCE_ONLY_NOTE)
+  if (notify_bar())
     need_check_notify = notify_same_recur_item(rapt);
   if (delete_whole) {
     switch (flag) {
-    case ERASE_FORCE_ONLY_NOTE:
-      erase_note(&rapt->note);
-      break;
     case ERASE_CUT:
       LLIST_TS_REMOVE(&recur_alist_p, i);
       break;
-- 
cgit v1.2.3-70-g09d2