aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/app.rs8
-rw-r--r--src/background_loader.rs12
2 files changed, 16 insertions, 4 deletions
diff --git a/src/app.rs b/src/app.rs
index 6819bf0..d6dd71e 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -95,6 +95,12 @@ impl App {
// Fallback, primarly while implementing
_ => match key.code {
+ KeyCode::Char('r') => {
+ if !matches!(self.loading_state, LoadingState::Loading) {
+ self.start_available_packages_load();
+ }
+ None
+ }
KeyCode::Char('q') => Some(Signal::Quit),
KeyCode::Tab => Some(Signal::CycleTab),
_ => None,
@@ -123,12 +129,12 @@ impl App {
self.portage.available = packages;
self.loading_state = LoadingState::Complete;
- // TODO: Join loader thread with main thread again
self.available_loader = None;
}
crate::background_loader::LoaderMessage::Error(e) => {
self.loading_error = Some(e);
self.loading_state = LoadingState::Error;
+
self.available_loader = None;
}
}
diff --git a/src/background_loader.rs b/src/background_loader.rs
index ea9d331..111c943 100644
--- a/src/background_loader.rs
+++ b/src/background_loader.rs
@@ -14,7 +14,7 @@ pub enum LoaderMessage {
#[derive(Debug)]
pub struct PackageLoader {
receiver: Receiver<LoaderMessage>,
- thread_handle: thread::JoinHandle<()>,
+ thread_handle: Option<thread::JoinHandle<()>>,
}
impl PackageLoader {
@@ -35,13 +35,19 @@ impl PackageLoader {
PackageLoader {
receiver: rx,
- thread_handle,
+ thread_handle: Some(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
+impl Drop for PackageLoader {
+ fn drop(&mut self) {
+ if let Some(handle) = self.thread_handle.take() {
+ _ = handle.join();
+ }
+ }
}