Added rules to build camel-imap-stream
2000-06-07 Jeffrey Stedfast <fejj@helixcode.com> * providers/imap/Makefile.am: Added rules to build camel-imap-stream * providers/imap/camel-imap-store.c (get_folder): Update. Moved imap_create here. * providers/imap/camel-imap-folder.c (delete_messages): Remove. (imap_create): Removed. (imap_delete): Removed. (imap_exists): Removed. * providers/imap/camel-imap-stream.h: Added typedef's for the stream * providers/imap/camel-imap-stream.c: Modified to build cleanly svn path=/trunk/; revision=3468
This commit is contained in:
committed by
Jeffrey Stedfast
parent
9da3c9d231
commit
c19352fd53
@ -1,3 +1,20 @@
|
||||
2000-06-07 Jeffrey Stedfast <fejj@helixcode.com>
|
||||
|
||||
* providers/imap/Makefile.am: Added rules to build
|
||||
camel-imap-stream
|
||||
|
||||
* providers/imap/camel-imap-store.c (get_folder): Update.
|
||||
Moved imap_create here.
|
||||
|
||||
* providers/imap/camel-imap-folder.c (delete_messages): Remove.
|
||||
(imap_create): Removed.
|
||||
(imap_delete): Removed.
|
||||
(imap_exists): Removed.
|
||||
|
||||
* providers/imap/camel-imap-stream.h: Added typedef's for the stream
|
||||
|
||||
* providers/imap/camel-imap-stream.c: Modified to build cleanly
|
||||
|
||||
2000-06-07 Not Zed <NotZed@HelixCode.com>
|
||||
|
||||
* camel-mime-utils.c (header_msgid_decode_internal): Properly
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
SUBDIRS =
|
||||
|
||||
libcamelmboxincludedir = $(includedir)/camel
|
||||
libcamelimapincludedir = $(includedir)/camel
|
||||
|
||||
|
||||
providerdir = $(pkglibdir)/camel-providers/$(VERSION)
|
||||
@ -25,11 +25,13 @@ libcamelimap_la_SOURCES = \
|
||||
camel-imap-folder.c \
|
||||
camel-imap-provider.c \
|
||||
camel-imap-store.c \
|
||||
camel-imap-stream.c \
|
||||
camel-imap-summary.c
|
||||
|
||||
libcamelimapinclude_HEADERS = \
|
||||
camel-imap-folder.h \
|
||||
camel-imap-store.h \
|
||||
camel-imap-stream.h \
|
||||
camel-imap-summary.h
|
||||
|
||||
libcamelimap_la_LDFLAGS = -version-info 0:0:0 -rpath $(libdir)
|
||||
|
||||
@ -57,10 +57,11 @@ static void imap_init (CamelFolder *folder, CamelStore *parent_store,
|
||||
|
||||
static void imap_open (CamelFolder *folder, CamelFolderOpenMode mode, CamelException *ex);
|
||||
static void imap_close (CamelFolder *folder, gboolean expunge, CamelException *ex);
|
||||
#if 0
|
||||
static gboolean imap_exists (CamelFolder *folder, CamelException *ex);
|
||||
static gboolean imap_create(CamelFolder *folder, CamelException *ex);
|
||||
static gboolean imap_delete (CamelFolder *folder, gboolean recurse, CamelException *ex);
|
||||
static gboolean imap_delete_messages (CamelFolder *folder, CamelException *ex);
|
||||
#endif
|
||||
static gint imap_get_message_count (CamelFolder *folder, CamelException *ex);
|
||||
static void imap_append_message (CamelFolder *folder, CamelMimeMessage *message, CamelException *ex);
|
||||
static GPtrArray *imap_get_uids (CamelFolder *folder, CamelException *ex);
|
||||
@ -102,12 +103,12 @@ camel_imap_folder_class_init (CamelImapFolderClass *camel_imap_folder_class)
|
||||
|
||||
camel_folder_class->open = imap_open;
|
||||
camel_folder_class->close = imap_close;
|
||||
|
||||
#if 0
|
||||
camel_folder_class->exists = imap_exists;
|
||||
camel_folder_class->create = imap_create;
|
||||
camel_folder_class->delete = imap_delete;
|
||||
|
||||
camel_folder_class->delete_messages = imap_delete_messages;
|
||||
#endif
|
||||
camel_folder_class->get_message_count = imap_get_message_count;
|
||||
camel_folder_class->append_message = imap_append_message;
|
||||
camel_folder_class->get_uids = imap_get_uids;
|
||||
@ -302,6 +303,7 @@ imap_expunge (CamelFolder *folder, CamelException *ex)
|
||||
g_free(result);
|
||||
}
|
||||
|
||||
#if 0
|
||||
static gboolean
|
||||
imap_exists (CamelFolder *folder, CamelException *ex)
|
||||
{
|
||||
@ -345,62 +347,8 @@ imap_exists (CamelFolder *folder, CamelException *ex)
|
||||
|
||||
return exists;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
imap_create (CamelFolder *folder, CamelException *ex)
|
||||
{
|
||||
CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
|
||||
const gchar *folder_file_path, *folder_dir_path;
|
||||
gboolean folder_already_exists;
|
||||
gchar *result;
|
||||
gint status;
|
||||
|
||||
g_return_val_if_fail (folder != NULL, FALSE);
|
||||
|
||||
/* call default implementation */
|
||||
parent_class->create (folder, ex);
|
||||
if (camel_exception_get_id (ex))
|
||||
return FALSE;
|
||||
|
||||
/* get the paths of what we need to create */
|
||||
folder_file_path = imap_folder->folder_file_path;
|
||||
folder_dir_path = imap_folder->folder_dir_path;
|
||||
|
||||
if (!(folder_file_path || folder_dir_path)) {
|
||||
camel_exception_set (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
|
||||
"invalid folder path. Use set_name ?");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* if the folder already exists, simply return */
|
||||
folder_already_exists = camel_folder_exists (folder, ex);
|
||||
if (camel_exception_get_id (ex))
|
||||
return FALSE;
|
||||
|
||||
if (folder_already_exists)
|
||||
return TRUE;
|
||||
|
||||
/* create the directory for the subfolder */
|
||||
status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), &result,
|
||||
"CREATE %s", imap_folder->folder_file_path);
|
||||
|
||||
if (status != CAMEL_IMAP_OK) {
|
||||
CamelService *service = CAMEL_SERVICE (folder->parent_store);
|
||||
camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
|
||||
"Could not CREATE %s on IMAP server %s: %s.",
|
||||
imap_folder->folder_file_path,
|
||||
service->url->host,
|
||||
status == CAMEL_IMAP_ERR ? result :
|
||||
"Unknown error");
|
||||
g_free (result);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_free(result);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#endif
|
||||
#if 0
|
||||
static gboolean
|
||||
imap_delete (CamelFolder *folder, gboolean recurse, CamelException *ex)
|
||||
{
|
||||
@ -447,23 +395,8 @@ imap_delete (CamelFolder *folder, gboolean recurse, CamelException *ex)
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* TODO: remove this - don't bother coding, it'll be moved/removed */
|
||||
gboolean
|
||||
imap_delete_messages (CamelFolder *folder, CamelException *ex)
|
||||
{
|
||||
/* TODO: delete the messages (mark as deleted/whatever) */
|
||||
#if 0
|
||||
CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
|
||||
gchar *result;
|
||||
gint status;
|
||||
#endif
|
||||
|
||||
g_return_val_if_fail (folder != NULL, FALSE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gint
|
||||
imap_get_message_count (CamelFolder *folder, CamelException *ex)
|
||||
{
|
||||
@ -521,7 +454,7 @@ imap_append_message (CamelFolder *folder, CamelMimeMessage *message, CamelExcept
|
||||
g_return_if_fail (message != NULL);
|
||||
|
||||
/* write the message to a CamelStreamMem so we can get it's size */
|
||||
mem = camel_stream_mem_new();
|
||||
mem = (CamelStreamMem *)camel_stream_mem_new();
|
||||
if (camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), CAMEL_STREAM (mem)) == -1) {
|
||||
CamelService *service = CAMEL_SERVICE (folder->parent_store);
|
||||
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
|
||||
@ -736,17 +669,17 @@ imap_get_message_by_uid (CamelFolder *folder, const gchar *uid, CamelException *
|
||||
status == CAMEL_IMAP_ERR ? result :
|
||||
"Unknown error");
|
||||
g_free (result);
|
||||
return;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* where we read from */
|
||||
message_stream = camel_stream_mem_new_with_buffer (result, strlen(result));
|
||||
message_stream = (CamelStreamMem *)camel_stream_mem_new_with_buffer (result, strlen(result));
|
||||
if (message_stream == NULL)
|
||||
goto fail;
|
||||
|
||||
/* we use a parser to verify the message is correct, and in the correct position */
|
||||
parser = camel_mime_parser_new();
|
||||
camel_mime_parser_init_with_stream(parser, message_stream);
|
||||
camel_mime_parser_init_with_stream(parser, CAMEL_STREAM (message_stream));
|
||||
gtk_object_unref(GTK_OBJECT (message_stream));
|
||||
camel_mime_parser_scan_from(parser, TRUE);
|
||||
|
||||
|
||||
@ -52,16 +52,15 @@
|
||||
static CamelServiceClass *service_class = NULL;
|
||||
|
||||
static void finalize (GtkObject *object);
|
||||
|
||||
static gboolean imap_create (CamelFolder *folder, CamelException *ex);
|
||||
static gboolean imap_connect (CamelService *service, CamelException *ex);
|
||||
static gboolean imap_disconnect (CamelService *service, CamelException *ex);
|
||||
static GList *query_auth_types (CamelService *service, CamelException *ex);
|
||||
static void free_auth_types (CamelService *service, GList *authtypes);
|
||||
|
||||
static CamelFolder *get_folder (CamelStore *store, const char *folder_name,
|
||||
static CamelFolder *get_folder (CamelStore *store, const char *folder_name, gboolean create,
|
||||
CamelException *ex);
|
||||
static char *get_folder_name (CamelStore *store, const char *folder_name,
|
||||
CamelException *ex);
|
||||
static char *get_folder_name (CamelStore *store, const char *folder_name, CamelException *ex);
|
||||
|
||||
static void
|
||||
camel_imap_store_class_init (CamelImapStoreClass *camel_imap_store_class)
|
||||
@ -320,28 +319,75 @@ camel_imap_store_get_toplevel_dir (CamelImapStore *store)
|
||||
return url->path;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
imap_create (CamelFolder *folder, CamelException *ex)
|
||||
{
|
||||
CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
|
||||
const gchar *folder_file_path, *folder_dir_path;
|
||||
gboolean folder_already_exists;
|
||||
gchar *result;
|
||||
gint status;
|
||||
|
||||
static CamelFolder
|
||||
*get_folder (CamelStore *store, const char *folder_name, CamelException *ex)
|
||||
g_return_val_if_fail (folder != NULL, FALSE);
|
||||
|
||||
/* get the paths of what we need to create */
|
||||
folder_file_path = imap_folder->folder_file_path;
|
||||
folder_dir_path = imap_folder->folder_dir_path;
|
||||
|
||||
if (!(folder_file_path || folder_dir_path)) {
|
||||
camel_exception_set (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
|
||||
"invalid folder path. Use set_name ?");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* if the folder already exists, simply return */
|
||||
folder_already_exists = camel_folder_exists (folder, ex);
|
||||
if (camel_exception_get_id (ex))
|
||||
return FALSE;
|
||||
|
||||
if (folder_already_exists)
|
||||
return TRUE;
|
||||
|
||||
/* create the directory for the subfolder */
|
||||
status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), &result,
|
||||
"CREATE %s", imap_folder->folder_file_path);
|
||||
|
||||
if (status != CAMEL_IMAP_OK) {
|
||||
CamelService *service = CAMEL_SERVICE (folder->parent_store);
|
||||
camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
|
||||
"Could not CREATE %s on IMAP server %s: %s.",
|
||||
imap_folder->folder_file_path,
|
||||
service->url->host,
|
||||
status == CAMEL_IMAP_ERR ? result :
|
||||
"Unknown error");
|
||||
g_free (result);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_free(result);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static CamelFolder *
|
||||
get_folder (CamelStore *store, const char *folder_name, gboolean create, CamelException *ex)
|
||||
{
|
||||
CamelImapFolder *new_imap_folder;
|
||||
CamelFolder *new_folder;
|
||||
|
||||
new_imap_folder = gtk_type_new (CAMEL_IMAP_FOLDER_TYPE);
|
||||
new_imap_folder = gtk_type_new (CAMEL_IMAP_FOLDER_TYPE);
|
||||
new_folder = CAMEL_FOLDER (new_imap_folder);
|
||||
|
||||
/* XXX We shouldn't be passing NULL here, but it's equivalent to
|
||||
* what was there before, and there's no
|
||||
* CamelImapFolder::get_subfolder yet anyway...
|
||||
*/
|
||||
CAMEL_FOLDER_CLASS (new_folder)->init (new_folder, store, NULL,
|
||||
folder_name, '/', ex);
|
||||
|
||||
return new_folder;
|
||||
|
||||
if (imap_create (new_folder, ex))
|
||||
return new_folder;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static gchar
|
||||
*get_folder_name (CamelStore *store, const char *folder_name,
|
||||
static gchar *
|
||||
get_folder_name (CamelStore *store, const char *folder_name,
|
||||
CamelException *ex)
|
||||
{
|
||||
return g_strdup (folder_name);
|
||||
|
||||
@ -49,7 +49,6 @@ camel_imap_stream_class_init (CamelImapStreamClass *camel_imap_stream_class)
|
||||
|
||||
/* virtual method overload */
|
||||
camel_stream_class->read = stream_read;
|
||||
/*camel_stream_class->write = stream_write;*/
|
||||
camel_stream_class->reset = stream_reset;
|
||||
camel_stream_class->eos = stream_eos;
|
||||
|
||||
@ -113,7 +112,7 @@ finalize (GtkObject *object)
|
||||
g_free(imap_stream->command);
|
||||
|
||||
if (imap_stream->folder)
|
||||
gtk_object_unref(imap_stream->folder);
|
||||
gtk_object_unref(GTK_OBJECT (imap_stream->folder));
|
||||
|
||||
GTK_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
@ -128,10 +127,11 @@ stream_read (CamelStream *stream, char *buffer, size_t n)
|
||||
|
||||
if (!imap_stream->cache) {
|
||||
/* We need to send the IMAP command since this is our first fetch */
|
||||
CamelImapStore *store = CAMEL_IMAP_STORE (imap_stream->folder->parent_store);
|
||||
CamelFolder *folder = CAMEL_FOLDER (imap_stream->folder);
|
||||
gint status;
|
||||
|
||||
status = camel_imap_command_extended(store->ostream, imap_stream->cache, "%s",
|
||||
status = camel_imap_command_extended(CAMEL_IMAP_STORE (folder->parent_store),
|
||||
&imap_stream->cache, "%s",
|
||||
imap_stream->command);
|
||||
|
||||
if (status != CAMEL_IMAP_OK) {
|
||||
@ -161,23 +161,6 @@ stream_read (CamelStream *stream, char *buffer, size_t n)
|
||||
return nread;
|
||||
}
|
||||
|
||||
static int
|
||||
stream_write (CamelStream *stream, const char *buffer, unsigned int n)
|
||||
{
|
||||
/* I don't think we need/want this functionality */
|
||||
CamelImapStream *imap_stream = CAMEL_IMAP_STREAM (stream);
|
||||
|
||||
if (!imap_stream->cache) {
|
||||
imap_stream->cache = g_malloc0(n + 1);
|
||||
memcpy(imap_stream->cache, buffer, n);
|
||||
} else {
|
||||
imap_stream->cache = g_realloc(strlen(imap_stream->cache) + n + 1);
|
||||
memcpy(imap_stream->cache[strlen(imap_stream->cache)], buffer, n);
|
||||
}
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
static int
|
||||
stream_reset (CamelStream *stream)
|
||||
{
|
||||
|
||||
@ -41,8 +41,10 @@ extern "C" {
|
||||
#define CAMEL_IMAP_STREAM_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_IMAP_STREAM_TYPE, CamelImapStreamClass))
|
||||
#define CAMEL_IS_IMAP_STREAM(o) (GTK_CHECK_TYPE((o), CAMEL_IMAP_STREAM_TYPE))
|
||||
|
||||
struct _CamelImapStream
|
||||
{
|
||||
typedef struct _CamelImapStream CamelImapStream;
|
||||
typedef struct _CamelImapStreamClass CamelImapStreamClass;
|
||||
|
||||
struct _CamelImapStream {
|
||||
CamelStream parent_object;
|
||||
|
||||
CamelImapFolder *folder;
|
||||
@ -51,11 +53,11 @@ struct _CamelImapStream
|
||||
char *cache_ptr;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
struct _CamelImapStreamClass {
|
||||
CamelStreamClass parent_class;
|
||||
|
||||
/* Virtual methods */
|
||||
} CamelImapStreamClass;
|
||||
};
|
||||
|
||||
/* Standard Gtk function */
|
||||
GtkType camel_imap_stream_get_type (void);
|
||||
|
||||
Reference in New Issue
Block a user