Skip to content

Commit 5a4c72e

Browse files
committed
Fix exported apps not being loaded
1 parent 4e844f8 commit 5a4c72e

3 files changed

Lines changed: 55 additions & 17 deletions

File tree

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
set -o pipefail >/dev/null 2>&1 # TODO: Join with the following (without piping), as it is part of POSIX 2022, but Debian 13 Trixie and Ubuntu 24.10 Oracular Oriole are the first releases with a `dash` version (>=0.5.12-7) supporting this flag. See also https://github.com/koalaman/shellcheck/issues/2555 and https://metadata.ftp-master.debian.org/changelogs/main/d/dash/stable_changelog
21
set -eu
32

43
base16FunctionDefinition="$(cat <<'EOF'
5-
base16() {
4+
base16() (
5+
set -eu;
66
if [ "$#" -eq 0 ]; then
77
cat
88
else
99
printf '%s' "$1"
1010
fi | od -vt x1 -A n | tr -d '[[:space:]]'
11-
}
11+
)
1212
EOF
1313
)"
1414

@@ -19,7 +19,7 @@ dumpDesktopFiles() {
1919
return
2020
fi
2121

22-
find "$1" -name '*.desktop' -not -exec grep -q '^[[:space:]]*NoDisplay[[:space:]]*=[[:space:]]*true[[:space:]]*$' '{}' \; -exec sh -c "$(set +o);$base16FunctionDefinition;"'printf '\''"%s"="%s"\n'\'' "$(base16 "$1")" "$(base16 <"$1")"' - '{}' \;
22+
find "$1" -name '*.desktop' -not -exec grep -q '^[[:space:]]*NoDisplay[[:space:]]*=[[:space:]]*true[[:space:]]*$' '{}' \; -exec sh -c "$base16FunctionDefinition;"'printf '\''"%s"="%s"\n'\'' "$(base16 "$1")" "$(base16 <"$1")"' - '{}' \;
2323
}
2424

2525
printf 'home_dir="%s"\n' "$(base16 "$HOME")"
@@ -28,4 +28,6 @@ printf '[system]\n'
2828
dumpDesktopFiles /usr/share/applications
2929

3030
printf '[user]\n'
31-
dumpDesktopFiles "$HOME/.local/share/applications"
31+
dumpDesktopFiles "$HOME/.local/share/applications"
32+
33+
set +eu

src/dialogs/exportable_apps_dialog.rs

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
use adw::prelude::*;
22
use adw::subclass::prelude::*;
33
use gtk::glib::{BoxedAnyObject, clone};
4-
use gtk::{gio, glib, pango};
4+
use gtk::{gio, glib};
5+
use tracing::error;
56

67
use crate::backends::{ExportableApp, ExportableBinary};
78
use crate::fakers::Command;
@@ -28,7 +29,8 @@ mod imp {
2829
pub content: gtk::Box,
2930
pub scrolled_window: gtk::ScrolledWindow,
3031
pub stack: gtk::Stack,
31-
pub error_label: gtk::Label,
32+
pub apps_error_label: gtk::Label,
33+
pub binaries_error_label: gtk::Label,
3234
pub list_box: gtk::ListBox,
3335
pub binaries_list_box: gtk::ListBox,
3436
pub binary_name_entry: adw::EntryRow,
@@ -55,9 +57,6 @@ mod imp {
5557

5658
self.stack
5759
.set_transition_type(gtk::StackTransitionType::Crossfade);
58-
self.error_label.set_wrap_mode(pango::WrapMode::WordChar);
59-
self.error_label.set_wrap(true);
60-
self.stack.add_named(&self.error_label, Some("error"));
6160

6261
let loading_page = adw::StatusPage::new();
6362
loading_page.set_title(&gettext("Loading Exports"));
@@ -79,6 +78,17 @@ mod imp {
7978
.set_description(Some(&gettext("No exportable apps found")));
8079
self.export_apps_group.add(&self.list_box);
8180

81+
self.apps_error_label
82+
.set_label(&gettext("Error loading exportable apps"));
83+
self.apps_error_label.set_halign(gtk::Align::Start);
84+
self.apps_error_label.set_wrap(true);
85+
self.apps_error_label.add_css_class("error");
86+
self.apps_error_label.set_margin_start(12);
87+
self.apps_error_label.set_margin_end(12);
88+
self.apps_error_label.set_margin_top(6);
89+
self.apps_error_label.set_margin_bottom(12);
90+
self.apps_error_label.set_visible(false);
91+
8292
// Setup binary export input
8393
self.binary_name_entry
8494
.set_title(&gettext("Export New Binary"));
@@ -101,9 +111,22 @@ mod imp {
101111
self.export_binaries_group.add(&self.binary_name_entry);
102112
self.export_binaries_group.add(&self.binaries_list_box);
103113

114+
self.binaries_error_label
115+
.set_label(&gettext("Error loading exported binaries"));
116+
self.binaries_error_label.set_halign(gtk::Align::Start);
117+
self.binaries_error_label.set_wrap(true);
118+
self.binaries_error_label.add_css_class("error");
119+
self.binaries_error_label.set_margin_start(12);
120+
self.binaries_error_label.set_margin_end(12);
121+
self.binaries_error_label.set_margin_top(6);
122+
self.binaries_error_label.set_margin_bottom(12);
123+
self.binaries_error_label.set_visible(false);
124+
104125
let content_box = gtk::Box::new(gtk::Orientation::Vertical, 0);
105126
content_box.append(&self.export_apps_group);
127+
content_box.append(&self.apps_error_label);
106128
content_box.append(&self.export_binaries_group);
129+
content_box.append(&self.binaries_error_label);
107130
self.stack.add_named(&content_box, Some("apps"));
108131

109132
self.content.append(&self.scrolled_window);
@@ -217,8 +240,9 @@ impl ExportableAppsDialog {
217240
});
218241
let this_inner = this_clone.clone();
219242
apps.connect_error(move |error| {
220-
this_inner.imp().error_label.set_label(&error.to_string());
221-
this_inner.imp().stack.set_visible_child_name("error");
243+
error!("Error loading exportable apps: {}", error);
244+
this_inner.imp().apps_error_label.set_visible(true);
245+
this_inner.imp().stack.set_visible_child_name("apps");
222246
});
223247
let binaries = this.container().binaries();
224248
let this_inner = this_clone.clone();
@@ -229,8 +253,9 @@ impl ExportableAppsDialog {
229253
});
230254
let this_inner = this_clone.clone();
231255
binaries.connect_error(move |error| {
232-
this_inner.imp().error_label.set_label(&error.to_string());
233-
this_inner.imp().stack.set_visible_child_name("error");
256+
error!("Error loading exportable binaries: {}", error);
257+
this_inner.imp().binaries_error_label.set_visible(true);
258+
this_inner.imp().stack.set_visible_child_name("apps");
234259
});
235260

236261
let this_clone = this.clone();
@@ -291,12 +316,19 @@ impl ExportableAppsDialog {
291316

292317
let apps = this.container().apps();
293318
let render_apps_closure = render_apps.clone();
319+
let this_for_apps_success = this.clone();
294320
apps.connect_success(move |apps_data| {
321+
this_for_apps_success.imp().apps_error_label.set_visible(false);
295322
render_apps_closure(apps_data);
296323
});
297324
let binaries = this.container().binaries();
298325
let render_binaries_closure = render_binaries.clone();
326+
let this_for_binaries_success = this.clone();
299327
binaries.connect_success(move |binaries_data| {
328+
this_for_binaries_success
329+
.imp()
330+
.binaries_error_label
331+
.set_visible(false);
300332
render_binaries_closure(binaries_data);
301333
});
302334

src/query/mod.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -407,8 +407,10 @@ where
407407
}
408408
Err(error) => {
409409
if inner.borrow().retry_strategy.is_some() {
410-
Self { inner: inner.clone() }.retry();
411-
return;
410+
let retry_count = Self { inner: inner.clone() }.retry();
411+
if let Some(_retry_count) = retry_count {
412+
return;
413+
}
412414
}
413415
let rc_error = Rc::new(error);
414416
let error_msg = rc_error.to_string();
@@ -469,7 +471,7 @@ where
469471
}
470472
}
471473

472-
pub fn retry(&self) {
474+
pub fn retry(&self) -> Option<u32> {
473475
self.inner.borrow_mut().retry_count += 1;
474476
let retry_count = { self.inner.borrow().retry_count };
475477
let key = { self.inner.borrow().key.clone() };
@@ -489,8 +491,10 @@ where
489491
});
490492

491493
self.inner.borrow_mut().fetch_task_handle = Some(handle);
494+
Some(retry_count)
492495
} else {
493496
warn!(resource_key = %key, retry_count = retry_count, "No more retries left, giving up on resource fetch");
497+
None
494498
}
495499
}
496500

0 commit comments

Comments
 (0)