/** * Functions for managing user data stored on disk. * All filesystem / shell operations are proxied to the main process * via window.electronAPI (defined in src/preload/index.ts). */ import path from 'pathe'; import Papa from 'papaparse'; import { ExperimentStateType } from '../../reducers/experimentReducer'; import { ExperimentParameters } from '../../constants/interfaces'; // electronAPI is injected by the preload script declare global { interface Window { // eslint-disable-next-line @typescript-eslint/no-explicit-any electronAPI: any; } } const api = () => window.electronAPI; // ----------------------------------------------------------------------------------------------- // Creating and Getting export const getWorkspaceDir = (title: string): Promise => api().getWorkspaceDir(title); export const createWorkspaceDir = (title: string): Promise => api().createWorkspaceDir(title); export const openWorkspaceDir = (title: string): Promise => api().showItemInFolder(path.join('BrainWaves_Workspaces', title)); // ----------------------------------------------------------------------------------------------- // Storing export const storeExperimentState = ( state: ExperimentStateType ): Promise => api().storeExperimentState(state); export const restoreExperimentState = ( state: ExperimentStateType ): Promise => api().restoreExperimentState(state); export const storeBehavioralData = ( csv: string, title: string, subject: string, group: string, session: number ): Promise => api().storeBehavioralData(csv, title, subject, group, session); export const storePyodideImageSvg = ( title: string, imageTitle: string, svgContent: string ): Promise => api().storePyodideImageSvg(title, imageTitle, svgContent); export const storePyodideImagePng = ( title: string, imageTitle: string, rawData: ArrayBuffer ): Promise => api().storePyodideImagePng(title, imageTitle, rawData); // ----------------------------------------------------------------------------------------------- // Reading export const readWorkspaces = (): Promise => api().readWorkspaces(); export const readWorkspaceRawEEGData = (title: string) => api().readWorkspaceRawEEGData(title); export const readWorkspaceCleanedEEGData = (title: string) => api().readWorkspaceCleanedEEGData(title); export const readWorkspaceBehaviorData = (title: string) => api().readWorkspaceBehaviorData(title); export const readAndParseState = ( dir: string ): Promise => api().readAndParseState(dir); export const readImages = (dir: string): Promise => api().readImages(dir); export const getImages = (params: ExperimentParameters): Promise => api().getImages(params); export const readBehaviorData = (files: string[]) => api().readBehaviorData(files); export const storeAggregatedBehaviorData = ( data: unknown, title: string ): Promise => api().storeAggregatedBehaviorData(data, title); // ----------------------------------------------------------------------------------------------- // Util export const mkdirPathSync = (_dirPath: string): void => { // Directory creation is handled in the main process; this is a no-op in the renderer }; export const getSubjectNamesFromFiles = (filePaths: string[]): string[] => filePaths .map((filePath) => path.basename(filePath)) .map((fileName) => fileName.substring(0, fileName.indexOf('-'))); export const deleteWorkspaceDir = (title: string): Promise => api().deleteWorkspaceDir(title); export const checkFileExists = ( title: string, subject: string, filename: string ): Promise => api().checkFileExists(title, subject, filename); // Kept for backward compatibility — converts CSV string to parsed object using PapaParse export const convertCSVToObject = (csv: string) => Papa.parse(csv, { header: true });