~davidc3/onehundredscopes/photo

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
#! /usr/bin/python
# -*- coding: latin-1 -*-

#    Copyright (c) 2011 David Calle <davidc@framli.eu>

#    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 <http://www.gnu.org/licenses/>.

import sys
import os
from gi.repository import GLib, GObject, Gio
from gi.repository import Dee
# FIXME: Some weird bug in Dee or PyGI makes Dee fail unless we probe
#        it *before* we import the Unity module... ?!
_m = dir(Dee.SequenceModel)
from gi.repository import Unity

#[1]
BUS_NAME = "net.launchpad.lens.photo"

class Daemon:

    def __init__ (self):
        # The path for the Lens *must* also match the one in our .lens file
        #[2]
        self._lens = Unity.Lens.new ("/net/launchpad/lens/photo", "photo")
        #[3]
        self._scope = Unity.Scope.new ("/net/launchpad/lens/photo/main")
        
        #[4]
        self._lens.props.search_hint = "Search Photos"
        #[5]
        self._lens.props.visible = True;
        #[6]
        self._lens.props.search_in_global = True;
        
        # Populate categories
        cats = []

        cats.append (Unity.Category.new ("Recent",
                                         Gio.ThemedIcon.new("/usr/share/icons/unity-icon-theme/places/svg/group-recent.svg"),
                                         Unity.CategoryRenderer.VERTICAL_TILE))
        cats.append (Unity.Category.new ("On this computer",
                                         Gio.ThemedIcon.new("/usr/share/icons/unity-icon-theme/places/svg/group-installed.svg"),
                                         Unity.CategoryRenderer.VERTICAL_TILE))
        cats.append (Unity.Category.new ("Online",
                                         Gio.ThemedIcon.new("/usr/share/icons/unity-icon-theme/places/svg/group-downloads.svg"),
                                         Unity.CategoryRenderer.VERTICAL_TILE))
        cats.append (Unity.Category.new ("Photos",
                                         Gio.ThemedIcon.new("/usr/share/unity/5/lens-nav-photo.svg"),
                                         Unity.CategoryRenderer.VERTICAL_TILE))

        self._lens.props.categories = cats
        
        # Populate filters
        filters = []
#        f = Unity.RadioOptionFilter.new ("events", "Recent events", Gio.ThemedIcon.new("input-keyboard-symbolic"), False)
#        f.add_option ("", "Noël", None)
#        f.add_option ("", "lundi 28 novembre 2011", None)
#        f.add_option ("", "Blabla", None)
#        f.add_option ("", "Blabla", None)
#        f.add_option ("", "Blabla", None)
#        f.add_option ("", "Blabla", None)
#        filters.append (f)
        
        f2 = Unity.RadioOptionFilter.new ("date", "Date", Gio.ThemedIcon.new("input-keyboard-symbolic"), False)
        f2.add_option ("7", "Last 7 days", None)
        f2.add_option ("30", "Last 30 days ", None)
        f2.add_option ("180", "Last 6 months", None)
        f2.add_option ("10000", "Older", None)

        filters.append (f2)
        
        f3 = Unity.RadioOptionFilter.new ("taken_by", "Taken by", Gio.ThemedIcon.new("input-keyboard-symbolic"), False)
        f3.add_option ("me", "Me", None)
        f3.add_option ("contacts", "Friends ", None)
        filters.append (f3)
        self._lens.props.filters = filters

        self._lens.export ();

if __name__ == "__main__":
    session_bus_connection = Gio.bus_get_sync (Gio.BusType.SESSION, None)
    session_bus = Gio.DBusProxy.new_sync (session_bus_connection, 0, None,
                                          'org.freedesktop.DBus',
                                          '/org/freedesktop/DBus',
                                          'org.freedesktop.DBus', None)
    result = session_bus.call_sync('RequestName',
                                   GLib.Variant ("(su)", (BUS_NAME, 0x4)),
                                   0, -1, None)
                                   
    # Unpack variant response with signature "(u)". 1 means we got it.
    result = result.unpack()[0]
    
    if result != 1 :
        print >> sys.stderr, "Failed to own name %s. Bailing out." % BUS_NAME
        raise SystemExit (1)
    
    daemon = Daemon()
    GObject.MainLoop().run()