82 lines
2.2 KiB
TypeScript
82 lines
2.2 KiB
TypeScript
import * as fs from 'node:fs'
|
|
import os from 'node:os'
|
|
import path from 'node:path'
|
|
|
|
import { audioExts, documentExts, imageExts, textExts, videoExts } from '@shared/config/constant'
|
|
import { FileType, FileTypes } from '@types'
|
|
import { app } from 'electron'
|
|
import { v4 as uuidv4 } from 'uuid'
|
|
|
|
// 创建文件类型映射表,提高查找效率
|
|
const fileTypeMap = new Map<string, FileTypes>()
|
|
|
|
// 初始化映射表
|
|
function initFileTypeMap() {
|
|
imageExts.forEach((ext) => fileTypeMap.set(ext, FileTypes.IMAGE))
|
|
videoExts.forEach((ext) => fileTypeMap.set(ext, FileTypes.VIDEO))
|
|
audioExts.forEach((ext) => fileTypeMap.set(ext, FileTypes.AUDIO))
|
|
textExts.forEach((ext) => fileTypeMap.set(ext, FileTypes.TEXT))
|
|
documentExts.forEach((ext) => fileTypeMap.set(ext, FileTypes.DOCUMENT))
|
|
}
|
|
|
|
// 初始化映射表
|
|
initFileTypeMap()
|
|
|
|
export function getFileType(ext: string): FileTypes {
|
|
ext = ext.toLowerCase()
|
|
return fileTypeMap.get(ext) || FileTypes.OTHER
|
|
}
|
|
|
|
export function getAllFiles(dirPath: string, arrayOfFiles: FileType[] = []): FileType[] {
|
|
const files = fs.readdirSync(dirPath)
|
|
|
|
files.forEach((file) => {
|
|
if (file.startsWith('.')) {
|
|
return
|
|
}
|
|
|
|
const fullPath = path.join(dirPath, file)
|
|
if (fs.statSync(fullPath).isDirectory()) {
|
|
arrayOfFiles = getAllFiles(fullPath, arrayOfFiles)
|
|
} else {
|
|
const ext = path.extname(file)
|
|
const fileType = getFileType(ext)
|
|
|
|
if ([FileTypes.OTHER, FileTypes.IMAGE, FileTypes.VIDEO, FileTypes.AUDIO].includes(fileType)) {
|
|
return
|
|
}
|
|
|
|
const name = path.basename(file)
|
|
const size = fs.statSync(fullPath).size
|
|
|
|
const fileItem: FileType = {
|
|
id: uuidv4(),
|
|
name,
|
|
path: fullPath,
|
|
size,
|
|
ext,
|
|
count: 1,
|
|
origin_name: name,
|
|
type: fileType,
|
|
created_at: new Date().toISOString()
|
|
}
|
|
|
|
arrayOfFiles.push(fileItem)
|
|
}
|
|
})
|
|
|
|
return arrayOfFiles
|
|
}
|
|
|
|
export function getTempDir() {
|
|
return path.join(app.getPath('temp'), 'CherryStudio')
|
|
}
|
|
|
|
export function getFilesDir() {
|
|
return path.join(app.getPath('userData'), 'Data', 'Files')
|
|
}
|
|
|
|
export function getConfigDir() {
|
|
return path.join(os.homedir(), '.cherrystudio', 'config')
|
|
}
|