~sdague/onehundredscopes/unity-lens-nx

« back to all changes in this revision

Viewing changes to src/unity-lens-nx

  • Committer: Sean Dague
  • Date: 2012-05-06 15:32:16 UTC
  • Revision ID: sean@dague.net-20120506153216-6eka0e491fkniiz2
added first drop of nx lens for unity

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#! /usr/bin/python
 
2
 
 
3
#    Copyright (c) 2011 David Calle <davidc@framli.eu>
 
4
 
 
5
#    This program is free software: you can redistribute it and/or modify
 
6
#    it under the terms of the GNU General Public License as published by
 
7
#    the Free Software Foundation, either version 3 of the License, or
 
8
#    (at your option) any later version.
 
9
 
 
10
#    This program is distributed in the hope that it will be useful,
 
11
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
#    GNU General Public License for more details.
 
14
 
 
15
#    You should have received a copy of the GNU General Public License
 
16
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
17
 
 
18
import sys
 
19
import os
 
20
import glob
 
21
from gi.repository import GLib, GObject, Gio
 
22
from gi.repository import Dee
 
23
from gi.repository import Unity
 
24
import urllib2
 
25
import simplejson
 
26
import locale
 
27
import datetime
 
28
 
 
29
BUS_NAME = "net.launchpad.lens.nx"
 
30
 
 
31
class Daemon:
 
32
 
 
33
    def __init__ (self):
 
34
        self.error_connect = False
 
35
        # The path for the Lens *must* also match the one in our .lens file
 
36
        self._lens = Unity.Lens.new ("/net/launchpad/lens/nx", "nx")
 
37
        self._scope = Unity.Scope.new ("/net/launchpad/lens/nx/main")
 
38
        self._scope.search_in_global = True
 
39
 
 
40
        self._lens.props.search_hint = "Search Nx"
 
41
        self._lens.props.visible = True;
 
42
        self._lens.props.search_in_global = True;
 
43
        self._lens.props.sources_display_name = ("NX Configs")
 
44
 
 
45
 
 
46
        self._lens.add_local_scope (self._scope);
 
47
        self._scope.connect("search-changed", self.on_search_changed)
 
48
        svg_dir = "/usr/share/icons/unity-icon-theme/places/svg/"
 
49
 
 
50
        # Populate categories
 
51
        cats = []
 
52
        cats.append (Unity.Category.new ("NX Sessions",
 
53
                                         Gio.ThemedIcon.new(svg_dir+"group-installed.svg"),
 
54
                                         Unity.CategoryRenderer.VERTICAL_TILE))
 
55
        self._lens.props.categories = cats
 
56
 
 
57
        locale.setlocale(locale.LC_MESSAGES, '')
 
58
        loc = locale.getlocale(locale.LC_MESSAGES)[0].split("_")[0]
 
59
 
 
60
        self._lens.export ();
 
61
        self._scope.export ();
 
62
 
 
63
 
 
64
    def on_search_changed (self, scope, search, search_type, *_):
 
65
        #        if search_type is Unity.SearchType.DEFAULT:
 
66
        search_string = search.props.search_string.strip()
 
67
        print "Search changed to \"%s\"" % search_string
 
68
        model = search.props.results_model
 
69
        model.clear()
 
70
        self.update_results_model(model, search_string)
 
71
        search.set_reply_hint ("no-results-hint", GLib.Variant.new_string("Sorry, there are no articles that match your search."))
 
72
        search.finished()
 
73
 
 
74
    def update_results_model (self, model, search):
 
75
        if search == '':
 
76
            return
 
77
 
 
78
        files = glob.glob("%s/.nx/config/*%s*.nxs" % (os.environ["HOME"], search))
 
79
 
 
80
        for config in files:
 
81
            model.append("file://%s" % config,
 
82
                         "file:///usr/NX/share/icons/48x48/nxclient-icon.png",
 
83
                         0,
 
84
                         "text/html",
 
85
                         os.path.splitext(os.path.basename(config))[0],
 
86
                         "NX Config",
 
87
                         "file://%s" % config,
 
88
                         )
 
89
 
 
90
if __name__ == "__main__":
 
91
    session_bus_connection = Gio.bus_get_sync (Gio.BusType.SESSION, None)
 
92
    session_bus = Gio.DBusProxy.new_sync (session_bus_connection, 0, None,
 
93
                                          'org.freedesktop.DBus',
 
94
                                          '/org/freedesktop/DBus',
 
95
                                          'org.freedesktop.DBus', None)
 
96
    result = session_bus.call_sync('RequestName',
 
97
                                   GLib.Variant ("(su)", (BUS_NAME, 0x4)),
 
98
                                   0, -1, None)
 
99
 
 
100
    # Unpack variant response with signature "(u)". 1 means we got it.
 
101
    result = result.unpack()[0]
 
102
 
 
103
    if result != 1 :
 
104
        print >> sys.stderr, "Failed to own name %s. Bailing out." % BUS_NAME
 
105
        raise SystemExit (1)
 
106
 
 
107
    daemon = Daemon()
 
108
    GObject.MainLoop().run()