enhance(file):加入文件信息扫描功能。

This commit is contained in:
徐涛 2023-03-09 09:55:52 +08:00
parent c98a58b8bf
commit db70eb25d9
3 changed files with 23 additions and 14 deletions

View File

@ -6,6 +6,8 @@ use walkdir::WalkDir;
pub struct FileItem {
pub filename: String,
pub path: String,
pub height: u32,
pub width: u32,
}
#[tauri::command]
@ -15,6 +17,7 @@ pub fn scan_directory(target: String) -> Result<Vec<FileItem>, String> {
.filter_map(|f| f.ok())
.filter(|f| f.path().is_file())
.map(|f| {
let (width, height) = image::image_dimensions(f.path())?;
Ok(FileItem {
filename: f
.path()
@ -29,6 +32,8 @@ pub fn scan_directory(target: String) -> Result<Vec<FileItem>, String> {
.to_str()
.ok_or(anyhow!("不能获取到文件路径。"))?
.to_string(),
width,
height,
})
})
.collect::<Result<Vec<FileItem>, anyhow::Error>>()

View File

@ -2,14 +2,15 @@ import { Box, Stack } from '@mantine/core';
import { useVirtualizer } from '@tanstack/react-virtual';
import EventEmitter from 'events';
import { filter, indexOf, isEmpty, length, map, pluck } from 'ramda';
import { FC, useContext, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
import { FC, useContext, useLayoutEffect, useMemo, useRef } from 'react';
import { useLifecycles } from 'react-use';
import { EventBusContext } from '../EventBus';
import { useFileListStore } from '../states/files';
import { useZoomState } from '../states/zoom';
import { withinRange } from '../utils/offset_func';
export const ContinuationView: FC = () => {
const files = useFileListStore.use.files();
const { files } = useFileListStore();
const zoom = useZoomState.use.currentZoom();
const viewHeight = useZoomState.use.viewHeight();
const updateActives = useFileListStore.use.updateActiveFiles();
@ -23,7 +24,8 @@ export const ContinuationView: FC = () => {
});
const items = virtualizer.getVirtualItems();
useEffect(() => {
useLifecycles(
() => {
ebus?.addListener('navigate_offset', ({ filename }) => {
let index = indexOf(filename, pluck('filename', files));
virtualizer.scrollToIndex(index);
@ -31,12 +33,12 @@ export const ContinuationView: FC = () => {
ebus?.addListener('reset_views', () => {
virtualizer.scrollToOffset(0);
});
return () => {
},
() => {
ebus?.removeAllListeners('navigate_offset');
ebus?.removeAllListeners('reset_views');
};
}, [ebus, files, virtualizer]);
}
);
useLayoutEffect(() => {
let rangeStart = virtualizer.scrollOffset;

View File

@ -2,4 +2,6 @@ export type FileItem = {
sort: number;
filename: string;
path: string;
width: number;
height: number;
};