mirror of
https://github.com/narrrl/proton-drive-linux.git
synced 2026-11-04 16:56:59 +01:00
fix(fuse,gui): a stopped share leaves Shared by me at once (B199)
Stop Sharing removes the link, invitations and members but cannot delete the share itself, and Drive keeps listing the empty share until its backend removes it, minutes later. The daemon now leaves a share with no member, invitation or link out of the listing (unless a lookup failed, so a live share is never hidden), and the app drops stopped items from the page as soon as the requests succeed instead of waiting for the slow reload.
This commit is contained in:
1 parent
7ebe8e5210
commit
9fb7e84d41
3 files changed
+61
-12
No files matched your search
@@ -565,6 +565,7 @@ pub(crate) fn prompt_stop_sharing(ui: &Rc<Ui>, entries: &[DirEntry]) {
|
||||
let uids: Vec<String> = entries.iter().map(|e| e.uid.clone()).collect();
|
||||
dialog.connect_response(Some("stop"), move |_, _| {
|
||||
let done = done.clone();
|
||||
let stopped = uids.clone();
|
||||
run_requests(
|
||||
&ui_c,
|
||||
uids.iter()
|
||||
@@ -572,6 +573,7 @@ pub(crate) fn prompt_stop_sharing(ui: &Rc<Ui>, entries: &[DirEntry]) {
|
||||
.collect(),
|
||||
gettext_noop("Couldn't stop sharing"),
|
||||
move |ui| {
|
||||
forget_shared_by_me(ui, &stopped);
|
||||
reload_listing(ui);
|
||||
toast(ui, &done);
|
||||
},
|
||||
@@ -580,6 +582,18 @@ pub(crate) fn prompt_stop_sharing(ui: &Rc<Ui>, entries: &[DirEntry]) {
|
||||
dialog.present(ui_window(ui).as_ref());
|
||||
}
|
||||
|
||||
/// Take items whose sharing just stopped off the page now, rather than when
|
||||
/// the reload that confirms it comes back: that reload asks after every share
|
||||
/// in turn and takes a while with many of them.
|
||||
fn forget_shared_by_me(ui: &Rc<Ui>, uids: &[String]) {
|
||||
let items = {
|
||||
let mut items = ui.shared_by_me.items.borrow_mut();
|
||||
items.retain(|item| !uids.contains(&item.uid));
|
||||
items.clone()
|
||||
};
|
||||
repaint_shared_by_me(ui, &items);
|
||||
}
|
||||
|
||||
/// Open a shared item: a folder in My Files, a file the way My Files would.
|
||||
fn open_shared_by_me(ui: &Rc<Ui>, entry: &DirEntry) {
|
||||
if entry.is_dir {
|
||||
|
||||
Reference in new issue
Block a user