summaryrefslogtreecommitdiffstats
path: root/plugins/quickopen/quickopen/virtualdirs.py
blob: 531ab330276e2ad72f8c04cfcbff2784d989b9d1 (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
# -*- coding: utf-8 -*-

#  Copyright (C) 2009 - Jesse van den Kieboom
#
#  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 2 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/>.

from gi.repository import GLib, Gio, Gtk


class VirtualDirectory(object):
    def __init__(self, name):
        self._name = name
        self._children = []

    def get_uri(self):
        return 'virtual://' + self._name

    def get_parent(self):
        return None

    def enumerate_children(self, attr, flags, callback):
        return self._children

    def append(self, child):
        if not child.is_native():
            return

        try:
            info = child.query_info("standard::*",
                                    Gio.FileQueryInfoFlags.NONE,
                                    None)

            if info:
                self._children.append((child, info))
        except Exception as e:
            pass


class RecentDocumentsDirectory(VirtualDirectory):
    def __init__(self, maxitems=200):
        VirtualDirectory.__init__(self, 'recent')

        self._maxitems = maxitems
        self.fill()

    def fill(self):
        manager = Gtk.RecentManager.get_default()

        items = manager.get_items()
        items.sort(key=lambda a: a.get_visited(), reverse=True)

        added = 0

        for item in items:
            if item.has_application(GLib.get_application_name()):
                self.append(Gio.file_new_for_uri(item.get_uri()))
                added += 1

                if added >= self._maxitems:
                    break


class CurrentDocumentsDirectory(VirtualDirectory):
    def __init__(self, window):
        VirtualDirectory.__init__(self, 'documents')

        self.fill(window)

    def fill(self, window):
        for doc in window.get_documents():
            location = doc.get_file().get_location()

            if location:
                self.append(location)

# ex:ts=4:et: