chore(clippy): app.rs, mime_app.rs

This commit is contained in:
Josh Megnauth 2025-01-27 02:17:50 -05:00 committed by Jeremy Soller
parent 2e378ab261
commit cfe045827d
2 changed files with 97 additions and 117 deletions

View file

@ -49,7 +49,7 @@ use std::{
collections::{BTreeMap, BTreeSet, HashMap, HashSet, VecDeque},
env, fmt, fs, io,
num::NonZeroU16,
path::PathBuf,
path::{Path, PathBuf},
process,
sync::{Arc, Mutex},
time::{self, Instant},
@ -678,7 +678,6 @@ impl App {
let mut overlaps: HashMap<_, _> = self
.windows
.keys()
.into_iter()
.map(|k| (*k, (0., 0., 0., 0.)))
.collect();
let mut sorted_overlaps: Vec<_> = self.overlap.values().collect();
@ -690,7 +689,7 @@ impl App {
let tr = tr.intersects(overlap);
let bl = bl.intersects(overlap);
let br = br.intersects(overlap);
let Some((top, left, bottom, right)) = overlaps.get_mut(&w_id) else {
let Some((top, left, bottom, right)) = overlaps.get_mut(w_id) else {
continue;
};
if tl && tr {
@ -802,12 +801,9 @@ impl App {
}
fn remove_window(&mut self, id: &window::Id) {
match self.windows.remove(id) {
Some(WindowKind::Desktop(entity)) => {
// Remove the tab from the tab model
self.tab_model.remove(entity);
}
_ => {}
if let Some(WindowKind::Desktop(entity)) = self.windows.remove(id) {
// Remove the tab from the tab model
self.tab_model.remove(entity);
}
}
@ -817,7 +813,7 @@ impl App {
let Some(tab) = self.tab_model.data::<Tab>(entity) else {
return Task::none();
};
let Some(ref items) = tab.items_opt() else {
let Some(items) = tab.items_opt() else {
return Task::none();
};
for item in items.iter() {
@ -1753,7 +1749,7 @@ impl Application for App {
return self.update(message);
}
if let Some(data) = self.nav_model.data::<MounterData>(entity).clone() {
if let Some(data) = self.nav_model.data::<MounterData>(entity) {
if let Some(mounter) = MOUNTERS.get(&data.0) {
return mounter.mount(data.1.clone()).map(|_| message::none());
}
@ -1770,14 +1766,11 @@ impl Application for App {
}
fn on_context_drawer(&mut self) -> Task<Self::Message> {
match self.context_page {
ContextPage::Preview(..) => {
// Persist state of preview page
if self.core.window.show_context != self.config.show_details {
return self.update(Message::Preview(None));
}
if let ContextPage::Preview(..) = self.context_page {
// Persist state of preview page
if self.core.window.show_context != self.config.show_details {
return self.update(Message::Preview(None));
}
_ => {}
}
Task::none()
}
@ -1937,12 +1930,14 @@ impl Application for App {
}
}
Message::DesktopViewOptions => {
let mut settings = window::Settings::default();
settings.decorations = true;
settings.min_size = Some(Size::new(360.0, 180.0));
settings.resizable = true;
settings.size = Size::new(480.0, 444.0);
settings.transparent = true;
let mut settings = window::Settings {
decorations: true,
min_size: Some(Size::new(360.0, 180.0)),
resizable: true,
size: Size::new(480.0, 444.0),
transparent: true,
..Default::default()
};
#[cfg(target_os = "linux")]
{
@ -2140,11 +2135,9 @@ impl Application for App {
let mut still_mounted = false;
for item in mounter_items.iter() {
if let Some(path) = item.path() {
if path == old_path {
if item.is_mounted() {
still_mounted = true;
break;
}
if path == old_path && item.is_mounted() {
still_mounted = true;
break;
}
}
}
@ -2289,7 +2282,7 @@ impl Application for App {
let mut contains_change = false;
for event in events.iter() {
for event_path in event.paths.iter() {
if event_path.starts_with(&path) {
if event_path.starts_with(path) {
match event.kind {
notify::EventKind::Modify(
notify::event::ModifyKind::Metadata(_),
@ -2303,16 +2296,17 @@ impl Application for App {
for item in items.iter_mut() {
if item.path_opt() == Some(event_path) {
//TODO: reload more, like mime types?
match fs::metadata(&event_path) {
Ok(new_metadata) => match &mut item
.metadata
{
ItemMetadata::Path {
match fs::metadata(event_path) {
Ok(new_metadata) => {
if let ItemMetadata::Path {
metadata,
..
} => *metadata = new_metadata,
_ => {}
},
} = &mut item.metadata
{
*metadata = new_metadata
}
}
Err(err) => {
log::warn!("failed to reload metadata for {:?}: {}", path, err);
}
@ -2423,43 +2417,32 @@ impl Application for App {
Message::OpenItemLocation(entity_opt) => {
return Task::batch(self.selected_paths(entity_opt).into_iter().filter_map(
|path| {
if let Some(parent) = path.parent() {
Some(self.open_tab(
Location::Path(parent.to_path_buf()),
true,
Some(vec![path]),
))
} else {
None
}
path.parent().map(Path::to_path_buf).map(|parent| {
self.open_tab(Location::Path(parent), true, Some(vec![path]))
})
},
))
}
Message::OpenWithBrowse => match self.dialog_pages.pop_front() {
Some(DialogPage::OpenWith {
mime, store_opt, ..
mime,
store_opt: Some(app),
..
}) => {
if let Some(app) = store_opt {
let url = format!("mime:///{mime}");
if let Some(mut command) = app.command(Some(url.clone().into())) {
match spawn_detached(&mut command) {
Ok(()) => {}
Err(err) => {
log::warn!(
"failed to open {:?} with {:?}: {}",
url,
app.id,
err
)
}
let url = format!("mime:///{mime}");
if let Some(mut command) = app.command(Some(url.clone().into())) {
match spawn_detached(&mut command) {
Ok(()) => {}
Err(err) => {
log::warn!("failed to open {:?} with {:?}: {}", url, app.id, err)
}
} else {
log::warn!(
"failed to open {:?} with {:?}: failed to get command",
url,
app.id
);
}
} else {
log::warn!(
"failed to open {:?} with {:?}: failed to get command",
url,
app.id
);
}
}
Some(dialog_page) => {
@ -2542,7 +2525,7 @@ impl Application for App {
Message::PendingCancelAll => {
for (id, (_, controller)) in self.pending_operations.iter() {
controller.cancel();
self.progress_operations.remove(&id);
self.progress_operations.remove(id);
}
}
Message::PendingComplete(id, op_sel) => {
@ -2636,12 +2619,14 @@ impl Application for App {
let selected_paths = self.selected_paths(entity_opt);
let mut commands = Vec::with_capacity(selected_paths.len());
for path in selected_paths {
let mut settings = window::Settings::default();
settings.decorations = true;
settings.min_size = Some(Size::new(360.0, 180.0));
settings.resizable = true;
settings.size = Size::new(480.0, 600.0);
settings.transparent = true;
let mut settings = window::Settings {
decorations: true,
min_size: Some(Size::new(360.0, 180.0)),
resizable: true,
size: Size::new(480.0, 600.0),
transparent: true,
..Default::default()
};
#[cfg(target_os = "linux")]
{
@ -2982,17 +2967,14 @@ impl Application for App {
return self.open_tab(location, true, None);
}
Message::TabRescan(entity, location, parent_item_opt, items, selection_paths) => {
match self.tab_model.data_mut::<Tab>(entity) {
Some(tab) => {
if location == tab.location {
tab.parent_item_opt = parent_item_opt;
tab.set_items(items);
if let Some(selection_paths) = selection_paths {
tab.select_paths(selection_paths);
}
if let Some(tab) = self.tab_model.data_mut::<Tab>(entity) {
if location == tab.location {
tab.parent_item_opt = parent_item_opt;
tab.set_items(items);
if let Some(selection_paths) = selection_paths {
tab.select_paths(selection_paths);
}
}
_ => (),
}
}
Message::TabView(entity_opt, view) => {
@ -3275,26 +3257,23 @@ impl Application for App {
// Applies selected nav bar context menu operation.
Message::NavMenuAction(action) => match action {
NavMenuAction::Open(entity) => {
match self
if let Some(path) = self
.nav_model
.data::<Location>(entity)
.and_then(|x| x.path_opt())
.map(|x| x.to_path_buf())
{
Some(path) => {
self.open_file(&path);
}
None => {}
self.open_file(&path);
}
}
NavMenuAction::OpenWith(entity) => {
match self
if let Some(path) = self
.nav_model
.data::<Location>(entity)
.and_then(|x| x.path_opt())
.map(|x| x.to_path_buf())
{
Some(path) => match tab::item_from_path(&path, IconSizes::default()) {
match tab::item_from_path(&path, IconSizes::default()) {
Ok(item) => {
return self.update(Message::DialogPush(DialogPage::OpenWith {
path: path.to_path_buf(),
@ -3311,8 +3290,7 @@ impl Application for App {
Err(err) => {
log::warn!("failed to get item for path {:?}: {}", path, err);
}
},
None => {}
}
}
}
NavMenuAction::OpenInNewTab(entity) => {
@ -3329,8 +3307,7 @@ impl Application for App {
// Open the selected path in a new cosmic-files window.
NavMenuAction::OpenInNewWindow(entity) => {
if let Some(&Location::Path(ref path)) = self.nav_model.data::<Location>(entity)
{
if let Some(Location::Path(path)) = self.nav_model.data::<Location>(entity) {
match env::current_exe() {
Ok(exe) => match process::Command::new(&exe).arg(path).spawn() {
Ok(_child) => {}
@ -3391,16 +3368,15 @@ impl Application for App {
log::info!("output {}: created", output.id());
let surface_id = WindowId::unique();
match self.surface_ids.insert(output.clone(), surface_id) {
Some(old_surface_id) => {
//TODO: remove old surface?
log::warn!(
"output {}: already had surface ID {:?}",
output.id(),
old_surface_id
);
}
None => {}
if let Some(old_surface_id) =
self.surface_ids.insert(output.clone(), surface_id)
{
//TODO: remove old surface?
log::warn!(
"output {}: already had surface ID {:?}",
output.id(),
old_surface_id
);
}
let display = match output_info_opt {
@ -3470,7 +3446,7 @@ impl Application for App {
}
Message::Cosmic(cosmic) => {
// Forward cosmic messages
return Task::perform(async move { cosmic }, |cosmic| message::cosmic(cosmic));
return Task::perform(async move { cosmic }, message::cosmic);
}
Message::None => {}
#[cfg(all(feature = "desktop", feature = "wayland"))]
@ -4148,7 +4124,7 @@ impl Application for App {
let running = count;
// Adjust the progress bar so it does not jump around when operations finish
for id in self.progress_operations.iter() {
if self.complete_operations.contains_key(&id) {
if self.complete_operations.contains_key(id) {
total_progress += 1.0;
count += 1;
}
@ -4241,8 +4217,7 @@ impl Application for App {
self.tab_model.active_data::<Tab>(),
&self.config,
&self.key_binds,
)
.into()]
)]
}
fn header_end(&self) -> Vec<Element<Self::Message>> {
@ -4371,16 +4346,16 @@ impl Application for App {
return if let Some(margin) = self.margin.get(&id) {
if margin.0 >= 0. || margin.2 >= 0. {
tab_column = widget::column::with_children(vec![
vertical_space().height(margin.0 as f32).into(),
vertical_space().height(margin.0).into(),
tab_column.into(),
vertical_space().height(margin.2 as f32).into(),
vertical_space().height(margin.2).into(),
])
}
if margin.1 >= 0. || margin.3 >= 0. {
Element::from(widget::row::with_children(vec![
horizontal_space().width(margin.1 as f32).into(),
horizontal_space().width(margin.1).into(),
tab_column.into(),
horizontal_space().width(margin.3 as f32).into(),
horizontal_space().width(margin.3).into(),
]))
} else {
tab_column.into()
@ -4748,7 +4723,6 @@ pub(crate) mod test_utils {
use crate::{
config::{IconSizes, TabConfig},
mounter::MounterMap,
tab::Item,
};
@ -4986,8 +4960,8 @@ pub(crate) mod test_utils {
assert!(
entries
.into_iter()
.zip(tab.items_opt().clone().unwrap_or(&empty))
.all(|(a, b)| eq_path_item(&a, &b)),
.zip(tab.items_opt().unwrap_or(&empty))
.all(|(a, b)| eq_path_item(&a, b)),
"Path ({}) and Tab path ({}) don't have equal contents",
path.display(),
tab_path.display()

View file

@ -278,12 +278,12 @@ impl MimeAppCache {
pub fn get(&self, key: &Mime) -> &[MimeApp] {
static EMPTY: Vec<MimeApp> = Vec::new();
self.cache.get(key).unwrap_or_else(|| &EMPTY)
self.cache.get(key).unwrap_or(&EMPTY)
}
pub fn icons(&self, key: &Mime) -> &[widget::icon::Handle] {
static EMPTY: Vec<widget::icon::Handle> = Vec::new();
self.icons.get(key).unwrap_or_else(|| &EMPTY)
self.icons.get(key).unwrap_or(&EMPTY)
}
pub fn terminal(&self) -> Option<&MimeApp> {
@ -348,3 +348,9 @@ impl MimeAppCache {
}
}
}
impl Default for MimeAppCache {
fn default() -> Self {
Self::new()
}
}