All pastes #507401 Raw Edit

mcalamelli

public c v1 · immutable
·published 2007-05-24 15:10 UTC
rendered paste body
/* Standard includes */#include <stdio.h>#include <stdlib.h>#include <string.h>/* EFL includes */#include <Etk.h>/* Libsylph includes */#include <sylph/sylmain.h>#include <sylph/prefs_common.h>#include <sylph/account.h>#include <sylph/folder.h>#include <sylph/procheader.h>// NUOVO - visualizzazione singolo messaggio#include <sylph/procmsg.h>#include <sylph/procmime.h>#define BUFFSIZE 8192//Etk_Tree_Col *mail_folders, *messages, *messages_subj, *messages_from, *messages_date;Etk_Widget *folder_tree, *message_tree;Etk_Tree_Row *child_row, *root_row, *message;// NUOVO - visualizzazione singolo messaggioEtk_Widget *messagebody;Etk_Widget *from_label, *to_label, *subj_label;//const char *stock_key;int prevdepth = 1; //The root levelint currdepth = 1; //The root levelstatic void _main_quit_cb(void *data);static void _row_clicked_cb(Etk_Tree *tree, Etk_Tree_Row *row, void *data);// NUOVO - visualizzazione singolo messaggiostatic void _message_clicked_cb(Etk_Tree *tree, Etk_Tree_Row *row, void *data);//void list_messages(const gchar *folder_id) {	FolderItem *item;	GSList *mlist, *cur;	etk_tree_clear(ETK_TREE(message_tree));	if (!folder_id)		folder_id = "inbox";	item = folder_find_item_from_identifier(folder_id);	if (!item) {		g_warning("folder item '%s' not found.\n", folder_id);		exit(1);	}	mlist = folder_item_get_msg_list(item, TRUE);	for (cur = mlist; cur != NULL; cur = cur->next) {		MsgInfo *msginfo = (MsgInfo *)cur->data;		root_row = etk_tree_row_append(ETK_TREE(message_tree), NULL,		  	messages_subj, msginfo->subject,  		  	messages_from, msginfo->from,		  	messages_date, msginfo->date, 		  	NULL);		// NUOVO - visualizzazione singolo messaggio		etk_tree_row_data_set(root_row, msginfo);			//	 	}	//procmsg_msg_list_free(mlist);}static gboolean traverse_func(GNode *node, gpointer data) {	FolderItem *item;	gchar *id;	int node_depth;		item = FOLDER_ITEM(node->data);	id = folder_item_get_identifier(item);	if (id) {		node_depth = g_node_depth(node);		if (node_depth == 1)	{				stock_key = etk_stock_key_get(ETK_STOCK_PLACES_USER_HOME, ETK_STOCK_SMALL);			root_row = etk_tree_row_append(ETK_TREE(folder_tree), NULL,					  	mail_folders, etk_theme_icon_path_get(), stock_key, "Mail",					  	NULL);			etk_tree_row_data_set(child_row, NULL);		} else if (node_depth == 2) {			stock_key = etk_stock_key_get(ETK_STOCK_PLACES_FOLDER, ETK_STOCK_SMALL);			child_row = etk_tree_row_append(ETK_TREE(folder_tree), root_row,					  	mail_folders, etk_theme_icon_path_get(), stock_key, item->name,					  	NULL);			etk_tree_row_data_set(child_row, item->path);		} else if (node_depth > 2) {			if (currdepth == node_depth) {				if (currdepth == prevdepth)					child_row = etk_tree_row_parent_get(child_row);				else					child_row = etk_tree_row_parent_get(etk_tree_row_prev_get(child_row));			} else {				while (currdepth >= node_depth) {					currdepth--;					child_row = etk_tree_row_parent_get(child_row);				}			}			stock_key = etk_stock_key_get(ETK_STOCK_PLACES_FOLDER, ETK_STOCK_SMALL);			child_row = etk_tree_row_append(ETK_TREE(folder_tree), child_row,					  	mail_folders, etk_theme_icon_path_get(), stock_key, item->name,					  	NULL);			etk_tree_row_data_set(child_row, item->path);					}		g_free(id);		prevdepth = currdepth = node_depth;	}	return FALSE;}void list_folders(void) {	GList *list;	Folder *folder;	for (list = folder_get_list(); list != NULL; list = list->next) {		folder = FOLDER(list->data);		if (folder->node)			g_node_traverse(folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1, traverse_func, NULL);	}}	int main(int argc, char **argv) {	Etk_Widget *win;	Etk_Widget *vbox;	Etk_Widget *hpaned;	Etk_Widget *vpaned;	Etk_Widget *menu_bar;	Etk_Widget *menu_item, *popup_menu_item;	Etk_Widget *menu;	Etk_Widget *toolbar;		Etk_Widget *toolbar_button;	Etk_Widget *separator;	// NUOVO - visualizzazione singolo messaggio	Etk_Widget *messagebody_scroll;	Etk_Widget *message_vbox;	//			if (!etk_init(&argc, &argv)) {		fprintf(stderr, "Could not init Etk. Exiting...\n");		return 1;	}	/* libsylph initialization and config reading */	syl_init();	prefs_common_read_config();	account_read_config_all();	if (folder_read_list() < 0) {		g_warning("folder_read_list: error");		return 1;	}		/* Main window*/	win = etk_window_new();		etk_window_title_set(ETK_WINDOW(win), "elpheed");	etk_window_resize(ETK_WINDOW(win), 640, 480);		etk_container_border_width_set(ETK_CONTAINER(win), 5);	etk_signal_connect_swapped("destroyed", ETK_OBJECT(win), ETK_CALLBACK(_main_quit_cb), NULL);				/* Main container*/	vbox = etk_vbox_new(ETK_FALSE, 0);	etk_container_add(ETK_CONTAINER(win), vbox);			/* Menu bar */	menu_bar = etk_menu_bar_new();	etk_box_append(ETK_BOX(vbox), menu_bar, ETK_BOX_START, ETK_BOX_NONE, 0);	menu_item = etk_menu_item_new_with_label("File");	etk_menu_shell_append(ETK_MENU_SHELL(menu_bar), ETK_MENU_ITEM(menu_item));   	   	/* File popup menu */   	menu = etk_menu_new();   	etk_menu_item_submenu_set(ETK_MENU_ITEM(menu_item), ETK_MENU(menu));   	popup_menu_item = etk_menu_item_new_with_label("Quit");   	etk_menu_shell_append(ETK_MENU_SHELL(menu), ETK_MENU_ITEM(popup_menu_item));   	etk_signal_connect("activated", ETK_OBJECT(popup_menu_item), ETK_CALLBACK(_main_quit_cb), NULL);   			menu_item = etk_menu_item_new_with_label("Edit");	etk_menu_shell_append(ETK_MENU_SHELL(menu_bar), ETK_MENU_ITEM(menu_item));			menu_item = etk_menu_item_new_with_label("View");	etk_menu_shell_append(ETK_MENU_SHELL(menu_bar), ETK_MENU_ITEM(menu_item));		menu_item = etk_menu_item_new_with_label("Message");	etk_menu_shell_append(ETK_MENU_SHELL(menu_bar), ETK_MENU_ITEM(menu_item));	menu_item = etk_menu_item_new_with_label("Tools");	etk_menu_shell_append(ETK_MENU_SHELL(menu_bar), ETK_MENU_ITEM(menu_item));	menu_item = etk_menu_item_new_with_label("Configuration");	etk_menu_shell_append(ETK_MENU_SHELL(menu_bar), ETK_MENU_ITEM(menu_item));	menu_item = etk_menu_item_new_with_label("Help");	etk_menu_shell_append(ETK_MENU_SHELL(menu_bar), ETK_MENU_ITEM(menu_item));			/* Toolbar */	toolbar = etk_toolbar_new();	etk_box_append(ETK_BOX(vbox), toolbar, ETK_BOX_START, ETK_BOX_NONE, 0);		toolbar_button = etk_tool_button_new_with_label("Get");   	etk_toolbar_append(ETK_TOOLBAR(toolbar), toolbar_button);	toolbar_button = etk_tool_button_new_with_label("Get All");   	etk_toolbar_append(ETK_TOOLBAR(toolbar), toolbar_button);   	separator = etk_vseparator_new();   	etk_toolbar_append(ETK_TOOLBAR(toolbar), separator);	toolbar_button = etk_tool_button_new_with_label("Send");   	etk_toolbar_append(ETK_TOOLBAR(toolbar), toolbar_button);   	separator = etk_vseparator_new();   	etk_toolbar_append(ETK_TOOLBAR(toolbar), separator);	toolbar_button = etk_tool_button_new_with_label("Compose");   	etk_toolbar_append(ETK_TOOLBAR(toolbar), toolbar_button);   	   	   		toolbar_button = etk_tool_button_new_with_label("Reply");   	etk_toolbar_append(ETK_TOOLBAR(toolbar), toolbar_button);	toolbar_button = etk_tool_button_new_with_label("Reply to all");   	etk_toolbar_append(ETK_TOOLBAR(toolbar), toolbar_button);   	toolbar_button = etk_tool_button_new_with_label("Forward");   	etk_toolbar_append(ETK_TOOLBAR(toolbar), toolbar_button);   	   	separator = etk_vseparator_new();   	etk_toolbar_append(ETK_TOOLBAR(toolbar), separator); 	toolbar_button = etk_tool_button_new_with_label("Delete");   	etk_toolbar_append(ETK_TOOLBAR(toolbar), toolbar_button);   	separator = etk_vseparator_new();   	etk_toolbar_append(ETK_TOOLBAR(toolbar), separator);   		toolbar_button = etk_tool_button_new_with_label("Prev");   	etk_toolbar_append(ETK_TOOLBAR(toolbar), toolbar_button);     	  	toolbar_button = etk_tool_button_new_with_label("Next");   	etk_toolbar_append(ETK_TOOLBAR(toolbar), toolbar_button);   	 	  				/* Resizeable horiz panel, folders tree and messages table/view */ 	hpaned = etk_hpaned_new();	etk_box_append(ETK_BOX(vbox), ETK_WIDGET(hpaned), ETK_BOX_START, ETK_BOX_EXPAND_FILL, 0);		/* Folders tree*/	folder_tree = etk_tree_new();	etk_tree_mode_set(ETK_TREE(folder_tree), ETK_TREE_MODE_TREE);	etk_tree_multiple_select_set(ETK_TREE(folder_tree), ETK_TRUE);	etk_paned_child1_set(ETK_PANED(hpaned), ETK_WIDGET(folder_tree), ETK_TRUE);		mail_folders = etk_tree_col_new(ETK_TREE(folder_tree), "Folders", 130, 0.0);	etk_tree_col_model_add(mail_folders, etk_tree_model_image_new());	etk_tree_col_model_add(mail_folders, etk_tree_model_text_new()); 		etk_tree_build(ETK_TREE(folder_tree));	etk_tree_freeze(ETK_TREE(folder_tree));	/* Obtaining the folders tree */	list_folders();	etk_tree_thaw(ETK_TREE(folder_tree));	etk_signal_connect("row-clicked", ETK_OBJECT(folder_tree), ETK_CALLBACK(_row_clicked_cb), NULL);		/* Resizeable vert panel, messages table and message view */	vpaned = etk_vpaned_new();	etk_paned_child2_set(ETK_PANED(hpaned), ETK_WIDGET(vpaned), ETK_TRUE);		/* messages table */	message_tree = etk_tree_new();	etk_tree_mode_set(ETK_TREE(message_tree), ETK_TREE_MODE_TREE);	etk_tree_multiple_select_set(ETK_TREE(message_tree), ETK_TRUE);	etk_paned_child1_set(ETK_PANED(vpaned), ETK_WIDGET(message_tree), ETK_TRUE);		messages_subj = etk_tree_col_new(ETK_TREE(message_tree), "Subject", 130, 0.0);	etk_tree_col_model_add(messages_subj, etk_tree_model_text_new());	messages_from = etk_tree_col_new(ETK_TREE(message_tree), "From", 130, 0.0);	etk_tree_col_model_add(messages_from, etk_tree_model_text_new());		messages_date = etk_tree_col_new(ETK_TREE(message_tree), "Date", 130, 0.0);	etk_tree_col_model_add(messages_date, etk_tree_model_text_new());	//messages_size = etk_tree_col_new(ETK_TREE(message_tree), "Size", 130, 0.0);	//etk_tree_col_model_add(messages, etk_tree_model_image_new());	//etk_tree_col_model_add(messages, etk_tree_model_text_new());				etk_tree_build(ETK_TREE(message_tree));	// NUOVO - visualizzazione singolo messaggio	etk_signal_connect("row-clicked", ETK_OBJECT(message_tree), ETK_CALLBACK(_message_clicked_cb), NULL);		message_vbox = etk_vbox_new(ETK_FALSE, 5);	etk_paned_child2_set(ETK_PANED(vpaned), ETK_WIDGET(message_vbox), ETK_TRUE);	messagebody_scroll = etk_scrolled_view_new();	messagebody = etk_text_view_new();	from_label = etk_label_new("");	to_label = etk_label_new(""); 	subj_label = etk_label_new("");		etk_container_add(ETK_CONTAINER(message_vbox), from_label);	etk_container_add(ETK_CONTAINER(message_vbox), to_label);	etk_container_add(ETK_CONTAINER(message_vbox), subj_label);			etk_bin_child_set(ETK_BIN(messagebody_scroll), messagebody);	//etk_container_add(ETK_CONTAINER(message_vbox), messagebody_scroll);	etk_box_append(ETK_BOX(message_vbox), ETK_WIDGET(messagebody_scroll), ETK_BOX_START, ETK_BOX_EXPAND_FILL, 0);	//			etk_widget_show_all(win);			etk_main();		/* Libraries cleanup */	etk_shutdown();		syl_cleanup();		return 0;}/* Main window destroy (callback) */static void _main_quit_cb(void *data) {   etk_main_quit();}/* Row selected */static void _row_clicked_cb(Etk_Tree *tree, Etk_Tree_Row *row, void *data) {	char *row_path;		row_path = etk_tree_row_data_get(row);	if (row_path != NULL) {		list_messages(row_path);	} else {		etk_tree_clear(ETK_TREE(message_tree));	}}// NUOVO - visualizzazione singolo messaggio/* Message selected (callback for test) */static void _message_clicked_cb(Etk_Tree *tree, Etk_Tree_Row *row, void *data) {	MsgInfo *msginfo;	FILE *msgfile, *arrfile;	char buf[BUFFSIZE];	Etk_Textblock_Iter *iter;	char *label;	//	Header *header;	GPtrArray *headers;	int i;	//		etk_textblock_clear(ETK_TEXT_VIEW(messagebody)->textblock);	iter = etk_text_view_cursor_get(ETK_TEXT_VIEW(messagebody));	msginfo = etk_tree_row_data_get(row);	msgfile = procmime_get_first_text_content(msginfo, NULL);		//	arrfile = procmsg_open_message(msginfo);	headers = procheader_get_header_array_asis(arrfile, NULL);	for (i = 0; i < headers->len; i++) {		Header *header;		header = g_ptr_array_index(headers, i);		printf("%s: %s\n", header->name, header->body);	}	//		while (fgets(buf, sizeof(buf), msgfile) != NULL) {		etk_textblock_insert(ETK_TEXT_VIEW(messagebody)->textblock, iter, buf, strlen(buf));	}	asprintf(&label, "<b>From:</b> %s", msginfo->from);		etk_label_set(ETK_LABEL(from_label), label);	asprintf(&label, "<b>To:</b> %s", msginfo->to);		etk_label_set(ETK_LABEL(to_label), label);	asprintf(&label, "<b>Subject:</b> %s", msginfo->subject);		etk_label_set(ETK_LABEL(subj_label), label);		etk_widget_size_recalc_queue(ETK_WIDGET(messagebody));		fclose(msgfile);	}//