From 76b73d2677744dcd9596cfc00f00cc9cac060d91 Mon Sep 17 00:00:00 2001 From: sxyazi Date: Tue, 3 Dec 2024 01:39:45 +0800 Subject: [PATCH] .. --- yazi-core/src/manager/commands/open.rs | 4 +- .../src/manager/commands/update_files.rs | 4 +- .../src/manager/commands/update_mimes.rs | 3 +- .../src/manager/commands/update_paged.rs | 6 +- yazi-core/src/manager/manager.rs | 4 +- yazi-core/src/manager/watcher.rs | 3 +- {yazi-fs/src => yazi-core/src/tab}/folder.rs | 95 +++++++++---------- yazi-core/src/tab/history.rs | 3 +- yazi-core/src/tab/mod.rs | 2 +- yazi-core/src/tab/tab.rs | 4 +- yazi-fm/src/context.rs | 3 +- yazi-fm/src/lives/file.rs | 6 +- yazi-fm/src/lives/files.rs | 6 +- yazi-fm/src/lives/folder.rs | 6 +- yazi-fs/src/lib.rs | 4 +- 15 files changed, 73 insertions(+), 80 deletions(-) rename {yazi-fs/src => yazi-core/src/tab}/folder.rs (59%) diff --git a/yazi-core/src/manager/commands/open.rs b/yazi-core/src/manager/commands/open.rs index d211d6438..58c8ac56f 100644 --- a/yazi-core/src/manager/commands/open.rs +++ b/yazi-core/src/manager/commands/open.rs @@ -3,13 +3,13 @@ use std::{borrow::Cow, ffi::OsString}; use tracing::error; use yazi_boot::ARGS; use yazi_config::{OPEN, PLUGIN, popup::PickCfg}; -use yazi_fs::{File, Folder}; +use yazi_fs::File; use yazi_macro::emit; use yazi_plugin::isolate; use yazi_proxy::{ManagerProxy, TasksProxy, options::OpenDoOpt}; use yazi_shared::{MIME_DIR, event::{CmdCow, EventQuit}, url::Url}; -use crate::{manager::Manager, tasks::Tasks}; +use crate::{manager::Manager, tab::Folder, tasks::Tasks}; #[derive(Clone, Copy)] struct Opt { diff --git a/yazi-core/src/manager/commands/update_files.rs b/yazi-core/src/manager/commands/update_files.rs index 6338d4c36..fc69bc677 100644 --- a/yazi-core/src/manager/commands/update_files.rs +++ b/yazi-core/src/manager/commands/update_files.rs @@ -1,11 +1,11 @@ use std::borrow::Cow; -use yazi_fs::{FilesOp, Folder}; +use yazi_fs::FilesOp; use yazi_macro::render; use yazi_proxy::ManagerProxy; use yazi_shared::event::CmdCow; -use crate::{manager::{LINKED, Manager}, tab::Tab, tasks::Tasks}; +use crate::{manager::{LINKED, Manager}, tab::{Folder, Tab}, tasks::Tasks}; pub struct Opt { op: FilesOp, diff --git a/yazi-core/src/manager/commands/update_mimes.rs b/yazi-core/src/manager/commands/update_mimes.rs index 4b89985b9..c411dcf8c 100644 --- a/yazi-core/src/manager/commands/update_mimes.rs +++ b/yazi-core/src/manager/commands/update_mimes.rs @@ -1,7 +1,6 @@ use std::{borrow::Cow, collections::HashMap}; use tracing::error; -use yazi_config::LAYOUT; use yazi_macro::render; use yazi_shared::{event::CmdCow, url::Url}; @@ -46,7 +45,7 @@ impl Manager { let affected: Vec<_> = self .current() - .paginate(self.current().page, LAYOUT.get().current.height as usize) + .paginate(self.current().page) .iter() .filter(|&f| updates.contains_key(&f.url)) .cloned() diff --git a/yazi-core/src/manager/commands/update_paged.rs b/yazi-core/src/manager/commands/update_paged.rs index 7ac856944..b679c9d6c 100644 --- a/yazi-core/src/manager/commands/update_paged.rs +++ b/yazi-core/src/manager/commands/update_paged.rs @@ -1,4 +1,3 @@ -use yazi_config::LAYOUT; use yazi_shared::{event::{CmdCow, Data}, url::Url}; use crate::{manager::Manager, tasks::Tasks}; @@ -29,10 +28,7 @@ impl Manager { return; } - let targets = self - .current() - .paginate(opt.page.unwrap_or(self.current().page), LAYOUT.get().current.height as usize); - + let targets = self.current().paginate(opt.page.unwrap_or(self.current().page)); tasks.fetch_paged(targets, &self.mimetype); tasks.preload_paged(targets, &self.mimetype); } diff --git a/yazi-core/src/manager/manager.rs b/yazi-core/src/manager/manager.rs index 62be6a9cd..0bf62564c 100644 --- a/yazi-core/src/manager/manager.rs +++ b/yazi-core/src/manager/manager.rs @@ -1,11 +1,11 @@ use ratatui::layout::Rect; use yazi_adapter::Dimension; use yazi_config::popup::{Origin, Position}; -use yazi_fs::{File, Folder}; +use yazi_fs::File; use yazi_shared::{Id, url::Url}; use super::{Mimetype, Tabs, Watcher, Yanked}; -use crate::tab::Tab; +use crate::tab::{Folder, Tab}; pub struct Manager { pub tabs: Tabs, diff --git a/yazi-core/src/manager/watcher.rs b/yazi-core/src/manager/watcher.rs index 7d612d726..abab62642 100644 --- a/yazi-core/src/manager/watcher.rs +++ b/yazi-core/src/manager/watcher.rs @@ -7,12 +7,13 @@ use tokio::{fs, pin, sync::{mpsc::{self, UnboundedReceiver}, watch}}; use tokio_stream::{StreamExt, wrappers::UnboundedReceiverStream}; use tracing::error; use yazi_config::PLUGIN; -use yazi_fs::{Cha, File, Files, FilesOp, Folder, realname_unchecked}; +use yazi_fs::{Cha, File, Files, FilesOp, realname_unchecked}; use yazi_plugin::isolate; use yazi_proxy::WATCHER; use yazi_shared::{RoCell, event::CmdCow, url::Url}; use super::Linked; +use crate::tab::Folder; pub(crate) static WATCHED: RoCell>> = RoCell::new(); pub static LINKED: RoCell> = RoCell::new(); diff --git a/yazi-fs/src/folder.rs b/yazi-core/src/tab/folder.rs similarity index 59% rename from yazi-fs/src/folder.rs rename to yazi-core/src/tab/folder.rs index a063dbc38..94a1a1a02 100644 --- a/yazi-fs/src/folder.rs +++ b/yazi-core/src/tab/folder.rs @@ -1,10 +1,10 @@ use std::mem; +use yazi_config::{LAYOUT, MANAGER}; +use yazi_fs::{Cha, File, Files, FilesOp, FolderStage, Step}; +use yazi_proxy::ManagerProxy; use yazi_shared::url::{Url, Urn}; -use super::FolderStage; -use crate::{Cha, File, Files, FilesOp, Step}; - #[derive(Default)] pub struct Folder { pub url: Url, @@ -92,69 +92,65 @@ impl Folder { } pub fn sync_page(&mut self, force: bool) { - todo!(); - // let limit = LAYOUT.get().current.height as usize; - // if limit == 0 { - // return; - // } - - // let new = self.cursor / limit; - // if mem::replace(&mut self.page, new) != new || force { - // ManagerProxy::update_paged_by(new, &self.url); - // } + let limit = LAYOUT.get().current.height as usize; + if limit == 0 { + return; + } + + let new = self.cursor / limit; + if mem::replace(&mut self.page, new) != new || force { + ManagerProxy::update_paged_by(new, &self.url); + } } fn next(&mut self, step: Step) -> bool { - todo!(); - // let old = (self.cursor, self.offset); - // let len = self.files.len(); + let old = (self.cursor, self.offset); + let len = self.files.len(); - // let limit = LAYOUT.get().current.height as usize; - // let scrolloff = (limit / 2).min(MANAGER.scrolloff as usize); + let limit = LAYOUT.get().current.height as usize; + let scrolloff = (limit / 2).min(MANAGER.scrolloff as usize); - // self.cursor = step.add(self.cursor, limit).min(len.saturating_sub(1)); - // self.offset = if self.cursor < (self.offset + - // limit).min(len).saturating_sub(scrolloff) { self.offset.min(len. - // saturating_sub(1)) } else { - // len.saturating_sub(limit).min(self.offset + self.cursor - old.0) - // }; + self.cursor = step.add(self.cursor, limit).min(len.saturating_sub(1)); + self.offset = if self.cursor < (self.offset + limit).min(len).saturating_sub(scrolloff) { + self.offset.min(len.saturating_sub(1)) + } else { + len.saturating_sub(limit).min(self.offset + self.cursor - old.0) + }; - // old != (self.cursor, self.offset) + old != (self.cursor, self.offset) } fn prev(&mut self, step: Step) -> bool { - todo!(); - // let old = (self.cursor, self.offset); - // let max = self.files.len().saturating_sub(1); + let old = (self.cursor, self.offset); + let max = self.files.len().saturating_sub(1); - // let limit = LAYOUT.get().current.height as usize; - // let scrolloff = (limit / 2).min(MANAGER.scrolloff as usize); + let limit = LAYOUT.get().current.height as usize; + let scrolloff = (limit / 2).min(MANAGER.scrolloff as usize); - // self.cursor = step.add(self.cursor, limit).min(max); - // self.offset = if self.cursor < self.offset + scrolloff { - // self.offset.saturating_sub(old.0 - self.cursor) - // } else { - // self.offset.min(max) - // }; + self.cursor = step.add(self.cursor, limit).min(max); + self.offset = if self.cursor < self.offset + scrolloff { + self.offset.saturating_sub(old.0 - self.cursor) + } else { + self.offset.min(max) + }; - // old != (self.cursor, self.offset) + old != (self.cursor, self.offset) } fn squeeze_offset(&mut self) -> bool { - todo!(); - // let old = self.offset; - // let len = self.files.len(); + let old = self.offset; + let len = self.files.len(); - // let limit = LAYOUT.get().current.height as usize; - // let scrolloff = (limit / 2).min(MANAGER.scrolloff as usize); + let limit = LAYOUT.get().current.height as usize; + let scrolloff = (limit / 2).min(MANAGER.scrolloff as usize); - // self.offset = if self.cursor < (self.offset + - // limit).min(len).saturating_sub(scrolloff) { len.saturating_sub(limit). - // min(self.offset) } else { - // len.saturating_sub(limit).min(self.cursor.saturating_sub(limit) + 1 + - // scrolloff) }; + self.offset = if self.cursor < (self.offset + limit).min(len).saturating_sub(scrolloff) { + len.saturating_sub(limit).min(self.offset) + } else { + len.saturating_sub(limit).min(self.cursor.saturating_sub(limit) + 1 + scrolloff) + }; - // old != self.offset + old != self.offset } } @@ -162,8 +158,9 @@ impl Folder { #[inline] pub fn hovered(&self) -> Option<&File> { self.files.get(self.cursor) } - pub fn paginate(&self, page: usize, limit: usize) -> &[File] { + pub fn paginate(&self, page: usize) -> &[File] { let len = self.files.len(); + let limit = LAYOUT.get().current.height as usize; let start = (page.saturating_sub(1) * limit).min(len.saturating_sub(1)); let end = ((page + 2) * limit).min(len); diff --git a/yazi-core/src/tab/history.rs b/yazi-core/src/tab/history.rs index dc1da67c0..699715d04 100644 --- a/yazi-core/src/tab/history.rs +++ b/yazi-core/src/tab/history.rs @@ -1,8 +1,9 @@ use std::{collections::HashMap, ops::{Deref, DerefMut}}; -use yazi_fs::Folder; use yazi_shared::url::Url; +use super::Folder; + #[derive(Default)] pub struct History(HashMap); diff --git a/yazi-core/src/tab/mod.rs b/yazi-core/src/tab/mod.rs index 268c5946d..e925851a4 100644 --- a/yazi-core/src/tab/mod.rs +++ b/yazi-core/src/tab/mod.rs @@ -1,3 +1,3 @@ yazi_macro::mod_pub!(commands); -yazi_macro::mod_flat!(backstack preference finder history mode preview selected tab); +yazi_macro::mod_flat!(backstack finder folder history mode preference preview selected tab); diff --git a/yazi-core/src/tab/tab.rs b/yazi-core/src/tab/tab.rs index 9c483983a..5755ea88b 100644 --- a/yazi-core/src/tab/tab.rs +++ b/yazi-core/src/tab/tab.rs @@ -5,11 +5,11 @@ use ratatui::layout::Rect; use tokio::task::JoinHandle; use yazi_adapter::Dimension; use yazi_config::{LAYOUT, popup::{Origin, Position}}; -use yazi_fs::{File, Folder, FolderStage}; +use yazi_fs::{File, FolderStage}; use yazi_macro::render; use yazi_shared::{Id, Ids, url::Url}; -use super::{Backstack, Finder, History, Mode, Preference, Preview}; +use super::{Backstack, Finder, Folder, History, Mode, Preference, Preview}; use crate::{spot::Spot, tab::Selected}; pub struct Tab { diff --git a/yazi-fm/src/context.rs b/yazi-fm/src/context.rs index 8e4c1b4db..122c2891b 100644 --- a/yazi-fm/src/context.rs +++ b/yazi-fm/src/context.rs @@ -1,6 +1,5 @@ use ratatui::layout::Rect; -use yazi_core::{completion::Completion, confirm::Confirm, help::Help, input::Input, manager::Manager, notify::Notify, pick::Pick, tab::Tab, tasks::Tasks, which::Which}; -use yazi_fs::Folder; +use yazi_core::{completion::Completion, confirm::Confirm, help::Help, input::Input, manager::Manager, notify::Notify, pick::Pick, tab::{Folder, Tab}, tasks::Tasks, which::Which}; pub struct Ctx { pub manager: Manager, diff --git a/yazi-fm/src/lives/file.rs b/yazi-fm/src/lives/file.rs index 2699074a1..32f8d2c44 100644 --- a/yazi-fm/src/lives/file.rs +++ b/yazi-fm/src/lives/file.rs @@ -10,7 +10,7 @@ use crate::Ctx; pub(super) struct File { idx: usize, - folder: *const yazi_fs::Folder, + folder: *const yazi_core::tab::Folder, tab: *const yazi_core::tab::Tab, } @@ -28,14 +28,14 @@ impl File { #[inline] pub(super) fn make( idx: usize, - folder: &yazi_fs::Folder, + folder: &yazi_core::tab::Folder, tab: &yazi_core::tab::Tab, ) -> mlua::Result { Lives::scoped_userdata(Self { idx, folder, tab }) } #[inline] - fn folder(&self) -> &yazi_fs::Folder { unsafe { &*self.folder } } + fn folder(&self) -> &yazi_core::tab::Folder { unsafe { &*self.folder } } #[inline] fn tab(&self) -> &yazi_core::tab::Tab { unsafe { &*self.tab } } diff --git a/yazi-fm/src/lives/files.rs b/yazi-fm/src/lives/files.rs index af747a1d1..64a2de95c 100644 --- a/yazi-fm/src/lives/files.rs +++ b/yazi-fm/src/lives/files.rs @@ -6,7 +6,7 @@ use super::{File, Filter, Lives}; pub(super) struct Files { window: Range, - folder: *const yazi_fs::Folder, + folder: *const yazi_core::tab::Folder, tab: *const yazi_core::tab::Tab, } @@ -20,14 +20,14 @@ impl Files { #[inline] pub(super) fn make( window: Range, - folder: &yazi_fs::Folder, + folder: &yazi_core::tab::Folder, tab: &yazi_core::tab::Tab, ) -> mlua::Result { Lives::scoped_userdata(Self { window, folder, tab }) } #[inline] - fn folder(&self) -> &yazi_fs::Folder { unsafe { &*self.folder } } + fn folder(&self) -> &yazi_core::tab::Folder { unsafe { &*self.folder } } #[inline] fn tab(&self) -> &yazi_core::tab::Tab { unsafe { &*self.tab } } diff --git a/yazi-fm/src/lives/folder.rs b/yazi-fm/src/lives/folder.rs index 3c13ca5c6..92270d571 100644 --- a/yazi-fm/src/lives/folder.rs +++ b/yazi-fm/src/lives/folder.rs @@ -8,12 +8,12 @@ use super::{File, Files, Lives}; pub(super) struct Folder { window: Range, - inner: *const yazi_fs::Folder, + inner: *const yazi_core::tab::Folder, tab: *const yazi_core::tab::Tab, } impl Deref for Folder { - type Target = yazi_fs::Folder; + type Target = yazi_core::tab::Folder; fn deref(&self) -> &Self::Target { unsafe { &*self.inner } } } @@ -22,7 +22,7 @@ impl Folder { #[inline] pub(super) fn make( window: Option>, - inner: &yazi_fs::Folder, + inner: &yazi_core::tab::Folder, tab: &yazi_core::tab::Tab, ) -> mlua::Result { let window = match window { diff --git a/yazi-fs/src/lib.rs b/yazi-fs/src/lib.rs index 29e4a1144..235160e57 100644 --- a/yazi-fs/src/lib.rs +++ b/yazi-fs/src/lib.rs @@ -1,3 +1,3 @@ -#![allow(clippy::if_same_then_else)] +#![allow(clippy::if_same_then_else, clippy::option_map_unit_fn)] -yazi_macro::mod_flat!(cha file files filter fns folder op path sorter sorting stage step xdg); +yazi_macro::mod_flat!(cha file files filter fns op path sorter sorting stage step xdg);