From 9e9c9545605866e48f8d49115dccf4a918c5dbcc Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Sun, 9 Mar 2025 17:33:46 +0800 Subject: [PATCH] refactor: Extract file path utility functions Move hardcoded file path generation logic to dedicated utility functions in file.ts, improving code modularity and reducing duplication across services and IPC handlers --- src/main/ipc.ts | 4 ++-- src/main/services/FileStorage.ts | 7 +++---- src/main/services/WindowService.ts | 5 +++-- src/main/utils/file.ts | 10 ++++++++++ 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/ipc.ts b/src/main/ipc.ts index 8369879c..f918ea18 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -1,5 +1,4 @@ import fs from 'node:fs' -import path from 'node:path' import { MCPServer, Shortcut, ThemeMode } from '@types' import { BrowserWindow, ipcMain, ProxyConfig, session, shell } from 'electron' @@ -20,6 +19,7 @@ import { TrayService } from './services/TrayService' import { windowService } from './services/WindowService' import { getResourcePath } from './utils' import { decrypt, encrypt } from './utils/aes' +import { getFilesDir } from './utils/file' import { compress, decompress } from './utils/zip' const fileManager = new FileStorage() @@ -34,7 +34,7 @@ export function registerIpc(mainWindow: BrowserWindow, app: Electron.App) { version: app.getVersion(), isPackaged: app.isPackaged, appPath: app.getAppPath(), - filesPath: path.join(app.getPath('userData'), 'Data', 'Files'), + filesPath: getFilesDir(), appDataPath: app.getPath('userData'), resourcesPath: getResourcePath(), logsPath: log.transports.file.getFile().path diff --git a/src/main/services/FileStorage.ts b/src/main/services/FileStorage.ts index 06b64744..b226fb4e 100644 --- a/src/main/services/FileStorage.ts +++ b/src/main/services/FileStorage.ts @@ -1,9 +1,8 @@ -import { getFileType } from '@main/utils/file' +import { getFilesDir, getFileType, getTempDir } from '@main/utils/file' import { documentExts, imageExts } from '@shared/config/constant' import { FileType } from '@types' import * as crypto from 'crypto' import { - app, dialog, OpenDialogOptions, OpenDialogReturnValue, @@ -21,8 +20,8 @@ import { chdir } from 'process' import { v4 as uuidv4 } from 'uuid' class FileStorage { - private storageDir = path.join(app.getPath('userData'), 'Data', 'Files') - private tempDir = path.join(app.getPath('temp'), 'CherryStudio') + private storageDir = getFilesDir() + private tempDir = getTempDir() constructor() { this.initStorageDir() diff --git a/src/main/services/WindowService.ts b/src/main/services/WindowService.ts index 0766265d..8b1e2853 100644 --- a/src/main/services/WindowService.ts +++ b/src/main/services/WindowService.ts @@ -1,9 +1,10 @@ import { is } from '@electron-toolkit/utils' import { isLinux, isWin } from '@main/constant' +import { getFilesDir } from '@main/utils/file' import { app, BrowserWindow, ipcMain, Menu, MenuItem, shell } from 'electron' import Logger from 'electron-log' import windowStateKeeper from 'electron-window-state' -import path, { join } from 'path' +import { join } from 'path' import icon from '../../../build/icon.png?asset' import { titleBarOverlayDark, titleBarOverlayLight } from '../config' @@ -196,7 +197,7 @@ export class WindowService { if (url.includes('http://file/')) { const fileName = url.replace('http://file/', '') - const storageDir = path.join(app.getPath('userData'), 'Data', 'Files') + const storageDir = getFilesDir() const filePath = storageDir + '/' + fileName shell.openPath(filePath).catch((err) => Logger.error('Failed to open file:', err)) } else { diff --git a/src/main/utils/file.ts b/src/main/utils/file.ts index 3bc34183..20e89fe4 100644 --- a/src/main/utils/file.ts +++ b/src/main/utils/file.ts @@ -3,6 +3,7 @@ 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' export function getFileType(ext: string): FileTypes { @@ -14,6 +15,7 @@ export function getFileType(ext: string): FileTypes { if (documentExts.includes(ext)) return FileTypes.DOCUMENT return FileTypes.OTHER } + export function getAllFiles(dirPath: string, arrayOfFiles: FileType[] = []): FileType[] { const files = fs.readdirSync(dirPath) @@ -54,3 +56,11 @@ export function getAllFiles(dirPath: string, arrayOfFiles: FileType[] = []): Fil return arrayOfFiles } + +export function getTempDir() { + return path.join(app.getPath('temp'), 'CherryStudio') +} + +export function getFilesDir() { + return path.join(app.getPath('userData'), 'Data', 'Files') +}