Skip to content

Commit 26e355c

Browse files
committed
app: copy link
1 parent fb537bc commit 26e355c

File tree

1 file changed

+30
-22
lines changed

1 file changed

+30
-22
lines changed

crates/companion-app/src/main.rs

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ use std::path::PathBuf;
1313
use std::sync::{Arc, LazyLock, Mutex, mpsc};
1414

1515
use iced::widget::button::Style;
16-
use iced::widget::{Column, button, column, container, horizontal_space, row, text};
17-
use iced::{Element, Fill, Subscription, Theme};
16+
use iced::widget::{Column, button, column, container, row, text};
17+
use iced::{Element, Fill, Subscription, Task, Theme, clipboard};
1818
use tracing::{debug, error, trace};
1919
use uuid::Uuid;
2020

@@ -30,6 +30,7 @@ mod log;
3030
mod request;
3131
mod saves;
3232

33+
const WEB_ORIGIN: &str = dotenvy_macro::dotenv!("WEB_ORIGIN");
3334
const SERVER_HOST: &str = dotenvy_macro::dotenv!("SERVER_HOST");
3435
static SERVER_PORT: LazyLock<u16> = LazyLock::new(|| {
3536
dotenvy_macro::dotenv!("SERVER_PORT")
@@ -50,7 +51,9 @@ pub fn main() -> iced::Result {
5051
.run()
5152
}
5253

53-
fn update(state: &mut State, message: Message) {
54+
fn update(state: &mut State, message: Message) -> Task<Message> {
55+
let none = Task::none();
56+
5457
match message {
5558
Message::RegisterOnServer => {
5659
let selected_profile = state
@@ -64,20 +67,20 @@ fn update(state: &mut State, message: Message) {
6467
let save_path = save_file_for_profile(&install_dir.1, OsStr::new(selected_profile));
6568

6669
let Some(save_packed) = read_save_packed(&save_path) else {
67-
return;
70+
return none;
6871
};
6972

7073
let Some(config) = &mut state.config else {
7174
error!("config not loaded, skipping saving");
72-
return;
75+
return none;
7376
};
7477
let Some(key) = config.auth_key() else {
7578
error!("not authorized, skipping register");
76-
return;
79+
return none;
7780
};
7881

7982
let Ok(resp) = send_register(key, save_packed) else {
80-
return;
83+
return none;
8184
};
8285

8386
state
@@ -96,20 +99,20 @@ fn update(state: &mut State, message: Message) {
9699

97100
let Some(config) = &mut state.config else {
98101
error!("config not loaded, skipping saving");
99-
return;
102+
return none;
100103
};
101104

102105
let Some(save_packed) = read_save_packed(&path) else {
103-
return;
106+
return none;
104107
};
105108

106109
let Some(id) = config.find_profile(&name) else {
107110
debug!("ignoring file update for non-tracked profile");
108-
return;
111+
return none;
109112
};
110113
let Some(key) = config.auth_key() else {
111114
error!("not authorized, skipping register");
112-
return;
115+
return none;
113116
};
114117

115118
let _ = send_register_update(id, key, save_packed);
@@ -118,14 +121,18 @@ fn update(state: &mut State, message: Message) {
118121
if let Some(ref current) = state.selected_profile
119122
&& current == &name
120123
{
121-
return;
124+
return none;
122125
}
123126
state.selected_profile.replace(name.clone());
124127
}
128+
Message::ShareProfile(id) => {
129+
let url = format!("{WEB_ORIGIN}/ow-tracker?profile={id}");
130+
return clipboard::write(url);
131+
}
125132
Message::ForgetRegister(id) => {
126133
let Some(config) = &mut state.config else {
127134
error!("config not loaded, skipping forgetting");
128-
return;
135+
return none;
129136
};
130137

131138
state
@@ -144,6 +151,8 @@ fn update(state: &mut State, message: Message) {
144151
.log_msg("failed to save config on disk");
145152
}
146153
}
154+
155+
none
147156
}
148157

149158
fn view(state: &State) -> Element<'_, Message> {
@@ -168,6 +177,7 @@ fn view(state: &State) -> Element<'_, Message> {
168177
profiles.sort_unstable();
169178
let profiles = profiles.into_iter().map(|p| {
170179
let cloned_p = p.clone();
180+
let profile_register = config.profiles().iter().find(|profile| profile.name == p);
171181
row![
172182
text(format!("- {p}")).width(200).size(20),
173183
row![
@@ -186,15 +196,12 @@ fn view(state: &State) -> Element<'_, Message> {
186196
}
187197
})
188198
.on_press(Message::SelectProfile(p.to_string())),
189-
horizontal_space().width(10),
190-
button("Forget register").on_press_maybe(
191-
config
192-
.profiles()
193-
.iter()
194-
.find(|profile| profile.name == p)
195-
.map(|p| Message::ForgetRegister(p.id))
196-
),
197-
],
199+
button("Forget register")
200+
.on_press_maybe(profile_register.map(|p| Message::ForgetRegister(p.id))),
201+
button("Share")
202+
.on_press_maybe(profile_register.map(|p| Message::ShareProfile(p.id))),
203+
]
204+
.spacing(10),
198205
]
199206
.width(500)
200207
.into()
@@ -251,6 +258,7 @@ enum Message {
251258
RegisterOnServer,
252259
SelectProfile(String),
253260
FileUpdated(FileUpdateEvent),
261+
ShareProfile(Uuid),
254262
ForgetRegister(Uuid),
255263
}
256264

0 commit comments

Comments
 (0)