diff --git a/frontends/primitivus/gateways.py b/frontends/primitivus/gateways.py
new file mode 100644
index 00000000..3400beb6
--- /dev/null
+++ b/frontends/primitivus/gateways.py
@@ -0,0 +1,86 @@
+#!/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 .
+"""
+
+import urwid
+import custom_widgets
+from tools.jid import JID
+from quick_frontend.quick_gateways import QuickGatewaysManager
+
+
+class GatewaysManager(urwid.WidgetWrap, QuickGatewaysManager):
+
+ def __init__(self, host, gateways, title=_("Gateways manager"), server=None):
+ QuickGatewaysManager.__init__(self, host, gateways, server)
+ widget_list = urwid.SimpleListWalker([])
+ widget_list.append(urwid.Text(self.WARNING_MSG))
+ widget_list.append(urwid.Divider('-'))
+ for gateway in gateways:
+ self.addGateway(widget_list,gateway, gateways[gateway])
+ widget_list.append(urwid.Divider())
+ self.ext_serv = custom_widgets.AdvancedEdit(_("Use external XMPP server: "))
+ go_button = custom_widgets.CustomButton( _("GO !"),self.browseExternalServer)
+ ext_serv_col = urwid.Columns([self.ext_serv,('fixed',go_button.getSize(),go_button)])
+ widget_list.append(ext_serv_col)
+ list_wid = urwid.ListBox(widget_list)
+ decorated = custom_widgets.LabelLine(list_wid, custom_widgets.SurroundedText(title))
+ urwid.WidgetWrap.__init__(self, decorated)
+
+ def browseExternalServer(self, button):
+ """Open the gateway manager on given server"""
+ server = self.ext_serv.get_edit_text()
+ if not server:
+ popup = custom_widgets.Alert(_("Error"), _("You must enter an external server JID"), ok_cb=self.host.removePopUp)
+ self.host.showPopUp(popup)
+ return
+ id = self.host.bridge.findGateways(server, self.host.profile)
+ self.host.current_action_ids.add(id)
+ self.host.current_action_ids_cb[id] = self.host.onGatewaysFound
+ self.host.removeWindow()
+
+ def addGateway(self, widget_list, gateway, param):
+
+ widget_col = []
+ widget_col.append(('weight',4,urwid.Text(unicode(param['name'])))) #FIXME: unicode to be remove when DBus bridge will not give dbus.String anymore
+
+ #Then the transport type message
+ widget_col.append(('weight',6,urwid.Text(self.getGatewayDesc(param['type']))))
+
+ #The buttons
+
+ reg_button = custom_widgets.CustomButton( _("Register"), self.onRegister)
+ reg_button.gateway_jid = JID(gateway)
+ widget_col.append(('fixed',reg_button.getSize(),reg_button))
+ unreg_button = custom_widgets.CustomButton( _("Unregister"), self.onUnregister)
+ unreg_button.gateway_jid = JID(gateway)
+ widget_col.append(('fixed',unreg_button.getSize(),unreg_button))
+ widget_list.append(urwid.Columns(widget_col,1))
+
+ def onRegister(self, button):
+ """Called when register button is clicked"""
+ gateway_jid = button.gateway_jid
+ id = self.host.bridge.in_band_register(gateway_jid, self.host.profile)
+ self.host.current_action_ids.add(id)
+
+ def onUnregister(self, button):
+ """Called when unregister button is clicked"""
+ gateway_jid = button.gateway_jid
+ id = self.host.bridge.gatewayRegister("CANCEL",gateway_jid, None, self.host.profile)
+ self.host.current_action_ids.add(id)
diff --git a/frontends/primitivus/primitivus b/frontends/primitivus/primitivus
index b6726861..52f592e7 100755
--- a/frontends/primitivus/primitivus
+++ b/frontends/primitivus/primitivus
@@ -28,6 +28,7 @@ import urwid
from profile_manager import ProfileManager
from contact_list import ContactList
from chat import Chat
+from gateways import GatewaysManager
import custom_widgets
import pdb
import logging
@@ -191,6 +192,7 @@ class PrimitivusApp(QuickApp):
menu.addMenu(contact, _("Remove contact"), self.onRemoveContactRequest)
communication = _("Communication")
menu.addMenu(communication, _("Join room"), self.onJoinRoomRequest, 'meta j')
+ menu.addMenu(communication, _("Find Gateways"), self.onFindGatewaysRequest, 'meta g')
#additionals menus
#FIXME: do this in a more generic way (in quickapp)
add_menus = self.bridge.getMenus()
@@ -316,12 +318,30 @@ class PrimitivusApp(QuickApp):
misc = {}
#FIXME FIXME FIXME: must clean all this crap !
title = _('Form')
- if data['type'] == _('registration'):
+ if data['type'] == 'registration':
title = _('Registration')
misc['target'] = data['target']
misc['action_back'] = self.bridge.gatewayRegister
ui = XMLUI(self, title=title, xml_data = data['xml'], misc = misc)
- self.addWindow(ui)
+ if data['type'] == 'registration':
+ ui.show('popup')
+ else:
+ ui.show('window')
+ elif type == "ERROR":
+ self.current_action_ids.remove(id)
+ self.showPopUp(custom_widgets.Alert(_("Error"), unicode(data["message"]), ok_cb=self.removePopUp)) #FIXME: remove unicode here when DBus Bridge will no return dbus.String anymore
+ elif type == "RESULT":
+ self.current_action_ids.remove(id)
+ if self.current_action_ids_cb.has_key(id):
+ callback = self.current_action_ids_cb[id]
+ del self.current_action_ids_cb[id]
+ callback(data)
+ elif type == "DICT_DICT":
+ self.current_action_ids.remove(id)
+ if self.current_action_ids_cb.has_key(id):
+ callback = self.current_action_ids_cb[id]
+ del self.current_action_ids_cb[id]
+ callback(data)
else:
error (_("FIXME FIXME FIXME: type [%s] not implemented") % type)
raise NotImplementedError
@@ -335,7 +355,7 @@ class PrimitivusApp(QuickApp):
else:
message = _("'%s' is an invalid JID !") % room_jid
error (message)
- custom_widgets.Alert(_("Error"), message, ok_cb=self.removePopUp)
+ self.showPopUp(custom_widgets.Alert(_("Error"), message, ok_cb=self.removePopUp))
def onAddContact(self, button, edit):
self.removePopUp()
@@ -345,14 +365,14 @@ class PrimitivusApp(QuickApp):
else:
message = _("'%s' is an invalid JID !") % jid
error (message)
- custom_widgets.Alert(_("Error"), message, ok_cb=self.removePopUp)
+ self.showPopUp(custom_widgets.Alert(_("Error"), message, ok_cb=self.removePopUp))
def onRemoveContact(self, button):
self.removePopUp()
info(_("Unsubscribing %s presence"),self.contactList.get_contact())
self.bridge.delContact(self.contactList.get_contact(), profile_key=self.profile)
- #Menu events#
+ #MENU EVENTS#
def onConnectRequest(self, menu):
self.bridge.connect(self.profile)
@@ -371,6 +391,12 @@ class PrimitivusApp(QuickApp):
pop_up_widget = custom_widgets.InputDialog(_("Entering a MUC room"), _("Please enter MUC's JID"), default_txt = 'test@conference.necton2.int', cancel_cb=self.removePopUp, ok_cb=self.onJoinRoom)
self.showPopUp(pop_up_widget)
+ def onFindGatewaysRequest(self, e):
+ debug(_("Find Gateways request"))
+ id = self.bridge.findGateways(self.profiles[self.profile]['whoami'].domain, self.profile)
+ self.current_action_ids.add(id)
+ self.current_action_ids_cb[id] = self.onGatewaysFound
+
def onAddContactRequest(self, menu):
pop_up_widget = custom_widgets.InputDialog(_("Adding a contact"), _("Please enter new contact JID"), default_txt = 'name@server.tld', cancel_cb=self.removePopUp, ok_cb=self.onAddContact)
self.showPopUp(pop_up_widget)
@@ -385,7 +411,15 @@ class PrimitivusApp(QuickApp):
def onAboutRequest(self, menu):
self.showPopUp(custom_widgets.Alert(_("About"), const_APP_NAME + " v" + self.bridge.getVersion(), ok_cb=self.removePopUp))
-
+
+ #MISC CALLBACKS#
+
+ def onGatewaysFound(self, data):
+ """Called when SàT has found the server gateways"""
+ target = data['__private__']['target']
+ del data['__private__']
+ gatewayManager = GatewaysManager(self, data, server=target)
+ self.addWindow(gatewayManager)
sat = PrimitivusApp()
sat.start()
diff --git a/frontends/primitivus/profile_manager.py b/frontends/primitivus/profile_manager.py
index dd52257e..787fe523 100644
--- a/frontends/primitivus/profile_manager.py
+++ b/frontends/primitivus/profile_manager.py
@@ -38,8 +38,6 @@ class ProfileManager(urwid.WidgetWrap):
self.list_profile = List(profiles, style=['single'], align='center', on_click=self.onProfileChange)
- #toto = urwid.Padding(urwid.Text('toto'), align='center')
-
#new & delete buttons
buttons = [urwid.Button(_("New"), self.onNewProfile),
urwid.Button(_("Delete"), self.onDeleteProfile)]
diff --git a/frontends/quick_frontend/quick_gateways.py b/frontends/quick_frontend/quick_gateways.py
new file mode 100644
index 00000000..f9979138
--- /dev/null
+++ b/frontends/quick_frontend/quick_gateways.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+"""
+helper class for making 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 .
+"""
+
+
+
+
+class QuickGatewaysManager():
+
+
+ def __init__(self, host, gateways, title=_("Gateways manager"), server=None):
+ self.WARNING_MSG = _(u"""Be careful ! Gateways allow you to use an external IM (legacy IM), so you can see your contact as jabber contacts.
+But when you do this, all your messages go throught the external legacy IM server, it is a huge privacy issue (i.e.: all your messages throught the gateway can be monitored, recorded, analyzed by the external server, most of time a private company).""")
+ self.host = host
+
+ def getGatewayDesc(self, gat_type):
+ """Return a human readable description of gateway type
+ @param gat_type: type of gateway, as given by SàT"""
+ desc = _('Unknown IM')
+
+ if gat_type == 'irc':
+ desc = "Internet Relay Chat"
+ elif gat_type == 'xmpp':
+ desc = "XMPP"
+ elif gat_type == 'qq':
+ desc = "Tencent QQ"
+ elif gat_type == 'simple':
+ desc = "SIP/SIMPLE"
+ elif gat_type == 'icq':
+ desc = "ICQ"
+ elif gat_type == 'yahoo':
+ desc = "Yahoo! Messenger"
+ elif gat_type == 'gadu-gadu':
+ desc = "Gadu-Gadu"
+ elif gat_type == 'aim':
+ desc = "AOL Instant Messenger"
+ elif gat_type == 'msn':
+ desc = 'Windows Live Messenger'
+
+ return desc
diff --git a/frontends/wix/gateways.py b/frontends/wix/gateways.py
index ebeeca7b..eed64191 100644
--- a/frontends/wix/gateways.py
+++ b/frontends/wix/gateways.py
@@ -26,15 +26,14 @@ import pdb
from xml.dom import minidom
from logging import debug, info, error
from tools.jid import JID
+from quick_frontend.quick_gateways import QuickGatewaysManager
-WARNING_MSG = _(u"""Be careful ! Gateways allow you to use an external IM (legacy IM), so you can see your contact as jabber contacts.
-But when you do this, all your messages go throught the external legacy IM server, it is a huge privacy issue (i.e.: all your messages throught the gateway can be monitored, recorded, analyzed by the external server, most of time a private company).""")
+class GatewaysManager(wx.Frame,QuickGatewaysManager):
-class GatewaysManager(wx.Frame):
def __init__(self, host, gateways, title=_("Gateways manager"), server=None):
- super(GatewaysManager, self).__init__(None, title=title)
+ wx.Frame.__init__(self, None, title=title)
+ QuickGatewaysManager.__init__(self, host, gateways, server)
- self.host = host
if server:
self.SetTitle(title+" (%s)" % server)
@@ -49,7 +48,7 @@ class GatewaysManager(wx.Frame):
self.ctl_list = {} # usefull to access ctrl, key = (name, category)
self.sizer = wx.BoxSizer(wx.VERTICAL)
- warning = wx.TextCtrl(self, -1, value=WARNING_MSG, style = wx.TE_MULTILINE |
+ warning = wx.TextCtrl(self, -1, value=self.WARNING_MSG, style = wx.TE_MULTILINE |
wx.TE_READONLY |
wx.TE_LEFT)
warning.SetFont(self.bold_font)
@@ -113,8 +112,6 @@ class GatewaysManager(wx.Frame):
def addGateway(self, gateway, param):
-
-
#First The icon
isz = (16,16)
@@ -126,29 +123,7 @@ class GatewaysManager(wx.Frame):
label.SetFont(self.normal_font)
#Then the transport type message
-
- type_label_txt = _('Unknown IM')
-
- if param['type'] == 'irc':
- type_label_txt = "Internet Relay Chat"
- elif param['type'] == 'xmpp':
- type_label_txt = "XMPP"
- elif param['type'] == 'qq':
- type_label_txt = "Tencent QQ"
- elif param['type'] == 'simple':
- type_label_txt = "SIP/SIMPLE"
- elif param['type'] == 'icq':
- type_label_txt = "ICQ"
- elif param['type'] == 'yahoo':
- type_label_txt = "Yahoo! Messenger"
- elif param['type'] == 'gadu-gadu':
- type_label_txt = "Gadu-Gadu"
- elif param['type'] == 'aim':
- type_label_txt = "AOL Instant Messenger"
- elif param['type'] == 'msn':
- type_label_txt = 'Windows Live Messenger'
-
- type_label_txt = type_label_txt
+ type_label_txt = self.getGatewayDesc(param['type'])
type_label = wx.StaticText(self.panel, -1, type_label_txt)
type_label.SetFont(self.italic_font)