fix sometimes crasher in vcalendar_get_current_item()
[claws.git] / src / plugins / vcalendar / vcalendar.c
index 1362ded24ceb4270bd775d3d3e4a394382940c49..cd08e5588535154f11150c48f19d0bf7656228ea 100644 (file)
@@ -1,7 +1,6 @@
 /*
  * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2007 Colin Leroy <colin@colino.net> and 
- * the Claws Mail team
+ * Copyright (C) 1999-2018 Colin Leroy and the Claws Mail team
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -27,7 +26,7 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 
-#include <ical.h>
+#include <libical/ical.h>
 #include <gtk/gtk.h>
 
 #if USE_PTHREAD
@@ -37,6 +36,7 @@
 #include "folder.h"
 #include "folder_item_prefs.h"
 #include "mimeview.h"
+#include "file-utils.h"
 #include "utils.h"
 #include "vcalendar.h"
 #include "vcal_manager.h"
@@ -122,7 +122,8 @@ static void create_meeting_from_message_cb_ui(GtkAction *action, gpointer data)
                                       "want to continue?"), 
                                       total);
        if (total > 9
-       &&  alertpanel(_("Warning"), msg, GTK_STOCK_CANCEL, "+" GTK_STOCK_YES, NULL)
+       &&  alertpanel(_("Warning"), msg, GTK_STOCK_CANCEL, GTK_STOCK_YES, NULL,
+               ALERTFOCUS_SECOND)
            != G_ALERTALTERNATE) {
                g_free(msg);
                return;
@@ -150,15 +151,15 @@ static void create_meeting_from_message_cb_ui(GtkAction *action, gpointer data)
                }
                
                if (fp) {
-                       gchar uid[256];
+                       gchar *uid;
                        time_t t = time(NULL);
                        time_t t2 = t+3600;
                        gchar *org = NULL;
                        gchar *orgname = NULL;
                        gchar *summary = g_strdup(msginfo->subject ? msginfo->subject:_("no subject"));
                        gchar *description = file_read_stream_to_str(fp);
-                       gchar *dtstart = g_strdup(icaltime_as_ical_string(icaltime_from_timet(t, FALSE)));
-                       gchar *dtend = g_strdup(icaltime_as_ical_string(icaltime_from_timet(t2, FALSE)));
+                       gchar *dtstart = g_strdup(icaltime_as_ical_string(icaltime_from_timet_with_zone(t, FALSE, NULL)));
+                       gchar *dtend = g_strdup(icaltime_as_ical_string(icaltime_from_timet_with_zone(t2, FALSE, NULL)));
                        gchar *recur = NULL;
                        gchar *tzid = g_strdup("UTC");
                        gchar *url = NULL;
@@ -166,7 +167,7 @@ static void create_meeting_from_message_cb_ui(GtkAction *action, gpointer data)
                        gint sequence = 1;
                        PrefsAccount *account = NULL;
                        
-                       fclose(fp);
+                       claws_fclose(fp);
 
                        if (item && item->prefs && item->prefs->enable_default_account)
                                account = account_find_from_id(item->prefs->default_account);
@@ -179,22 +180,13 @@ static void create_meeting_from_message_cb_ui(GtkAction *action, gpointer data)
 
                        org = g_strdup(account->address);
 
-                       if (account->set_domain && account->domain) {
-                               g_snprintf(uid, sizeof(uid), "%s", account->domain); 
-                       } else if (!strncmp(get_domain_name(), "localhost", strlen("localhost"))) {
-                               g_snprintf(uid, sizeof(uid), "%s", 
-                                       strchr(account->address, '@') ?
-                                       strchr(account->address, '@')+1 :
-                                       account->address);
-                       } else {
-                               g_snprintf(uid, sizeof(uid), "%s", "");
-                       }
-                       generate_msgid(uid, 255, account->address);
+                       uid = prefs_account_generate_msgid(account);
                        
                        event = vcal_manager_new_event(uid,
                                        org, NULL, NULL/*location*/, summary, description, 
                                        dtstart, dtend, recur, tzid, url, method, sequence, 
                                        ICAL_VTODO_COMPONENT);
+                       g_free(uid);
                        
                        /* hack to get default hours */
                        g_free(event->dtstart);
@@ -217,7 +209,7 @@ bail:
                        g_free(url);
                }
 
-               procmsg_msginfo_free(msginfo);
+               procmsg_msginfo_free(&msginfo);
        }
 
        statusbar_progress_all(0,0,0);
@@ -285,23 +277,23 @@ static VCalEvent *vcalviewer_get_component(const gchar *file, const gchar *chars
 
        g_return_val_if_fail(file != NULL, NULL);
 
-       if ((fp = g_fopen(file, "rb")) == NULL) {
-               FILE_OP_ERROR(file, "g_fopen");
+       if ((fp = claws_fopen(file, "rb")) == NULL) {
+               FILE_OP_ERROR(file, "claws_fopen");
                return NULL;
        }
 
        array = g_byte_array_new();
 
-       while ((n_read = fread(buf, sizeof(gchar), sizeof(buf), fp)) > 0) {
-               if (n_read < sizeof(buf) && ferror(fp))
+       while ((n_read = claws_fread(buf, sizeof(gchar), sizeof(buf), fp)) > 0) {
+               if (n_read < sizeof(buf) && claws_ferror(fp))
                        break;
                g_byte_array_append(array, (guchar *)buf, n_read);
        }
 
-       if (ferror(fp)) {
-               FILE_OP_ERROR("file stream", "fread");
+       if (claws_ferror(fp)) {
+               FILE_OP_ERROR("file stream", "claws_fread");
                g_byte_array_free(array, TRUE);
-               fclose(fp);
+               claws_fclose(fp);
                return NULL;
        }
 
@@ -310,7 +302,7 @@ static VCalEvent *vcalviewer_get_component(const gchar *file, const gchar *chars
        compstr = (gchar *)array->data;
        g_byte_array_free(array, FALSE);
 
-       fclose(fp);     
+       claws_fclose(fp);       
 
        if (compstr) {
                event = vcal_get_event_from_ical(compstr, charset);
@@ -326,7 +318,7 @@ static VCalEvent *vcalviewer_get_component(const gchar *file, const gchar *chars
        g_free(tmplbl);                                         \
 }
 
-static void vcalviewer_answer_set_choices(VCalViewer *vcalviewer, VCalEvent *event, enum icalproperty_method method);
+static void vcalviewer_answer_set_choices(VCalViewer *vcalviewer, VCalEvent *event, icalproperty_method method);
 
 static void vcalviewer_reset(VCalViewer *vcalviewer) 
 {
@@ -362,7 +354,7 @@ static void vcalviewer_show_unavailable(VCalViewer *vcalviewer, gboolean visi)
                gtk_widget_hide(vcalviewer->unavail_box);
 }
 
-static void vcalviewer_answer_set_choices(VCalViewer *vcalviewer, VCalEvent *event, enum icalproperty_method method)
+static void vcalviewer_answer_set_choices(VCalViewer *vcalviewer, VCalEvent *event, icalproperty_method method)
 {
        int i = 0;
        
@@ -372,11 +364,11 @@ static void vcalviewer_answer_set_choices(VCalViewer *vcalviewer, VCalEvent *eve
        gtk_widget_hide(vcalviewer->button);
 
        for (i = 0; i < 3; i++) 
-               gtk_combo_box_remove_text(GTK_COMBO_BOX(vcalviewer->answer), 0);
+               gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(vcalviewer->answer), 0);
        
        vcalviewer_show_unavailable(vcalviewer, FALSE);
 
-       if (method == ICAL_METHOD_REQUEST && event && !event->rec_occurence) {
+       if (method == ICAL_METHOD_REQUEST && event && !event->rec_occurrence) {
                PrefsAccount *account = vcal_manager_get_account_from_event(event);
                
                if (!account)
@@ -390,20 +382,20 @@ static void vcalviewer_answer_set_choices(VCalViewer *vcalviewer, VCalEvent *eve
                                        ICAL_CUTYPE_INDIVIDUAL);
                }
                if (account) {
-                       gtk_combo_box_append_text(GTK_COMBO_BOX(vcalviewer->answer), _("Accept"));
-                       gtk_combo_box_append_text(GTK_COMBO_BOX(vcalviewer->answer), _("Tentatively accept"));
-                       gtk_combo_box_append_text(GTK_COMBO_BOX(vcalviewer->answer), _("Decline"));
+                       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(vcalviewer->answer), _("Accept"));
+                       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(vcalviewer->answer), _("Tentatively accept"));
+                       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(vcalviewer->answer), _("Decline"));
                        gtk_widget_set_sensitive(vcalviewer->answer, TRUE);
                        gtk_widget_set_sensitive(vcalviewer->button, TRUE);
                        gtk_widget_show(vcalviewer->answer);
                        gtk_widget_show(vcalviewer->button);
                } else {
-                       gtk_combo_box_append_text(GTK_COMBO_BOX(vcalviewer->answer), "-");
+                       gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(vcalviewer->answer), "-");
                        gtk_widget_set_sensitive(vcalviewer->answer, FALSE);
                        gtk_widget_set_sensitive(vcalviewer->button, FALSE);
                }
        } else {
-               gtk_combo_box_append_text(GTK_COMBO_BOX(vcalviewer->answer), "-");
+               gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(vcalviewer->answer), "-");
                gtk_widget_set_sensitive(vcalviewer->answer, FALSE);
                gtk_widget_set_sensitive(vcalviewer->button, FALSE);
        }
@@ -417,7 +409,7 @@ static void vcalviewer_answer_set_choices(VCalViewer *vcalviewer, VCalEvent *eve
                gchar *myfb = file_read_to_str(internal_ifb);
                g_free(internal_ifb);
                if (account) {
-                       enum icalparameter_partstat answer = 
+                       icalparameter_partstat answer = 
                                vcal_manager_get_reply_for_attendee(event, account->address);
                                
                        if (answer == ICAL_PARTSTAT_ACCEPTED)
@@ -450,10 +442,12 @@ static FolderItem *vcalendar_get_current_item(void)
 {
        MainWindow *mainwin = mainwindow_get_mainwindow();
        FolderItem *item = NULL;
-       Folder *folder = folder_find_from_name ("vCalendar", vcal_folder_get_class());
+       Folder *folder = folder_find_from_name (PLUGIN_NAME, vcal_folder_get_class());
        
        if (mainwin) {
                item = mainwin->summaryview->folder_item;
+               if (item == NULL)
+                       return NULL;
                if (item->folder == folder)
                        return item;
                else 
@@ -561,13 +555,16 @@ void vcalviewer_display_event (VCalViewer *vcalviewer, VCalEvent *event)
 /* start */
        if (event->start && *(event->start)) {
                if (event->recur && *(event->recur)) {
-                       gchar *tmp = g_strdup_printf(_("%s <span weight=\"bold\">(this event recurs)</span>"),
+                       gchar *tmp = g_strdup_printf(g_strconcat("%s <span weight=\"bold\">",
+                                                       _("(this event recurs)"),"</span>", NULL),
                                        event->start);
                        GTK_LABEL_SET_TEXT_TRIMMED(GTK_LABEL(vcalviewer->start), tmp);
                        gtk_label_set_use_markup(GTK_LABEL(vcalviewer->start), TRUE);
                        g_free(tmp);
-               } else if (event->rec_occurence) {
-                       gchar *tmp = g_strdup_printf(_("%s <span weight=\"bold\">(this event is part of a recurring event)</span>"),
+               } else if (event->rec_occurrence) {
+                       gchar *tmp = g_strdup_printf(g_strconcat("%s <span weight=\"bold\">",
+                                                       _("(this event is part of a recurring event)"),
+                                                       "</span>", NULL),
                                        event->start);
                        GTK_LABEL_SET_TEXT_TRIMMED(GTK_LABEL(vcalviewer->start), tmp);
                        gtk_label_set_use_markup(GTK_LABEL(vcalviewer->start), TRUE);
@@ -594,7 +591,7 @@ void vcalviewer_display_event (VCalViewer *vcalviewer, VCalEvent *event)
                gchar *name = vcal_manager_get_attendee_name(event, attendee);
                gchar *ename = g_markup_printf_escaped("%s", name?name:"");
                gchar *eatt = g_markup_printf_escaped("%s", attendee);
-               enum icalparameter_partstat acode = vcal_manager_get_reply_for_attendee(event, attendee);
+               icalparameter_partstat acode = vcal_manager_get_reply_for_attendee(event, attendee);
                gchar *answer = vcal_manager_get_reply_text_for_attendee(event, attendee);
                gchar *type = vcal_manager_get_cutype_text_for_attendee(event, attendee);
                gchar *tmp = NULL;
@@ -652,27 +649,13 @@ void vcalviewer_display_event (VCalViewer *vcalviewer, VCalEvent *event)
 
 gchar *vcalviewer_get_uid_from_mimeinfo(MimeInfo *mimeinfo)
 {
-       gchar *tmpfile = procmime_get_tmp_file_name(mimeinfo);
-       const gchar *charset = procmime_mimeinfo_get_parameter(mimeinfo, "charset");
        gchar *compstr = NULL;
        gchar *res = NULL;
        VCalEvent *event = NULL;
 
-       if (!charset)
-               charset = CS_WINDOWS_1252;
+       compstr = procmime_get_part_as_string(mimeinfo, TRUE);
        
-       if (!strcasecmp(charset, CS_ISO_8859_1))
-               charset = CS_WINDOWS_1252;
-
-       if (procmime_get_part(tmpfile, mimeinfo) < 0) {
-               g_warning("Can't get mimepart file");   
-               g_free(tmpfile);
-               return NULL;
-       }
-       
-       compstr = file_read_to_str(tmpfile);
-       
-       event = vcal_get_event_from_ical(compstr, charset);
+       event = vcal_get_event_from_ical(compstr, NULL);
        if (event)
                res = g_strdup(event->uid);
        
@@ -686,22 +669,14 @@ gchar *vcalviewer_get_uid_from_mimeinfo(MimeInfo *mimeinfo)
 static void vcalviewer_get_request_values(VCalViewer *vcalviewer, MimeInfo *mimeinfo, gboolean is_todo) 
 {
        VCalEvent *saved_event = NULL;
-       const gchar *charset = procmime_mimeinfo_get_parameter(mimeinfo, "charset");
        const gchar *saveme =  procmime_mimeinfo_get_parameter(mimeinfo, "vcalsave");
        
        if (!vcalviewer->event)
                return;
 
-       if (!charset)
-               charset = CS_WINDOWS_1252;
-       
-       if (!strcasecmp(charset, CS_ISO_8859_1))
-               charset = CS_WINDOWS_1252;
-
        /* see if we have it registered and more recent */
        saved_event = vcal_manager_load_event(vcalviewer->event->uid);
        if (saved_event && saved_event->sequence >= vcalviewer->event->sequence) {
-               charset = CS_INTERNAL;
                saved_event->method = vcalviewer->event->method;
                vcalviewer_display_event(vcalviewer, saved_event);
                vcal_manager_free_event(saved_event);
@@ -720,7 +695,6 @@ static void vcalviewer_get_request_values(VCalViewer *vcalviewer, MimeInfo *mime
 
 static void vcalviewer_get_reply_values(VCalViewer *vcalviewer, MimeInfo *mimeinfo) 
 {
-       const gchar *charset = procmime_mimeinfo_get_parameter(mimeinfo, "charset");
        VCalEvent *saved_event = NULL;
        gchar *attendee = NULL, *label = NULL;
        Answer *answer = NULL;
@@ -728,14 +702,8 @@ static void vcalviewer_get_reply_values(VCalViewer *vcalviewer, MimeInfo *mimein
        if (!vcalviewer->event)
                return;
 
-       if (!charset)
-               charset = CS_WINDOWS_1252;
-       
-       if (!strcasecmp(charset, CS_ISO_8859_1))
-               charset = CS_WINDOWS_1252;
-
        if (!vcalviewer->event->answers || g_slist_length(vcalviewer->event->answers) > 1) {
-               g_warning("strange, no answers or more than one\n");
+               g_warning("strange, no answers or more than one");
        } 
        
        if (vcalviewer->event->answers) {
@@ -859,6 +827,8 @@ static VCalViewer *s_vcalviewer = NULL;
 static void vcal_viewer_show_mimepart(MimeViewer *_mimeviewer, const gchar *file, MimeInfo *mimeinfo)
 {
        VCalViewer *vcalviewer = (VCalViewer *) _mimeviewer;
+       GtkAllocation allocation;
+
        START_TIMING("");
 
        s_vcalviewer = vcalviewer;
@@ -878,8 +848,9 @@ static void vcal_viewer_show_mimepart(MimeViewer *_mimeviewer, const gchar *file
        vcalviewer_hide_error(vcalviewer);
        vcalviewer_get_event(vcalviewer, mimeinfo);
        GTK_EVENTS_FLUSH();
+       gtk_widget_get_allocation(vcalviewer->scrolledwin, &allocation);
        gtk_widget_set_size_request(vcalviewer->description, 
-               vcalviewer->scrolledwin->allocation.width - 200, -1);
+               allocation.width - 200, -1);
        gtk_label_set_line_wrap(GTK_LABEL(vcalviewer->location), TRUE);
        gtk_label_set_line_wrap(GTK_LABEL(vcalviewer->summary), TRUE);
        gtk_label_set_line_wrap(GTK_LABEL(vcalviewer->description), TRUE);
@@ -903,7 +874,7 @@ void vcalviewer_reload(FolderItem *item)
 {
        if (s_vcalviewer) {
                MainWindow *mainwin = mainwindow_get_mainwindow();
-               Folder *folder = folder_find_from_name ("vCalendar", vcal_folder_get_class());
+               Folder *folder = folder_find_from_name (PLUGIN_NAME, vcal_folder_get_class());
 
                folder_item_scan(item);
                if (mainwin && mainwin->summaryview->folder_item) {
@@ -956,12 +927,12 @@ static gboolean vcalviewer_uribtn_cb(GtkButton *widget, gpointer data)
 
 void vcalendar_refresh_folder_contents(FolderItem *item)
 {
-       Folder *folder = folder_find_from_name ("vCalendar", vcal_folder_get_class());
+       Folder *folder = folder_find_from_name (PLUGIN_NAME, vcal_folder_get_class());
        if (folder && item->folder == folder) {
                MainWindow *mainwin = mainwindow_get_mainwindow();
                folder_item_scan(item);
                if (mainwin->summaryview->folder_item == item) {
-                       summary_show(mainwin->summaryview, item);
+                       summary_show(mainwin->summaryview, item, FALSE);
                }
        }
 }
@@ -977,7 +948,7 @@ void vcalendar_cancel_meeting(FolderItem *item, const gchar *uid)
        VCalMeeting *meet = NULL;
        gchar *file = NULL;
        gint val = 0;
-       Folder *folder = folder_find_from_name ("vCalendar", vcal_folder_get_class());
+       Folder *folder = folder_find_from_name (PLUGIN_NAME, vcal_folder_get_class());
        gboolean redisp = FALSE;
        GtkWidget *send_notify_chkbtn = gtk_check_button_new_with_label(_("Send a notification to the attendees"));
        gboolean send_notify = TRUE;
@@ -990,8 +961,8 @@ void vcalendar_cancel_meeting(FolderItem *item, const gchar *uid)
 
        val = alertpanel_full(_("Cancel meeting"),
                                   _("Are you sure you want to cancel this meeting?"),
-                                  GTK_STOCK_NO, GTK_STOCK_YES, NULL, FALSE,
-                                  send_notify_chkbtn, ALERT_WARNING, G_ALERTDEFAULT);
+                                  GTK_STOCK_NO, GTK_STOCK_YES, NULL, ALERTFOCUS_FIRST, FALSE,
+                                  send_notify_chkbtn, ALERT_WARNING);
 
        if (val != G_ALERTALTERNATE)
                return;
@@ -1005,7 +976,7 @@ void vcalendar_cancel_meeting(FolderItem *item, const gchar *uid)
                MainWindow *mainwin = mainwindow_get_mainwindow();
                if (mainwin->summaryview->folder_item == item) {
                        redisp = TRUE;
-                       summary_show(mainwin->summaryview, NULL);
+                       summary_show(mainwin->summaryview, NULL, FALSE);
                }
        }
        
@@ -1020,7 +991,7 @@ void vcalendar_cancel_meeting(FolderItem *item, const gchar *uid)
 
                        if (folder && redisp) {
                                MainWindow *mainwin = mainwindow_get_mainwindow();
-                               summary_show(mainwin->summaryview, item);
+                               summary_show(mainwin->summaryview, item, FALSE);
                        }
                        return;
                }
@@ -1036,7 +1007,7 @@ void vcalendar_cancel_meeting(FolderItem *item, const gchar *uid)
                folder_item_scan(item);
        if (folder && redisp) {
                MainWindow *mainwin = mainwindow_get_mainwindow();
-               summary_show(mainwin->summaryview, item);
+               summary_show(mainwin->summaryview, item, FALSE);
        }
 
        return;
@@ -1055,7 +1026,7 @@ static gboolean vcalviewer_action_cb(GtkButton *widget, gpointer data)
 {
         VCalViewer *vcalviewer = (VCalViewer *)data;
        gint index = gtk_combo_box_get_active(GTK_COMBO_BOX(vcalviewer->answer));
-       enum icalparameter_partstat reply[3] = {ICAL_PARTSTAT_ACCEPTED, ICAL_PARTSTAT_TENTATIVE, ICAL_PARTSTAT_DECLINED};
+       icalparameter_partstat reply[3] = {ICAL_PARTSTAT_ACCEPTED, ICAL_PARTSTAT_TENTATIVE, ICAL_PARTSTAT_DECLINED};
        PrefsAccount *account = NULL;
        VCalEvent *saved_event = NULL, *event = NULL;
        debug_print("index chosen %d\n", index);
@@ -1067,7 +1038,7 @@ static gboolean vcalviewer_action_cb(GtkButton *widget, gpointer data)
        s_vcalviewer = vcalviewer;
        
        if (!vcalviewer->event) {
-               g_warning("can't get event\n");
+               g_warning("can't get event");
                return TRUE;
        }
 
@@ -1087,8 +1058,8 @@ static gboolean vcalviewer_action_cb(GtkButton *widget, gpointer data)
                AlertValue val = alertpanel_full(_("No account found"), 
                                        _("You have no account matching any attendee.\n"
                                            "Do you want to reply anyway?"),
-                                       GTK_STOCK_CANCEL, _("+Reply anyway"), NULL, FALSE,
-                                       NULL, ALERT_QUESTION, G_ALERTDEFAULT);
+                                       GTK_STOCK_CANCEL, _("Reply anyway"), NULL,
+                                               ALERTFOCUS_SECOND, FALSE, NULL, ALERT_QUESTION);
                if (val == G_ALERTALTERNATE) {          
                        account = account_get_default();
                        vcal_manager_update_answer(event, account->address, 
@@ -1106,7 +1077,7 @@ static gboolean vcalviewer_action_cb(GtkButton *widget, gpointer data)
        
        if (event->organizer && *(event->organizer) && 
            !vcal_manager_reply(account, event)) {
-               g_warning("couldn't send reply\n");
+               g_warning("couldn't send reply");
        } else {
                debug_print("no organizer, not sending answer\n");
        }
@@ -1214,7 +1185,7 @@ MimeViewer *vcal_viewer_create(void)
        vcalviewer->description = gtk_label_new("description");
        vcalviewer->attendees = gtk_label_new("attendees");
 
-       vcalviewer->answer = gtk_combo_box_new_text();
+       vcalviewer->answer = gtk_combo_box_text_new();
        vcalviewer->url = NULL;
        vcalviewer->button = gtk_button_new_with_label(_("Answer"));
        vcalviewer->reedit = gtk_button_new_with_label(_("Edit meeting..."));
@@ -1300,7 +1271,7 @@ static gint scan_timeout_tag = 0;
 
 static gboolean vcal_webcal_check(gpointer data)
 {
-       Folder *root = folder_find_from_name ("vCalendar", vcal_folder_get_class());
+       Folder *root = folder_find_from_name (PLUGIN_NAME, vcal_folder_get_class());
 
        if (prefs_common_get_prefs()->work_offline)
                return TRUE;
@@ -1321,8 +1292,11 @@ void vcalendar_init(void)
        gchar *directory = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
                                "vcalendar", NULL);
        START_TIMING("");
-       if (!is_dir_exist(directory))
-               make_dir (directory);
+       if (!is_dir_exist(directory) && make_dir (directory) != 0) {
+               g_free(directory);
+               return;
+       }
+
        g_free(directory);
 
        vcal_prefs_init();
@@ -1330,25 +1304,24 @@ void vcalendar_init(void)
        mimeview_register_viewer_factory(&vcal_viewer_factory);
        folder_register_class(vcal_folder_get_class());
 
-       folder = folder_find_from_name ("vCalendar", vcal_folder_get_class());
+       folder = folder_find_from_name (PLUGIN_NAME, vcal_folder_get_class());
        if (!folder) {
                START_TIMING("creating folder");
-               folder = folder_new(vcal_folder_get_class(), "vCalendar", NULL);
+               folder = folder_new(vcal_folder_get_class(), PLUGIN_NAME, NULL);
                folder->klass->create_tree(folder);
                folder_add(folder);
                folder_scan_tree(folder, TRUE);
                END_TIMING();
        }
-       if (folder) {
-               if (!folder->inbox) {
-                       folder->klass->create_tree(folder);
-                       folder_scan_tree(folder, TRUE);
-               }
-               if (folder->klass->scan_required(folder, folder->inbox)) {
-                       START_TIMING("scanning folder");
-                       folder_item_scan(folder->inbox);
-                       END_TIMING();
-               }
+
+       if (!folder->inbox) {
+               folder->klass->create_tree(folder);
+               folder_scan_tree(folder, TRUE);
+       }
+       if (folder->klass->scan_required(folder, folder->inbox)) {
+               START_TIMING("scanning folder");
+               folder_item_scan(folder->inbox);
+               END_TIMING();
        }
        
        vcal_folder_gtk_init();
@@ -1360,7 +1333,7 @@ void vcalendar_init(void)
                                (GSourceFunc)vcal_webcal_check, 
                                (gpointer)NULL);
        if (prefs_common_get_prefs()->enable_color) {
-               gtkut_convert_int_to_gdk_color(prefs_common_get_prefs()->uri_col,
+               gtkut_convert_int_to_gdk_color(prefs_common_get_prefs()->color[COL_URI],
                                       &uri_color);
        }
 
@@ -1380,7 +1353,6 @@ void vcalendar_done(void)
        MainWindow *mainwin = mainwindow_get_mainwindow();
        FolderView *folderview = NULL;
        FolderItem *fitem = NULL;
-       SummaryView *summaryview = NULL;
 
        icalmemory_free_ring();
 
@@ -1389,7 +1361,6 @@ void vcalendar_done(void)
        if (mainwin == NULL)
                return;
 
-       summaryview = mainwin->summaryview;
        folderview = mainwin->folderview;
        fitem = folderview->summaryview->folder_item;