@@ 117,9 117,11 @@ class Feed(ViewStackPage):
cb.set_center_widget(spinner)
self.inner.set_child(cb)
# long task
- results = self.instance.get_public_feed_content(self.feed.id)
+ self.results = self.instance.get_public_feed_content(self.feed.id)
+ GLib.idle_add(self.display)
+ def display(self):
# display results
- if len(results) == 0:
+ if len(self.results) == 0:
# show empty feed page
status = Adw.StatusPage()
status.set_title(_("*crickets chirping*"))
@@ 131,14 133,9 @@ class Feed(ViewStackPage):
scrollable = Adw.PreferencesGroup()
self.inner.set_child(scrollable)
app_settings = get_app_settings()
- for item in results:
+ for item in self.results:
scrollable.add(AdaptiveFeedItem(item, app_settings["show_images_in_browse"]))
-
- thread = None
def do_update(self):
- if not self.thread is None:
- # wait for old thread to finish
- self.thread.join()
self.thread = threading.Thread(target=self.update)
self.thread.daemon = True
self.thread.start()
@@ 161,6 158,16 @@ class BrowseServerScreen(Adw.NavigationPage):
return
url = self.instance.get_external_url()
Gtk.UriLauncher.new(uri=url).launch()
+ def render_feeds(self):
+ # runs on main
+ for feed in self.feeds:
+ widg = Feed(self.instance, feed)
+ widg.bind_to(self.view_stack)
+ def load_feeds(self):
+ # runs in thread
+ self.feeds = self.instance.get_public_feeds()
+ GLib.idle_add(self.render_feeds)
+
def __init__(self, id, window=None, *args, **kwargs):
super().__init__(*args, **kwargs)
server = get_servers_list()[id]
@@ 172,11 179,6 @@ class BrowseServerScreen(Adw.NavigationPage):
self.search = Search(self.instance)
self.search.bind_to(self.view_stack)
- self.feeds = self.instance.get_public_feeds()
- for feed in self.feeds:
- widg = Feed(self.instance, feed)
- widg.bind_to(self.view_stack)
-
# top bar
self.switcher = Adw.ViewSwitcher()
self.switcher.set_policy(Adw.ViewSwitcherPolicy.WIDE)
@@ 200,3 202,8 @@ class BrowseServerScreen(Adw.NavigationPage):
if not window is None:
window.breakpoint.add_setter(self.header_bar, "title-widget", Gtk.Box())
window.breakpoint.add_setter(self.bottom_bar, "reveal", True)
+
+ # start load_feeds thread
+ self.thread = threading.Thread(target=self.load_feeds)
+ self.thread.daemon = True
+ self.thread.start()