2001-01-04 Not Zed <NotZed@HelixCode.com> * mail-ops.c (mail_do_send_mail): Removed old implementation. * folder-browser.c (do_message_selected): If we haven't got a real uid, then clear the display instead. * message-list.c (message_list_drag_data_get): Use new save message function, and also wait for it to finish before continuing. (folder_changed): (message_changed): Use mail_proxy_event instead of mail_do_forward. (mail_regen_list): New iplementation to replace the old. : remove <gnome.h> from headers. Dont define timeit by default. (main_folder_changed): (message_list_set_folder): (message_list_set_threaded): (message_list_set_search): (message_list_hide_add): (message_list_hide_uids): (message_list_hide_clear): Use mail_regen_list instead of mail_do_regenerate_messagelist. (mail_do_regenerate_messagelist): Removed the old stuff. No functionality changed yet, just using different thread stuff. * mail-callbacks.c (save_msg_ok): Use new save message function. * component-factory.c (create_view): (add_storage): Use mail_scan_subfolders to build the folder info. (create_folder): Use new implementation with our own callback. (owner_set_cb): Changed b ack to use mail_get_folder, but now wait for it to finish. This will let any gui still run, but also gives us the required synchronous operation. (got_folder): Callback for when the folder has been opened. * mail-ops.c (mail_get_folderinfo): New function to just get the folder info in another thread. (mail_scan_subfolders): New scan subfolder implementation that uses mail_get_folderinfo. (mail_do_scan_subfolders): Removed old implementation. (mail_create_folder): Nerw implementation to create a folder, only. (mail_do_create_folder): Removed old implementation. (mail_save_messages): New implementation, fixes a couple of minor problems, and now provides a return so it can be waited on. Also check that the writes worked, etc. (mail_do_save_messages): Remove previous implementation. (mail_do_flag_messages): Removed, nothing uses it. (mail_do_flag_messages): Removed, nothing uses it anymore. (mail_get_folder): REturn the operation id, so callers can wait for it. (sync_folder_desc): (expunge_folder_desc): Add describe functions so we know what its doing. (mail_send_mail): More generic implementation of sending mail. * mail-mt.c (mail_msg_new): Lock around seq increment. And insert each new message into a hash table of active messages. (mail_msg_init): Init the active message table. (mail_msg_free): Remove the message from the active message table. (mail_msg_wait): New function, waits for a message to be processed, by id. (mail_msg_check_error): Dont display the error if it is a user-cancelled operation. (mail_proxy_event): new implementation of mail_op_forward_event. Only real difference is it uses the new thread stuff, and you can wait for it to finish if you want. (mail_proxy_event): If we're already in the main thread, just call the function. svn path=/trunk/; revision=7246
79 lines
2.8 KiB
C
79 lines
2.8 KiB
C
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
|
|
*
|
|
* Authors: Michael Zucchi <notzed@helixcode.com>
|
|
*
|
|
* Copyright 2000, Helix Code, Inc. (http://www.helixcode.com)
|
|
*
|
|
* 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
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
|
|
*
|
|
*/
|
|
|
|
#ifndef _MAIL_MT
|
|
#define _MAIL_MT
|
|
|
|
#include "camel/camel-exception.h"
|
|
#include "e-util/e-msgport.h"
|
|
#include "camel/camel-object.h"
|
|
|
|
typedef struct _mail_msg {
|
|
EMsg msg; /* parent type */
|
|
struct _mail_msg_op *ops; /* operation functions */
|
|
unsigned int seq; /* seq number for synchronisation */
|
|
CamelException ex; /* an initialised camel exception, upto the caller to use this */
|
|
} mail_msg_t;
|
|
|
|
/* callback functions for thread message */
|
|
typedef struct _mail_msg_op {
|
|
char *(*describe_msg)(struct _mail_msg *msg, int complete);
|
|
|
|
void (*receive_msg)(struct _mail_msg *msg); /* message received */
|
|
void (*reply_msg)(struct _mail_msg *msg); /* message replied */
|
|
void (*destroy_msg)(struct _mail_msg *msg); /* finalise message */
|
|
} mail_msg_op_t;
|
|
|
|
/* setup ports */
|
|
void mail_msg_init(void);
|
|
|
|
/* allocate a new message */
|
|
void *mail_msg_new(mail_msg_op_t *ops, EMsgPort *reply_port, size_t size);
|
|
void mail_msg_free(void *msg);
|
|
void mail_msg_check_error(void *msg);
|
|
void mail_msg_wait(unsigned int msgid);
|
|
|
|
/* set the status-bar message */
|
|
/* start/end a new op */
|
|
void mail_status_start(const char *msg);
|
|
void mail_status_end(void);
|
|
/* set a status during an op */
|
|
void mail_statusf(const char *fmt, ...);
|
|
void mail_status(const char *msg);
|
|
|
|
/* request a string/password */
|
|
char *mail_get_password(char *prompt, gboolean secret);
|
|
|
|
/* forward a camel event (or other call) to the gui thread */
|
|
int mail_proxy_event(CamelObjectEventHookFunc func, CamelObject *o, void *event_data, void *data);
|
|
|
|
/* a message port that receives messages in the gui thread, used for sending port */
|
|
extern EMsgPort *mail_gui_port;
|
|
/* a message port that receives messages in the gui thread, used for the reply port */
|
|
extern EMsgPort *mail_gui_reply_port;
|
|
|
|
/* some globally available threads */
|
|
extern EThread *mail_thread_queued; /* for operations that can (or should) be queued */
|
|
extern EThread *mail_thread_new; /* for operations that should run in a new thread each time */
|
|
|
|
#endif /* ! _MAIL_MT */
|