static gint imap_add_msgs (Folder *folder,
FolderItem *dest,
GSList *file_list,
- GRelation *relation);
+ GHashTable *relation);
static gint imap_copy_msg (Folder *folder,
FolderItem *dest,
static gint imap_copy_msgs (Folder *folder,
FolderItem *dest,
MsgInfoList *msglist,
- GRelation *relation);
+ GHashTable *relation);
static gint imap_remove_msg (Folder *folder,
FolderItem *item,
static gint imap_remove_msgs (Folder *folder,
FolderItem *dest,
MsgInfoList *msglist,
- GRelation *relation);
+ GHashTable *relation);
static gint imap_expunge (Folder *folder,
FolderItem *dest);
static gint imap_remove_all_msg (Folder *folder,
static gint imap_do_copy_msgs (Folder *folder,
FolderItem *dest,
MsgInfoList *msglist,
- GRelation *relation);
+ GHashTable *relation);
static void imap_delete_all_cached_messages (FolderItem *item);
static void imap_set_batch (Folder *folder,
static gint imap_get_flags (Folder *folder,
FolderItem *item,
MsgInfoList *msglist,
- GRelation *msgflags);
+ GHashTable *msgflags);
static gchar *imap_folder_get_path (Folder *folder);
static gchar *imap_item_get_path (Folder *folder,
FolderItem *item);
}
}
-static void imap_handle_error(Session *session, int libetpan_errcode)
+static void imap_handle_error(Session *session, const gchar *server, int libetpan_errcode)
{
- const gchar *session_server = (session ? session->server:"(null)");
+ const gchar *session_server = (session ? session->server : NULL);
+
+ if (session_server == NULL)
+ session_server = server;
+ if (session_server == NULL)
+ session_server = "(null)";
+
switch(libetpan_errcode) {
case MAILIMAP_NO_ERROR:
return;
int r;
gchar *server = NULL;
if ((r = imap_get_capabilities(session)) != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
return r;
}
server = g_strdup(SESSION(session)->server);
log_error(LOG_PROTOCOL, _("SSL handshake failed\n"));
else
#endif
- imap_handle_error(NULL, r);
+ imap_handle_error(NULL, account->recv_server, r);
if(!prefs_common.no_recv_err_panel) {
alertpanel_error_log(_("Can't connect to IMAP4 server: %s:%d"),
}
static gint imap_add_msgs(Folder *folder, FolderItem *dest, GSList *file_list,
- GRelation *relation)
+ GHashTable *relation)
{
gchar *destdir;
IMAPSession *session;
}
if (relation != NULL)
- g_relation_insert(relation, fileinfo->msginfo != NULL ?
+ g_hash_table_insert(relation, fileinfo->msginfo != NULL ?
(gpointer) fileinfo->msginfo : (gpointer) fileinfo,
GINT_TO_POINTER(new_uid));
if (last_uid < new_uid) {
return result;
}
static gint imap_do_copy_msgs(Folder *folder, FolderItem *dest,
- MsgInfoList *msglist, GRelation *relation)
+ MsgInfoList *msglist, GHashTable *relation)
{
FolderItem *src;
gchar *destdir;
if (hashval != NULL) {
gint num = GPOINTER_TO_INT(hashval);
- g_relation_insert(relation, msginfo,
+ g_hash_table_insert(relation, msginfo,
GINT_TO_POINTER(num));
if (num > last_num)
last_num = num;
g_free(cache_path);
}
} else
- g_relation_insert(relation, msginfo,
+ g_hash_table_insert(relation, msginfo,
GINT_TO_POINTER(0));
}
statusbar_pop_all();
}
static gint imap_copy_msgs(Folder *folder, FolderItem *dest,
- MsgInfoList *msglist, GRelation *relation)
+ MsgInfoList *msglist, GHashTable *relation)
{
MsgInfo *msginfo;
gint ret;
static gint imap_do_remove_msgs(Folder *folder, FolderItem *dest,
- MsgInfoList *msglist, GRelation *relation)
+ MsgInfoList *msglist, GHashTable *relation)
{
gchar *destdir, *dir;
GSList *numlist = NULL, *cur;
}
static gint imap_remove_msgs(Folder *folder, FolderItem *dest,
- MsgInfoList *msglist, GRelation *relation)
+ MsgInfoList *msglist, GHashTable *relation)
{
MsgInfo *msginfo;
&lep_list);
if (r != MAILIMAP_NO_ERROR)
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
if ((r != MAILIMAP_NO_ERROR) || (clist_count(lep_list) == 0)) {
if (!folder->node) {
r = imap_threaded_list(folder, "", wildcard_path, &lep_list);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
item_list = NULL;
g_free(real_path);
return r;
argbuf = g_ptr_array_new();
r = imap_threaded_list(folder, "", imap_path, &lep_list);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
log_warning(LOG_PROTOCOL, _("can't create mailbox: LIST failed\n"));
g_free(imap_path);
g_free(dirpath);
}
mailimap_list_result_free(lep_list);
} else {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
}
}
imap_threaded_subscribe(folder, imap_path, TRUE);
}
mailimap_list_result_free(lep_list);
} else {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
}
}
r = imap_threaded_fetch_env(session->folder,
imapset, &env_list);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
if (is_fatal(r)) {
stuff->ok = r;
return NULL;
r = imap_threaded_list((Folder *)folder, "", subfolder, &lep_list);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
log_warning(LOG_PROTOCOL, _("LIST failed\n"));
*ok = r;
return '\0';
g_free(real_path);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
debug_print("status err %d\n", r);
return r;
}
/* refresh capas */
imap_free_capabilities(session);
if ((r = imap_get_capabilities(session)) != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
log_warning(LOG_PROTOCOL, _("Can't refresh capabilities.\n"));
return r;
}
type);
r = imap_threaded_login(session->folder, user, pass, type);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
log_print(LOG_PROTOCOL, "IMAP4< Error logging in to %s\n",
SESSION(session)->server);
ok = r;
r = imap_threaded_noop(session->folder, &exists, &recent, &expunge, &unseen, &uidnext, &uidval);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
debug_print("noop err %d\n", r);
return r;
}
r = imap_threaded_starttls(session->folder,
SESSION(session)->server, SESSION(session)->port);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
debug_print("starttls err %d\n", r);
return r;
}
r = imap_threaded_select(session->folder, folder,
exists, recent, unseen, uid_validity, can_create_flags, ok_flags);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
debug_print("select err %d\n", r);
return r;
}
r = imap_threaded_close(session->folder);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
debug_print("close err %d\n", r);
return r;
}
r = imap_threaded_examine(session->folder, folder,
exists, recent, unseen, uid_validity);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
debug_print("examine err %d\n", r);
return r;
r = imap_threaded_create(session->folder, folder);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
return r;
}
r = imap_threaded_rename(session->folder, old_folder,
new_folder);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
return r;
}
r = imap_threaded_delete(session->folder, folder);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
return r;
}
uid, 0, filename);
}
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
debug_print("fetch err %d\n", r);
return GINT_TO_POINTER(r);
}
mailimap_flag_list_free(flag_list);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
debug_print("append err %d\n", r);
return r;
}
r = imap_threaded_copy(session->folder, set, destfolder, source, dest);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
return r;
}
r = imap_threaded_store(session->folder, set, store_att_flags);
mailimap_store_att_flags_free(store_att_flags);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
return r;
}
r = imap_threaded_expunge(session->folder);
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
return r;
}
} else {
carray * lep_uidtab;
if (r != -1) { /* inited */
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
if (is_fatal(r))
return -1;
}
}
if (r != MAILIMAP_NO_ERROR) {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
return -1;
}
Folder *folder;
FolderItem *item;
MsgInfoList *msginfo_list;
- GRelation *msgflags;
+ GHashTable *msgflags;
gboolean full_search;
gboolean done;
} get_flags_data;
Folder *folder = stuff->folder;
FolderItem *fitem = (FolderItem *) stuff->item;
MsgInfoList *msginfo_list = stuff->msginfo_list;
- GRelation *msgflags = stuff->msgflags;
+ GHashTable *msgflags = stuff->msgflags;
GSList *elem;
carray * lep_uidtab;
IMAPSession *session;
unseen = g_slist_concat(unseen, uidlist);
} else {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
goto bail;
}
flagged = g_slist_concat(flagged, uidlist);
} else {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
goto bail;
}
answered = g_slist_concat(answered, uidlist);
} else {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
goto bail;
}
forwarded = g_slist_concat(forwarded, uidlist);
} else {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
goto bail;
}
}
spam = g_slist_concat(spam, uidlist);
} else {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
goto bail;
}
}
deleted = g_slist_concat(deleted, uidlist);
} else {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
goto bail;
}
}
imap_flags_hash_from_lep_uid_flags_tab(lep_uidtab, flags_hash, tags_hash);
imap_fetch_uid_flags_list_free(lep_uidtab);
} else {
- imap_handle_error(SESSION(session), r);
+ imap_handle_error(SESSION(session), NULL, r);
goto bail;
}
}
}
}
- g_relation_insert(msgflags, msginfo, GINT_TO_POINTER(flags));
+ g_hash_table_insert(msgflags, msginfo, GINT_TO_POINTER(flags));
}
if (got_alien_tags) {
}
static gint imap_get_flags(Folder *folder, FolderItem *item,
- MsgInfoList *msginfo_list, GRelation *msgflags)
+ MsgInfoList *msginfo_list, GHashTable *msgflags)
{
gint result;
get_flags_data *data = g_new0(get_flags_data, 1);
((IMAPFolder *)folder)->refcnt++;
}
-void imap_disconnect_all(void)
+void imap_disconnect_all(gboolean have_connectivity)
{
GList *list;
gboolean short_timeout;
RemoteFolder *folder = (RemoteFolder *)account->folder;
if (folder && folder->session) {
IMAPSession *session = (IMAPSession *)folder->session;
- imap_threaded_disconnect(FOLDER(folder));
+ if (have_connectivity)
+ imap_threaded_disconnect(FOLDER(folder));
SESSION(session)->state = SESSION_DISCONNECTED;
SESSION(session)->sock = NULL;
session_destroy(SESSION(session));
return &imap_class;
}
-void imap_disconnect_all(void)
+void imap_disconnect_all(gboolean have_connectivity)
{
}
unsigned long ucs4, utf16, bitbuf;
unsigned char base64[256];
const char *src;
- char *dst, *res = malloc(2*strlen(mbox)+1);
+ char *dst, *res = g_malloc(2*strlen(mbox)+1);
bitbuf = 0;
dst = res;