Skip to content

Commit

Permalink
Fetch servers in the background
Browse files Browse the repository at this point in the history
  • Loading branch information
Ketok4321 committed Aug 17, 2023
1 parent ae1c2d5 commit 5b5ebe6
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 16 deletions.
34 changes: 19 additions & 15 deletions src/main.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import sys
import gi
import asyncio
import threading

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
Expand Down Expand Up @@ -32,19 +33,25 @@ def do_activate(self):
self.win = SpeedtestWindow(application=self)
self.win.present()

if not self.fetch_servers():
self.win.view_switcher.set_visible_child(self.win.offline_view)
thread = threading.Thread(target=self.fetch_servers, daemon=True)
thread.start()

def fetch_servers(self):
GLib.idle_add(self.win.set_view, self.win.loading_view)

try:
event_loop = asyncio.new_event_loop()

while self.servers == None or len(self.servers) == 0: # A proper fix would probably be better but this works too
self.servers = asyncio.get_event_loop().run_until_complete(get_servers())
self.servers = event_loop.run_until_complete(get_servers())

event_loop.close()

GLib.idle_add(self.win.start_view.server_selector.set_model, Gtk.StringList.new(list(map(lambda s: s.name, self.servers))))
GLib.idle_add(self.win.set_view, self.win.start_view)
except Exception as e:
print(e)
return False

self.win.start_view.server_selector.set_model(Gtk.StringList.new(list(map(lambda s: s.name, self.servers))))
return True
GLib.idle_add(self.win.set_view, self.win.offline_view)

def on_about_action(self, widget, _): #TODO: Credit librespeed
about = Adw.AboutWindow(transient_for=self.props.active_window,
Expand All @@ -57,8 +64,7 @@ def on_about_action(self, widget, _): #TODO: Credit librespeed
about.present()

def on_start_action(self, widget, _):
self.win.view_switcher.set_visible_child(self.win.test_view)
self.win.back_button.set_visible(True)
self.win.set_view(self.win.test_view)

server = self.servers[self.win.start_view.server_selector.get_selected()]

Expand All @@ -71,14 +77,12 @@ def on_start_action(self, widget, _):
def on_back_action(self, widget, _):
self.worker.stop_event.set()

self.win.view_switcher.set_visible_child(self.win.start_view)
self.win.back_button.set_visible(False)
self.win.set_view(self.win.start_view)

def on_retry_connect_action(self, widget, _):
if self.fetch_servers():
self.win.view_switcher.set_visible_child(self.win.start_view)
else:
self.win.offline_view.toast_overlay.add_toast(Adw.Toast.new("Couldn't reconnect"))
thread = threading.Thread(target=self.fetch_servers, daemon=True)
thread.start()
#self.win.offline_view.toast_overlay.add_toast(Adw.Toast.new("Couldn't reconnect"))

def create_action(self, name, callback, shortcuts=None):
action = Gio.SimpleAction.new(name, None)
Expand Down
13 changes: 12 additions & 1 deletion src/ui/window.blp
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,19 @@ template $SpeedtestWindow : Adw.ApplicationWindow {
}

Stack view_switcher { //TODO: Consider using Adw.Leaflet/Adw.NavigationView
transition-type: slide_up_down;
//transition-type: slide_up_down;

Box loading_view {
Spinner {
spinning: true;
width-request: 32;
height-request: 32;
valign: center;
halign: center;
vexpand: true;
hexpand: true;
}
}
$StartView start_view { }
$TestView test_view { }
$OfflineView offline_view { }
Expand Down
8 changes: 8 additions & 0 deletions src/window.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,20 @@ class SpeedtestWindow(Adw.ApplicationWindow):

view_switcher = Gtk.Template.Child()

loading_view = Gtk.Template.Child()
start_view = Gtk.Template.Child()
test_view = Gtk.Template.Child()
offline_view = Gtk.Template.Child()

def __init__(self, **kwargs):
super().__init__(**kwargs)

def set_view(self, view):
self.view_switcher.set_transition_type(Gtk.StackTransitionType.SLIDE_UP_DOWN if view == self.test_view or self.view_switcher.get_visible_child() == self.test_view else Gtk.StackTransitionType.CROSSFADE)

self.view_switcher.set_visible_child(view)

self.back_button.set_visible(view == self.test_view)

@Gtk.Template(resource_path="/xyz/ketok/Speedtest/ui/views/start.ui")
class StartView(Gtk.Box):
Expand Down

0 comments on commit 5b5ebe6

Please sign in to comment.