aboutsummaryrefslogtreecommitdiff
path: root/libsylph/folder.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2011-05-18 04:58:23 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2011-05-18 04:58:23 +0000
commit192f216fca62585bbd810655792a25393d612b06 (patch)
tree1c464ae4407321a5b22d8739ecc5276685b9d4bf /libsylph/folder.c
parentdc556e29120702f70ebea1f8d3237a26527b04e2 (diff)
cancel online mode switch if active sessions exist.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@2881 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'libsylph/folder.c')
-rw-r--r--libsylph/folder.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/libsylph/folder.c b/libsylph/folder.c
index 97c13237..33d0356e 100644
--- a/libsylph/folder.c
+++ b/libsylph/folder.c
@@ -172,7 +172,8 @@ gint folder_remote_folder_destroy_all_sessions(void)
folder = FOLDER(list->data);
if (FOLDER_IS_REMOTE(folder)) {
rfolder = REMOTE_FOLDER(folder);
- if (rfolder->session) {
+ if (rfolder->session &&
+ !folder_remote_folder_is_session_active(rfolder)) {
session_destroy(rfolder->session);
rfolder->session = NULL;
}
@@ -182,6 +183,34 @@ gint folder_remote_folder_destroy_all_sessions(void)
return 0;
}
+gboolean folder_remote_folder_is_session_active(RemoteFolder *rfolder)
+{
+ g_return_val_if_fail(rfolder != NULL, FALSE);
+
+ if (FOLDER_TYPE(rfolder) == F_IMAP)
+ return imap_is_session_active(IMAP_FOLDER(rfolder));
+
+ return FALSE;
+}
+
+gboolean folder_remote_folder_active_session_exist(void)
+{
+ GList *list;
+ Folder *folder;
+ RemoteFolder *rfolder;
+
+ for (list = folder_list; list != NULL; list = list->next) {
+ folder = FOLDER(list->data);
+ if (FOLDER_IS_REMOTE(folder)) {
+ rfolder = REMOTE_FOLDER(folder);
+ if (folder_remote_folder_is_session_active(rfolder))
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
gint folder_scan_tree(Folder *folder)
{
g_return_val_if_fail(folder != NULL, -1);