[Xfce4-commits] r26657 - in xfcalendar/trunk: . src
Juha Kautto
juha at xfce.org
Mon Mar 3 00:25:53 CET 2008
Author: juha
Date: 2008-03-02 23:25:52 +0000 (Sun, 02 Mar 2008)
New Revision: 26657
Modified:
xfcalendar/trunk/configure.in.in
xfcalendar/trunk/src/appointment.c
xfcalendar/trunk/src/ical-code.c
Log:
1) fixed Bug 3885 - add support for evolution ics files
2) Fixed categories handling issue when having only the special
colour category. It caused an empty gategory added.
version 4.5.13.1
Modified: xfcalendar/trunk/configure.in.in
===================================================================
--- xfcalendar/trunk/configure.in.in 2008-03-02 13:51:40 UTC (rev 26656)
+++ xfcalendar/trunk/configure.in.in 2008-03-02 23:25:52 UTC (rev 26657)
@@ -9,7 +9,7 @@
dnl
dnl Version information
-m4_define([orage_version], [4.5.13.0-svn])
+m4_define([orage_version], [4.5.13.1-svn])
m4_define([gtk_minimum_version], [2.6.0])
m4_define([xfce_minimum_version], [4.4.0])
Modified: xfcalendar/trunk/src/appointment.c
===================================================================
--- xfcalendar/trunk/src/appointment.c 2008-03-02 13:51:40 UTC (rev 26656)
+++ xfcalendar/trunk/src/appointment.c 2008-03-02 23:25:52 UTC (rev 26657)
@@ -891,12 +891,12 @@
g_free(tmp2);
tmp2 = NULL;
}
- if (tmp) {
+ if (ORAGE_STR_EXISTS(tmp)) {
appt->categories = g_strjoin(",", tmp, tmp2, NULL);
g_free(tmp);
g_free(tmp2);
}
- else
+ else
appt->categories = tmp2;
/* notes */
Modified: xfcalendar/trunk/src/ical-code.c
===================================================================
--- xfcalendar/trunk/src/ical-code.c 2008-03-02 13:51:40 UTC (rev 26656)
+++ xfcalendar/trunk/src/ical-code.c 2008-03-02 23:25:52 UTC (rev 26657)
@@ -543,7 +543,7 @@
utc_icaltimezone = icaltimezone_get_utc_timezone();
if (!ORAGE_STR_EXISTS(g_par.local_timezone)) {
- orage_message(150, P_N "empty timezone\n");
+ orage_message(150, P_N "empty timezone");
g_par.local_timezone = g_strdup("floating");
}
@@ -643,10 +643,10 @@
}
if ((*p_fical = icalset_new_file(file_icalpath)) == NULL) {
if (test)
- orage_message(150, P_N "Could not open ical file (%s) %s\n"
+ orage_message(150, P_N "Could not open ical file (%s) %s"
, file_icalpath, icalerror_strerror(icalerrno));
else
- orage_message(350, P_N "Could not open ical file (%s) %s\n"
+ orage_message(350, P_N "Could not open ical file (%s) %s"
, file_icalpath, icalerror_strerror(icalerrno));
return(FALSE);
}
@@ -894,6 +894,27 @@
return(ctime);
}
+static icaltimezone *get_builtin_timezone(gchar *tz_loc)
+{
+ /* This probably is evolution format,
+ * which has /xxx/xxx/timezone and we should remove the
+ * extra /xxx/xxx/ from it */
+ char **new_str;
+ icaltimezone *l_icaltimezone = NULL;
+
+ if (tz_loc[0] == '/') {
+ orage_message(-20, P_N "evolution timezone fix %s", tz_loc);
+ new_str = g_strsplit(tz_loc, "/", 4);
+ if (new_str[0] != NULL && new_str[1] != NULL && new_str[2] != NULL
+ && new_str[3] != NULL)
+ l_icaltimezone = icaltimezone_get_builtin_timezone(new_str[3]);
+ g_strfreev(new_str);
+ }
+ else
+ l_icaltimezone = icaltimezone_get_builtin_timezone(tz_loc);
+ return(l_icaltimezone);
+}
+
static struct icaltimetype convert_to_timezone(struct icaltimetype t
, icalproperty *p)
{
@@ -910,22 +931,9 @@
itime_tz = icalproperty_get_first_parameter(p, ICAL_TZID_PARAMETER);
if (itime_tz) {
tz_loc = (char *)icalparameter_get_tzid(itime_tz);
- if (tz_loc[0] == '/') {
- /* FIXME: this should be in import and in get data
- * This probably is evolution format,
- * which has /xxx/xxx/timezone and we should remove the
- * extra /xxx/xxx/ from it */
- char **new_str;
-
- orage_message(-20, P_N "evolution timezone fix %s", tz_loc);
- new_str = g_strsplit(tz_loc, "/", 4);
- if (new_str[0] != NULL && new_str[1] != NULL && new_str[2] != NULL
- && new_str[3] != NULL)
- l_icaltimezone = icaltimezone_get_builtin_timezone(new_str[3]);
- g_strfreev(new_str);
- }
- else
- l_icaltimezone = icaltimezone_get_builtin_timezone(tz_loc);
+ /* FIXME: could we now call convert_to_zone or is it a problem
+ * if we always move to zone format ? */
+ l_icaltimezone = get_builtin_timezone(tz_loc);
if (!l_icaltimezone) {
orage_message(250, P_N "builtin timezone %s not found, conversion failed.", tz_loc);
}
@@ -986,8 +994,9 @@
p = icalcomponent_get_first_property(c, ICAL_DUE_PROPERTY);
p2 = icalcomponent_get_first_property(c, ICAL_COMPLETED_PROPERTY);
}
- else if (per.ikind == ICAL_VJOURNAL_COMPONENT)
- p = NULL; /* does not exist for journal */
+ else if (per.ikind == ICAL_VJOURNAL_COMPONENT
+ || per.ikind == ICAL_VTIMEZONE_COMPONENT)
+ p = NULL; /* does not exist for journal and timezone */
else {
orage_message(150, P_N "unknown component type (%s)", icalcomponent_get_uid(c));
p = NULL;
@@ -1030,7 +1039,7 @@
else
per.ctime = icaltime_null_time();
- return (per);
+ return(per);
}
/* basically copied from icaltime_compare, which can't be used
@@ -1145,7 +1154,7 @@
wtime = icaltime_convert_to_zone(t, local_icaltimezone);
}
else {
- l_icaltimezone = icaltimezone_get_builtin_timezone(tz);
+ l_icaltimezone = get_builtin_timezone(tz);
if (!l_icaltimezone)
orage_message(250, P_N "builtin timezone %s not found, conversion failed.", tz);
else
@@ -2397,6 +2406,7 @@
case ICAL_DTSTAMP_PROPERTY:
case ICAL_CREATED_PROPERTY:
case ICAL_LASTMODIFIED_PROPERTY:
+ case ICAL_SEQUENCE_PROPERTY:
break;
default:
orage_message(55, P_N "unknown property %s"
@@ -2620,7 +2630,7 @@
c != 0 && !key_found;
c = icalcomponent_get_next_component(base, ICAL_ANY_COMPONENT)) {
uid = (char *)icalcomponent_get_uid(c);
- if (strcmp(uid, int_uid) == 0) {
+ if (ORAGE_STR_EXISTS(uid) && (strcmp(uid, int_uid) == 0)) {
if ((p = icalcomponent_get_first_property(c,
ICAL_CREATED_PROPERTY)))
create_time = icalproperty_get_created(p);
@@ -3787,7 +3797,7 @@
if ((uid = (char *)icalcomponent_get_uid(ca)) == NULL) {
uid = generate_uid();
icalcomponent_add_property(ca, icalproperty_new_uid(uid));
- orage_message(15, "Generated UID %s\n", uid);
+ orage_message(15, "Generated UID %s", uid);
g_free(uid);
}
@@ -3811,7 +3821,7 @@
#undef P_N
#define P_N "pre_format: "
gchar *text, *tmp, *tmp2, *tmp3;
- gsize text_len;
+ gsize text_len, i;
GError *error = NULL;
#ifdef ORAGE_DEBUG
@@ -3824,7 +3834,7 @@
g_error_free(error);
return(FALSE);
}
- /* Then convert to utf8 if needed */
+ /***** Check utf8 coformtability *****/
if (!g_utf8_validate(text, -1, NULL)) {
orage_message(250, P_N "is not in utf8 format. Conversion needed.\n (Use iconv and convert it into UTF-8 and import it again.)\n");
return(FALSE);
@@ -3836,10 +3846,10 @@
}*/
}
- /* 1: change DCREATED to CREATED */
- for (tmp = g_strrstr(text, "DCREATED:");
+ /***** 1: change DCREATED to CREATED *****/
+ for (tmp = g_strstr_len(text, text_len, "DCREATED:");
tmp != NULL;
- tmp = g_strrstr(text, "DCREATED:")) {
+ tmp = g_strstr_len(tmp, strlen(tmp), "DCREATED:")) {
tmp2 = tmp+strlen("DCREATED:yyyymmddThhmmss");
if (*tmp2 == 'Z') {
/* it is already in UTC, so just fix the parameter name */
@@ -3852,11 +3862,49 @@
}
*(tmp3-1) = 'Z'; /* this is 'bad'...but who cares...it is fast */
}
- tmp3 = g_strndup(tmp, tmp2-tmp);
- orage_message(15, _("... Patched DCREATED to be CREATED (%s)"), tmp3);
- g_free(tmp3);
+ orage_message(15, _("... Patched DCREATED to be CREATED."));
}
- /* write file */
+
+ /***** 2: change absolute timezones into libical format *****/
+ /* At least evolution uses absolute timezones.
+ * We assume format has /xxx/xxx/timezone and we should remove the
+ * extra /xxx/xxx/ from it */
+ for (tmp = g_strstr_len(text, text_len, ";TZID=/");
+ tmp != NULL;
+ tmp = g_strstr_len(tmp, strlen(tmp), ";TZID=/")) {
+ /* tmp = original TZID start
+ * tmp2 = end of line
+ * tmp3 = current search and eventually the real tzid */
+ tmp = tmp+6; /* 6 = skip ";TZID=" */
+ if (!(tmp2 = g_strstr_len(tmp, 100, "\n"))) { /* no end of line */
+ orage_message(150, P_N "timezone patch failed 1. no end-of-line found: %s", tmp);
+ continue;
+ }
+ tmp3 = tmp;
+
+ tmp3++; /* skip '/' */
+ if (!(tmp3 = g_strstr_len(tmp3, tmp2-tmp3, "/"))) { /* no more '/' */
+ orage_message(150, P_N "timezone patch failed 2. no / found: %s", tmp);
+ continue;
+ }
+ tmp3++; /* skip '/' */
+ if (!(tmp3 = g_strstr_len(tmp3, tmp2-tmp3, "/"))) { /* no more '/' */
+ orage_message(150, P_N "timezone patch failed 3. no / found: %s", tmp);
+ continue;
+ }
+
+ /* we found the real tzid since we came here */
+ tmp3++; /* skip '/' */
+ /* move the real tzid (=tmp3) to the beginning (=tmp) */
+ for (; tmp3 < tmp2; tmp3++, tmp++)
+ *tmp = *tmp3;
+ /* fill the end of the line with spaces */
+ for (; tmp < tmp2; tmp++)
+ *tmp = ' ';
+ orage_message(15, _("... Patched timezone to Orage format."));
+ }
+
+ /***** All done: write file *****/
if (!g_file_set_contents(file_name_out, text, -1, NULL)) {
orage_message(250, P_N "Could not write ical file (%s)", file_name_out);
return(FALSE);
@@ -3883,7 +3931,7 @@
return(FALSE);
}
if ((file_ical = icalset_new_file(ical_file_name)) == NULL) {
- orage_message(250, P_N "Could not open ical file (%s) %s\n"
+ orage_message(250, P_N "Could not open ical file (%s) %s"
, ical_file_name, icalerror_strerror(icalerrno));
return(FALSE);
}
@@ -3901,7 +3949,9 @@
cnt2++;
add_event(c2);
}
- else
+ /* we ignore TIMEZONE component; Orage only uses internal
+ * timezones from libical */
+ else if (icalcomponent_isa(c2) != ICAL_VTIMEZONE_COMPONENT)
orage_message(140, P_N "unknown component %s %s"
, icalcomponent_kind_to_string(
icalcomponent_isa(c2))
@@ -4060,7 +4110,7 @@
}
else {
- orage_message(250, P_N "Unknown uid type %s\n", uid);
+ orage_message(250, P_N "Unknown uid type %s", uid);
}
if (uid_end != NULL) /* we have more uids */
More information about the Xfce4-commits
mailing list