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 | |
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')
-rw-r--r-- | libsylph/folder.c | 31 | ||||
-rw-r--r-- | libsylph/folder.h | 6 | ||||
-rw-r--r-- | libsylph/imap.c | 19 | ||||
-rw-r--r-- | libsylph/imap.h | 4 |
4 files changed, 56 insertions, 4 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); diff --git a/libsylph/folder.h b/libsylph/folder.h index 81f90f0a..e989f9bb 100644 --- a/libsylph/folder.h +++ b/libsylph/folder.h @@ -1,6 +1,6 @@ /* * LibSylph -- E-Mail client library - * Copyright (C) 1999-2009 Hiroyuki Yamamoto + * Copyright (C) 1999-2011 Hiroyuki Yamamoto * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -335,6 +335,10 @@ void folder_remote_folder_destroy(RemoteFolder *rfolder); gint folder_remote_folder_destroy_all_sessions (void); +gboolean folder_remote_folder_is_session_active + (RemoteFolder *rfolder); +gboolean folder_remote_folder_active_session_exist (void); + gint folder_scan_tree (Folder *folder); gint folder_create_tree (Folder *folder); diff --git a/libsylph/imap.c b/libsylph/imap.c index 53d37b58..5414d0ac 100644 --- a/libsylph/imap.c +++ b/libsylph/imap.c @@ -1,6 +1,6 @@ /* * LibSylph -- E-Mail client library - * Copyright (C) 1999-2010 Hiroyuki Yamamoto + * Copyright (C) 1999-2011 Hiroyuki Yamamoto * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -5112,3 +5112,20 @@ static gint imap_thread_run_progress(IMAPSession *session, IMAPThreadFunc func, return ret; } #endif /* USE_THREADS */ + +gboolean imap_is_session_active(IMAPFolder *folder) +{ +#if USE_THREADS + IMAPRealSession *real; + + g_return_val_if_fail(folder != NULL, FALSE); + + real = (IMAPRealSession *)(REMOTE_FOLDER(folder)->session); + if (!real) + return FALSE; + + return real->is_running; +#else + return FALSE; +#endif +} diff --git a/libsylph/imap.h b/libsylph/imap.h index 81211b53..ac928b4d 100644 --- a/libsylph/imap.h +++ b/libsylph/imap.h @@ -1,6 +1,6 @@ /* * LibSylph -- E-Mail client library - * Copyright (C) 1999-2010 Hiroyuki Yamamoto + * Copyright (C) 1999-2011 Hiroyuki Yamamoto * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -125,4 +125,6 @@ gint imap_msg_list_unset_perm_flags (GSList *msglist, gint imap_msg_list_set_colorlabel_flags (GSList *msglist, guint color); +gboolean imap_is_session_active (IMAPFolder *folder); + #endif /* __IMAP_H__ */ |