aboutsummaryrefslogtreecommitdiff
path: root/src/background_loader.rs
diff options
context:
space:
mode:
authorpablu <me@pablu.de>2026-06-03 10:47:59 +0200
committerpablu <me@pablu.de>2026-06-03 10:47:59 +0200
commitc5a634bd5408ea5174035abf8713953e7fc48e08 (patch)
treef41267354ca791dbe437a206935f5004e29a4a97 /src/background_loader.rs
parent92b39b19a1c50f9462f7b0b99e8013abf672c533 (diff)
Implement PackageLoader, just for available packages right now
Diffstat (limited to 'src/background_loader.rs')
-rw-r--r--src/background_loader.rs47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/background_loader.rs b/src/background_loader.rs
new file mode 100644
index 0000000..ea9d331
--- /dev/null
+++ b/src/background_loader.rs
@@ -0,0 +1,47 @@
+use std::{
+ sync::mpsc::{Receiver, channel},
+ thread,
+};
+
+use crate::gentoo::{package::Package, portage_loader::load_available_packages};
+
+pub enum LoaderMessage {
+ Loading,
+ Complete(Vec<Package>),
+ Error(String),
+}
+
+#[derive(Debug)]
+pub struct PackageLoader {
+ receiver: Receiver<LoaderMessage>,
+ thread_handle: thread::JoinHandle<()>,
+}
+
+impl PackageLoader {
+ pub fn spawn() -> Self {
+ let (tx, rx) = channel();
+ let thread_handle = thread::spawn(move || {
+ let _ = tx.send(LoaderMessage::Loading);
+
+ match load_available_packages() {
+ Ok(packages) => {
+ let _ = tx.send(LoaderMessage::Complete(packages));
+ }
+ Err(e) => {
+ let _ = tx.send(LoaderMessage::Error(e.to_string()));
+ }
+ }
+ });
+
+ PackageLoader {
+ receiver: rx,
+ thread_handle,
+ }
+ }
+
+ pub fn try_recv(&self) -> Option<LoaderMessage> {
+ self.receiver.try_recv().ok()
+ }
+
+ //TODO: join thread back to main thread after packages were loaded
+}