/*
* 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
#include <glib.h>
#include <glib/gi18n.h>
-#include <ical.h>
+#include <libical/ical.h>
#include <gtk/gtk.h>
#if USE_PTHREAD
#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"
"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;
}
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;
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);
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);
g_free(url);
}
- procmsg_msginfo_free(msginfo);
+ procmsg_msginfo_free(&msginfo);
}
statusbar_progress_all(0,0,0);
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;
}
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);
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)
{
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;
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)
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);
}
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)
{
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
/* 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);
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;
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);
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);
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;
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) {
static void vcal_viewer_show_mimepart(MimeViewer *_mimeviewer, const gchar *file, MimeInfo *mimeinfo)
{
VCalViewer *vcalviewer = (VCalViewer *) _mimeviewer;
+ GtkAllocation allocation;
+
START_TIMING("");
s_vcalviewer = vcalviewer;
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);
{
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) {
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);
}
}
}
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;
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;
MainWindow *mainwin = mainwindow_get_mainwindow();
if (mainwin->summaryview->folder_item == item) {
redisp = TRUE;
- summary_show(mainwin->summaryview, NULL);
+ summary_show(mainwin->summaryview, NULL, FALSE);
}
}
if (folder && redisp) {
MainWindow *mainwin = mainwindow_get_mainwindow();
- summary_show(mainwin->summaryview, item);
+ summary_show(mainwin->summaryview, item, FALSE);
}
return;
}
folder_item_scan(item);
if (folder && redisp) {
MainWindow *mainwin = mainwindow_get_mainwindow();
- summary_show(mainwin->summaryview, item);
+ summary_show(mainwin->summaryview, item, FALSE);
}
return;
{
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);
s_vcalviewer = vcalviewer;
if (!vcalviewer->event) {
- g_warning("can't get event\n");
+ g_warning("can't get event");
return TRUE;
}
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,
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");
}
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..."));
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;
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();
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();
(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);
}
MainWindow *mainwin = mainwindow_get_mainwindow();
FolderView *folderview = NULL;
FolderItem *fitem = NULL;
- SummaryView *summaryview = NULL;
icalmemory_free_ring();
if (mainwin == NULL)
return;
- summaryview = mainwin->summaryview;
folderview = mainwin->folderview;
fitem = folderview->summaryview->folder_item;