Example #1
0
/**
 * Read address book, creating all entries in the completion index.
 */ 
static void read_address_book(gchar *folderpath) {
	free_all_addresses();
	free_completion_list();

#ifndef USE_ALT_ADDRBOOK
	addrindex_load_completion( add_address, folderpath );
#else
	GError* error = NULL;
	
	addrcompl_initialize();
	if (! addrindex_dbus_load_completion(add_address, &error)) {
		g_warning("Failed to populate address completion list");
        g_error_free(error);
		return;
	}
#endif
	/* plugins may hook in here to modify/extend the completion list */
	if(!folderpath) {
		hooks_invoke(ADDDRESS_COMPLETION_BUILD_ADDRESS_LIST_HOOKLIST, &g_address_list);
	}

	g_address_list = g_list_reverse(g_address_list);
	g_completion_list = g_list_reverse(g_completion_list);
	/* merge the completion entry list into g_completion */
	if (g_completion_list) {
		g_completion_add_items(g_completion, g_completion_list);
		if (debug_get_mode())
			debug_print("read %d items in %s\n",
				g_list_length(g_completion_list),
				folderpath?folderpath:"(null)");
	}
}
Example #2
0
static gint pop3_retr_recv(Pop3Session *session, const gchar *data, guint len)
{
	gchar *file;
	gint drop_ok;
	MailReceiveData mail_receive_data;

	/* NOTE: we allocate a slightly larger buffer with a zero terminator
	 * because some plugins may think that it has a C string. */ 
	mail_receive_data.session  = session;
	mail_receive_data.data     = g_new0(gchar, len + 1);
	mail_receive_data.data_len = len;
	memcpy(mail_receive_data.data, data, len); 
	
	hooks_invoke(MAIL_RECEIVE_HOOKLIST, &mail_receive_data);

	file = get_tmp_file();
	if (pop3_write_msg_to_file(file, mail_receive_data.data, 
				   mail_receive_data.data_len, NULL) < 0) {
		g_free(file);
		g_free(mail_receive_data.data);
		session->error_val = PS_IOERR;
		return -1;
	}
	g_free(mail_receive_data.data);

	if (session->msg[session->cur_msg].partial_recv 
	    == POP3_MUST_COMPLETE_RECV) {
		gchar *old_file = partial_get_filename(
				session->ac_prefs->recv_server,
				session->ac_prefs->userid,
				session->msg[session->cur_msg].uidl);
		
		if (old_file) {
			partial_delete_old(old_file);
			g_free(old_file);
		}
	} 

	/* drop_ok: 0: success 1: don't receive -1: error */
	drop_ok = session->drop_message(session, file);

	g_free(file);
	if (drop_ok < 0) {
		session->error_val = PS_IOERR;
		return -1;
	}
	
	session->cur_total_bytes += session->msg[session->cur_msg].size;
	session->cur_total_recv_bytes += session->msg[session->cur_msg].size;
	session->cur_total_num++;

	session->msg[session->cur_msg].received = TRUE;
	session->msg[session->cur_msg].partial_recv = POP3_TOTALLY_RECEIVED;

	session->msg[session->cur_msg].recv_time =
		drop_ok == 1 ? RECV_TIME_KEEP : session->current_time;

	return PS_SUCCESS;
}
Example #3
0
File: log.c Project: Mortal/claws
static gboolean invoke_hook_cb (gpointer data)
{
	LogText *logtext = (LogText *)data;
	hooks_invoke(get_log_hook(logtext->instance), logtext);
	g_free(logtext->text);
	g_free(logtext);
	return FALSE;
}
Example #4
0
static gint pop3_top_recv(Pop3Session *session, const gchar *data, guint len)
{
	gchar *file;
	gint drop_ok;
	MailReceiveData mail_receive_data;
	gchar *partial_notice = NULL;
	
	/* NOTE: we allocate a slightly larger buffer with a zero terminator
	 * because some plugins may think that it has a C string. */ 
	mail_receive_data.session  = session;
	mail_receive_data.data     = g_new0(gchar, len + 1);
	mail_receive_data.data_len = len;
	memcpy(mail_receive_data.data, data, len);
	
	hooks_invoke(MAIL_RECEIVE_HOOKLIST, &mail_receive_data);

	partial_notice = g_strdup_printf("SC-Marked-For-Download: 0\n"
					 "SC-Partially-Retrieved: %s\n"
					 "SC-Account-Server: %s\n"
					 "SC-Account-Login: %s\n"
					 "SC-Message-Size: %d",
					 session->msg[session->cur_msg].uidl,
					 session->ac_prefs->recv_server,
			   		 session->ac_prefs->userid,
					 session->msg[session->cur_msg].size);
	file = get_tmp_file();
	if (pop3_write_msg_to_file(file, mail_receive_data.data,
				   mail_receive_data.data_len,  
				   partial_notice) < 0) {
		g_free(file);
		g_free(mail_receive_data.data);
		session->error_val = PS_IOERR;
		g_free(partial_notice);
		return -1;
	}
	g_free(mail_receive_data.data);
	g_free(partial_notice);

	/* drop_ok: 0: success 1: don't receive -1: error */
	drop_ok = session->drop_message(session, file);
	g_free(file);
	if (drop_ok < 0) {
		session->error_val = PS_IOERR;
		return -1;
	}

	session->cur_total_bytes += session->msg[session->cur_msg].size;
	session->cur_total_recv_bytes += session->msg[session->cur_msg].size;
	session->cur_total_num++;

	session->msg[session->cur_msg].received = TRUE;
	session->msg[session->cur_msg].partial_recv = POP3_PARTIALLY_RECEIVED;
	session->msg[session->cur_msg].recv_time =
		drop_ok == 1 ? RECV_TIME_KEEP : session->current_time;

	return PS_SUCCESS;
}
Example #5
0
void progressindicator_stop(ProgressType type)
{
	ProgressData data;

	data.cmd = PROGRESS_COMMAND_START;
	data.type = type;

	hooks_invoke(PROGRESSINDICATOR_HOOKLIST, &data);
}
Example #6
0
void progressindicator_set_percentage(ProgressType type, gfloat percent)
{
	ProgressData data;

	data.cmd = PROGRESS_COMMAND_SET_PERCENTAGE;
	data.type = type;
	data.value = percent;

	hooks_invoke(PROGRESSINDICATOR_HOOKLIST, &data);
}
Example #7
0
void procmsg_msginfo_unset_flags(MsgInfo *msginfo, MsgPermFlags perm_flags, MsgTmpFlags tmp_flags)
{
	FolderItem *item;
	MsgInfoUpdate msginfo_update;
	MsgPermFlags perm_flags_new, perm_flags_old;
	MsgTmpFlags tmp_flags_old;

	g_return_if_fail(msginfo != NULL);
	item = msginfo->folder;
	g_return_if_fail(item != NULL);
	
	debug_print("Unsetting flags for message %d in folder %s\n", msginfo->msgnum, item->path);

	/* Perm Flags handling */
	perm_flags_old = msginfo->flags.perm_flags;
	perm_flags_new = msginfo->flags.perm_flags & ~perm_flags;
	
	if (perm_flags_old != perm_flags_new) {
		folder_item_change_msg_flags(msginfo->folder, msginfo, perm_flags_new);

		update_folder_msg_counts(item, msginfo, perm_flags_old);

		msginfo_update.msginfo = msginfo;
		msginfo_update.flags = MSGINFO_UPDATE_FLAGS;
		hooks_invoke(MSGINFO_UPDATE_HOOKLIST, &msginfo_update);
		folder_item_update(msginfo->folder, F_ITEM_UPDATE_MSGCNT);
	}

	/* Tmp flags hanlding */
	tmp_flags_old = msginfo->flags.tmp_flags;
	msginfo->flags.tmp_flags &= ~tmp_flags;

	/* update notification */
	if ((perm_flags_old != perm_flags_new) || (tmp_flags_old != msginfo->flags.tmp_flags)) {
		msginfo_update.msginfo = msginfo;
		msginfo_update.flags = MSGINFO_UPDATE_FLAGS;
		hooks_invoke(MSGINFO_UPDATE_HOOKLIST, &msginfo_update);
		folder_item_update(msginfo->folder, F_ITEM_UPDATE_MSGCNT);
	}
}
Example #8
0
static void alertpanel_message(const gchar *title, const gchar *message, gint type)
{
	if (alertpanel_is_open)
		return;
	else {
		alertpanel_is_open = TRUE;
		hooks_invoke(ALERTPANEL_OPENED_HOOKLIST, &alertpanel_is_open);
	}

	alertpanel_create(title, message, GTK_STOCK_CLOSE, NULL, NULL,
			  ALERTFOCUS_FIRST, FALSE, NULL, type);
	alertpanel_show();
}
Example #9
0
/**
 * Apply filtering actions to the msginfo
 *
 * \param msginfo The MsgInfo describing the message that should be filtered
 * \return TRUE if the message was moved and MsgInfo is now invalid,
 *         FALSE otherwise
 */
gboolean procmsg_msginfo_filter(MsgInfo *msginfo)
{
	MailFilteringData mail_filtering_data;
			
	mail_filtering_data.msginfo = msginfo;			
	if (hooks_invoke(MAIL_FILTERING_HOOKLIST, &mail_filtering_data))
		return TRUE;

	/* filter if enabled in prefs or move to inbox if not */
	if((filtering_rules != NULL) &&
	   filter_message_by_msginfo(filtering_rules, msginfo))
		return TRUE;

	return FALSE;
}
Example #10
0
static void alertpanel_show(void)
{
	gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
	manage_window_set_transient(GTK_WINDOW(dialog));
	gtk_widget_show_all(dialog);
	value = G_ALERTWAIT;

	if (gdk_pointer_is_grabbed())
		gdk_pointer_ungrab(GDK_CURRENT_TIME);
	inc_lock();
	while ((value & G_ALERT_VALUE_MASK) == G_ALERTWAIT)
		gtk_main_iteration();

	gtk_widget_destroy(dialog);
	GTK_EVENTS_FLUSH();

	alertpanel_is_open = FALSE;
	hooks_invoke(ALERTPANEL_OPENED_HOOKLIST, &alertpanel_is_open);

	inc_unlock();
}
Example #11
0
AlertValue alertpanel_full(const gchar *title, const gchar *message,
			   const gchar *button1_label,
			   const gchar *button2_label,
			   const gchar *button3_label,
				 AlertFocus   focus,
			   gboolean     can_disable,
			   GtkWidget   *widget,
			   AlertType    alert_type)
{
	if (alertpanel_is_open)
		return -1;
	else {
		alertpanel_is_open = TRUE;
		hooks_invoke(ALERTPANEL_OPENED_HOOKLIST, &alertpanel_is_open);
	}
	alertpanel_create(title, message, button1_label, button2_label,
			  button3_label, focus, can_disable, widget, alert_type);
	alertpanel_show();

	debug_print("return value = %d\n", value);
	return value;
}
Example #12
0
static gint headerview_show_avatar (HeaderView *headerview, MsgInfo *msginfo)
{
	AvatarRender *avatarr = avatars_avatarrender_new(msginfo);
	GtkWidget *hbox = headerview->hbox;

	hooks_invoke(AVATAR_IMAGE_RENDER_HOOKLIST, avatarr);

	if (!avatarr->image) {
		if (headerview->image
				&& gtk_widget_get_visible(headerview->image)) {
			gtk_widget_hide(headerview->image);
			gtk_widget_queue_resize(hbox);
		}
		avatars_avatarrender_free(avatarr);
		return -1;
	}
	if (!gtk_widget_get_visible(hbox)) {
		avatars_avatarrender_free(avatarr);
		return -1;
	}

	if (headerview->image) {
		gtk_widget_destroy(headerview->image);
		headerview->image = NULL;
	}

	gtk_box_pack_start(GTK_BOX(hbox), avatarr->image, FALSE, FALSE, 0);
	gtk_widget_show(avatarr->image);

	headerview->image = avatarr->image;
	avatarr->image = NULL; /* avoid destroying */
	avatars_avatarrender_free(avatarr);

	headerview_save_contact_pic(headerview, msginfo);
	return 0;
}
Example #13
0
static void subscribe_newsgroup_cb(GtkAction *action, gpointer data)
{
	FolderView *folderview = (FolderView *)data;
	Folder *folder;
	FolderItem *item;
	FolderItem *rootitem;
	FolderItem *newitem;
	GSList *new_subscr;
	GSList *cur;
	GNode *gnode;
	MainWindow *mainwin = mainwindow_get_mainwindow();
	
	if ((item = folderview_get_selected_item(folderview)) == NULL) return;

	if (mainwin->lock_count || news_folder_locked(item->folder))
		return;

	folder = item->folder;
	cm_return_if_fail(folder != NULL);
	cm_return_if_fail(FOLDER_TYPE(folder) == F_NEWS);
	cm_return_if_fail(folder->account != NULL);

	if ((rootitem = folder_item_parent(item)) == NULL)
		rootitem = item;

	new_subscr = grouplist_dialog(folder);

	/* remove unsubscribed newsgroups */
	for (gnode = folder->node->children; gnode != NULL; ) {
		GNode *next = gnode->next;

		item = FOLDER_ITEM(gnode->data);
		if (g_slist_find_custom(new_subscr, item->path,
					(GCompareFunc)g_ascii_strcasecmp) != NULL) {
			gnode = next;
			continue;
		}

		if (folderview_get_opened_item(folderview) == item) {
			summary_clear_all(folderview->summaryview);
			folderview_close_opened(folderview, TRUE);
		}

		folderview_remove_item(folderview, item);
		folder_item_remove(item);

		gnode = next;
	}

	folderview_freeze(folderview);

	/* add subscribed newsgroups */
	for (cur = new_subscr; cur != NULL; cur = cur->next) {
		gchar *name = (gchar *)cur->data;
		FolderUpdateData hookdata;

		if (news_find_child_item(rootitem, name) != NULL)
			continue;

		newitem = folder_item_new(folder, name, name);
		folder_item_append(rootitem, newitem);

		hookdata.folder = newitem->folder;
		hookdata.update_flags = FOLDER_TREE_CHANGED | FOLDER_ADD_FOLDERITEM;
		hookdata.item = newitem;
		hookdata.item2 = NULL;
		hooks_invoke(FOLDER_UPDATE_HOOKLIST, &hookdata);
	}

	folderview_thaw(folderview);

	slist_free_strings_full(new_subscr);

	folder_write_list();
}