~ps-jenkins/unity-scope-gdrive/latestsnapshot-0.8daily13.05.07ubuntu.unity.experimental.certified-0ubuntu1

« back to all changes in this revision

Viewing changes to unity-scope-gdrive

  • Committer: David Callé
  • Date: 2013-03-12 14:17:26 UTC
  • Revision ID: davidc@framli.eu-20130312141726-61f7h2j6lj8h97wf
Add Filters, Categories and make multiple type filters work again

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
from gi.repository import Unity, UnityExtras
15
15
 
16
16
from datetime import datetime, timedelta
 
17
import gettext
17
18
import time
18
19
 
 
20
APP_NAME = "unity-scope-gdrive"
 
21
LOCAL_PATH = "/usr/share/locale/"
 
22
 
 
23
gettext.bindtextdomain(APP_NAME, LOCAL_PATH)
 
24
gettext.textdomain(APP_NAME)
 
25
_ = gettext.gettext
 
26
 
19
27
#
20
28
# The primary bus name we grab *must* match what we specify in our .scope file
21
29
#
28
36
    "drawing": "images",
29
37
    "presentation": "presentations"
30
38
}
31
 
 
 
39
THEME = "/usr/share/icons/unity-icon-theme/places/svg/"
32
40
 
33
41
class Daemon:
34
42
 
57
65
    # Fitler, as we re-do the search anyway, this catch-all signal is perfect for
58
66
    # us.
59
67
    self._scope.connect ("notify::filtering", self._on_filters_or_preferences_changed);
 
68
    
 
69
    filters = Unity.FilterSet.new()
 
70
    f = Unity.RadioOptionFilter.new ("modified", _("Last modified"), Gio.ThemedIcon.new("input-keyboard-symbolic"), False)
 
71
    f.add_option ("last-7-days", _("Last 7 days"), None)
 
72
    f.add_option ("last-30-days", _("Last 30 days"), None)
 
73
    f.add_option ("last-year", _("Last year"), None);
 
74
    filters.add(f)
 
75
    f2 = Unity.CheckOptionFilter.new ("type", _("Type"), Gio.ThemedIcon.new("input-keyboard-symbolic"), False)
 
76
    f2.add_option ("documents", _("Documents"), None)
 
77
    f2.add_option ("folders", _("Folders"), None)
 
78
    f2.add_option ("images", _("Images"), None)
 
79
    f2.add_option ("audio", _("Audio"), None)
 
80
    f2.add_option ("videos", _("Videos"), None)
 
81
    f2.add_option ("presentations", _("Presentations"), None)
 
82
    f2.add_option ("other", _("Other"), None)
 
83
    filters.add (f2)
 
84
    self._scope.props.filters = filters
 
85
    cats = Unity.CategorySet.new()
 
86
    cats.add (Unity.Category.new ('global',
 
87
                                  _("Files & Folders"),
 
88
                                  Gio.ThemedIcon.new(THEME + "group-folders.svg"),
 
89
                                  Unity.CategoryRenderer.VERTICAL_TILE))
 
90
    cats.add (Unity.Category.new ('recent',
 
91
                                  _("Recent"),
 
92
                                  Gio.ThemedIcon.new(THEME + "group-recent.svg"),
 
93
                                  Unity.CategoryRenderer.VERTICAL_TILE))
 
94
    cats.add (Unity.Category.new ('downloads',
 
95
                                  _("Downloads"),
 
96
                                  Gio.ThemedIcon.new(THEME + "group-downloads.svg"),
 
97
                                  Unity.CategoryRenderer.VERTICAL_TILE))
 
98
    cats.add (Unity.Category.new ('folders',
 
99
                                  _("Folders"),
 
100
                                  Gio.ThemedIcon.new(THEME + "group-folders.svg"),
 
101
                                  Unity.CategoryRenderer.VERTICAL_TILE))
 
102
    self._scope.props.categories = cats
60
103
    self._scope.export()
61
104
 
62
105
  def _on_enabled_event (self, account_manager, account_id):
179
222
      rtype = entry.get_resource_id().split(":")[0]
180
223
 
181
224
      if is_global:
182
 
        category = 1
 
225
        category = 0
183
226
      else:
184
227
        if rtype == "folder":
185
228
          category = 3
186
229
        else:
187
 
          category = 0
 
230
          category = 1
188
231
 
189
232
      model.append(uri=entry.look_up_link(GData.LINK_ALTERNATE).get_uri(),
190
233
                   icon_hint=self.icon_for_type(rtype),
234
277
          last_time = datetime.now() - timedelta(age)
235
278
          query.set_updated_min(time.mktime(last_time.timetuple()))
236
279
 
237
 
  def filter_results (self, entry, s):
 
280
  def filter_results (self, feed, s):
238
281
    f = s.get_filter("type")
239
 
    if not f: return entry
240
 
 
 
282
    if not f: return feed
241
283
    if not f.props.filtering:
242
 
      return entry
243
 
 
244
 
    rtype = entry.get_resource_id().split(":")[0]
245
 
 
246
 
    filter_type = TYPE_MAP.get(rtype, "other")
247
 
    return f.get_option(filter_type).props.active
 
284
      return feed
 
285
    r = []
 
286
    for entry in feed:
 
287
        rtype = entry.get_resource_id().split(":")[0]
 
288
        filter_type = TYPE_MAP.get(rtype, "other")
 
289
        if f.get_option(filter_type).props.active:
 
290
            r.append(entry)
 
291
    return r
248
292
 
249
293
  # Send back a useful icon depending on the document type
250
294
  def icon_for_type (self, doc_type):