Mercurial > libervia-backend
annotate frontends/src/wix/profile_manager.py @ 1005:b4af31a8a4f2
core (logs): added formatting, name filter and outputs management:
- formatting is inspired from, and use when possible, standard logging. "message", "levelname", and "name" are the only format managed, depending on backend more can be managed (standard backend formats are specified in official python logging doc)
- name filter use regular expressions. It's possible to log only plugins with SAT_LOG_LOGGER="^sat.plugins". To log only XEPs 96 & 65, we can use SAT_LOG_LOGGER='(xep_0095|xep_0065)'
- output management use a particular syntax:
- output handler are name with "//", so far there are "//default" (most of time stderr), "//memory" and "//file"
- options can be specified in parenthesis, e.g. "//memory(50)" mean a 50 lines memory buffer (50 is the current default, so that's equivalent to "//memory")
- several handlers can be specified: "//file(/tmp/sat.log)//default" will use the default logging + a the /tmp/sat.log file
- if there is only one handler, it use the file handler: "/tmp/sat.log" is the same as "//file(/tmp/sat.log)"
- not finished, need more work for twisted and basic backends
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 05 May 2014 18:58:34 +0200 |
parents | 308a96bc7c1b |
children | 5a6354ff468c |
rev | line source |
---|---|
68 | 1 #!/usr/bin/python |
2 # -*- coding: utf-8 -*- | |
3 | |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
4 # wix: a SAT frontend |
811 | 5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jérôme Poisson (goffi@goffi.org) |
68 | 6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
10 # (at your option) any later version. |
68 | 11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
15 # GNU Affero General Public License for more details. |
68 | 16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
68 | 19 |
20 | |
21 | |
771 | 22 from sat.core.i18n import _ |
68 | 23 import wx |
24 from logging import debug, info, error | |
225
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
25 from sat.tools.jid import JID |
68 | 26 |
27 | |
28 class ProfileManager(wx.Panel): | |
29 def __init__(self, host): | |
30 super(ProfileManager, self).__init__(host) | |
31 self.host = host | |
32 | |
33 #self.sizer = wx.FlexGridSizer(cols=2) | |
34 self.sizer = wx.BoxSizer(wx.VERTICAL) | |
35 self.SetSizer(self.sizer) | |
36 | |
37 profiles = self.host.bridge.getProfilesList() | |
38 self.profile_name = wx.ComboBox(self, -1, style=wx.CB_READONLY|wx.CB_SORT) | |
39 self.__refillProfiles() | |
40 self.Bind(wx.EVT_COMBOBOX, self.onProfileChange) | |
41 self.panel_id = wx | |
42 | |
43 self.sizer.Add(wx.Window(self, -1), 1) | |
70 | 44 self.sizer.Add(wx.StaticText(self, -1, _("Profile:")), 0, flag=wx.ALIGN_CENTER) |
68 | 45 self.sizer.Add(self.profile_name, 0, flag=wx.ALIGN_CENTER) |
46 button_panel = wx.Panel(self) | |
47 button_panel.sizer = wx.BoxSizer(wx.HORIZONTAL) | |
48 button_panel.SetSizer(button_panel.sizer) | |
70 | 49 button_new = wx.Button(button_panel, -1, _("New")) |
50 button_del = wx.Button(button_panel, -1, _("Delete")) | |
68 | 51 button_panel.sizer.Add(button_new) |
52 button_panel.sizer.Add(button_del) | |
53 self.sizer.Add(button_panel, flag=wx.CENTER) | |
54 self.Bind(wx.EVT_BUTTON, self.onNewProfile, button_new) | |
55 self.Bind(wx.EVT_BUTTON, self.onDeleteProfile, button_del) | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
56 |
70 | 57 login_box = wx.StaticBox(self, -1, _("Login")) |
68 | 58 self.login_sizer = wx.StaticBoxSizer(login_box, wx.VERTICAL) |
59 self.sizer.Add(self.login_sizer, 1, wx.EXPAND | wx.ALL) | |
60 self.login_jid = wx.TextCtrl(self, -1) | |
61 self.login_sizer.Add(wx.StaticText(self, -1, "JID:"), 0, flag=wx.ALIGN_CENTER) | |
62 self.login_sizer.Add(self.login_jid, flag=wx.EXPAND) | |
63 self.login_pass = wx.TextCtrl(self, -1, style = wx.TE_PASSWORD) | |
70 | 64 self.login_sizer.Add(wx.StaticText(self, -1, _("Password:")), 0, flag=wx.ALIGN_CENTER) |
68 | 65 self.login_sizer.Add(self.login_pass, flag=wx.EXPAND) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
66 |
70 | 67 loggin_button = wx.Button(self, -1, _("Connect")) |
68 | 68 self.Bind(wx.EVT_BUTTON, self.onConnectButton, loggin_button) |
69 self.login_sizer.Add(loggin_button, flag=wx.ALIGN_CENTER) | |
70 | |
71 self.sizer.Add(wx.Window(self, -1), 1) | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
72 |
68 | 73 #Now we can set the default value |
74 self.__setDefault() | |
75 | |
76 | |
77 def __setDefault(self): | |
78 profile_default = self.host.bridge.getProfileName("@DEFAULT@") | |
79 if profile_default: | |
80 self.profile_name.SetValue(profile_default) | |
81 self.onProfileChange(None) | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
82 |
68 | 83 def __refillProfiles(self): |
84 """Update profiles with current names. Must be called after a profile change""" | |
85 self.profile_name.Clear() | |
86 profiles = self.host.bridge.getProfilesList() | |
87 profiles.sort() | |
88 for profile in profiles: | |
89 self.profile_name.Append(profile) | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
90 |
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
91 |
68 | 92 def onNewProfile(self, event): |
70 | 93 dlg = wx.TextEntryDialog(self, _("Please enter the new profile name"), _("New profile"), style = wx.OK | wx.CANCEL) |
68 | 94 if dlg.ShowModal() == wx.ID_OK: |
95 name = dlg.GetValue() | |
96 if name: | |
97 if name[0]=='@': | |
70 | 98 wx.MessageDialog(self, _("A profile name can't start with a @"), _("Bad profile name"), wx.ICON_ERROR).ShowModal() |
68 | 99 else: |
893
308a96bc7c1b
core, frontends: add method asyncDeleteProfile, remove synchronous methods createProfile and deleteProfile
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
100 def cb(): |
308a96bc7c1b
core, frontends: add method asyncDeleteProfile, remove synchronous methods createProfile and deleteProfile
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
101 self.__refillProfiles() |
308a96bc7c1b
core, frontends: add method asyncDeleteProfile, remove synchronous methods createProfile and deleteProfile
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
102 self.profile_name.SetValue(name) |
308a96bc7c1b
core, frontends: add method asyncDeleteProfile, remove synchronous methods createProfile and deleteProfile
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
103 self.host.bridge.asyncCreateProfile(name, callback=cb) |
68 | 104 dlg.Destroy() |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
105 |
68 | 106 def onDeleteProfile(self, event): |
107 name = self.profile_name.GetValue() | |
108 if not name: | |
109 return | |
70 | 110 dlg = wx.MessageDialog(self, _("Are you sure to delete the profile [%s]") % name, _("Confirmation"), wx.ICON_QUESTION | wx.YES_NO) |
68 | 111 if dlg.ShowModal() == wx.ID_YES: |
893
308a96bc7c1b
core, frontends: add method asyncDeleteProfile, remove synchronous methods createProfile and deleteProfile
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
112 def cb(): |
308a96bc7c1b
core, frontends: add method asyncDeleteProfile, remove synchronous methods createProfile and deleteProfile
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
113 self.__refillProfiles() |
308a96bc7c1b
core, frontends: add method asyncDeleteProfile, remove synchronous methods createProfile and deleteProfile
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
114 self.__setDefault() |
308a96bc7c1b
core, frontends: add method asyncDeleteProfile, remove synchronous methods createProfile and deleteProfile
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
115 self.host.bridge.asyncDeleteProfile(name, callback=cb) |
68 | 116 dlg.Destroy() |
117 | |
118 def onProfileChange(self, event): | |
119 """Called when a profile is choosen in the combo box""" | |
447
485a6d125498
Wix: fixed asynchronous call to get profile's data in profile manager
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
120 def setJID(jabberID): |
485a6d125498
Wix: fixed asynchronous call to get profile's data in profile manager
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
121 self.login_jid.SetValue(jabberID) |
485a6d125498
Wix: fixed asynchronous call to get profile's data in profile manager
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
122 def setPassword(password): |
485a6d125498
Wix: fixed asynchronous call to get profile's data in profile manager
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
123 self.login_pass.SetValue(password) |
485a6d125498
Wix: fixed asynchronous call to get profile's data in profile manager
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
124 self.host.bridge.asyncGetParamA("JabberID", "Connection", profile_key=self.profile_name.GetValue(), callback=setJID, errback=self.getParamError) |
485a6d125498
Wix: fixed asynchronous call to get profile's data in profile manager
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
125 self.host.bridge.asyncGetParamA("Password", "Connection", profile_key=self.profile_name.GetValue(), callback=setPassword, errback=self.getParamError) |
68 | 126 |
127 def onConnectButton(self, event): | |
128 """Called when the Connect button is pressed""" | |
129 name = self.profile_name.GetValue() | |
130 if not name: | |
70 | 131 wx.MessageDialog(self, _("You must select a profile or create a new one before connecting"), _("No profile selected"), wx.ICON_ERROR).ShowModal() |
68 | 132 return |
133 if name[0]=='@': | |
70 | 134 wx.MessageDialog(self, _("A profile name can't start with a @"), _("Bad profile name"), wx.ICON_ERROR).ShowModal() |
68 | 135 return |
136 profile = self.host.bridge.getProfileName(name) | |
89
23caf1051099
multi-profile/subscription misc fixes
Goffi <goffi@goffi.org>
parents:
72
diff
changeset
|
137 assert(profile) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
138 |
552 | 139 self.host.bridge.asyncGetParamA("JabberID", "Connection", profile_key=profile, callback=lambda old_jid: self.__old_jidReceived(old_jid, profile), errback=self.getParamError) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
140 |
552 | 141 def __old_jidReceived(self, old_jid, profile): |
142 self.host.bridge.asyncGetParamA("Password", "Connection", profile_key=profile, callback=lambda old_pass: self.__old_passReceived(old_jid, old_pass, profile), errback=self.getParamError) | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
143 |
552 | 144 def __old_passReceived(self, old_jid, old_pass, profile): |
68 | 145 new_jid = self.login_jid.GetValue() |
146 new_pass = self.login_pass.GetValue() | |
147 if old_jid != new_jid: | |
72 | 148 debug(_('Saving new JID and server')) |
641
49587e170f53
core: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents:
609
diff
changeset
|
149 self.host.bridge.setParam("JabberID", new_jid, "Connection", profile_key=profile) |
49587e170f53
core: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents:
609
diff
changeset
|
150 self.host.bridge.setParam("Server", JID(new_jid).domain, "Connection", profile_key=profile) |
68 | 151 if old_pass != new_pass: |
70 | 152 debug(_('Saving new password')) |
641
49587e170f53
core: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents:
609
diff
changeset
|
153 self.host.bridge.setParam("Password", new_pass, "Connection", profile_key=profile) |
89
23caf1051099
multi-profile/subscription misc fixes
Goffi <goffi@goffi.org>
parents:
72
diff
changeset
|
154 self.host.plug_profile(profile) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
155 |
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
156 |
447
485a6d125498
Wix: fixed asynchronous call to get profile's data in profile manager
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
157 def getParamError(self, ignore): |
485a6d125498
Wix: fixed asynchronous call to get profile's data in profile manager
Goffi <goffi@goffi.org>
parents:
228
diff
changeset
|
158 wx.MessageDialog(self, _("Can't get profile parameter"), _("Profile error"), wx.ICON_ERROR).ShowModal() |