Mercurial > libervia-backend
diff frontends/src/primitivus/profile_manager.py @ 223:86d249b6d9b7
Files reorganisation
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 29 Dec 2010 01:06:29 +0100 |
parents | frontends/primitivus/profile_manager.py@3198bfd66daa |
children | fd9b7834d98a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/frontends/src/primitivus/profile_manager.py Wed Dec 29 01:06:29 2010 +0100 @@ -0,0 +1,124 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +""" +Primitivus: a SAT frontend +Copyright (C) 2009, 2010 Jérôme Poisson (goffi@goffi.org) + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +""" + +import urwid +from urwid_satext.sat_widgets import Password,List,InputDialog,ConfirmDialog,Alert,FocusFrame +from tools.jid import JID + + +class ProfileManager(urwid.WidgetWrap): + + def __init__(self, host): + self.host = host + #profiles list + profiles = self.host.bridge.getProfilesList() + profiles.sort() + + #login & password box must be created before list because of onProfileChange + self.login_wid = urwid.Edit(_('Login:'),align='center') + self.pass_wid = Password(_('Password:'),align='center') + + self.list_profile = List(profiles, style=['single'], align='center', on_click=self.onProfileChange) + + #new & delete buttons + buttons = [urwid.Button(_("New"), self.onNewProfile), + urwid.Button(_("Delete"), self.onDeleteProfile)] + buttons_flow = urwid.GridFlow(buttons, max([len(button.get_label()) for button in buttons])+4, 1, 1, 'center') + + #second part: login information: + divider = urwid.Divider('-') + + #connect button + connect_button = urwid.Button(_("Connect"), self.onConnectProfile) + + #we now build the widget + body_content = urwid.SimpleListWalker([buttons_flow,self.list_profile,divider,self.login_wid, self.pass_wid, connect_button]) + frame_body = urwid.ListBox(body_content) + frame = urwid.Frame(frame_body,urwid.AttrMap(urwid.Text(_("Profile Manager"),align='center'),'title')) + self.main_widget = urwid.LineBox(frame) + urwid.WidgetWrap.__init__(self, self.main_widget) + + def __refillProfiles(self): + """Update the list of profiles""" + profiles = self.host.bridge.getProfilesList() + profiles.sort() + self.list_profile.changeValues(profiles) + + def cancelDialog(self, button): + self.host.removePopUp() + + def newProfile(self, button, edit): + """Create the profile""" + name = edit.get_edit_text() + self.host.bridge.createProfile(name) + self.__refillProfiles() + #We select the profile created in the list + self.list_profile.selectValue(name) + self.host.removePopUp() + + def deleteProfile(self, button): + profile_name = self.list_profile.getSelectedValue() + if profile_name: + self.host.bridge.deleteProfile(profile_name) + self.__refillProfiles() + self.host.removePopUp() + + + def onNewProfile(self, e): + pop_up_widget = InputDialog(_("New profile"), _("Please enter a new profile name"), cancel_cb=self.cancelDialog, ok_cb=self.newProfile) + self.host.showPopUp(pop_up_widget) + + def onDeleteProfile(self, e): + pop_up_widget = ConfirmDialog(_("Are you sure you want to delete the profile %s ?") % self.list_profile.getSelectedValue(), no_cb=self.cancelDialog, yes_cb=self.deleteProfile) + self.host.showPopUp(pop_up_widget) + + def onProfileChange(self, list_wid): + profile_name = list_wid.getSelectedValue() + if profile_name: + jabberID = self.host.bridge.getParamA("JabberID", "Connection", profile_key=profile_name) + password = self.host.bridge.getParamA("Password", "Connection", profile_key=profile_name) + self.login_wid.set_edit_text(jabberID) + self.pass_wid.set_edit_text(password) + + def onConnectProfile(self, button): + profile_name = self.list_profile.getSelectedValue() + if not profile_name: + pop_up_widget = Alert(_('No profile selected'), _('You need to create and select a profile before connecting'), ok_cb=self.cancelDialog) + self.host.showPopUp(pop_up_widget) + elif profile_name[0] == '@': + pop_up_widget = Alert(_('Bad profile name'), _("A profile name can't start with a @"), ok_cb=self.cancelDialog) + self.host.showPopUp(pop_up_widget) + else: + profile = self.host.bridge.getProfileName(profile_name) + assert(profile) + #TODO: move this to quick_app + old_jid = self.host.bridge.getParamA("JabberID", "Connection", profile_key=profile) + old_pass = self.host.bridge.getParamA("Password", "Connection", profile_key=profile) + new_jid = self.login_wid.get_edit_text() + new_pass = self.pass_wid.get_edit_text() + + if old_jid != new_jid: + self.host.bridge.setParam("JabberID", new_jid, "Connection", profile) + self.host.bridge.setParam("Server", JID(new_jid).domain, "Connection", profile) + if old_pass != new_pass: + self.host.bridge.setParam("Password", new_pass, "Connection", profile) + self.host.plug_profile(profile) +