From 5ce17adcb1ff31ffdc2618fcf4788beecc1e1ff8 Mon Sep 17 00:00:00 2001 From: Sebastien Estienne Date: Sat, 19 Nov 2005 00:33:52 +0000 Subject: * added a the begining of a proper plugin architecture git-svn-id: file:///home/lennart/svn/public/service-discovery-applet/trunk@80 3be567f1-68ff-0310-b24a-ad7cc433fd2f --- plugins/gnometerminal.py | 126 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 plugins/gnometerminal.py (limited to 'plugins/gnometerminal.py') diff --git a/plugins/gnometerminal.py b/plugins/gnometerminal.py new file mode 100644 index 0000000..d97a320 --- /dev/null +++ b/plugins/gnometerminal.py @@ -0,0 +1,126 @@ +# -*- 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 * + +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 os + import pwd + import subprocess + import gnome +except ImportError, e: + error_msg(_("A required python module is missing!\n%s") % (e)) + sys.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, name, stype, hostname, address, port, txts): + print "connecting using gnometerminal" + if txts.has_key("u"): + username = self.SshLogin(name, txts["u"]) + else: + username = self.SshLogin(name) + + + if stype == "_ssh._tcp": + scheme = "ssh" + else: + scheme = "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 = [] + cmdline.append("gnome-terminal") + cmdline.append("--tab") + cmdline.append("-t %s" % name) + cmdline.append("-e %s" % sshline) + print cmdline + pid = subprocess.Popen(cmdline).pid + +def load(): + return plugin_gnometerminal() -- cgit