File: sidebar.py

package info (click to toggle)
gnome-feeds 2.2.0-5
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 1,520 kB
  • sloc: python: 5,369; sh: 93; xml: 28; makefile: 2
file content (77 lines) | stat: -rw-r--r-- 2,411 bytes parent folder | download | duplicates (2)
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
from gi.repository import Gtk
from gfeeds.confManager import ConfManager
from gfeeds.feeds_manager import FeedsManager
from gfeeds.articles_listview import ArticlesListView, ArticlesListBox


class LoadingRevealer(Gtk.Revealer):
    def __init__(self):
        super().__init__(
            transition_type=Gtk.RevealerTransitionType.CROSSFADE,
            reveal_child=False, vexpand=False, hexpand=True,
            valign=Gtk.Align.START, halign=Gtk.Align.FILL
        )
        self.progress_bar = Gtk.ProgressBar(hexpand=True, vexpand=False)
        self.progress_bar.get_style_context().add_class('osd')
        self.set_child(self.progress_bar)

    def set_running(self, state: bool):
        self.set_reveal_child(state)

    def set_progress(self, progress: float):
        '''progress: float between 0.0 and 1.0'''

        self.progress_bar.set_fraction(progress)


class GFeedsSidebar(Gtk.Overlay):
    __gtype_name__ = 'GFeedsSidebar'

    def __init__(self):
        super().__init__()
        self.confman = ConfManager()
        self.feedman = FeedsManager()

        self.listview_sw = (
            ArticlesListView()
            if self.confman.nconf.use_experimental_listview
            else ArticlesListBox()
        )
        self.empty = self.listview_sw.empty
        self.populate = self.listview_sw.populate
        self.loading_revealer = LoadingRevealer()

        self.set_child(self.listview_sw)
        self.add_overlay(self.loading_revealer)

        self.feedman.connect(
            'feedmanager_refresh_start',
            self.on_refresh_start
        )
        self.feedman.connect(
            'feedmanager_refresh_end',
            self.on_refresh_end
        )
        self.feedman.connect(
            'feedmanager_feeds_loaded_changed',
            self.on_feeds_loaded_changed
        )

    def on_feeds_loaded_changed(self, _, progress: float):
        self.loading_revealer.set_progress(progress)

    def on_refresh_start(self, *_):
        self.loading_revealer.set_running(True)

    def on_refresh_end(self, *_):
        self.listview_sw.all_items_changed()
        self.loading_revealer.set_running(False)

    def set_search(self, search_term):
        self.listview_sw.set_search_term(search_term)

    def select_next_article(self, *_):
        self.listview_sw.select_next()

    def select_prev_article(self, *_):
        self.listview_sw.select_prev()