Merged the new plugin system from branch plugin-system.
[modest] / src / modest-protocol-registry.h
1 /* Copyright (c) 2007, 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 /* modest-account-settings.h */
32
33 #ifndef __MODEST_PROTOCOL_REGISTRY_H__
34 #define __MODEST_PROTOCOL_REGISTRY_H__
35
36 #include <glib-object.h>
37 #include <modest-protocol.h>
38 #include <modest-pair.h>
39
40 G_BEGIN_DECLS
41
42 #define MODEST_PROTOCOL_REGISTRY_CONNECTION_PROTOCOLS "connection"
43 #define MODEST_PROTOCOL_REGISTRY_AUTH_PROTOCOLS "auth"
44 #define MODEST_PROTOCOL_REGISTRY_TRANSPORT_STORE_PROTOCOLS "transport-store"
45 #define MODEST_PROTOCOL_REGISTRY_STORE_PROTOCOLS "store"
46 #define MODEST_PROTOCOL_REGISTRY_TRANSPORT_PROTOCOLS "transport"
47 #define MODEST_PROTOCOL_REGISTRY_LOCAL_STORE_PROTOCOLS "local-store"
48 #define MODEST_PROTOCOL_REGISTRY_REMOTE_STORE_PROTOCOLS "remote-store"
49 #define MODEST_PROTOCOL_REGISTRY_SECURE_PROTOCOLS "secure"
50 #define MODEST_PROTOCOL_REGISTRY_HAS_LEAVE_ON_SERVER_PROTOCOLS "leave-on-server-available"
51 #define MODEST_PROTOCOL_REGISTRY_PROVIDER_PROTOCOLS "providers"
52 #define MODEST_PROTOCOL_REGISTRY_USE_ALTERNATE_PORT "use-alternate-port"
53 #define MODEST_PROTOCOL_REGISTRY_STORE_HAS_FOLDERS "store-has-folders"
54 #define MODEST_PROTOCOL_REGISTRY_STORE_FORBID_MESSAGE_ADD "store-forbid-message-add"
55
56 /* convenience macros */
57 #define MODEST_TYPE_PROTOCOL_REGISTRY             (modest_protocol_registry_get_type())
58 #define MODEST_PROTOCOL_REGISTRY(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_PROTOCOL_REGISTRY,ModestProtocolRegistry))
59 #define MODEST_PROTOCOL_REGISTRY_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_PROTOCOL_REGISTRY,ModestProtocolRegistryClass))
60 #define MODEST_IS_PROTOCOL_REGISTRY(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_PROTOCOL_REGISTRY))
61 #define MODEST_IS_PROTOCOL_REGISTRY_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_PROTOCOL_REGISTRY))
62 #define MODEST_PROTOCOL_REGISTRY_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_PROTOCOL_REGISTRY,ModestProtocolRegistryClass))
63
64 /* a special type, equivalent to a NULL protocol */
65 #define MODEST_PROTOCOL_REGISTRY_TYPE_INVALID -1
66
67 /* The minimum priority custom protocols should take for their index */
68 #define MODEST_PROTOCOL_REGISTRY_USER_PRIORITY 100
69
70 /* macros to access the default configured protocols */
71 #define MODEST_PROTOCOLS_TRANSPORT_SMTP (modest_protocol_registry_get_smtp_type_id())
72 #define MODEST_PROTOCOLS_TRANSPORT_SENDMAIL (modest_protocol_registry_get_sendmail_type_id())
73 #define MODEST_PROTOCOLS_STORE_POP (modest_protocol_registry_get_pop_type_id())
74 #define MODEST_PROTOCOLS_STORE_IMAP (modest_protocol_registry_get_imap_type_id())
75 #define MODEST_PROTOCOLS_STORE_MAILDIR (modest_protocol_registry_get_maildir_type_id())
76 #define MODEST_PROTOCOLS_STORE_MBOX (modest_protocol_registry_get_mbox_type_id())
77 #define MODEST_PROTOCOLS_CONNECTION_NONE (modest_protocol_registry_get_none_connection_type_id ())
78 #define MODEST_PROTOCOLS_CONNECTION_TLS (modest_protocol_registry_get_tls_connection_type_id ())
79 #define MODEST_PROTOCOLS_CONNECTION_SSL (modest_protocol_registry_get_ssl_connection_type_id ())
80 #define MODEST_PROTOCOLS_CONNECTION_TLSOP (modest_protocol_registry_get_tlsop_connection_type_id ())
81 #define MODEST_PROTOCOLS_AUTH_NONE (modest_protocol_registry_get_none_auth_type_id ())
82 #define MODEST_PROTOCOLS_AUTH_PASSWORD (modest_protocol_registry_get_password_auth_type_id ())
83 #define MODEST_PROTOCOLS_AUTH_CRAMMD5 (modest_protocol_registry_get_crammd5_auth_type_id ())
84
85 /* properties available */
86 #define MODEST_PROTOCOL_SECURITY_ACCOUNT_OPTION "modest-security-account-option"
87 #define MODEST_PROTOCOL_AUTH_ACCOUNT_OPTION "modest-auth-account-option"
88
89 /* translations */
90 #define MODEST_PROTOCOL_TRANSLATION_DELETE_MAILBOX "translation-delete-mailbox" /* title string */
91 #define MODEST_PROTOCOL_TRANSLATION_CONNECT_ERROR "translation-connect-error" /* server name */
92 #define MODEST_PROTOCOL_TRANSLATION_AUTH_ERROR "translation-auth-error" /* server name */
93 #define MODEST_PROTOCOL_TRANSLATION_ACCOUNT_CONNECTION_ERROR "translation-account-connection-error" /* hostname */
94 #define MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE "translation-msg-not-available" /* subject */
95 #define MODEST_PROTOCOL_TRANSLATION_SSL_PROTO_NAME "translation-ssl-proto-name"
96
97
98 typedef struct _ModestProtocolRegistry      ModestProtocolRegistry;
99 typedef struct _ModestProtocolRegistryClass ModestProtocolRegistryClass;
100
101 typedef guint ModestProtocolRegistryType;
102
103 struct _ModestProtocolRegistry {
104         GObject parent;
105 };
106
107 struct _ModestProtocolRegistryClass {
108         GObjectClass parent_class;
109 };
110
111 /**
112  * modest_protocol_registry_get_type:
113  *
114  * Returns: GType of the account store
115  */
116 GType  modest_protocol_registry_get_type   (void) G_GNUC_CONST;
117
118 /**
119  * modest_protocol_registry_new:
120  *
121  * creates a new instance of #ModestProtocolRegistry
122  *
123  * Returns: a #ModestProtocolRegistry
124  */
125 ModestProtocolRegistry*    modest_protocol_registry_new (void);
126
127 /**
128  * modest_protocol_registry_add:
129  * @self: a #ModestProtocolRegistry
130  * @protocol: a #ModestProtocol
131  * @priority: priority establishes the order the protocols will be shown on listings
132  * @first_tag: a string
133  * @...: a %NULL terminated list of strings with the tags for the protocol
134  *
135  * Add @protocol to the registry @self, setting the proper identifying tags
136  */
137 void modest_protocol_registry_add (ModestProtocolRegistry *self, ModestProtocol *protocol, gint priority, const gchar *first_tag, ...);
138
139 /**
140  * modest_protocol_registry_get_all:
141  * @self: a #ModestProtocolRegistry
142  *
143  * obtains a list of all protocols registered in @self
144  *
145  * Returns: a newly allocated GSList of the protocols. Don't unref the protocols, only the list.
146  */
147 GSList *modest_protocol_registry_get_all (ModestProtocolRegistry *self);
148
149 /**
150  * modest_protocol_registry_get_by_tag:
151  * @self: a #ModestProtocolRegistry
152  * @tag: a string
153  *
154  * obtains a list of all protocols registered in @self tagged with @tag
155  *
156  * Returns: a newly allocated GSList of the protocols. Don't unref the protocol, only the list.
157  */
158 GSList *modest_protocol_registry_get_by_tag (ModestProtocolRegistry *self, const gchar *tag);
159
160 /**
161  * modest_protocol_registry_get_pair_list_by_tag:
162  * @self: a #ModestProtocolRegistry
163  * @tag: a string
164  *
165  * obtains a pair list of all protocols registered in @self tagged with @tag
166  *
167  * Returns: a newly allocated #ModestPairList of the protocols. Should be freed using
168  * modest_pair_list_free ()
169  */
170 ModestPairList *modest_protocol_registry_get_pair_list_by_tag (ModestProtocolRegistry *self, const gchar *tag);
171
172 /**
173  * modest_protocol_registry_get_protocol_by_name:
174  * @self: a #ModestProtocolRegistry
175  * @tag: a string
176  * @name: a string
177  *
178  * Obtains the protocol in registry @self, tagged with @tag and with @name
179  *
180  * Returns: the obtained #ModestProtocol, or %NULL if not found.
181  */
182 ModestProtocol *modest_protocol_registry_get_protocol_by_name (ModestProtocolRegistry *self, const gchar *tag, const gchar *name);
183
184 /**
185  * modest_protocol_registry_get_protocol_by_type:
186  * @self: a #ModestProtocolRegistry
187  * @type_id: a #ModestProtocolType
188  *
189  * Obtains the protocol in registry @self, identified by @type_id
190  *
191  * Returns: the obtained #ModestProtocol, or %NULL if not found.
192  */
193 ModestProtocol *modest_protocol_registry_get_protocol_by_type (ModestProtocolRegistry *self, ModestProtocolType type_id);
194
195 /**
196  * modest_protocol_registry_protocol_type_has_tag:
197  * @self: a #ModestProtocolRegistry
198  * @type_id: a #ModestProtocolType
199  * @tag: a string
200  *
201  * Checks if a protocol identified with @type_id has a specific @tag.
202  *
203  * Returns: %TRUE if @type_id protocol has @tag in registry @self
204  */
205 gboolean modest_protocol_registry_protocol_type_has_tag (ModestProtocolRegistry *self, ModestProtocolType type_id, const gchar *tag);
206
207 #define modest_protocol_registry_protocol_type_is_secure(registry,protocol_type) \
208         modest_protocol_registry_protocol_type_has_tag ((registry), (protocol_type), \
209                                                         MODEST_PROTOCOL_REGISTRY_SECURE_PROTOCOLS)
210
211 #define modest_protocol_registry_protocol_type_is_provider(registry,protocol_type) \
212         modest_protocol_registry_protocol_type_has_tag ((registry), (protocol_type), \
213                                                         MODEST_PROTOCOL_REGISTRY_PROVIDER_PROTOCOLS)
214
215 #define modest_protocol_registry_protocol_type_has_leave_on_server(registry,protocol_type) \
216         modest_protocol_registry_protocol_type_has_tag ((registry), (protocol_type), \
217                                                         MODEST_PROTOCOL_REGISTRY_HAS_LEAVE_ON_SERVER_PROTOCOLS)
218
219 /**
220  * @self: a #ModestProtocolRegistry
221  *
222  * Set default available protocols in Modest in @self
223  */
224 void modest_protocol_registry_set_to_default (ModestProtocolRegistry *self);
225
226 ModestProtocolType modest_protocol_registry_get_imap_type_id (void);
227 ModestProtocolType modest_protocol_registry_get_pop_type_id (void);
228 ModestProtocolType modest_protocol_registry_get_maildir_type_id (void);
229 ModestProtocolType modest_protocol_registry_get_mbox_type_id (void);
230 ModestProtocolType modest_protocol_registry_get_smtp_type_id (void);
231 ModestProtocolType modest_protocol_registry_get_sendmail_type_id (void);
232 ModestProtocolType modest_protocol_registry_get_none_connection_type_id (void);
233 ModestProtocolType modest_protocol_registry_get_tls_connection_type_id (void);
234 ModestProtocolType modest_protocol_registry_get_ssl_connection_type_id (void);
235 ModestProtocolType modest_protocol_registry_get_tlsop_connection_type_id (void);
236 ModestProtocolType modest_protocol_registry_get_none_auth_type_id (void);
237 ModestProtocolType modest_protocol_registry_get_password_auth_type_id (void);
238 ModestProtocolType modest_protocol_registry_get_crammd5_auth_type_id (void);
239
240 G_END_DECLS
241
242 #endif /* __MODEST_PROTOCOL_REGISTRY_H__ */