clan_vm_manager: Fix dynamic join

This commit is contained in:
Luis Hebendanz 2024-03-03 13:50:49 +07:00
parent 6f80cee971
commit c6a2db15a7
4 changed files with 29 additions and 20 deletions

View File

@ -4,7 +4,9 @@ from typing import Any, ClassVar
import gi
from clan_cli.clan_uri import ClanURI
from clan_cli.history.add import add_history
from clan_cli.history.add import HistoryEntry, add_history
from clan_vm_manager.models.use_vms import VMs
gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
@ -21,6 +23,7 @@ class JoinValue(GObject.Object):
}
url: ClanURI
entry: HistoryEntry | None
def _join_finished(self) -> bool:
self.emit("join_finished", self)
@ -29,9 +32,11 @@ class JoinValue(GObject.Object):
def __init__(self, url: ClanURI) -> None:
super().__init__()
self.url = url
self.entry = None
def __join(self) -> None:
add_history(self.url, all_machines=False)
new_entry = add_history(self.url)
self.entry = new_entry
GLib.idle_add(self._join_finished)
def join(self) -> None:
@ -79,6 +84,7 @@ class JoinList:
def _on_join_finished(self, _source: GObject.Object, value: JoinValue) -> None:
log.info(f"Join finished: {value.url}")
self.discard(value)
VMs.use().push_history_entry(value.entry)
def discard(self, value: JoinValue) -> None:
(has, idx) = self.list_store.find(value)

View File

@ -18,6 +18,8 @@ from clan_cli.errors import ClanError
from clan_cli.history.add import HistoryEntry
from clan_cli.machines.machines import Machine
from clan_vm_manager import assets
from .executor import MPProcess, spawn
from .gkvstore import GKVStore
@ -342,6 +344,22 @@ class VMs:
def clan_store(self) -> GKVStore[str, VMStore]:
return self._clan_store
def create_vm_task(self, vm: HistoryEntry) -> bool:
self.push_history_entry(vm)
return GLib.SOURCE_REMOVE
def push_history_entry(self, entry: HistoryEntry) -> None:
if entry.flake.icon is None:
icon = assets.loc / "placeholder.jpeg"
else:
icon = entry.flake.icon
vm = VM(
icon=Path(icon),
data=entry,
)
self.push(vm)
def push(self, vm: VM) -> None:
url = vm.data.flake.flake_url

View File

@ -223,8 +223,8 @@ class ClanList(Gtk.Box):
log.debug("Join request: %s", url)
clan_uri = ClanURI.from_str(url)
value = JoinValue(url=clan_uri)
value.connect("join_finished", self.on_after_join)
JoinList.use().push(value)
value.connect("join_finished", self.on_after_join)
def on_after_join(self, source: JoinValue, item: JoinValue) -> None:
# If the join request list is empty disable the shadow artefact

View File

@ -1,15 +1,13 @@
import logging
import threading
from pathlib import Path
from typing import Any
import gi
from clan_cli.history.list import list_history
from clan_vm_manager import assets
from clan_vm_manager.models.interfaces import ClanConfig
from clan_vm_manager.models.use_views import Views
from clan_vm_manager.models.use_vms import VM, VMs
from clan_vm_manager.models.use_vms import VMs
from clan_vm_manager.views.details import Details
from clan_vm_manager.views.list import ClanList
@ -61,24 +59,11 @@ class MainWindow(Adw.ApplicationWindow):
self.connect("destroy", self.on_destroy)
def push_vm(self, vm: VM) -> bool:
VMs.use().push(vm)
return GLib.SOURCE_REMOVE
def _populate_vms(self) -> None:
# Execute `clan flakes add <path>` to democlan for this to work
# TODO: Make list_history a generator function
for entry in list_history():
if entry.flake.icon is None:
icon = assets.loc / "placeholder.jpeg"
else:
icon = entry.flake.icon
vm = VM(
icon=Path(icon),
data=entry,
)
GLib.idle_add(self.push_vm, vm)
GLib.idle_add(VMs.use().create_vm_task, entry)
def on_destroy(self, *_args: Any) -> None:
self.tray_icon.destroy()