Files
evolution/camel/camel-session.h
8 8347ce1403 If filter inbox is set on the store, and we're opening inbox '', then
2001-09-18    <NotZed@Ximian.com>

	* providers/local/camel-maildir-folder.c
	(camel_maildir_folder_new): If filter inbox is set on the store,
	and we're opening inbox '', then enable filtering on new messages.

	* providers/local/camel-local-folder.c
	(camel_local_folder_construct): After loading the summary, check
	it, and only abort if that fails.  Also maintain the changes
	count.

	* providers/local/camel-local-summary.c
	(camel_local_summary_load): Remove summary_check code from here.
	(camel_local_summary_check): Sync index/summary here, if we were
	successful.

	* providers/local/camel-spool-folder.c
	(camel_spool_folder_new): If we have filter-new-messages-on-inbox
	set and we just opened inbox, turn on filtering on this folder.
	(camel_spool_folder_construct): Keep track of changes for the
	folder, so that filter-new-messages works right (?)

	* providers/local/camel-spool-store.c (get_folder): Pass 'INBOX'
	as the folder name, not the path.

	* camel-folder-search.c (search_not): Modified patch from
	<peterw@ximian.com> since the summary is messageinfo's, not
	strings.

	** Ok so the problem with the stuff below is that maildir/spool
	'summary_load' throws away all events, including recents, joy eh?

	* providers/local/camel-maildir-summary.c (maildir_summary_check):
	Add new messages to the recent changeinfo.

	* providers/local/camel-spool-summary.c: Mark 'new' message as
	recent, for later processing if required (i.e. 'filter new
	messages').

	* camel-store.c (construct): new function, cascade up construct
	method and check for 'filter' param, and set accordingly for any
	one that might want it.

	* providers/imap/camel-imap-store.c (construct): map the
	param_filter_inbox flag to the store->flags as
	CAMEL_STORE_FILTER_INBOX.

	* camel-store.h (CAMEL_STORE_FILTER_INBOX): new flag to tell it to
	filter inbox.

	* providers/imap/camel-imap-folder.h: Removed do_filtering flag
	from CamelImapFolder.

	* providers/imap/camel-imap-folder.c (imap_update_summary): Remove
	the 'recents' parameter, use the 'changes' parameter instead to
	convey this info.
	(camel_imap_folder_changed): Changed for update_summary api
	change.  Now always just emit the changed event if we have any
	changes to report, filtering code removed, handled upstream.
	(filter_proc):
	(filter_free): Removed old filtering code.
	(camel_imap_folder_new): Set the filter_recent flag on the folder
	if we're the inbox and filtering of inbox is enabled.

	* camel-folder.c (folder_changed): If we have 'recent' messages,
	and are set to filter recents, then freeze the folder and launch a
	thread to do the processing (or similar if threading not enabled).
	(thaw): Make sure we emit the changed signal outside of owning the
	lock and if things have changed.  Also, no longer bother
	downgrading folder_changed events to message_changed events.

	* camel-folder.h (struct _CamelFolder): Added filter_recent flag
	-> signifies all recent messages in folder should be filtered.

	* camel-session.c: (camel_session_thread_msg_new,
	camel_session_thread_msg_free, camel_session_thread_queue,
	camel_session_thread_wait): code to handle async operations as
	part of camel processing.
	(camel_session_finalise): free thread_lock, destroy thread, active
	hash, etc.
	(camel_session_init): init thread, active hash, etc.
	(camel_session_class_init): Init virtual functions.
	(session_thread_msg_new, session_thread_msg_free,
	session_thread_destroy, session_thread_received,
	session_thread_queue, session_thread_wait): default implementation
	of session threads stuff.

2001-09-17    <NotZed@Ximian.com>

	* camel-folder.c (camel_folder_change_info_recent_uid): New
	function to add a 'recent' uid to the change info.
	(camel_folder_change_info_clear): Clear recent list.
	(camel_folder_change_info_free): Free recent list.
	(camel_folder_change_info_new): Setup recent list.

	* camel-folder.h: Added a uid_recent item to the folder_changed
	event data.

	* providers/local/camel-maildir-store.c (scan_dir): Free new in
	the right block.

	* providers/local/camel-local-provider.c: Add local config entries
	to filter on new messages in spool and maildir provider.

	* camel-vee-folder.c (vee_folder_construct): Remove the assertion
	which stops ? in names from being allowed.

svn path=/trunk/; revision=12956
2001-09-18 21:43:00 +00:00

218 lines
7.2 KiB
C

/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/* camel-session.h : Abstract class for an email session */
/*
*
* Author :
* Bertrand Guiheneuf <bertrand@helixcode.com>
*
* Copyright 1999, 2000 Ximian, Inc. (www.ximian.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 Place, Suite 330, Boston, MA 02111-1307
* USA
*/
#ifndef CAMEL_SESSION_H
#define CAMEL_SESSION_H 1
#ifdef __cplusplus
extern "C" {
#pragma }
#endif /* __cplusplus }*/
#include <camel/camel-object.h>
#include <camel/camel-provider.h>
#include <e-util/e-msgport.h>
#define CAMEL_SESSION_TYPE (camel_session_get_type ())
#define CAMEL_SESSION(obj) (CAMEL_CHECK_CAST((obj), CAMEL_SESSION_TYPE, CamelSession))
#define CAMEL_SESSION_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SESSION_TYPE, CamelSessionClass))
#define CAMEL_IS_SESSION(o) (CAMEL_CHECK_TYPE((o), CAMEL_SESSION_TYPE))
typedef gboolean (*CamelTimeoutCallback) (gpointer data);
typedef enum {
CAMEL_SESSION_ALERT_INFO,
CAMEL_SESSION_ALERT_WARNING,
CAMEL_SESSION_ALERT_ERROR
} CamelSessionAlertType;
struct _CamelSession
{
CamelObject parent_object;
struct _CamelSessionPrivate *priv;
char *storage_path;
GHashTable *providers, *modules;
gboolean online;
};
#ifdef ENABLE_THREADS
typedef struct _CamelSessionThreadOps CamelSessionThreadOps;
typedef struct _CamelSessionThreadMsg CamelSessionThreadMsg;
#endif
typedef struct {
CamelObjectClass parent_class;
void (*register_provider) (CamelSession *session,
CamelProvider *provider);
GList * (*list_providers) (CamelSession *session,
gboolean load);
CamelProvider * (*get_provider) (CamelSession *session,
const char *url_string,
CamelException *ex);
CamelService * (*get_service) (CamelSession *session,
const char *url_string,
CamelProviderType type,
CamelException *ex);
char * (*get_storage_path) (CamelSession *session,
CamelService *service,
CamelException *ex);
char * (*get_password) (CamelSession *session,
const char *prompt,
gboolean secret,
CamelService *service,
const char *item,
CamelException *ex);
void (*forget_password) (CamelSession *session,
CamelService *service,
const char *item,
CamelException *ex);
gboolean (*alert_user) (CamelSession *session,
CamelSessionAlertType type,
const char *prompt,
gboolean cancel);
guint (*register_timeout) (CamelSession *session,
guint32 interval,
CamelTimeoutCallback callback,
gpointer user_data);
gboolean (*remove_timeout) (CamelSession *session,
guint handle);
CamelFilterDriver * (*get_filter_driver) (CamelSession *session,
const char *type,
CamelException *ex);
#ifdef ENABLE_THREADS
/* mechanism for creating and maintaining multiple threads of control */
void *(*thread_msg_new)(CamelSession *session, CamelSessionThreadOps *ops, unsigned int size);
void (*thread_msg_free)(CamelSession *session, CamelSessionThreadMsg *msg);
int (*thread_queue)(CamelSession *session, CamelSessionThreadMsg *msg, int flags);
void (*thread_wait)(CamelSession *session, int id);
#endif
} CamelSessionClass;
/* public methods */
/* Standard Camel function */
CamelType camel_session_get_type (void);
void camel_session_construct (CamelSession *session,
const char *storage_path);
void camel_session_register_provider (CamelSession *session,
CamelProvider *provider);
GList * camel_session_list_providers (CamelSession *session,
gboolean load);
CamelProvider * camel_session_get_provider (CamelSession *session,
const char *url_string,
CamelException *ex);
CamelService * camel_session_get_service (CamelSession *session,
const char *url_string,
CamelProviderType type,
CamelException *ex);
CamelService * camel_session_get_service_connected (CamelSession *session,
const char *url_string,
CamelProviderType type,
CamelException *ex);
#define camel_session_get_store(session, url_string, ex) \
((CamelStore *) camel_session_get_service_connected (session, url_string, CAMEL_PROVIDER_STORE, ex))
#define camel_session_get_transport(session, url_string, ex) \
((CamelTransport *) camel_session_get_service_connected (session, url_string, CAMEL_PROVIDER_TRANSPORT, ex))
char * camel_session_get_storage_path (CamelSession *session,
CamelService *service,
CamelException *ex);
char * camel_session_get_password (CamelSession *session,
const char *prompt,
gboolean secret,
CamelService *service,
const char *item,
CamelException *ex);
void camel_session_forget_password (CamelSession *session,
CamelService *service,
const char *item,
CamelException *ex);
gboolean camel_session_alert_user (CamelSession *session,
CamelSessionAlertType type,
const char *prompt,
gboolean cancel);
guint camel_session_register_timeout (CamelSession *session,
guint32 interval,
CamelTimeoutCallback callback,
gpointer user_data);
gboolean camel_session_remove_timeout (CamelSession *session,
guint handle);
gboolean camel_session_is_online (CamelSession *session);
void camel_session_set_online (CamelSession *session,
gboolean online);
CamelFilterDriver *camel_session_get_filter_driver (CamelSession *session,
const char *type,
CamelException *ex);
#ifdef ENABLE_THREADS
struct _CamelSessionThreadOps {
void (*receive)(CamelSession *session, struct _CamelSessionThreadMsg *m);
void (*free)(CamelSession *session, struct _CamelSessionThreadMsg *m);
};
struct _CamelSessionThreadMsg {
EMsg msg;
CamelSessionThreadOps *ops;
int id;
/* user fields follow */
};
void *camel_session_thread_msg_new(CamelSession *session, CamelSessionThreadOps *ops, unsigned int size);
void camel_session_thread_msg_free(CamelSession *session, CamelSessionThreadMsg *msg);
int camel_session_thread_queue(CamelSession *session, CamelSessionThreadMsg *msg, int flags);
void camel_session_thread_wait(CamelSession *session, int id);
#endif
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* CAMEL_SESSION_H */