diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2011-05-18 04:58:23 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2011-05-18 04:58:23 +0000 |
commit | 192f216fca62585bbd810655792a25393d612b06 (patch) | |
tree | 1c464ae4407321a5b22d8739ecc5276685b9d4bf /libsylph/folder.c | |
parent | dc556e29120702f70ebea1f8d3237a26527b04e2 (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.c | 31 |
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); |