summaryrefslogtreecommitdiffstats
path: root/plugins/gnometerminal.py
blob: 01fd83ff7dd473dac859893c113d590804d3fcda (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# -*- 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 <b>%s</b>.\nPlease enter your <b>login</b>:") % (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):
        if use_host_names == True:
            address = hostname
        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()