Add config for favorites
This commit is contained in:
parent
a1d11edfa5
commit
a13e3fd095
3 changed files with 205 additions and 79 deletions
28
src/app.rs
28
src/app.rs
|
|
@ -44,7 +44,7 @@ use std::{
|
|||
use crate::tab::HOVER_DURATION;
|
||||
use crate::{
|
||||
clipboard::{ClipboardCopy, ClipboardKind, ClipboardPaste},
|
||||
config::{AppTheme, Config, IconSizes, TabConfig, CONFIG_VERSION},
|
||||
config::{AppTheme, Config, Favorite, IconSizes, TabConfig, CONFIG_VERSION},
|
||||
fl, home_dir,
|
||||
key_bind::key_binds,
|
||||
menu, mime_app,
|
||||
|
|
@ -762,24 +762,16 @@ impl Application for App {
|
|||
let app_themes = vec![fl!("match-desktop"), fl!("dark"), fl!("light")];
|
||||
|
||||
let mut nav_model = segmented_button::ModelBuilder::default();
|
||||
if let Some(dir) = dirs::home_dir() {
|
||||
nav_model = nav_model.insert(move |b| {
|
||||
b.text(fl!("home"))
|
||||
.icon(widget::icon::icon(tab::folder_icon_symbolic(&dir, 16)).size(16))
|
||||
.data(Location::Path(dir.clone()))
|
||||
});
|
||||
}
|
||||
//TODO: Sort by name?
|
||||
for dir_opt in &[
|
||||
dirs::document_dir(),
|
||||
dirs::download_dir(),
|
||||
dirs::audio_dir(),
|
||||
dirs::picture_dir(),
|
||||
dirs::video_dir(),
|
||||
] {
|
||||
if let Some(dir) = dir_opt {
|
||||
if let Some(file_name) = dir.file_name().and_then(|x| x.to_str()) {
|
||||
for favorite in flags.config.favorites.iter() {
|
||||
if let Some(dir) = favorite.path_opt() {
|
||||
if matches!(favorite, Favorite::Home) {
|
||||
nav_model = nav_model.insert(move |b| {
|
||||
b.text(fl!("home"))
|
||||
.icon(widget::icon::icon(tab::folder_icon_symbolic(&dir, 16)).size(16))
|
||||
.data(Location::Path(dir.clone()))
|
||||
});
|
||||
} else if let Some(file_name) = dir.file_name().and_then(|x| x.to_str()) {
|
||||
nav_model = nav_model.insert(|b| {
|
||||
b.text(file_name.to_string())
|
||||
.icon(widget::icon::icon(tab::folder_icon_symbolic(&dir, 16)).size(16))
|
||||
.data(Location::Path(dir.clone()))
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use std::num::NonZeroU16;
|
||||
use std::{num::NonZeroU16, path::PathBuf};
|
||||
|
||||
use cosmic::{
|
||||
cosmic_config::{self, cosmic_config_derive::CosmicConfigEntry, CosmicConfigEntry},
|
||||
|
|
@ -36,9 +36,35 @@ impl AppTheme {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
|
||||
pub enum Favorite {
|
||||
Home,
|
||||
Documents,
|
||||
Downloads,
|
||||
Music,
|
||||
Pictures,
|
||||
Videos,
|
||||
Path(PathBuf),
|
||||
}
|
||||
|
||||
impl Favorite {
|
||||
pub fn path_opt(&self) -> Option<PathBuf> {
|
||||
match self {
|
||||
Self::Home => dirs::home_dir(),
|
||||
Self::Documents => dirs::document_dir(),
|
||||
Self::Downloads => dirs::download_dir(),
|
||||
Self::Music => dirs::audio_dir(),
|
||||
Self::Pictures => dirs::picture_dir(),
|
||||
Self::Videos => dirs::video_dir(),
|
||||
Self::Path(path) => Some(path.clone()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, CosmicConfigEntry, Debug, Deserialize, Eq, PartialEq, Serialize)]
|
||||
pub struct Config {
|
||||
pub app_theme: AppTheme,
|
||||
pub favorites: Vec<Favorite>,
|
||||
pub tab: TabConfig,
|
||||
}
|
||||
|
||||
|
|
@ -46,6 +72,14 @@ impl Default for Config {
|
|||
fn default() -> Self {
|
||||
Self {
|
||||
app_theme: AppTheme::System,
|
||||
favorites: vec![
|
||||
Favorite::Home,
|
||||
Favorite::Documents,
|
||||
Favorite::Downloads,
|
||||
Favorite::Music,
|
||||
Favorite::Pictures,
|
||||
Favorite::Videos,
|
||||
],
|
||||
tab: TabConfig::default(),
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue