Skip to content

Commit 9a5a579

Browse files
committed
Change UI, add opening images [ci/cd]
1 parent 03ec6d0 commit 9a5a579

File tree

9 files changed

+73
-45
lines changed

9 files changed

+73
-45
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ edition = "2024"
77
tokio = "1.45.1"
88
freya = "0.3.4"
99

10+
open = "5.3.2"
1011
walkdir = "2.5.0"
1112
image = "0.25.6"
1213
copypasta = "0.10.2"

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
1+
# TODO:
2+
- [ ] [Add signing commits](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits)
3+
- [ ] Rename files in CI/CD publish
4+
- [ ] [Cache APT packages for Linux CI/CD](https://github.com/marketplace/actions/cache-apt-packages)
5+
16
Readme soon

src/assets/icons/folder-look.svg

Lines changed: 1 addition & 0 deletions
Loading

src/assets/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ pub fn civitai_logo() -> &'static [u8] {
66
pub fn cross_icon() -> &'static [u8] {
77
include_bytes!("icons/cross.svg")
88
}
9+
pub fn folder_look_icon() -> &'static [u8]{
10+
include_bytes!("icons/folder-look.svg")
11+
}
12+
913
pub fn loading_icon() -> &'static [u8]{
1014
include_bytes!("icons/loading.svg")
1115
}

src/ui/app.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ pub fn app() -> Element{
2626
let mut file_hover = use_signal(|| DnDStatus::None);
2727
let mut files: Signal<Vec<PathBuf>> = use_signal(|| Vec::new());
2828

29-
let selected_file = use_signal(|| None);
29+
let selected_file = use_signal(|| PathBuf::new());
3030
let civitai_request = use_signal(|| false);
3131
let metadata = use_signal(|| Exif::None);
3232

@@ -82,7 +82,7 @@ pub fn app() -> Element{
8282
color: if theme_value == 1 {"#cccccc"} else {"#323232"},
8383
font_size: "20",
8484

85-
if selected_file.read().is_some(){
85+
if selected_file.read().is_file(){
8686
{preview(selected_file, metadata)}
8787
} else if !files.read().is_empty(){
8888
label { "Выберите изображение" }

src/ui/components/file_list.rs

Lines changed: 54 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,17 @@ use std::path::PathBuf;
22

33
use freya::prelude::*;
44

5-
use crate::{assets::cross_icon, core::exif::{self, civitai_request}, ui::{app::{DnDStatus, Exif}, theme::button_transparent, THEME}};
5+
use crate::{
6+
assets::{cross_icon, folder_look_icon},
7+
core::exif::{self, civitai_request},
8+
ui::{app::{DnDStatus, Exif},
9+
theme::button_transparent,
10+
THEME
11+
}
12+
};
613

714
pub fn file_list(
8-
selected_file: Signal<Option<PathBuf>>,
15+
selected_file: Signal<PathBuf>,
916
metadata: Signal<Exif>,
1017
files: Signal<Vec<PathBuf>>,
1118

@@ -43,6 +50,8 @@ pub fn file_list(
4350
} else{{
4451
let files_read = files.read();
4552
let files_arr = files_read.clone().into_iter();
53+
54+
let hovered = use_signal(|| PathBuf::new());
4655
rsx!(VirtualScrollView {
4756
direction: "vertical",
4857
padding: "8",
@@ -61,86 +70,87 @@ pub fn file_list(
6170
spacing: "4",
6271

6372
{file_element(
64-
selected_file, metadata, files, civitai_get,
73+
selected_file, metadata, files, hovered, civitai_get,
6574
file.clone(), file_name.to_string()
6675
)}
6776
}
6877
)
6978
}
7079
})
71-
// rsx!(ScrollView {
72-
// padding: "8",
73-
// direction: "vertical",
74-
// rect{
75-
// direction: "vertical",
76-
// spacing: "4",
77-
78-
// for file in files.read().clone(){{
79-
// let file_clone = file.clone();
80-
// let file_name = file_clone.file_name().unwrap().to_str().unwrap();
81-
// {file_element(
82-
// selected_file, metadata, files,
83-
// file, file_name.to_string(), civitai_value, theme_value
84-
// )}
85-
// }}
86-
// }
87-
// })
8880
}}
8981
})
9082
}
9183

9284
fn file_element(
93-
mut selected_file: Signal<Option<PathBuf>>,
85+
mut selected_file: Signal<PathBuf>,
9486
mut metadata: Signal<Exif>,
9587
mut files: Signal<Vec<PathBuf>>,
88+
mut hovered: Signal<PathBuf>,
9689
civitai_get: Signal<bool>,
9790

9891
file: PathBuf,
9992
file_name: String
10093
) -> Element{
10194
let civitai_value = *civitai_get.read();
10295
let theme_value = *THEME.read();
103-
96+
10497
let file_clone = file.clone();
98+
let file_show = file.clone();
99+
let file_hover = file.clone();
105100
rsx!(rect{
106101
direction: "horizontal",
107102
cross_align: "center",
108103
width: "fill",
109104
height: "32",
110105

111-
Button{
112-
onpress: move |_| {
113-
let mut selected_file = selected_file.write();
114-
if selected_file.is_some() &&
115-
file_clone == selected_file.clone().unwrap() {
116-
*selected_file = None;
117-
metadata.set(Exif::None);
106+
onmouseenter: move |_| *hovered.write() = file_hover.clone(),
107+
onmouseleave: move |_| *hovered.write() = PathBuf::new(),
108+
109+
if *hovered.read() == file_hover{
110+
Button{
111+
onpress: move |_| {
112+
let mut selected_file = selected_file.write();
113+
if file_clone == selected_file.clone() {
114+
*selected_file = PathBuf::new();
115+
metadata.set(Exif::None);
116+
}
117+
files.write().retain(|f| *f != file_clone);
118+
},
119+
svg {
120+
color: if theme_value == 1 {"#cccccc"} else {"#323232"},
121+
width: "28",
122+
height: "28",
123+
svg_data: static_bytes(cross_icon())
118124
}
119-
files.write().retain(|f| *f != file_clone);
120125
},
121-
svg {
122-
color: if theme_value == 1 {"#cccccc"} else {"#323232"},
123-
width: "28",
124-
height: "28",
125-
svg_data: static_bytes(cross_icon())
126+
Button{
127+
onpress: move |_| {
128+
let _ = open::that(&file_show);
129+
},
130+
svg {
131+
color: if theme_value == 1 {"#cccccc"} else {"#323232"},
132+
width: "24",
133+
height: "24",
134+
svg_data: static_bytes(folder_look_icon())
135+
}
126136
}
127137
},
138+
128139
Button{
129140
theme: Some(button_transparent(
130141
if theme_value == 1 {"#3b3938"} else {"#e4e0d9"}
131142
)),
132143
onpress: move |_| {
133144
let file = file.clone();
134-
if selected_file.read().is_some() &&
135-
selected_file.read().clone().unwrap() == file{
145+
if selected_file.read().clone() == file{
136146
return;
137147
}
138148

139149
spawn(async move {
140150
let mut selected_file = selected_file.clone();
141151
metadata.set(Exif::Loading);
142152

143-
selected_file.set(Some(file.clone()));
153+
selected_file.set(file.clone());
144154
metadata.set(match exif::parse_image(&file){
145155
Ok(res) => Exif::Ok(if civitai_value{
146156
civitai_request(res).await.to_string()
@@ -151,12 +161,18 @@ fn file_element(
151161
},
152162
label {
153163
width: "fill",
164+
margin: "0 0 0 4",
154165
max_lines: "1",
155166

156167
color: if theme_value == 1 {"#cccccc"} else {"#323232"},
157168
font_size: "16",
158169
font_weight: "bold",
159170
text_overflow: "ellipsis",
171+
172+
decoration: if selected_file.read().clone() == file_hover{
173+
"underline"
174+
},
175+
decoration_style: "dotted",
160176
{ file_name }
161177
}
162178
}

src/ui/components/header.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::{
1010

1111
pub fn header(
1212
mut civitai_request: Signal<bool>,
13-
mut selected_file: Signal<Option<PathBuf>>,
13+
mut selected_file: Signal<PathBuf>,
1414
mut metadata: Signal<Exif>,
1515
mut files: Signal<Vec<PathBuf>>
1616
) -> Element{
@@ -75,7 +75,7 @@ pub fn header(
7575
if theme_value == 1 {"#3d3c3a"} else {"#e3dfd5"}
7676
)),
7777
onpress: move |_| {
78-
selected_file.set(None);
78+
selected_file.set(PathBuf::new());
7979
metadata.set(Exif::None);
8080
files.write().clear()
8181
},

src/ui/components/preview.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ use freya::prelude::*;
55
use crate::ui::{app::Exif, theme::button_transparent, THEME};
66

77
pub fn preview(
8-
mut selected_file: Signal<Option<PathBuf>>,
8+
mut selected_file: Signal<PathBuf>,
99
mut metadata: Signal<Exif>
1010
) -> Element{
1111
let theme_value = *THEME.read();
1212
rsx!({
13-
let path = selected_file.read().clone().unwrap();
13+
let path = selected_file.read().clone();
1414
match fs::read(path){
1515
Ok(file) => {
1616
rsx!(
@@ -19,7 +19,7 @@ pub fn preview(
1919
if theme_value == 1 {"#3b3938"} else {"#e4e0d9"}
2020
)),
2121
onpress: move |_| {
22-
selected_file.set(None);
22+
selected_file.set(PathBuf::new());
2323
metadata.set(Exif::None);
2424
},
2525
rect{

0 commit comments

Comments
 (0)