g_completion = NULL;
}
-static gint add_address1(const char *str, address_entry *ae)
+static void add_address1(const char *str, address_entry *ae)
{
completion_entry *ce1;
ce1 = g_new0(completion_entry, 1),
}
}
-/*
-* Load hash table with links to email addresses.
-*/
-static void addrbook_load_hash_table_email( AddressBookFile *book, GHashTable *table ) {
- g_return_if_fail( book != NULL );
- g_return_if_fail( table != NULL );
- g_hash_table_foreach( book->addressCache->itemHash, addrbook_load_hash_table_email_vis, table );
-}
-
/*
* Build available email list visitor function.
*/
* ***********************************************************************
*/
-static void addrbook_show_attribs( GList *attr ) {
- while( attr ) {
- gchar *name = ((XMLAttr *)attr->data)->name;
- gchar *value = ((XMLAttr *)attr->data)->value;
- printf( "\tn/v = %s : %s\n", name, value );
- attr = g_list_next( attr );
- }
- printf( "\t---\n" );
-}
-
/*
* Test email address list.
*/
*/
#include <stdio.h>
+#include <string.h>
#include <sys/stat.h>
#include "mgutils.h"
}
}
-static void addrclip_print( AddrSelectItem *item, FILE *stream ) {
- fprintf( stream, "Select Record\n" );
- fprintf( stream, "obj type: %d\n", item->objectType );
- fprintf( stream, " uid: %s\n", item->uid );
- fprintf( stream, "---\n" );
-}
-
/*
* Show clipboard contents.
* Enter: clipBoard Clipboard.
return copyList;
}
-/*
- * Paste unattached email into cache.
- * Enter: cache Address cache to paste into.
- * folder Folder to store
- * email EMail to add.
- * copyList List of email addresses pasted.
- * Return: Update list of email addresses pasted.
- */
-static GList *addrclip_cache_add_email(
- AddressCache *cache, ItemFolder *folder, ItemEMail *email,
- GList *copyList )
-{
- ItemPerson *newPerson;
- ItemEMail *newEMail;
- AddrClip_EMail *em;
-
- /* Create a person */
- newPerson = addritem_create_item_person();
- addritem_person_set_common_name( newPerson, "" );
- addrcache_id_person( cache, newPerson );
- addrcache_folder_add_person( cache, folder, newPerson );
-
- /* Copy email addresses */
- newEMail = addritem_copy_item_email( email );
- addrcache_id_email( cache, newEMail );
- addrcache_person_add_email( cache, newPerson, newEMail );
-
- /* Take a copy of the original */
- em = g_new0( AddrClip_EMail, 1 );
- em->original = email;
- em->copy = newEMail;
- copyList = g_list_append( copyList, em );
-
- return copyList;
-}
-
-/*
- * Test whether specified E-Mail address object is already in clipboard and
- * owned by an ItemPerson objects.
- * Enter: email E-Mail to test.
- * Return: TRUE if duplicate found.
- */
-static gboolean addrclip_test_email(
- AddressClipboard *clipBoard, ItemEMail *testEMail )
-{
- ItemPerson *person;
- ItemEMail *email;
- GList *node, *nodeMail;
- AddrSelectItem *item;
- AddrItemObject *aio;
- AddressCache *cache;
-
- node = clipBoard->objectList;
- while( node ) {
- item = node->data;
- cache = addrindex_get_cache( clipBoard->addressIndex, item->cacheID );
- aio = addrcache_get_object( cache, item->uid );
- if( aio ) {
- if( ADDRITEM_TYPE(aio) == ITEMTYPE_PERSON ) {
- person = ( ItemPerson * ) aio;
- nodeMail = person->listEMail;
- while( nodeMail ) {
- email = nodeMail->data;
- if( email == testEMail ) return TRUE;
- nodeMail = g_list_next( nodeMail );
- }
- }
- }
- node = g_list_next( node );
- }
- return FALSE;
-}
-
/*
* Search for new email record in copied email list.
* Enter: copyList List of copied email address mappings.
GList *node;
cnt = 0;
- while( node = fromPerson->listEMail ) {
+ while((node = fromPerson->listEMail) != NULL) {
ItemEMail *email;
email = node->data;
GtkCTreeNode *node);
static GtkCTreeNode *addressbook_find_group_node (GtkCTreeNode *parent,
ItemGroup *group);
-static GtkCTreeNode *addressbook_find_folder_node( GtkCTreeNode *parent,
- ItemFolder *folder );
-
-static void addressbook_delete_object (AddressObject *obj);
-
static void key_pressed (GtkWidget *widget,
GdkEventKey *event,
gpointer data);
if( ! compose ) return;
/* Nothing selected, but maybe there is something in text entry */
- if ( list == NULL ) {
- addr = gtk_entry_get_text( GTK_ENTRY( addrbook.entry) );
- if ( addr ) {
- compose_entry_append(
- compose, addr, (ComposeEntryType)data );
- }
+ addr = gtk_entry_get_text( GTK_ENTRY( addrbook.entry) );
+ if ( addr ) {
+ compose_entry_append(
+ compose, addr, (ComposeEntryType)data );
}
/* Select from address list */
return NULL;
}
-/*
-* Search for specified child folder node in address index tree.
-* Enter: parent Parent node.
-* folder Folder to find.
-*/
-static GtkCTreeNode *addressbook_find_folder_node( GtkCTreeNode *parent, ItemFolder *folder ) {
- GtkCTreeNode *node = NULL;
- GtkCTreeRow *currRow;
-
- currRow = GTK_CTREE_ROW( parent );
- if( currRow ) {
- node = currRow->children;
- while( node ) {
- AddressObject *obj;
-
- obj = gtk_ctree_node_get_row_data( GTK_CTREE(addrbook.ctree), node );
- if( obj->type == ADDR_ITEM_FOLDER ) {
- ItemFolder *f = ADAPTER_FOLDER(obj)->itemFolder;
- if( f == folder ) return node;
- }
- currRow = GTK_CTREE_ROW(node);
- node = currRow->sibling;
- }
- }
- return NULL;
-}
-
static AddressBookFile *addressbook_get_book_file() {
AddressBookFile *abf = NULL;
AddressDataSource *ds = NULL;
g_list_free( items );
}
-/*
- * Load data sources into list.
- */
-static void addressbook_node_load_datasource( GtkCTree *clist, AddressObject *obj ) {
- AdapterInterface *adapter;
- AddressInterface *iface;
- AddressTypeControlItem *atci = NULL;
- GtkCTreeNode *newNode, *node;
- GtkCTreeRow *row;
- GtkCell *cell = NULL;
- gchar *text[N_COLS];
-
- adapter = ADAPTER_INTERFACE(obj);
- if( adapter == NULL ) return;
- iface = adapter->interface;
- atci = adapter->atci;
- if( atci == NULL ) return;
-
- /* Create nodes in list copying values for data sources in tree */
- row = GTK_CTREE_ROW( adapter->treeNode );
- if( row ) {
- node = row->children;
- while( node ) {
- gpointer data;
-
- data = gtk_ctree_node_get_row_data( clist, node );
- row = GTK_CTREE_ROW( node );
- cell = ( ( GtkCListRow * )row )->cell;
- text[COL_NAME] = cell->u.text;
- text[COL_ADDRESS] = NULL;
- text[COL_REMARKS] = NULL;
- newNode = gtk_ctree_insert_node( clist, NULL, NULL,
- text, FOLDER_SPACING,
- atci->iconXpm, atci->maskXpm,
- atci->iconXpmOpen, atci->maskXpmOpen,
- FALSE, FALSE);
- /*
- gtk_ctree_node_set_row_data( clist, newNode, data );
- gtk_ctree_node_set_row_data_full( clist, newNode, NULL, NULL );
- */
- node = row->sibling;
- }
- }
- gtk_ctree_sort_node( clist, NULL );
-}
-
/*
* Search ctree widget callback function.
* Enter: pA Pointer to node.
return newNode;
}
-static void addressbook_delete_object(AddressObject *obj) {
- AdapterDSource *ads = NULL;
- AddressDataSource *ds = NULL;
- if (!obj) return;
-
- /* Remove data source. */
- /* printf( "Delete obj type : %d\n", obj->type ); */
-
- ads = ADAPTER_DSOURCE(obj);
- if( ads == NULL ) return;
- ds = ads->dataSource;
- if( ds == NULL ) return;
-
- /* Remove data source */
- if( addrindex_index_remove_datasource( _addressIndex_, ds ) ) {
- addrindex_free_datasource( ds );
- }
- /* Free up Adapter object */
- g_free( ads );
-}
-
void addressbook_export_to_file( void ) {
if( _addressIndex_ ) {
/* Save all new address book data */
void addressbook_gather ( FolderItem *folderItem,
gboolean sourceInd,
GList *msgList );
+void addressbook_harvest (FolderItem *folderItem,
+ gboolean sourceInd,
+ GList *msgList);
#endif /* __ADDRESSBOOK_H__ */
* Enter: harvester Harvester object.
* name Header name.
*/
-static void *addrharvest_build_entry(
+static void addrharvest_build_entry(
AddressHarvester* harvester, gchar *name )
{
HeaderEntry *entry;
harvester->headerTable = g_list_append( harvester->headerTable, entry );
}
-static void addrharvest_print_hdrentry( HeaderEntry *entry, FILE *stream ) {
- fprintf( stream, "Header Entry\n" );
- fprintf( stream, " name : %s\n", entry->header );
- fprintf( stream, "selected : %s\n", entry->selected ? "yes" : "no" );
-}
-
/*
* Free key in table.
*/
gint lenn, lenr;
lenr = strlen( str );
- while( p = strcasestr( name, str ) ) {
+ while((p = strcasestr( name, str )) != NULL) {
lenn = strlen( p );
memmove( p, p + lenr, lenn );
}
gint bufLen;
/* Search for an address */
- while( atCh = addrharvest_find_at( hdrBuf ) ) {
+ while((atCh = addrharvest_find_at( hdrBuf )) != NULL) {
/* Find addres string */
addrharvest_find_address( hdrBuf, atCh, &bp, &ep );
* Enter: addrIndex Address index.
* ds Data source.
*/
-static addrindex_hash_add_cache( AddressIndex *addrIndex, AddressDataSource *ds ) {
+static void addrindex_hash_add_cache( AddressIndex *addrIndex, AddressDataSource *ds ) {
gchar *cacheID;
cacheID = addrindex_get_cache_id( addrIndex, ds );
GList *addrselect_get_list( AddrSelectList *asl ) {
GList *node, *list;
- g_return_if_fail( asl != NULL );
+ g_return_val_if_fail(asl != NULL, NULL);
list = NULL;
node = asl->listSelect;
while( node ) {
static void set_toolbar_style(Compose *compose);
-static gchar *procmime_get_file_name(MimeInfo *mimeinfo)
-{
- gchar *base;
- gchar *filename;
-
- g_return_val_if_fail(mimeinfo != NULL, NULL);
-
- base = mimeinfo->filename ? mimeinfo->filename
- : mimeinfo->name ? mimeinfo->name : NULL;
-
- if (MIME_TEXT_HTML == mimeinfo->mime_type && base == NULL){
- filename = g_strdup_printf("%s%smimetmp.%08x.html",
- get_mime_tmp_dir(),
- G_DIR_SEPARATOR_S,
- (gint)mimeinfo);
- return filename;
- }
- else {
- base = base ? base : "";
- base = g_basename(base);
- if (*base == '\0') {
- filename = g_strdup_printf("%s%smimetmp.%08x",
- get_mime_tmp_dir(),
- G_DIR_SEPARATOR_S,
- (gint)mimeinfo);
- return filename;
- }
- }
-
- filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S,
- base, NULL);
-
- return filename;
-}
-
-static gchar *mime_extract_file(gchar *source, MimeInfo *partinfo)
-{
- gchar *filename;
-
- if (!partinfo) return NULL;
-
- filename = procmime_get_file_name(partinfo);
-
- if (procmime_get_part(filename, source, partinfo) < 0)
- alertpanel_error
- (_("Can't get the part of multipart message."));
-
- return filename;
-}
-
-
-
#define INSERT_FW_HEADER(var, hdr) \
if (msginfo->var && *msginfo->var) { \
gtk_stext_insert(text, NULL, NULL, NULL, hdr, -1); \
void compose_entry_append(Compose *compose, const gchar *address,
ComposeEntryType type)
{
- GtkEntry *entry;
- const gchar *text;
gchar *header;
if (!address || *address == '\0') return;
static void compose_exec_sig(Compose *compose, gchar *sigfile)
{
- FILE *tmpfp;
- pid_t thepid;
- gchar *sigtext;
FILE *sigprg;
gchar *buf;
size_t buf_len = 128;
guint prev_line_pos, guint text_len,
gchar *quote_fmt)
{
- guint i, ins_len;
+ guint i, ins_len = 0;
gchar ch;
if (indent_len) {
GSList *cur;
gchar buf[BUFFSIZE];
gint num;
- MsgFlags flag = {0, 0};
static gboolean lock = FALSE;
PrefsAccount *mailac = NULL, *newsac = NULL;
g_free(addr);
}
-static void compose_add_entry_field(GtkWidget *table, GtkWidget **hbox,
- GtkWidget **entry, gint *count,
- const gchar *label_str,
- gboolean is_addr_entry)
-{
- GtkWidget *label;
-
- if (GTK_TABLE(table)->nrows < (*count) + 1)
- gtk_table_resize(GTK_TABLE(table), (*count) + 1, 2);
-
- *hbox = gtk_hbox_new(FALSE, 0);
- label = gtk_label_new
- (prefs_common.trans_hdr ? gettext(label_str) : label_str);
- gtk_box_pack_end(GTK_BOX(*hbox), label, FALSE, FALSE, 0);
- gtk_table_attach(GTK_TABLE(table), *hbox, 0, 1, *count, (*count) + 1,
- GTK_FILL, 0, 2, 0);
- *entry = gtk_entry_new_with_max_length(MAX_ENTRY_LENGTH);
- gtk_table_attach
- (GTK_TABLE(table), *entry, 1, 2, *count, (*count) + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-#if 0 /* NEW COMPOSE GUI */
- if (GTK_TABLE(table)->nrows > (*count) + 1)
- gtk_table_set_row_spacing(GTK_TABLE(table), *count, 4);
-#endif
-
- if (is_addr_entry)
- address_completion_register_entry(GTK_ENTRY(*entry));
-
- (*count)++;
-}
-
static void compose_create_header_entry(Compose *compose)
{
gchar *headers[] = {"To:", "Cc:", "Bcc:", "Newsgroups:", "Reply-To:", "Followup-To:", NULL};
GtkWidget *scrolledwin;
GtkWidget *text;
- GtkWidget *table;
-
UndoMain *undostruct;
gchar *titles[N_ATTACH_COLS];
static void compose_update_priority_menu_item(Compose * compose)
{
GtkItemFactory *ifactory;
- GtkWidget *menuitem;
+ GtkWidget *menuitem = NULL;
ifactory = gtk_item_factory_from_widget(compose->menubar);
FolderItem *draft;
gchar *tmp;
gint msgnum;
- MsgFlags flag = {0, 0};
static gboolean lock = FALSE;
MsgInfo *newmsginfo;
(GTK_EDITABLE(compose->focused_editable), 0, -1);
}
-static void compose_move_beginning_of_line_cb(Compose *compose)
-{
- if (compose->focused_editable &&
- GTK_WIDGET_HAS_FOCUS(compose->focused_editable))
- gtk_stext_move_beginning_of_line(GTK_STEXT(compose->focused_editable));
-}
-
static void compose_gtk_stext_action_cb(Compose *compose, ComposeCallGtkSTextAction action)
{
if (!(compose->focused_editable && GTK_WIDGET_HAS_FOCUS(compose->focused_editable))) return;
#include "addrcache.h"
#include "addressitem.h"
#include "exporthtml.h"
+#include "utils.h"
+#include "manage_window.h"
#define PAGE_FILE_INFO 0
#define PAGE_FORMAT 1
* found in list, it will be returned.
*/
static StylesheetEntry *exporthtml_find_stylesheet( ExportHtmlCtl *ctl ) {
- StylesheetEntry *retVal;
+ StylesheetEntry *retVal = NULL;
StylesheetEntry *entry;
GList *node;
tt = time( NULL );
fprintf( htmlFile, "<p>%s</p>\n", ctime( &tt ) );
- fprintf( htmlFile, "<hr width=\"100%\"></hr>\n" );
+ fprintf( htmlFile, "<hr width=\"100\%\"></hr>\n" );
fprintf( htmlFile, "</body>\n" );
fprintf( htmlFile, "</html>\n" );
DIR *dp;
retVal = FALSE;
- if( dp = opendir( ctl->dirOutput ) ) {
+ if((dp = opendir( ctl->dirOutput )) != NULL) {
retVal = TRUE;
closedir( dp );
}
* that need to be escaped). instead we use the file_list. the
* entry is only useful for extracting the current directory. */
GtkCList *file_list = GTK_CLIST(GTK_FILE_SELECTION(filesel)->file_list);
- GtkEntry *file_entry = GTK_ENTRY(GTK_FILE_SELECTION(filesel)->selection_entry);
GList *list = NULL, *sel_list;
gchar *cwd, *tmp;
gboolean separator;
#include "prefs_common.h"
#include "account.h"
#include "prefs_account.h"
+#include "filtering.h"
+#include "scoring.h"
#include "prefs_folder_item.h"
#include "procheader.h"
(GNode *node, GHashTable *pptable);
static gboolean persist_prefs_free (gpointer key, gpointer val, gpointer data);
void folder_item_read_cache (FolderItem *item);
-void folder_item_write_cache (FolderItem *item);
-
+void folder_item_free_cache (FolderItem *item);
Folder *folder_new(FolderType type, const gchar *name, const gchar *path)
{
void folder_tree_destroy(Folder *folder)
{
- /* TODO: destroy all FolderItem before */
+ prefs_scoring_clear();
+ prefs_filtering_clear();
+
g_node_traverse(folder->node, G_POST_ORDER, G_TRAVERSE_ALL, -1, folder_tree_destroy_func, NULL);
g_node_destroy(folder->node);
g_warning("failed to write folder list.\n");
}
+gboolean folder_scan_tree_func(GNode *node, gpointer data)
+{
+ GHashTable *pptable = (GHashTable *)data;
+ FolderItem *item = (FolderItem *)node->data;
+
+ folder_item_restore_persist_prefs(item, pptable);
+}
+
+void folder_scan_tree(Folder *folder)
+{
+ GHashTable *pptable;
+
+ if(!folder->scan_tree)
+ return;
+
+ pptable = folder_persist_prefs_new(folder);
+ folder_tree_destroy(folder);
+
+ folder->scan_tree(folder);
+
+ g_node_traverse(folder->node, G_POST_ORDER, G_TRAVERSE_ALL, -1, folder_scan_tree_func, pptable);
+ folder_persist_prefs_free(pptable);
+
+ prefs_matcher_read_config();
+}
+
struct TotalMsgCount
{
guint new;
Folder *folder;
GSList *folder_list, *cache_list, *elem, *new_list = NULL;
gint i;
- guint min = 0xffffffff, max = 0, cache_max = 0, maxgetcount = 0;
+ guint min = 0xffffffff, max = 0, cache_max = 0;
FolderScanInfo *folderscaninfo;
guint newcnt = 0, unreadcnt = 0, totalcnt = 0;
if( (folderscaninfo[i] & IN_FOLDER) &&
!(folderscaninfo[i] & IN_CACHE) &&
(folder->type != F_NEWS ||
- ((prefs_common.max_articles == 0) || (num > (max - prefs_common.max_articles))) &&
- (num > cache_max))
+ (((prefs_common.max_articles == 0) || (num > (max - prefs_common.max_articles))) &&
+ (num > cache_max)))
) {
new_list = g_slist_prepend(new_list, GINT_TO_POINTER(num));
debug_print(_("Remembered message %d for fetching\n"), num);
}
} else if (folder->fetch_msginfo) {
for(elem = new_list; elem != NULL; elem = g_slist_next(elem)) {
- MsgFlags flags;
MsgInfo *msginfo;
guint num;
void folder_item_free_cache(FolderItem *item)
{
g_return_if_fail(item != NULL);
- g_return_if_fail(item->cache != NULL);
+
+ if(item->cache == NULL)
+ return;
folder_item_write_cache(item);
msgcache_destroy(item->cache);
if(!item->cache)
folder_item_read_cache(item);
- if(msginfo = msgcache_get_msg(item->cache, num))
+ if((msginfo = msgcache_get_msg(item->cache, num)) != NULL)
return msginfo;
g_return_val_if_fail(folder->fetch_msginfo, NULL);
{
Folder *folder;
gint num;
- gchar * filename;
Folder * src_folder;
g_return_val_if_fail(dest != NULL, -1);
Folder *folder;
FolderItem * item;
GSList * l;
- gchar * filename;
gint num;
g_return_val_if_fail(dest != NULL, -1);
{
Folder *folder;
gint num;
- gchar * filename;
- Folder * src_folder;
g_return_val_if_fail(dest != NULL, -1);
g_return_val_if_fail(msginfo != NULL, -1);
Folder *folder;
gint num;
GSList * l;
- gchar * filename;
g_return_val_if_fail(dest != NULL, -1);
g_return_val_if_fail(msglist != NULL, -1);
{
#define PROCESSING_FOLDER ".processing"
Folder *tmpparent;
- FolderItem *tmpfolder;
gchar *tmpname;
tmpparent = folder_get_default_folder();
GList *folder_get_list (void);
gint folder_read_list (void);
void folder_write_list (void);
+void folder_scan_tree (Folder *folder);
void folder_update_op_count (void);
void folder_func_to_all_folders (FolderItemFunc function,
gpointer data);
void folder_item_restore_persist_prefs (FolderItem *item, GHashTable *pptable);
void folder_clean_cache_memory ();
+void folder_item_write_cache (FolderItem *item);
+void folder_item_set_default_flags (FolderItem *dest, MsgFlags *flags);
#endif /* __FOLDER_H__ */
window = label_window_create(_("Rescanning folder tree..."));
folder_set_ui_func(folder, folderview_scan_tree_func, NULL);
- folder->scan_tree(folder);
+ folder_scan_tree(folder);
folder_set_ui_func(folder, NULL, NULL);
folder_write_list();
if (!folder->scan_tree) continue;
folder_set_ui_func(folder, folderview_scan_tree_func, NULL);
- folder->scan_tree(folder);
+ folder_scan_tree(folder);
folder_set_ui_func(folder, NULL, NULL);
}
* This program is based on gtkflist.c
*/
-#include "gtksctree.h"
+#include <stdlib.h>
+#include "gtksctree.h"
enum {
ROW_POPUP_MENU,
return GTK_WIDGET( gtk_type_new( gtk_shruler_get_type() ) );
}
-static gint
-gtk_shruler_motion_notify(GtkWidget *widget,
- GdkEventMotion *event)
-{
- /* I could have perhaps set this to NULL */
- return FALSE;
-}
-
static void
gtk_shruler_draw_ticks(GtkRuler *ruler)
{
#include "compose.h"
#include "gtkstext.h"
-
+#include "gtkutils.h"
/* line_arrow.xbm */
#define line_arrow_width 6
inc_spool_account(account);
return 1;
}
+ return 0;
}
void inc_all_account_mail(MainWindow *mainwin, gboolean notify)
/* CLAWS: perform filtering actions on dropped message */
if (global_processing != NULL) {
FolderItem *processing, *inbox;
- Folder *folder;
MsgInfo *msginfo;
GSList *msglist, *msglist_element;
static void inc_spool_account(PrefsAccount *account)
{
FolderItem *inbox;
- FolderItem *dropfolder;
- gint val;
if (account->inbox) {
inbox = folder_find_item_from_path(account->inbox);
if (!list) return;
for (; list != NULL; list = list->next) {
- IncSession *session;
PrefsAccount *account = list->data;
if ((account->protocol == A_LOCAL) &&
return value;
}
-/*
-* Dump linked lists of character strings (for debug).
-*/
-static void ldif_dump_lists( GSList *listName, GSList *listAddr, GSList *listRem, GSList *listID, FILE *stream ) {
- fprintf( stream, "dump name\n" );
- fprintf( stream, "------------\n" );
- mgu_print_list( listName, stdout );
- fprintf( stream, "dump address\n" );
- fprintf( stream, "------------\n" );
- mgu_print_list( listAddr, stdout );
- fprintf( stream, "dump remarks\n" );
- fprintf( stdout, "------------\n" );
- mgu_print_list( listRem, stdout );
- fprintf( stream, "dump id\n" );
- fprintf( stdout, "------------\n" );
- mgu_print_list( listID, stdout );
-}
-
/*
* Parsed address data.
*/
}
#endif
-static void ldif_dump_b64( gchar *buf ) {
- Base64Decoder *decoder = NULL;
- gchar outBuf[8192];
- gint len;
-
- printf( "base-64 : inbuf : %s\n", buf );
- decoder = base64_decoder_new();
- len = base64_decoder_decode( decoder, buf, outBuf );
- if (len < 0) {
- printf( "base-64 : Bad BASE64 content\n" );
- }
- else {
- outBuf[len] = '\0';
- printf( "base-64 : %d : %s\n\n", len, outBuf );
- }
- base64_decoder_free( decoder );
- decoder = NULL;
-}
-
/*
* Read file data into address cache.
* Note that one LDIF record identifies one entity uniquely with the
#include "prefs_common.h"
#include "prefs_filter.h"
#include "prefs_account.h"
+#include "prefs_actions.h"
#include "scoring.h"
#include "prefs_display_header.h"
#include "account.h"
static void toolbar_send_cb (GtkWidget *widget,
gpointer data);
-static void toolbar_compose_cb (GtkWidget *widget,
- gpointer data);
static void toolbar_compose_news_cb (GtkWidget *widget,
gpointer data);
static void toolbar_compose_mail_cb (GtkWidget *widget,
static void toolbar_next_unread_cb (GtkWidget *widget,
gpointer data);
-static void toolbar_prefs_cb (GtkWidget *widget,
- gpointer data);
-static void toolbar_account_cb (GtkWidget *widget,
- gpointer data);
#if 0
static void toolbar_account_button_pressed (GtkWidget *widget,
guint action,
GtkWidget *widget);
-static void compose_cb (MainWindow *mainwin,
- guint action,
- GtkWidget *widget);
static void compose_mail_cb(MainWindow *mainwin, guint action,
GtkWidget *widget);
static void compose_news_cb(MainWindow *mainwin, guint action,
GtkItemFactory *ifactory;
GtkWidget *ac_menu;
GtkWidget *menuitem;
- GtkWidget *compose_popup;
GtkWidget *reply_popup;
GtkWidget *replyall_popup;
GtkWidget *replysender_popup;
folder_add(folder);
folder_set_ui_func(folder, scan_tree_func, mainwin);
- folder->scan_tree(folder);
+ folder_scan_tree(folder);
folder_set_ui_func(folder, NULL, NULL);
folderview_set(mainwin->folderview);
/* if (item->folder->type != F_NEWS) */
state |= M_ALLOW_DELETE;
- if (selection == SUMMARY_NONE && item->hide_read_msgs
+ if ((selection == SUMMARY_NONE && item->hide_read_msgs)
|| selection != SUMMARY_NONE)
state |= M_HIDE_READ_MSG;
}
GtkWidget *delete_btn;
GtkWidget *exec_btn;
- GtkTooltips *tooltips;
-
toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL,
GTK_TOOLBAR_BOTH);
gtk_container_add(GTK_CONTAINER(container), toolbar);
static void toolbar_reply_to_sender_popup_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
{
MainWindow *mainwindow = (MainWindow *) data;
- GtkWidget *replysender_menu, *replysender_item;
if (!event) return;
send_queue_cb(mainwin, 0, NULL);
}
-static void toolbar_compose_cb (GtkWidget *widget,
- gpointer data)
-{
- MainWindow *mainwin = (MainWindow *)data;
-
- if (mainwin->compose_btn_type == COMPOSEBUTTON_MAIL)
- compose_cb(mainwin, 0, NULL);
- else
- compose_news_cb(mainwin, 0, NULL);
-}
-
static void toolbar_compose_news_cb (GtkWidget *widget,
gpointer data)
{
next_unread_cb(mainwin, 0, NULL);
}
-static void toolbar_prefs_cb (GtkWidget *widget,
- gpointer data)
-{
- prefs_common_open();
-}
-
-static void toolbar_account_cb (GtkWidget *widget,
- gpointer data)
-{
- MainWindow *mainwin = (MainWindow *)data;
-
- prefs_account_open_cb(mainwin, 0, NULL);
-}
-
#if 0
static void toolbar_account_button_pressed(GtkWidget *widget,
GdkEventButton *event,
}
}
-static void compose_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
-{
- if (mainwin->summaryview->folder_item) {
- if (mainwin->summaryview->folder_item->folder->account != NULL
- && mainwin->summaryview->folder_item->folder->account->protocol == A_NNTP)
- compose_new_with_recipient(mainwin->summaryview->folder_item->folder->account, mainwin->summaryview->folder_item->path);
- else
- compose_new_with_folderitem(mainwin->summaryview->folder_item->folder->account, mainwin->summaryview->folder_item);
- }
- else
- compose_new(NULL);
-}
-
static void compose_mail_cb(MainWindow *mainwin, guint action,
GtkWidget *widget)
{
ToolbarStyle style,
ComposeButtonType type)
{
- SensitiveCond state = main_window_get_current_state(mainwin);
-
if (style == TOOLBAR_NONE)
return;
do {
FILE *tmp_fp;
FolderItem *dropfolder;
- gchar *startp, *endp, *rpath;
gint empty_line;
gint val;
gboolean is_next_msg = FALSE;
#include "alertpanel.h"
#include "send.h"
#include "pgptext.h"
+#include "menu.h"
static void messageview_change_view_type(MessageView *messageview,
MessageType type);
FolderItem *queue;
gchar *tmp;
FILE *fp, *src_fp;
- GSList *cur;
gchar buf[BUFFSIZE];
gint num;
gtk_widget_destroy(messageview->window);
}
-static void messageview_toggle_view(MessageView *messageview)
-{
- MainWindow *mainwin = messageview->mainwin;
- GtkItemFactory *ifactory;
-
- if (!mainwin) return;
-
- ifactory = gtk_item_factory_from_widget(mainwin->menubar);
- menu_toggle_toggle(ifactory, "/View/Expand Summary View");
-}
-
void messageview_toggle_view_real(MessageView *messageview)
{
MainWindow *mainwin = messageview->mainwin;
#include <glib.h>
#include <stdio.h>
#include <string.h>
+#include <ctype.h>
#include "mgutils.h"
FolderItem *item);
static MsgInfo *mh_parse_msg (const gchar *file,
FolderItem *item);
-static void mh_scan_tree_recursive (FolderItem *item,
- GHashTable *pptable);
+static void mh_scan_tree_recursive (FolderItem *item);
static gboolean mh_rename_folder_func (GNode *node,
gpointer data);
static gint mh_do_move(Folder *folder, FolderItem *dest, MsgInfo *msginfo)
{
- gchar *destdir;
gchar *srcfile;
gchar *destfile;
- FILE *fp;
gint filemode = 0;
PrefsFolderItem *prefs;
g_free(destfile);
dest->last_num++;
- g_free(destdir);
-
return dest->last_num;
}
{
gchar *srcfile;
gchar *destfile;
- FILE *fp;
GSList *cur;
MsgInfo *msginfo;
PrefsFolderItem *prefs;
{
gchar *srcfile;
gchar *destfile;
- gchar *destdir;
gint filemode = 0;
PrefsFolderItem *prefs;
gint mh_remove_msg(Folder *folder, FolderItem *item, gint num)
{
gchar *file;
- MsgInfo *msginfo;
g_return_val_if_fail(item != NULL, -1);
struct stat s;
gint max = 0;
gint num;
- gint n_msg = 0;
g_return_val_if_fail(item != NULL, -1);
{
FolderItem *item;
gchar *rootpath;
- GHashTable *pptable;
g_return_if_fail(folder != NULL);
- pptable = folder_persist_prefs_new(folder);
-
- prefs_scoring_clear();
- prefs_filtering_clear();
- folder_tree_destroy(folder);
item = folder_item_new(folder->name, NULL);
item->folder = folder;
folder->node = g_node_new(item);
g_free(rootpath);
mh_create_tree(folder);
- mh_scan_tree_recursive(item, pptable);
-
- folder_persist_prefs_free(pptable);
-
- prefs_matcher_read_config();
+ mh_scan_tree_recursive(item);
}
#define MAKE_DIR_IF_NOT_EXIST(dir) \
mh_is_maildir_one(path, "tmp");
}
-static void mh_scan_tree_recursive(FolderItem *item, GHashTable *pptable)
+static void mh_scan_tree_recursive(FolderItem *item)
{
DIR *dp;
struct dirent *d;
item->folder->trash = new_item;
}
}
- folder_item_restore_persist_prefs(new_item, pptable);
- mh_scan_tree_recursive(new_item, pptable);
+ mh_scan_tree_recursive(new_item);
} else if (to_number(d->d_name) != -1) n_msg++;
g_free(entry);
* Free data record.
* Enter: rec Data record.
*/
-static mutt_free_rec( Mutt_ParsedRec *rec ) {
+static void mutt_free_rec( Mutt_ParsedRec *rec ) {
if( rec ) {
g_free( rec->address );
g_free( rec->name );
static gint news_get_article (NNTPSession *session,
gint num,
gchar *filename);
-static gint news_get_header (NNTPSession *session,
- gint num,
- gchar *filename);
static gint news_select_group (NNTPSession *session,
const gchar *group,
{
NNTPSession *session;
gint num = 0, first = 0, last = 0;
- gint new = 0, unread = 0, total = 0;
- gint min = 0, max = 0;
- gchar *path;
gint ok;
g_return_val_if_fail(folder != NULL, -1);
return news_get_article_cmd(session, "ARTICLE", num, filename);
}
-static gint news_get_header(NNTPSession *session, gint num, gchar *filename)
-{
- return news_get_article_cmd(session, "HEAD", num, filename);
-}
-
/**
* news_select_group:
* @session: Active NNTP session.
}
const char*
-gpgmegtk_passphrase_cb (void *opaque, const char *desc, void *r_hd)
+gpgmegtk_passphrase_cb (void *opaque, const char *desc, void **r_hd)
{
struct passphrase_cb_info_s *info = opaque;
GpgmeCtx ctx = info ? info->c : NULL;
};
void gpgmegtk_set_passphrase_grab (gint yesno);
-const char* gpgmegtk_passphrase_cb(void *opaque, const char *desc, void *r_hd);
+const char* gpgmegtk_passphrase_cb(void *opaque, const char *desc, void **r_hd);
void gpgmegtk_free_passphrase();
#endif /* GPGMEGTK_PASSPHRASE_H */
NULL
};
-static char *mime_version_name[] = {
- "Mime-Version",
- NULL
-};
-
/* stolen from rfc2015.c */
static int
gpg_name_cmp(const char *a, const char *b)
if (!getenv("GPG_AGENT_INFO")) {
info.c = ctx;
- gpgme_set_passphrase_cb (ctx, gpgmegtk_passphrase_cb, &info);
+ gpgme_set_passphrase_cb (ctx, gpgmegtk_passphrase_cb, (void *)&info);
}
err = gpgme_op_decrypt (ctx, cipher, plain);
MimeInfo * pgptext_find_signature (MimeInfo *mimeinfo)
{
+ return NULL;
}
gboolean pgptext_has_signature (MimeInfo *mimeinfo)
gchar *check_begin_pgp_msg = "-----BEGIN PGP MESSAGE-----\n";
gchar *check_end_pgp_msg = "-----END PGP MESSAGE-----\n";
- g_return_if_fail(msginfo != NULL);
+ g_return_val_if_fail(msginfo != NULL, 0);
if (!mimeinfo)
return 0;
- if ((fp = procmsg_open_message(msginfo)) == NULL) return;
+ if ((fp = procmsg_open_message(msginfo)) == NULL) return 0;
mimeinfo = procmime_scan_mime_header(fp);
fclose(fp);
- if (!mimeinfo) return;
+ if (!mimeinfo) return 0;
file = procmsg_get_message_file_path(msginfo);
- g_return_if_fail(file != NULL);
+ g_return_val_if_fail(file != NULL, 0);
if (mimeinfo->mime_type != MIME_TEXT) {
if ((fp = fopen(file, "rb")) == NULL) {
FILE_OP_ERROR(file, "fopen");
- return;
+ return 0;
}
/* skip headers */
if (mimeinfo->mime_type == MIME_MULTIPART) {
} else {
if ((fp = fopen(file, "rb")) == NULL) {
FILE_OP_ERROR(file, "fopen");
- return;
+ return 0;
}
/* skip headers */
if (fseek(fp, mimeinfo->fpos, SEEK_SET) < 0)
{
static int id;
MimeInfo *partinfo;
- int n, found;
- int ver_okay=0;
char *fname;
GpgmeData plain;
FILE *dstfp;
int pgptext_encrypt (const char *file, GSList *recp_list)
{
+ return 0;
}
int pgptext_sign (const char *file, PrefsAccount *ac)
{
+ return 0;
}
#endif /* USE_GPGME */
* Free data record.
* Enter: rec Data record.
*/
-static pine_free_rec( Pine_ParsedRec *rec ) {
+static void pine_free_rec( Pine_ParsedRec *rec ) {
if( rec ) {
g_free( rec->nickName );
g_free( rec->name );
}
}
-/*
- * Print data record.
- * Enter: rec Data record.
- * stream File.
- */
-static void pine_print_rec( Pine_ParsedRec *rec, FILE *stream ) {
- fprintf( stream, "nick :%s:\n", rec->nickName );
- fprintf( stream, "name :%s:\n", rec->name );
- fprintf( stream, "addr :%s:\n", rec->address );
- fprintf( stream, "fcc :%s:\n", rec->fcc );
- fprintf( stream, "comm :%s:\n", rec->comments );
- fprintf( stream, "group:%s:\n", rec->isGroup ? "yes" : "no" );
-}
-
/*
* Clean name.
*/
gint len;
buf = rec->address;
- while( atCh = strchr( buf, CHAR_AT ) ) {
+ while((atCh = strchr( buf, CHAR_AT )) != NULL) {
name = pine_parse_name( buf, atCh, &bp, &ep );
len = ( size_t ) ( ep - bp );
strncpy( addr, bp, len );
GtkWidget *sd_filter_on_recv_chkbtn;
GtkWidget *sd_rmmail_chkbtn;
GtkWidget *vbox3;
- GtkWidget *hbox2;
GtkWidget *inbox_label;
GtkWidget *inbox_entry;
GtkWidget *inbox_btn;
GtkWidget *checkbtn_crosspost;
GtkWidget *colormenu_crosspost;
GtkWidget *menu;
- GtkWidget *menuitem;
- GtkWidget *item;
- gint i;
GtkWidget *imap_frame;
GtkWidget *imapdir_label;
GtkWidget *imapdir_entry;
static void prefs_account_protocol_activated(GtkMenuItem *menuitem)
{
RecvProtocol protocol;
- gboolean active;
- gint auth;
protocol = GPOINTER_TO_INT
(gtk_object_get_user_data(GTK_OBJECT(menuitem)));
gtk_widget_set_sensitive(basic.uid_entry, !use_mailcmd);
gtk_widget_set_sensitive(basic.pass_entry, !use_mailcmd);
}
-
-static void prefs_account_smtp_userid_cb(GtkEditable *editable,
- gpointer smtp_passwd)
-{
- gchar *buf;
- gboolean use_smtp_userid;
-
- buf = gtk_editable_get_chars(editable, 0, -1);
- if(buf[0] == '\0') {
- use_smtp_userid = FALSE;
- } else {
- use_smtp_userid = TRUE;
- }
- gtk_widget_set_sensitive(GTK_WIDGET(smtp_passwd), use_smtp_userid);
- g_free(buf);
-}
GtkWidget *text,
MimeView *mimeview)
{
- GList *cur, *selection;
+ GList *cur, *selection = NULL;
GSList *children_list = NULL;
gint is_ok = TRUE;
- gint selection_len;
+ gint selection_len = 0;
Children *children;
ChildInfo *child_info;
gint action_type;
static void create_io_dialog(Children *children)
{
GtkWidget *dialog;
- GtkWidget *entry;
- GtkWidget *input_hbox;
+ GtkWidget *entry = NULL;
+ GtkWidget *input_hbox = NULL;
GtkWidget *send_button;
GtkWidget *label;
GtkWidget *text;
{
GtkWidget *vbox1;
GtkWidget *vbox2;
- GtkWidget *vbox3;
GtkWidget *hbox1;
- GtkWidget *hbox2;
- GtkWidget *btn_quotefmt;
GtkWidget *frame_sig;
GtkWidget *vbox_sig;
GtkWidget *label_sigsep;
GtkWidget *entry_sigsep;
- GtkWidget *frame_editor;
- GtkWidget *hbox_editor;
GtkWidget *checkbtn_autoextedit;
GtkWidget *frame_autosel;
GtkWidget *hbox_autosel;
- GtkWidget *vbox_autosel;
GtkWidget *checkbtn_reply_account_autosel;
GtkWidget *checkbtn_forward_account_autosel;
GtkWidget *checkbtn_reedit_account_autosel;
GtkWidget *checkbtn_autowrap;
GtkWidget *checkbtn_wrapatsend;
- GtkWidget *frame_reply;
- GtkWidget *checkbtn_quote;
GtkWidget *checkbtn_forward_as_attachment;
GtkWidget *checkbtn_redirect_keep_from;
GtkWidget *checkbtn_smart_wrapping;
}
-static struct _ComposePrefs
-{
- GtkWidget *window;
-
- GtkWidget *close_btn;
-} composeprefs;
-
-static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event);
-static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event);
-static void compose_prefs_close(GtkWidget *widget);
-static void compose_prefs_fmt_create(void);
-
-static void compose_prefs_close(GtkWidget *widget)
-{
- gtk_widget_hide(composeprefs.window);
-}
-
-static gint compose_prefs_delete_event(GtkWidget *widget, GdkEventAny *event)
-{
- gtk_widget_hide(composeprefs.window);
-
- return TRUE;
-}
-
-static void compose_prefs_key_pressed(GtkWidget *widget, GdkEventKey *event)
-{
- if (event && event->keyval == GDK_Escape) {
- gtk_widget_hide(composeprefs.window);
- }
-}
-
/* static void prefs_recvdialog_set_data_from_optmenu(PrefParam *pparam)
{
GtkWidget *menu;
GtkWidget *up_btn;
GtkWidget *down_btn;
- GtkWidget *dummy;
GList *combo_items;
gint i;
FilteringProp *prop;
GSList * cur;
gchar * filtering_str;
- gchar * tmp;
GSList * prefs_filtering;
if (cur_item == NULL)
cond_str = gtk_entry_get_text(GTK_ENTRY(filtering.cond_entry));
if (*cond_str != '\0') {
- gchar * tmp;
-
- /* tmp = cond_str; */
matchers = matcher_parser_get_cond(cond_str);
if (matchers == NULL)
alertpanel_error(_("Match string is not valid."));
gchar * cond_str;
FilteringProp * prop;
FilteringAction * action;
- gchar * tmp;
gint list_id;
gint action_id;
gint action_type;
gint account_id;
gchar * destination;
- gint labelcolor;
+ gint labelcolor = 0;
cond_str = gtk_entry_get_text(GTK_ENTRY(filtering.cond_entry));
if (*cond_str == '\0') {
GdkEvent *event)
{
FilteringProp * prop;
- gchar * tmp;
gchar * filtering_str;
if (row == 0) {
#include "manage_window.h"
#include "utils.h"
#include "addr_compl.h"
+#include "prefs_scoring.h"
+#include "gtkutils.h"
PrefsFolderItem tmp_prefs;
gchar * matcher_str;
MatcherProp * prop;
gint row = 1;
- gchar * tmp;
gboolean bool_and;
GSList * matcher_list;
MatcherList * matchers;
GdkEvent *event)
{
gchar * matcher_str;
- gchar * tmp;
MatcherProp * prop;
gboolean negative_cond;
gint criteria;
ScoringProp *prop;
GSList * cur;
gchar * scoring_str;
- gchar * tmp;
GSList * prefs_scoring;
if (cur_item == NULL)
cond_str = gtk_entry_get_text(GTK_ENTRY(scoring.cond_entry));
if (*cond_str != '\0') {
- gchar * tmp;
-
matchers = matcher_parser_get_cond(cond_str);
if (matchers == NULL)
alertpanel_error(_("Match string is not valid."));
gchar * score_str;
ScoringProp * prop;
gint score;
- gchar * tmp;
cond_str = gtk_entry_get_text(GTK_ENTRY(scoring.cond_entry));
if (*cond_str == '\0') {
gchar * score_str;
ScoringProp * prop;
gint score;
- gchar * tmp;
if (!clist->selection) return;
GdkEvent *event)
{
ScoringProp * prop;
- gchar * tmp;
gchar * scoring_str;
GSList *procheader_get_header_list(FILE *fp)
{
- gchar buf[BUFFSIZE], tmp[BUFFSIZE];
- gchar *p;
+ gchar buf[BUFFSIZE];
GSList *hlist = NULL;
Header *header;
g_return_val_if_fail(fp != NULL, NULL);
while (procheader_get_unfolded_line(buf, sizeof(buf), fp) != NULL) {
- if (header = procheader_parse_header(buf))
+ if ((header = procheader_parse_header(buf)) != NULL)
hlist = g_slist_append(hlist, header);
/*
if (*buf == ':') continue;
GPtrArray *procheader_get_header_array(FILE *fp)
{
- gchar buf[BUFFSIZE], tmp[BUFFSIZE];
- gchar *p;
+ gchar buf[BUFFSIZE];
GPtrArray *headers;
Header *header;
headers = g_ptr_array_new();
while (procheader_get_unfolded_line(buf, sizeof(buf), fp) != NULL) {
- if (header = procheader_parse_header(buf))
+ if ((header = procheader_parse_header(buf)) != NULL)
g_ptr_array_add(headers, header);
/*
if (*buf == ':') continue;
GPtrArray *procheader_get_header_array_asis(FILE *fp)
{
- gchar buf[BUFFSIZE], tmp[BUFFSIZE];
- gchar *p;
+ gchar buf[BUFFSIZE];
GPtrArray *headers;
Header *header;
headers = g_ptr_array_new();
while (procheader_get_one_field(buf, sizeof(buf), fp, NULL) != -1) {
- if (header = procheader_parse_header(buf))
+ if ((header = procheader_parse_header(buf)) != NULL)
g_ptr_array_add(headers, header);
/*
if (*buf == ':') continue;
gint hh, mm, ss;
GDateMonth dmonth;
gchar *p;
- time_t timer;
if (!t)
return FALSE;
gint get_header_from_msginfo(MsgInfo *msginfo, gchar *buf, gint len,gchar *header)
{
- gchar *file;
- FILE *fp;
- HeaderEntry hentry[]={{header,NULL,TRUE},
- {NULL,NULL,FALSE}};
- gint val;
- g_return_if_fail(msginfo != NULL);
- file = procmsg_get_message_file_path(msginfo);
- if ((fp = fopen(file, "rb")) == NULL) {
+ gchar *file;
+ FILE *fp;
+ HeaderEntry hentry[]={{header,NULL,TRUE},
+ {NULL,NULL,FALSE}};
+ gint val;
+
+ g_return_val_if_fail(msginfo != NULL, -1);
+ file = procmsg_get_message_file_path(msginfo);
+ if ((fp = fopen(file, "rb")) == NULL) {
FILE_OP_ERROR(file, "fopen");
g_free(file);
- return;
- }
- val=procheader_get_one_field(buf,len, fp, hentry);
- if (fclose(fp) == EOF) {
+ return -1;
+ }
+ val=procheader_get_one_field(buf,len, fp, hentry);
+ if (fclose(fp) == EOF) {
FILE_OP_ERROR(file, "fclose");
unlink(file);
return -1;
}
- if (val == -1)
- return -1;
- return 0;
+ if (val == -1)
+ return -1;
+
+ return 0;
}
void procmime_scan_content_description(MimeInfo *mimeinfo,
const gchar *content_description)
{
- gchar *delim, *p, *dispos;
gchar *buf;
gchar *tmp;
void procmime_scan_subject(MimeInfo *mimeinfo,
const gchar *subject)
{
- gchar *delim, *p, *dispos;
gchar *buf;
gchar *tmp;
void renderer_write_config(void)
{
- int i;
gchar * rcpath;
PrefFile *pfile;
GList * cur;
gboolean conv_fail = FALSE;
gchar buf[BUFFSIZE];
gchar *str;
- int i;
struct ContentRenderer * renderer;
GList * cur;
#endif
#include "alertpanel.h"
#include "news.h"
+#include "imap.h"
typedef struct _FlagInfo FlagInfo;
MsgFlags flags;
};
-static void mark_sum_func (gpointer key,
- gpointer value,
- gpointer data);
-
static GHashTable *procmsg_read_mark_file (const gchar *folder);
-static gint procmsg_cmp_msgnum (gconstpointer a,
- gconstpointer b);
-static gint procmsg_cmp_flag_msgnum (gconstpointer a,
- gconstpointer b);
+void procmsg_msginfo_write_flags (MsgInfo *msginfo);
GHashTable *procmsg_msg_hash_table_create(GSList *mlist)
gint first;
};
-static void mark_sum_func(gpointer key, gpointer value, gpointer data)
-{
- MsgFlags *flags = value;
- gint num = GPOINTER_TO_INT(key);
- struct MarkSum *marksum = data;
-
- if (marksum->first <= num) {
- if (MSG_IS_NEW(*flags) && !MSG_IS_IGNORE_THREAD(*flags)) (*marksum->new)++;
- if (MSG_IS_UNREAD(*flags) && !MSG_IS_IGNORE_THREAD(*flags)) (*marksum->unread)++;
- if (num > *marksum->max) *marksum->max = num;
- if (num < *marksum->min || *marksum->min == 0) *marksum->min = num;
- (*marksum->total)++;
- }
-
- g_free(flags);
-}
-
-#if 0 /* NEW CACHE DOES NOT ALLOW ACCESS TO THE MARK FILE */
-void procmsg_get_mark_sum(const gchar *folder,
- gint *new, gint *unread, gint *total,
- gint *min, gint *max,
- gint first)
-{
- GHashTable *mark_table;
- struct MarkSum marksum;
-
- *new = *unread = *total = *min = *max = 0;
- marksum.new = new;
- marksum.unread = unread;
- marksum.total = total;
- marksum.min = min;
- marksum.max = max;
- marksum.first = first;
-
- mark_table = procmsg_read_mark_file(folder);
-
- if (mark_table) {
- g_hash_table_foreach(mark_table, mark_sum_func, &marksum);
- g_hash_table_destroy(mark_table);
- }
- debug_print("mark->new = %d, mark->unread = %d, mark->total = %d\n",
- *(marksum.new), *(marksum.unread), *(marksum.total));
-}
-#endif
-
static GHashTable *procmsg_read_mark_file(const gchar *folder)
{
FILE *fp;
GSList *cur, *movelist = NULL;
MsgInfo *msginfo;
FolderItem *dest = NULL;
- GHashTable *hash;
if (!mlist) return;
GSList *cur, *copylist = NULL;
MsgInfo *msginfo;
FolderItem *dest = NULL;
- GHashTable *hash;
if (!mlist) return;
gint procmsg_send_queue(FolderItem *queue, gboolean save_msgs)
{
- gint i;
gint ret = 0;
GSList *list, *elem;
{
gint num;
FILE *fp;
- MsgFlags flag = {0, 0};
MsgInfo *msginfo;
debug_print(_("saving sent message...\n"));
return memusage;
}
-static gint procmsg_cmp_msgnum(gconstpointer a, gconstpointer b)
-{
- const MsgInfo *msginfo = a;
- const guint msgnum = GPOINTER_TO_UINT(b);
-
- if (!msginfo)
- return -1;
-
- return msginfo->msgnum - msgnum;
-}
-
gint procmsg_cmp_msgnum_for_sort(gconstpointer a, gconstpointer b)
{
const MsgInfo *msginfo1 = a;
return msginfo1->msgnum - msginfo2->msgnum;
}
-static gint procmsg_cmp_flag_msgnum(gconstpointer a, gconstpointer b)
-{
- const FlagInfo *finfo = a;
- const guint msgnum = GPOINTER_TO_UINT(b);
-
- if (!finfo)
- return -1;
-
- return finfo->msgnum - msgnum;
-}
-
enum
{
Q_SENDER = 0,
folder_add(folder);
folder_set_ui_func(folder, scan_tree_func, mainwin);
- folder->scan_tree(folder);
+ folder_scan_tree(folder);
folder_set_ui_func(folder, NULL, NULL);
}
# include "config.h"
#endif
+#include <string.h>
+
#include "intl.h"
#include "string_match.h"
#include "prefs_common.h"
#include "prefs_summary_column.h"
#include "prefs_filter.h"
+#include "prefs_filtering.h"
#include "account.h"
#include "compose.h"
#include "utils.h"
gconstpointer ptr1,
gconstpointer ptr2);
-static void news_process_crossposted (MsgInfo *msginfo);
static void news_flag_crosspost (MsgInfo *msginfo);
GtkTargetEntry summary_drag_types[1] =
guint displayed_msgnum = 0;
GtkCTreeNode *selected_node = summaryview->folderview->selected;
GSList *cur;
- gint sort_mode;
- gint sort_type;
- static gboolean locked = FALSE;
if (summary_is_locked(summaryview)) return FALSE;
if (summaryview->folder_item->hide_read_msgs) {
GSList *not_killed;
- gint kill_score;
summary_set_hide_read_msgs_menu(summaryview, TRUE);
not_killed = NULL;
}
} else {
/* select first unread message */
- if (sort_mode == SORT_BY_SCORE)
+ if (item->sort_key == SORT_BY_SCORE)
node = summary_find_next_important_score(summaryview,
NULL);
else
(summaryview, summaryview->selected, MSG_UNREAD, FALSE);
if (!node) {
- AlertValue val;
+ AlertValue val = 0;
switch (prefs_common.next_unread_msg_dialog) {
case NEXTUNREADMSGDIALOG_ALWAYS:
node = summary_find_next_flagged_msg
(summaryview, NULL, MSG_UNREAD, FALSE);
if (node == NULL) {
- AlertValue val;
+ AlertValue val = 0;
switch (prefs_common.next_unread_msg_dialog) {
case NEXTUNREADMSGDIALOG_ALWAYS:
{
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
MsgInfo *msginfo;
- MsgInfo *parentinfo;
- MsgInfo *cur_msginfo;
- GtkCTreeNode *node = NULL;
+ GtkCTreeNode *node = NULL;
GHashTable *msgid_table;
GHashTable *subject_table;
GSList * cur;
- GtkCTreeNode *cur_parent;
-
+
if (!mlist) return;
debug_print(_("\tSetting summary from message data..."));
{
static gchar date_modified[80];
static gchar *to = NULL;
- static gchar *from_name = NULL;
- static gchar col_number[11];
static gchar col_score[11];
static gchar buf[BUFFSIZE];
PrefsFolderItem *prefs = summaryview->folder_item->prefs;
GSList * processing_list;
FolderItem * folder_item;
GSList * cur;
- gchar * id;
gchar * buf;
folder_item = summaryview->folder_item;
void summary_reply(SummaryView *summaryview, ComposeMode mode)
{
- GtkWidget *widget;
GList *sel = GTK_CLIST(summaryview->ctree)->selection;
MsgInfo *msginfo;
gchar *text;
break;
case COMPOSE_FORWARD:
if (prefs_common.forward_as_attachment) {
- summary_reply_cb(summaryview, COMPOSE_FORWARD_AS_ATTACH, widget);
+ summary_reply_cb(summaryview, COMPOSE_FORWARD_AS_ATTACH, NULL);
return;
} else {
- summary_reply_cb(summaryview, COMPOSE_FORWARD_INLINE, widget);
+ summary_reply_cb(summaryview, COMPOSE_FORWARD_INLINE, NULL);
return;
}
break;
GString *line;
gpointer key;
gpointer value;
- MsgPermFlags flags;
Folder *mff = msginfo->folder->folder;
if (mff->account->mark_crosspost_read && MSG_IS_NEWS(msginfo->flags)) {
debug_print(_("nfcp: checking <%s>"), line->str);
if (mff->newsart &&
g_hash_table_lookup_extended(mff->newsart, line->str, &key, &value)) {
- debug_print(_(" <%s>"), value);
+ debug_print(_(" <%s>"), (gchar *)value);
if (MSG_IS_NEW(msginfo->flags) || MSG_IS_UNREAD(msginfo->flags)) {
- MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_NEW | MSG_UNREAD);
- MSG_SET_COLORLABEL_VALUE(msginfo->flags, mff->account->crosspost_col);
+ procmsg_msginfo_unset_flags(msginfo, MSG_NEW | MSG_UNREAD, 0);
+ procmsg_msginfo_set_flags(msginfo, mff->account->crosspost_col, 0);
}
g_hash_table_remove(mff->newsart, key);
g_free(key);
}
}
-static void news_process_crossposted(MsgInfo *msginfo)
-{
- gchar **crossref;
- gchar **crp;
- gchar *cp;
- gint cnt;
- static char *read = "read";
- Folder *mff = msginfo->folder->folder;
-
- /* Get the Xref: line */
- if (msginfo->xref) {
- /* Retrieve the cross-posted groups and message ids */
- /* Format of Xref is Xref: server message:id message:id ... */
- crossref = g_strsplit(msginfo->xref, " ", 1024);
- for (crp = crossref+2, cnt = 0; *crp; crp++, cnt++) {
- if ((cp = strchr(*crp, ':'))) {
- *cp = '\0';
- if (!strcmp(*crp, msginfo->folder->path)) continue;
- *cp = ':';
-
- /* On first pass, create a GHashTable to hold the list of
- * article numbers per newsgroup that have been read. */
- if (!mff->newsart) {
- mff->newsart = g_hash_table_new(g_str_hash, g_str_equal);
- }
- /* When a summary is selected, the articles for that
- * newsgroup are marked based on this entry */
- g_hash_table_insert(mff->newsart, g_strdup(*crp), read);
- debug_print(_("Cross-reference %d: Hash <%s>\n"), cnt, *crp);
- }
- }
- g_strfreev(crossref);
- }
-}
-
static gint summary_cmp_by_score(GtkCList *clist,
gconstpointer ptr1, gconstpointer ptr2)
{
static void summary_select_thread_func(GtkCTree *ctree, GtkCTreeNode *row, gpointer data)
{
- SummaryView *summaryview = (SummaryView *) data;
MsgInfo *msginfo;
msginfo = gtk_ctree_node_get_row_data(ctree, row);
gtk_ctree_select(GTK_CTREE(ctree), row);
- debug_print(_("Message %d selected\n"),
- msginfo->msgnum);
+ debug_print(_("Message %d selected\n"), msginfo->msgnum);
}
/* select current thread */
void summary_reflect_prefs_pixmap_theme(SummaryView *summaryview)
{
- GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
- GtkCList *clist = GTK_CLIST(summaryview->ctree);
- GtkCTreeNode *node;
+ GtkWidget *ctree = summaryview->ctree;
GtkWidget *pixmap;
gtk_widget_destroy(summaryview->folder_pixmap);
- stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_MARK, &markxpm, &markxpmmask);
- stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_DELETED, &deletedxpm, &deletedxpmmask);
- stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_NEW, &newxpm, &newxpmmask);
- stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_UNREAD, &unreadxpm, &unreadxpmmask);
- stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_REPLIED, &repliedxpm, &repliedxpmmask);
- stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_FORWARDED, &forwardedxpm, &forwardedxpmmask);
- stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_CLIP, &clipxpm, &clipxpmmask);
- stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_LOCKED, &lockedxpm, &lockedxpmmask);
- stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_IGNORETHREAD, &ignorethreadxpm, &ignorethreadxpmmask);
- stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_CLIP_KEY, &clipkeyxpm, &clipkeyxpmmask);
- stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_KEY, &keyxpm, &keyxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_MARK, &markxpm, &markxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_DELETED, &deletedxpm, &deletedxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_NEW, &newxpm, &newxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_UNREAD, &unreadxpm, &unreadxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_REPLIED, &repliedxpm, &repliedxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_FORWARDED, &forwardedxpm, &forwardedxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_CLIP, &clipxpm, &clipxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_LOCKED, &lockedxpm, &lockedxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_IGNORETHREAD, &ignorethreadxpm, &ignorethreadxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_CLIP_KEY, &clipkeyxpm, &clipkeyxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_KEY, &keyxpm, &keyxpmmask);
pixmap = stock_pixmap_widget(summaryview->hbox, STOCK_PIXMAP_DIR_OPEN);
gtk_box_pack_start(GTK_BOX(summaryview->hbox), pixmap, FALSE, FALSE, 4);
{
ERTFParser *parser;
gchar *str;
- gchar* url = NULL;
parser = ertf_parser_new(fp, conv);
g_return_if_fail(parser != NULL);
return TRUE;
}
-static gint show_url_timeout_cb(TextView *textview ){
+static gint show_url_timeout_cb(gpointer data)
+{
+ TextView *textview = (TextView *)data;
+
if (textview->messageview->mainwin)
if (textview->show_url_msgid)
gtk_statusbar_remove(GTK_STATUSBAR(
if (!g_strncasecmp(uri->uri, "mailto:", 7)) {
if (event->button == 3) {
gchar *fromname, *fromaddress;
- GdkEventButton tmpev;
/* extract url */
fromaddress = g_strdup(uri->uri + 7);
return value;
}
-/*
-* Dump linked lists of character strings (for debug).
-*/
-static void vcard_dump_lists( GSList *listName, GSList *listAddr, GSList *listRem, GSList *listID, FILE *stream ) {
- fprintf( stream, "dump name\n" );
- fprintf( stream, "------------\n" );
- mgu_print_list( listName, stdout );
- fprintf( stream, "dump address\n" );
- fprintf( stream, "------------\n" );
- mgu_print_list( listAddr, stdout );
- fprintf( stream, "dump remarks\n" );
- fprintf( stdout, "------------\n" );
- mgu_print_list( listRem, stdout );
- fprintf( stream, "dump id\n" );
- fprintf( stdout, "------------\n" );
- mgu_print_list( listID, stdout );
-}
-
/*
* Build an address list entry and append to list of address items.
*/
static void xmlprops_print_vis( gpointer key, gpointer value, gpointer data ) {
FILE *stream = ( FILE * ) data;
- fprintf( stream, "-\tname/value:\t%s / %s\n", key, value );
+ fprintf( stream, "-\tname/value:\t%s / %s\n", (char *)key, (char *)value );
}
void xmlprops_print( XmlProperty *props, FILE *stream ) {
void xmlprops_set_property(
XmlProperty *props, const gchar *name, const gchar *value )
{
- gchar *key;
+ gchar *key = NULL;
gchar *val;
g_return_if_fail( props != NULL );
gint xmlprops_get_property_i( XmlProperty *props, const gchar *name ) {
gchar *val;
gchar *endptr;
- gchar buffer[32];
gint value;
value = 0;