aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/cal-util
diff options
context:
space:
mode:
authorDamon Chaplin <damon@helixcode.com>2000-10-12 02:19:16 +0800
committerDamon Chaplin <damon@src.gnome.org>2000-10-12 02:19:16 +0800
commit322c0cad7043d9b4b10b7dc71cec028ad00834d9 (patch)
treeafbb90d10c30799fa790d9384c543e71a768854c /calendar/cal-util
parentc865d05f0f66f61975c69ae7acb4bc8878d3e47b (diff)
downloadgsoc2013-evolution-322c0cad7043d9b4b10b7dc71cec028ad00834d9.tar
gsoc2013-evolution-322c0cad7043d9b4b10b7dc71cec028ad00834d9.tar.gz
gsoc2013-evolution-322c0cad7043d9b4b10b7dc71cec028ad00834d9.tar.bz2
gsoc2013-evolution-322c0cad7043d9b4b10b7dc71cec028ad00834d9.tar.lz
gsoc2013-evolution-322c0cad7043d9b4b10b7dc71cec028ad00834d9.tar.xz
gsoc2013-evolution-322c0cad7043d9b4b10b7dc71cec028ad00834d9.tar.zst
gsoc2013-evolution-322c0cad7043d9b4b10b7dc71cec028ad00834d9.zip
call calendar_config_write_on_exit() to write out some special config
2000-10-11 Damon Chaplin <damon@helixcode.com> * gui/main.c (main): call calendar_config_write_on_exit() to write out some special config settings (as the mail component does). * gui/calendar-commands.c (properties_cmd): changed to use the new preferences dialog. (update_all_config_settings): new function to iterate over all the calendars and update the config settings. * gui/dialogs/cal-prefs-dialog.glade: preferences dialog. * gui/dialogs/cal-prefs-dialog.[hc]: new files for the preferences dialog. * gui/calendar-config.[hc]: new files to handle loading/saving config settings. * cal-util/cal-recur.c: fixed bug in YEARLY when no filters were set, plus minor changes. * cal-util/test-recur.c: updated. * gui/e-day-view-time-item.c: * gui/popup-menu.c: update to #include <gal/widgets/e-gui-utils.h> * gui/component-factory.c (owner_set_cb): called calendar_config_init. (owner_set_cb): (owner_unset_cb): updated the prototypes. * gui/main.c (main): added call to calendar_config_write_on_exit(). * gui/component-factory.h: * gui/component-factory.c (owner_set_cb): added global evolution_dir just like the mail component, so we know we to store config stuff. svn path=/trunk/; revision=5856
Diffstat (limited to 'calendar/cal-util')
-rw-r--r--calendar/cal-util/cal-recur.c98
-rw-r--r--calendar/cal-util/test-recur.c21
2 files changed, 80 insertions, 39 deletions
diff --git a/calendar/cal-util/cal-recur.c b/calendar/cal-util/cal-recur.c
index 1fdb515502..74a0dbf6f7 100644
--- a/calendar/cal-util/cal-recur.c
+++ b/calendar/cal-util/cal-recur.c
@@ -1082,6 +1082,12 @@ generate_instances_for_chunk (CalComponent *comp,
start_tm.tm_isdst = -1;
start_time = mktime (&start_tm);
+ if (start_time == -1) {
+ g_warning ("mktime failed - time_t out of range?");
+ finished = TRUE;
+ break;
+ }
+
if (start_time < comp_dtstart
|| (interval_end_time != -1
&& start_time >= interval_end_time))
@@ -1107,6 +1113,12 @@ generate_instances_for_chunk (CalComponent *comp,
end_tm.tm_isdst = -1;
end_time = mktime (&end_tm);
+ if (end_time == -1) {
+ g_warning ("mktime failed - time_t out of range?");
+ finished = TRUE;
+ break;
+ }
+
if (end_time < interval_start_time)
continue;
@@ -1426,12 +1438,18 @@ cal_obj_generate_set_yearly (RecurData *recur_data,
occs_arrays[num_occs_arrays++] = occs;
}
- /* Add all the arrays together. */
- occs = occs_arrays[0];
- for (i = 1; i < num_occs_arrays; i++) {
- occs2 = occs_arrays[i];
- g_array_append_vals (occs, occs2->data, occs2->len);
- g_array_free (occs2, TRUE);
+ /* Add all the arrays together. If no filters were used we just
+ create an array with one element. */
+ if (num_occs_arrays > 0) {
+ occs = occs_arrays[0];
+ for (i = 1; i < num_occs_arrays; i++) {
+ occs2 = occs_arrays[i];
+ g_array_append_vals (occs, occs2->data, occs2->len);
+ g_array_free (occs2, TRUE);
+ }
+ } else {
+ occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime));
+ g_array_append_vals (occs, occ, 1);
}
/* Now expand BYHOUR, BYMINUTE & BYSECOND. */
@@ -1720,6 +1738,7 @@ cal_obj_remove_exceptions (GArray *occs,
for (i = 0; i < occs_len; i++) {
occ = &g_array_index (occs, CalObjTime, i);
keep_occ = TRUE;
+
/* If the occurrence is a duplicate of the previous one, skip
it. */
if (prev_occ
@@ -1747,7 +1766,9 @@ cal_obj_remove_exceptions (GArray *occs,
to one that matches or follows this
occurrence. */
while (ex_occ) {
- cmp = cal_obj_date_only_compare_func (ex_occ, occ);
+ cmp = cal_obj_time_compare_func (ex_occ, occ);
+ /* I'm pretty sure this is wrong. */
+ /*cmp = cal_obj_date_only_compare_func (ex_occ, occ);*/
if (cmp > 0)
break;
@@ -3257,41 +3278,50 @@ cal_obj_time_compare_func (const void *arg1,
const void *arg2)
{
CalObjTime *cotime1, *cotime2;
+ gint retval;
cotime1 = (CalObjTime*) arg1;
cotime2 = (CalObjTime*) arg2;
if (cotime1->year < cotime2->year)
- return -1;
- if (cotime1->year > cotime2->year)
- return 1;
-
- if (cotime1->month < cotime2->month)
- return -1;
- if (cotime1->month > cotime2->month)
- return 1;
+ retval = -1;
+ else if (cotime1->year > cotime2->year)
+ retval = 1;
+
+ else if (cotime1->month < cotime2->month)
+ retval = -1;
+ else if (cotime1->month > cotime2->month)
+ retval = 1;
+
+ else if (cotime1->day < cotime2->day)
+ retval = -1;
+ else if (cotime1->day > cotime2->day)
+ retval = 1;
+
+ else if (cotime1->hour < cotime2->hour)
+ retval = -1;
+ else if (cotime1->hour > cotime2->hour)
+ retval = 1;
+
+ else if (cotime1->minute < cotime2->minute)
+ retval = -1;
+ else if (cotime1->minute > cotime2->minute)
+ retval = 1;
+
+ else if (cotime1->second < cotime2->second)
+ retval = -1;
+ else if (cotime1->second > cotime2->second)
+ retval = 1;
- if (cotime1->day < cotime2->day)
- return -1;
- if (cotime1->day > cotime2->day)
- return 1;
-
- if (cotime1->hour < cotime2->hour)
- return -1;
- if (cotime1->hour > cotime2->hour)
- return 1;
-
- if (cotime1->minute < cotime2->minute)
- return -1;
- if (cotime1->minute > cotime2->minute)
- return 1;
+ else
+ retval = 0;
- if (cotime1->second < cotime2->second)
- return -1;
- if (cotime1->second > cotime2->second)
- return 1;
+#if 0
+ g_print ("%s - ", cal_obj_time_to_string (cotime1));
+ g_print ("%s : %i\n", cal_obj_time_to_string (cotime2), retval);
+#endif
- return 0;
+ return retval;
}
static gint
diff --git a/calendar/cal-util/test-recur.c b/calendar/cal-util/test-recur.c
index 01a1719903..620e65c185 100644
--- a/calendar/cal-util/test-recur.c
+++ b/calendar/cal-util/test-recur.c
@@ -33,8 +33,12 @@
#include <cal-util/cal-recur.h>
+/* Since events can recur infinitely, we set a limit to the number of
+ occurrences we output. */
+#define MAX_OCCURRENCES 1000
+
static void usage (void);
-static icalcomponent* scan_vcs_file (char *filename);
+static icalcomponent* scan_ics_file (char *filename);
static char* get_line (char *s,
size_t size,
void *data);
@@ -59,7 +63,7 @@ main (int argc,
filename = argv[1];
- icalcomp = scan_vcs_file (filename);
+ icalcomp = scan_ics_file (filename);
if (icalcomp)
generate_occurrences (icalcomp);
@@ -76,7 +80,7 @@ usage (void)
static icalcomponent*
-scan_vcs_file (char *filename)
+scan_ics_file (char *filename)
{
FILE *fp;
icalcomponent *icalcomp;
@@ -115,6 +119,7 @@ generate_occurrences (icalcomponent *icalcomp)
{
icalcomponent *tmp_icalcomp;
CalComponent *comp;
+ gint occurrences;
for (tmp_icalcomp = icalcomponent_get_first_component (icalcomp, ICAL_ANY_COMPONENT);
tmp_icalcomp;
@@ -137,7 +142,9 @@ generate_occurrences (icalcomponent *icalcomp)
g_print ("%s\n\n", icalcomponent_as_ical_string (tmp_icalcomp));
cal_recur_generate_instances (comp, -1, -1,
- occurrence_cb, NULL);
+ occurrence_cb, &occurrences);
+
+ g_print ("%s\n\n", icalcomponent_as_ical_string (tmp_icalcomp));
}
}
@@ -149,6 +156,9 @@ occurrence_cb (CalComponent *comp,
gpointer data)
{
char start[32], finish[32];
+ gint *occurrences;
+
+ occurrences = (gint*) data;
strcpy (start, ctime (&instance_start));
start[24] = '\0';
@@ -157,5 +167,6 @@ occurrence_cb (CalComponent *comp,
g_print ("%s - %s\n", start, finish);
- return TRUE;
+ (*occurrences)++;
+ return (*occurrences == MAX_OCCURRENCES) ? FALSE : TRUE;
}