From 27c6fade238336c61a5a01d22fe767bf664ca010 Mon Sep 17 00:00:00 2001 From: Sebastien Estienne Date: Sun, 6 Aug 2006 23:52:31 +0000 Subject: display error messages when something goes wrong in plugins git-svn-id: file:///home/lennart/svn/public/service-discovery-applet/trunk@115 3be567f1-68ff-0310-b24a-ad7cc433fd2f --- plugins/gconfterminal.py.in | 132 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 plugins/gconfterminal.py.in (limited to 'plugins/gconfterminal.py.in') diff --git a/plugins/gconfterminal.py.in b/plugins/gconfterminal.py.in new file mode 100644 index 0000000..8dbaef8 --- /dev/null +++ b/plugins/gconfterminal.py.in @@ -0,0 +1,132 @@ +# -*- coding: UTF-8 -*- +# -*- python -*- +# Copyright (C) 2005 by Sebastien Estienne +# +# This file may be distributed and/or modified under the terms of +# the GNU General Public License version 2 as published by +# the Free Software Foundation. +# This file is distributed without any warranty; without even the implied +# warranty of merchantability or fitness for a particular purpose. +# See "COPYING" in the source distribution for more information. +# +# $Id$ +# + +from sdapplet.pluginutils import * + +import os +import pwd +import subprocess + +try: + import gettext + gettext.bindtextdomain("service-discovery-applet", "/usr/share/locale") + gettext.textdomain("service-discovery-applet") + _ = gettext.gettext + import pygtk + pygtk.require('2.0') + import gtk + import gconf + import gnome +except ImportError, e: + error_msg(_("A required python module is missing!\n%s") % (e)) + os._exit() + +class plugin_gnometerminal: + def __init__(self): + self.service_type = ["_ssh._tcp", "_sftp-ssh._tcp" ] + self.author = "Sébastien Estienne" + + def enter_callback(self, widget, win): + win.response(gtk.RESPONSE_OK) + + def SshLogin(self, hostname, username = None): + self.win = gtk.Dialog(_("SSH Connection"), None, + gtk.DIALOG_MODAL, + (gtk.STOCK_OK, gtk.RESPONSE_OK, + gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)) + + vbox = gtk.VBox(False, 5) + self.win.vbox.pack_start(vbox, True, True, 0) + vbox.set_border_width(5) + + label = gtk.Label() + label.set_markup(_("Connecting to %s.\nPlease enter your login:") % (hostname)) + + vbox.pack_start(label, False, False, 0) + + # Create our entry + entry = gtk.Entry() + if username!= None: + entry.set_text(username) + entry.connect("activate", self.enter_callback, self.win) + vbox.pack_start(entry, False, False, 0) + + # Create the completion object + completion = gtk.EntryCompletion() + + # Assign the completion to the entry + entry.set_completion(completion) + + # Create a tree model and use it as the completion model + completion_model = self.__create_completion_model() + completion.set_model(completion_model) + + # Use model column 0 as the text column + completion.set_text_column(0) + + self.win.show_all() + if self.win.run() == gtk.RESPONSE_OK: + self.win.destroy() + return entry.get_text() + else: + self.win.destroy() + return None + + def __create_completion_model(self): + ''' Creates a tree model containing the completions. + ''' + store = gtk.ListStore(str) + + iter = store.append() + store.set(iter, 0, "root") + + current_user = pwd.getpwuid(os.getuid())[0] + iter = store.append() + store.set(iter, 0, current_user) + + return store + + def connect(self, use_host_names, name, stype, hostname, address, port, txts): + try: + terminal = gconf.client_get_default().get_string ("/desktop/gnome/applications/terminal/exec") + terminal = terminal + " " + gconf.client_get_default().get_string ("/desktop/gnome/applications/terminal/exec_arg") + except: + terminal = "gnome-terminal -x" + if use_host_names == True: + address = hostname + print "connecting using %s" % (terminal) + if txts.has_key("u"): + username = self.SshLogin(name, txts["u"]) + else: + username = self.SshLogin(name) + + + if stype == "_ssh._tcp": + scheme = "@toolsdir@/exec_wrapper ssh -X" + else: + scheme = "@toolsdir@/exec_wrapper sftp" + if username == None: + return + elif username != "": + sshline = "%s -p %i %s@%s" % (scheme, port, username, address) + else: + sshline = "%s -p %i %s " % (scheme, port, address) + + cmdline = terminal.split(" ") + cmdline.extend(sshline.split(" ")) + print cmdline + subprocess.Popen(cmdline) + +def load(): + return plugin_gnometerminal() -- cgit