diff --git a/bottles/frontend/details_dependencies_view.py b/bottles/frontend/details_dependencies_view.py index 30e8412c4d8..fdff608eace 100644 --- a/bottles/frontend/details_dependencies_view.py +++ b/bottles/frontend/details_dependencies_view.py @@ -15,7 +15,11 @@ # along with this program. If not, see . # -import time +import pycurl + +from io import BytesIO + +from bottles.backend.utils import yaml from gi.repository import Gtk, GLib, Adw @@ -110,27 +114,36 @@ def new_dependency(dependency, plain=False): self.list_dependencies.append(entry) @GtkUtils.run_in_main_loop - def callback(_result, _error=False): - self.stack.set_visible_child_name("page_deps") + def callback(result, *_args): + if result is not False: + self.stack.set_visible_child_name("page_deps") + else: + self.stack.set_visible_child_name("page_offline") def process_dependencies(): - time.sleep(0.3) # workaround for freezing bug on bottle load - EventManager.wait(Events.DependenciesOrganizing) - dependencies = self.manager.supported_dependencies + self.manager.supported_dependencies + + buffer = BytesIO() + + curl = pycurl.Curl() + curl.setopt( + curl.URL, "https://proxy.usebottles.com/repo/dependencies/index.yml" + ) + curl.setopt(curl.FOLLOWLOCATION, True) + curl.setopt(curl.WRITEDATA, buffer) - GLib.idle_add(self.empty_list) + try: + curl.perform() + except pycurl.error: + curl.close() + return False - if len(dependencies.keys()) > 0: - for dep in dependencies.items(): - if dep[0] in self.config.Installed_Dependencies: - continue # Do not list already installed dependencies + curl.close() - GLib.idle_add(new_dependency, dep) + index = yaml.load(buffer.getvalue()) - if len(self.config.Installed_Dependencies) > 0: - for dep in self.config.Installed_Dependencies: - if dep in dependencies: - dep = (dep, dependencies[dep]) - GLib.idle_add(new_dependency, dep, plain=True) + for dependency in sorted(index.items()): + is_installed = dependency[0] in self.config.Installed_Dependencies + GLib.idle_add(new_dependency, dependency, plain=is_installed) RunAsync(process_dependencies, callback=callback)