2 # Copyright (c) 2008 INdT - Instituto Nokia de Tecnologia
4 # This file is part of python-purple.
6 # python-purple is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
11 # python-purple is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
23 cdef plugin.PurplePlugin *c_plugin
24 cdef prpl.PurplePluginProtocolInfo *c_prpl_info
25 cdef plugin.PurplePluginInfo *c_plugin_info
27 def __init__(self, id):
28 self.c_plugin = plugin.c_purple_plugins_find_with_id(id)
29 self.c_prpl_info = plugin.c_PURPLE_PLUGIN_PROTOCOL_INFO(self.c_plugin)
32 return self.c_plugin.info.name
35 return self.c_plugin.info.id
38 ''' @return A string list of protocols' (id, name) '''
39 ''' [('prpl-jabber', 'XMPP'), ('foo', 'MSN'), ...] '''
41 cdef plugin.PurplePlugin *pp
45 iter = plugin.c_purple_plugins_get_protocols()
47 pp = <plugin.PurplePlugin*> iter.data
48 if pp.info and pp.info.name:
49 protocols.append((pp.info.id, pp.info.name))
54 def get_options(self, id, username=None):
55 ''' @param id The protocol's id '''
56 ''' @param username The account's username '''
57 ''' @return {'setting type': ('UI label', str|int|bool value)} '''
59 cdef plugin.PurplePlugin *c_plugin
60 cdef prpl.PurplePluginProtocolInfo *c_prpl_info
61 cdef account.PurpleAccount *c_account
63 cdef accountopt.PurpleAccountOption *option
64 cdef prefs.PurplePrefType type
65 cdef const_char *label_name
66 cdef const_char *str_value
67 cdef const_char *setting
69 cdef glib.gboolean bool_value
74 c_account = account.c_purple_accounts_find(username, id)
76 # FIXME: Message error or call a error handler
79 c_plugin = plugin.c_purple_plugins_find_with_id(id)
80 c_prpl_info = plugin.c_PURPLE_PLUGIN_PROTOCOL_INFO(c_plugin)
84 iter = c_prpl_info.protocol_options
88 option = <accountopt.PurpleAccountOption *> iter.data
89 type = accountopt.c_purple_account_option_get_type(option)
90 label_name = accountopt.c_purple_account_option_get_text(option)
91 setting = accountopt.c_purple_account_option_get_setting(option)
93 sett = str(<char *> setting)
94 label = str(<char *> lanel_name)
96 if type == prefs.PURPLE_PREF_STRING:
97 str_value = accountopt.c_purple_account_option_get_default_string(option)
98 # Google Talk default domain hackery!
99 if str_value == NULL and label == "Connect server":
100 str_value = "talk.google.com"
101 if c_account != NULL:
102 str_value = account.c_purple_account_get_string(c_account, setting, str_value)
104 val = str(<char *> str_value)
106 elif type == prefs.PURPLE_PREF_INT:
107 int_value = accountopt.c_purple_account_option_get_default_int(option)
110 if c_account != NULL:
111 int_value = account.c_purple_account_get_int(c_account, setting, int_value)
115 elif type == prefs.PURPLE_PREF_BOOLEAN:
116 bool_value = accountopt.c_purple_account_option_get_default_bool(option)
117 if c_account != NULL:
118 bool_value = account.c_purple_account_get_bool(c_account, setting, bool_value)
120 val = bool(bool_value)
122 elif type == prefs.PURPLE_PREF_STRING_LIST:
123 str_value = accountopt.c_purple_account_option_get_default_list_value(option)
124 if c_account != NULL:
125 str_value = account.c_purple_account_get_string(c_account, setting, str_value)
127 val = str(<char *> str_value)
131 po[sett] = (label, val)
141 self.protocols = None
143 def get_protocols(self):
145 return self.protocols
146 cdef glib.GList *iter
147 cdef plugin.PurplePlugin *pp
149 iter = plugin.c_purple_plugins_get_protocols()
151 pp = <plugin.PurplePlugin*> iter.data
152 if pp.info and pp.info.name:
153 p = Plugin(pp.info.id)
157 glib.g_list_free(iter)
158 self.protocols = protocols