From: <si...@us...> - 2008-06-22 08:39:10
|
Revision: 484 http://osmo-pim.svn.sourceforge.net/osmo-pim/?rev=484&view=rev Author: silloz Date: 2008-06-21 05:23:47 -0700 (Sat, 21 Jun 2008) Log Message: ----------- * Task reminder framework, part 4 Modified Paths: -------------- trunk/src/check_events.c trunk/src/tasks.c trunk/src/tasks.h Modified: trunk/src/check_events.c =================================================================== --- trunk/src/check_events.c 2008-06-21 00:44:54 UTC (rev 483) +++ trunk/src/check_events.c 2008-06-21 12:23:47 UTC (rev 484) @@ -76,6 +76,7 @@ } /*------------------------------------------------------------------------------*/ + void tsk_show_info_dialog (GUI *appGUI) { @@ -87,50 +88,7 @@ } /*------------------------------------------------------------------------------*/ -void -calculate_task_new_date (TASK_ITEM *item, GUI *appGUI, guint32 *new_date, gint *new_time) -{ -gboolean flag; -gint i, day; -GDate *cdate; - *new_date = item->due_date_julian; - *new_time = item->due_time; - - flag = TRUE; - if (item->repeat_time_start < item->repeat_time_end && item->repeat_time_end != 0 && - item->repeat_time_interval != 0 && item->due_time >= 0) { - - for (i = item->repeat_time_start; i <= item->repeat_time_end; i = i + item->repeat_time_interval) { - if (i * 60 > item->due_time) { - *new_time = i * 60; - flag = FALSE; - break; - } - } - - if (flag == TRUE) { - *new_time = item->repeat_time_start * 60; - } - } - - if (flag == TRUE) { - cdate = g_date_new_julian (item->due_date_julian); - g_return_if_fail (cdate != NULL); - g_date_add_months (cdate, item->repeat_month_interval); - g_date_add_days (cdate, item->repeat_day_interval); - day = g_date_get_weekday (cdate) - 1; - g_return_if_fail (item->repeat_day > 0 && item->repeat_day < 128); - for (i = 0; (item->repeat_day >> ((day + i) % 7)) % 2 != 1; i++); - if (i > 0) g_date_add_days (cdate, i); - *new_date = g_date_get_julian (cdate); - g_date_free (cdate); - } - -} - -/*------------------------------------------------------------------------------*/ - void tsk_done_cb (NotifyNotification *n, const char *action, gpointer user_data) { @@ -157,7 +115,7 @@ TA_COLUMN_REPEAT_COUNTER, a->item->repeat_counter - 1, -1); } - calculate_task_new_date (a->item, appGUI, &new_date, &new_time); + task_calculate_new_date (a->item, appGUI, &new_date, &new_time); if (new_date == a->item->due_date_julian && new_time == a->item->due_time) { gtk_list_store_set (appGUI->tsk->tasks_list_store, iter, Modified: trunk/src/tasks.c =================================================================== --- trunk/src/tasks.c 2008-06-21 00:44:54 UTC (rev 483) +++ trunk/src/tasks.c 2008-06-21 12:23:47 UTC (rev 484) @@ -85,6 +85,67 @@ /*------------------------------------------------------------------------------*/ void +task_calculate_new_date (TASK_ITEM *item, GUI *appGUI, guint32 *new_date, gint *new_time) +{ +GDate *cdate; +guint32 current_julian; +gint current_time; +gint i, day; +gboolean repeat_time, repeat_date, set_start_time; + + repeat_time = repeat_date = FALSE; + set_start_time = TRUE; + + current_julian = get_gdate_current_julian (); + current_time = get_seconds_for_today (); + *new_date = item->due_date_julian; + *new_time = item->due_time; + + if (item->repeat_time_start < item->repeat_time_end && item->repeat_time_interval > 0 && item->due_time >= 0) + repeat_time = TRUE; + + if (item->repeat_month_interval > 0 || item->repeat_day_interval > 0) + repeat_date = TRUE; + + if (repeat_time) { + for (i = item->repeat_time_start; i <= item->repeat_time_end; i += item->repeat_time_interval) { + if (i * 60 > item->due_time && i * 60 > current_time) { + *new_time = i * 60; + set_start_time = FALSE; + break; + } + } + if (set_start_time && repeat_date) + *new_time = item->repeat_time_start * 60; + } + + if (*new_time < current_time || item->due_time < 0) current_julian++; + + if (item->due_date_julian < current_julian && repeat_date) { + + cdate = g_date_new_julian (item->due_date_julian); + g_return_if_fail (cdate != NULL); + g_return_if_fail (item->repeat_day > 0 && item->repeat_day < 128); + + while (*new_date < current_julian) { + g_date_add_months (cdate, item->repeat_month_interval); + g_date_add_days (cdate, item->repeat_day_interval); + if (item->repeat_day != 127) { + day = g_date_get_weekday (cdate) - 1; + for (i = 0; (item->repeat_day >> ((day + i) % 7)) % 2 != 1; i++); + if (i > 0) g_date_add_days (cdate, i); + } + *new_date = g_date_get_julian (cdate); + } + + if (repeat_time) *new_time = item->repeat_time_start * 60; + g_date_free (cdate); + } +} + +/*------------------------------------------------------------------------------*/ + +void show_tasks_desc_panel (gboolean enable, GUI *appGUI) { GtkTreeIter iter; Modified: trunk/src/tasks.h =================================================================== --- trunk/src/tasks.h 2008-06-21 00:44:54 UTC (rev 483) +++ trunk/src/tasks.h 2008-06-21 12:23:47 UTC (rev 484) @@ -62,6 +62,7 @@ void update_tasks_number (GUI *appGUI); gint get_priority_index (gchar *text); gchar* get_priority_text (gint index); +void task_calculate_new_date (TASK_ITEM *item, GUI *appGUI, guint32 *new_date, gint *new_time); void show_tasks_desc_panel (gboolean enable, GUI *appGUI); void tasks_select_first_position_in_list (GUI *appGUI); void apply_task_attributes (GUI *appGUI); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |