Do ignore empty recipients when checking names
[modest] / src / modest-tny-account.h
1 /* Copyright (c) 2006, Nokia Corporation
2  * All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  * * Redistributions of source code must retain the above copyright
9  *   notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  *   notice, this list of conditions and the following disclaimer in the
12  *   documentation and/or other materials provided with the distribution.
13  * * Neither the name of the Nokia Corporation nor the names of its
14  *   contributors may be used to endorse or promote products derived from
15  *   this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
18  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
20  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
21  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29
30 /*
31  * TnyAccount Decorator
32  */
33
34 #ifndef __MODEST_TNY_ACCOUNT_H__
35 #define __MODEST_TNY_ACCOUNT_H__
36
37 #include <tny-account.h>
38 #include <tny-folder.h>
39 #include <modest-account-mgr.h>
40 #include <modest-local-folder-info.h>
41 #include <tny-session-camel.h>
42
43 G_BEGIN_DECLS
44
45 typedef struct
46 {
47         guint local_size;
48         guint msg_count;
49         guint folders;
50 } ModestFolderStats;
51
52 /**
53  * modest_tny_account_new_from_account:
54  * @account_mgr: a valid account mgr instance
55  * @account_name: the modest account name for which to create a corresponding tny account of the given type.
56  * @type: the type of account to create (TNY_ACCOUNT_TYPE_STORE or TNY_ACCOUNT_TYPE_TRANSPORT)
57  * @session: a tny camel session
58  * @get_pass_func: the get-password function
59  * @forget_pass_func: the forget-password function
60  * 
61  * get a tnyaccount corresponding to the server_accounts (store or transport) for this account.
62  * 
63  * Returns: a new TnyAccount or NULL in case of error.
64  */
65 TnyAccount*
66 modest_tny_account_new_from_account (ModestAccountMgr *account_mgr, const gchar *account_name,
67                                      TnyAccountType type,
68                                      TnySessionCamel *session,
69                                      TnyGetPassFunc get_pass_func,
70                                      TnyForgetPassFunc forget_pass_func);
71
72
73 /**
74  * modest_tny_account_update_from_account:
75  * @tny_account: a valid tny_account
76  * 
77  * update a tnyaccount corresponding to the server_accounts (store or transport) for this account.
78  * 
79  * Returns: a TRUE or FALSE in case of error.
80  */
81 gboolean
82 modest_tny_account_update_from_account (TnyAccount *tny_account,
83                                         TnyGetPassFunc get_pass_func,
84                                         TnyForgetPassFunc forget_pass_func);
85
86
87 /**
88  * modest_tny_account_new_for_local_folders:
89  * @account_mgr: a valid account mgr instance
90  * @session: a tny camel session
91  * @location_filepath: The location at which the local-folders directory exists, or NULL to specify $HOME.
92  * 
93  * get the local folders (pseudo) account; you should only need one such account.
94  * 
95  * Returns: a new local folders TnyAccount or NULL in case of error.
96  */
97 TnyAccount* modest_tny_account_new_for_local_folders (ModestAccountMgr *account_mgr,
98                                                       TnySessionCamel *session,
99                                                       const gchar* location_filepath);
100
101 /**
102  * modest_tny_account_new_for_per_account_local_outbox_folder:
103  * @account_mgr: a valid account mgr instance
104  * @account_name: a modest account name.
105  * @session: a tny camel session
106  * 
107  * get the per-account local outbox folder (pseudo) account.
108  * 
109  * Returns: a new per-account local outbox folder TnyAccount or NULL in case of error.
110  */
111 TnyAccount* modest_tny_account_new_for_per_account_local_outbox_folder (
112         ModestAccountMgr *account_mgr, const gchar* account_name,
113         TnySessionCamel *session);
114
115 /**
116  * modest_tny_account_new_from_server_account_name:
117  * @account_mgr: a valid account mgr instance
118  * @session: a valid TnySessionCamel instance.
119  * @server_account_name: the name of a server account in the configuration system.
120  *
121  * Returns: a new TnyAccount or NULL in case of error.
122  */
123 TnyAccount*
124 modest_tny_account_new_from_server_account_name (ModestAccountMgr *account_mgr, 
125                                                  TnySessionCamel *session,
126                                                  const gchar* server_account_name,
127                                                  TnyGetPassFunc get_pass_func,
128                                                  TnyForgetPassFunc forget_pass_func);
129
130 /**
131  * modest_tny_account_get_special_folder:
132  * @self: a TnyAccount
133  * @special_type: the special folder to get
134  * 
135  * get the special (Inbox,Outbox,Sent,Draft etc.) folder for this server account's parent modest account.
136  * Note: currently, the implementation will always return a local folder for this.
137  * This can be changed later to return really account-specific special folders,
138  * such as (for example) server-side Sent/Junk mail for IMAP accounts 
139  * 
140  * Returns: the tny folder corresponding to this special folder, or NULL in case
141  * of error, or if the special folder does not exist for this account. 
142  * This must be unrefed with g_object_unref().
143  */
144 TnyFolder*    modest_tny_account_get_special_folder   (TnyAccount *self,
145                                                        TnyFolderType special_type);
146
147
148 typedef void (*GetFolderStatsCallback) (ModestFolderStats stats, 
149                                         gpointer user_data);
150
151 /**
152  * modest_tny_folder_store_get_folder_stats:
153  * @self: a #TnyFolderStore
154  * 
155  **/
156 void
157 modest_tny_folder_store_get_folder_stats (TnyFolderStore *self,
158                                           GetFolderStatsCallback callback,
159                                           GetFolderStatsCallback status_callback,
160                                           gpointer user_data);
161
162 /**
163  * modest_tny_folder_store_is_remote:
164  * @folder_store: The folder store (folder or account) that needs to
165  * decide if need a connection in subsequent operations.
166  * @return value: Whether a connection is necessary for this folder_store.
167  */
168 gboolean modest_tny_folder_store_is_remote (TnyFolderStore *self);
169
170 /** modest_tny_account_get_parent_modest_account_name_for_server_account:
171  * Get the name of the parent modest account of which the server account is a part.
172  */
173 const gchar* modest_tny_account_get_parent_modest_account_name_for_server_account (TnyAccount *self);
174
175 /** modest_tny_account_set_parent_modest_account_name_for_server_account:
176  * Set the name of the parent modest account of which the server account is a part,
177  * so it can be retrieved later with 
178  * modest_tny_account_get_parent_modest_account_name_for_server_account().
179  */
180 void modest_tny_account_set_parent_modest_account_name_for_server_account (TnyAccount *account, const gchar* parent_modest_acount_name);
181
182
183 typedef void (*ModestTnyAccountGetMmcAccountNameCallback) (TnyStoreAccount* self, gpointer user_data);
184
185 /** modest_tny_account_get_mmc_account_name:
186  * Asnchronously get the name of a memory card account and set it in the TnyAccount,
187  * calling the callback (if not NULL) to notify that the name is changed.
188  * if the name was changed. The callback will not be called if the name was not changed.
189  */
190 void modest_tny_account_get_mmc_account_name (TnyStoreAccount* self, 
191                                               ModestTnyAccountGetMmcAccountNameCallback callback, 
192                                               gpointer user_data);
193
194
195 /** modest_tny_account_is_virtual_local_folders:
196  * @self A TnyAccount.
197  * 
198  * A convenience function to identify whether TnyAccount 
199  * is the virtual local folders account, containing the folders from local_folders/
200  * and the outboxes from outboxes/<account-name>/.
201  **/
202 gboolean modest_tny_account_is_virtual_local_folders (TnyAccount *self);
203
204 /** modest_tny_account_is_memory_card_account:
205  * @self A TnyAccount.
206  * 
207  * A convenience function to identify whether TnyAccount 
208  * is the memory card account.
209  **/
210 gboolean modest_tny_account_is_memory_card_account (TnyAccount *self);
211
212 /**
213  * modest_tny_account_get_protocol_type:
214  * @self: a #TnyAccount
215  *
216  * obtains the transport/store protocol type of @self
217  *
218  * Returns: a #ModestProtocolType
219  */
220 ModestProtocolType modest_tny_account_get_protocol_type (TnyAccount *self);
221
222
223 G_END_DECLS
224
225 #endif /* __MODEST_TNY_ACCOUNT_H__*/