diff --git a/packages/oneclient_app/src/view/app/settings/launcher.rs b/packages/oneclient_app/src/view/app/settings/launcher.rs
index 84e4d34c..c85b3e97 100644
--- a/packages/oneclient_app/src/view/app/settings/launcher.rs
+++ b/packages/oneclient_app/src/view/app/settings/launcher.rs
@@ -3,6 +3,7 @@ use std::path::{Path, PathBuf};
use freya::prelude::*;
use freya::router::RouterContext;
use oneclient_core::relocate::RelocationPlan;
+use oneclient_core::settings::data_dir;
use oneclient_core::storage::format_bytes;
use super::{section_header, settings_page, settings_row};
@@ -126,6 +127,21 @@ impl Component for DataFolder {
.on_press(move |_| browse(pending, error, checking))
.text(if checking_now { "Checking…" } else { "Change…" });
+ let mut buttons = Vec::new();
+
+ if !data_dir::is_default(Path::new(&data_dir)) {
+ buttons.push(
+ Button::new()
+ .secondary()
+ .small()
+ .disabled(checking_now)
+ .on_press(move |_| plan(pending, error, checking, Source::Default))
+ .text("Reset"),
+ );
+ }
+
+ buttons.push(change);
+
let mut section = rect()
.vertical()
.width(Size::fill())
@@ -134,7 +150,7 @@ impl Component for DataFolder {
IconType::Folder,
"Launcher Folder",
data_dir.clone(),
- row_actions(PathBuf::from(data_dir), change),
+ row_actions(PathBuf::from(data_dir), buttons),
));
if let Some(message) = error.read().clone() {
@@ -161,7 +177,7 @@ impl Component for DataFolder {
format_bytes(left.bytes),
left.path.display()
),
- row_actions(left.path, remove),
+ row_actions(left.path, vec![remove]),
));
}
@@ -177,31 +193,55 @@ impl Component for DataFolder {
}
}
+#[derive(Clone, Copy, PartialEq, Eq)]
+enum Source {
+ /// Whatever folder the picker comes back with
+ Picked,
+ /// The folder OneClient uses when nothing is set
+ Default,
+}
+
fn browse(
+ pending: State