enhance(file):加入文件信息扫描功能。
This commit is contained in:
parent
c98a58b8bf
commit
db70eb25d9
|
@ -6,6 +6,8 @@ use walkdir::WalkDir;
|
||||||
pub struct FileItem {
|
pub struct FileItem {
|
||||||
pub filename: String,
|
pub filename: String,
|
||||||
pub path: String,
|
pub path: String,
|
||||||
|
pub height: u32,
|
||||||
|
pub width: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
|
@ -15,6 +17,7 @@ pub fn scan_directory(target: String) -> Result<Vec<FileItem>, String> {
|
||||||
.filter_map(|f| f.ok())
|
.filter_map(|f| f.ok())
|
||||||
.filter(|f| f.path().is_file())
|
.filter(|f| f.path().is_file())
|
||||||
.map(|f| {
|
.map(|f| {
|
||||||
|
let (width, height) = image::image_dimensions(f.path())?;
|
||||||
Ok(FileItem {
|
Ok(FileItem {
|
||||||
filename: f
|
filename: f
|
||||||
.path()
|
.path()
|
||||||
|
@ -29,6 +32,8 @@ pub fn scan_directory(target: String) -> Result<Vec<FileItem>, String> {
|
||||||
.to_str()
|
.to_str()
|
||||||
.ok_or(anyhow!("不能获取到文件路径。"))?
|
.ok_or(anyhow!("不能获取到文件路径。"))?
|
||||||
.to_string(),
|
.to_string(),
|
||||||
|
width,
|
||||||
|
height,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.collect::<Result<Vec<FileItem>, anyhow::Error>>()
|
.collect::<Result<Vec<FileItem>, anyhow::Error>>()
|
||||||
|
|
|
@ -2,14 +2,15 @@ import { Box, Stack } from '@mantine/core';
|
||||||
import { useVirtualizer } from '@tanstack/react-virtual';
|
import { useVirtualizer } from '@tanstack/react-virtual';
|
||||||
import EventEmitter from 'events';
|
import EventEmitter from 'events';
|
||||||
import { filter, indexOf, isEmpty, length, map, pluck } from 'ramda';
|
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 { EventBusContext } from '../EventBus';
|
||||||
import { useFileListStore } from '../states/files';
|
import { useFileListStore } from '../states/files';
|
||||||
import { useZoomState } from '../states/zoom';
|
import { useZoomState } from '../states/zoom';
|
||||||
import { withinRange } from '../utils/offset_func';
|
import { withinRange } from '../utils/offset_func';
|
||||||
|
|
||||||
export const ContinuationView: FC = () => {
|
export const ContinuationView: FC = () => {
|
||||||
const files = useFileListStore.use.files();
|
const { files } = useFileListStore();
|
||||||
const zoom = useZoomState.use.currentZoom();
|
const zoom = useZoomState.use.currentZoom();
|
||||||
const viewHeight = useZoomState.use.viewHeight();
|
const viewHeight = useZoomState.use.viewHeight();
|
||||||
const updateActives = useFileListStore.use.updateActiveFiles();
|
const updateActives = useFileListStore.use.updateActiveFiles();
|
||||||
|
@ -23,20 +24,21 @@ export const ContinuationView: FC = () => {
|
||||||
});
|
});
|
||||||
const items = virtualizer.getVirtualItems();
|
const items = virtualizer.getVirtualItems();
|
||||||
|
|
||||||
useEffect(() => {
|
useLifecycles(
|
||||||
ebus?.addListener('navigate_offset', ({ filename }) => {
|
() => {
|
||||||
let index = indexOf(filename, pluck('filename', files));
|
ebus?.addListener('navigate_offset', ({ filename }) => {
|
||||||
virtualizer.scrollToIndex(index);
|
let index = indexOf(filename, pluck('filename', files));
|
||||||
});
|
virtualizer.scrollToIndex(index);
|
||||||
ebus?.addListener('reset_views', () => {
|
});
|
||||||
virtualizer.scrollToOffset(0);
|
ebus?.addListener('reset_views', () => {
|
||||||
});
|
virtualizer.scrollToOffset(0);
|
||||||
|
});
|
||||||
return () => {
|
},
|
||||||
|
() => {
|
||||||
ebus?.removeAllListeners('navigate_offset');
|
ebus?.removeAllListeners('navigate_offset');
|
||||||
ebus?.removeAllListeners('reset_views');
|
ebus?.removeAllListeners('reset_views');
|
||||||
};
|
}
|
||||||
}, [ebus, files, virtualizer]);
|
);
|
||||||
|
|
||||||
useLayoutEffect(() => {
|
useLayoutEffect(() => {
|
||||||
let rangeStart = virtualizer.scrollOffset;
|
let rangeStart = virtualizer.scrollOffset;
|
||||||
|
|
|
@ -2,4 +2,6 @@ export type FileItem = {
|
||||||
sort: number;
|
sort: number;
|
||||||
filename: string;
|
filename: string;
|
||||||
path: string;
|
path: string;
|
||||||
|
width: number;
|
||||||
|
height: number;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user