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); }//