Files
AudioSort/src/shared/models.ts
2025-11-06 02:27:46 +11:00

110 lines
2.8 KiB
TypeScript

/**
* Represents a summarized view of an audio file for list displays and searches.
*/
export interface AudioFileSummary {
/** Unique identifier inside the database. */
id: number;
/** Filename with extension. */
fileName: string;
/** User-friendly display name (no extension). */
displayName: string;
/** Absolute path on disk. */
absolutePath: string;
/** Path relative to the configured library root. */
relativePath: string;
/** Last modified timestamp (epoch milliseconds). */
modifiedAt: number;
/** File creation timestamp (epoch milliseconds) if available. */
createdAt: number | null;
/** File size in bytes. */
size: number;
/** Duration in milliseconds if known. */
durationMs: number | null;
/** Sample rate in Hz if known. */
sampleRate: number | null;
/** Bit depth if known. */
bitDepth: number | null;
/** Content checksum used for duplicate detection. */
checksum: string | null;
/** Applied descriptive tags. */
tags: string[];
/** Associated UCS categories. */
categories: string[];
/** Custom name for file organization. */
customName: string | null;
}
/**
* Represents a group of files that share the same checksum.
*/
export interface DuplicateGroup {
/** MD5 checksum shared by all files in the group. */
checksum: string;
/** Files that have identical content. */
files: AudioFileSummary[];
}
/**
* Structure describing a UCS category.
*/
export interface CategoryRecord {
/** Category identifier (CatID from UCS). */
id: string;
/** High level category name. */
category: string;
/** Sub-category label. */
subCategory: string;
/** Short hand for the category. */
shortCode: string;
/** Human readable explanation. */
explanation: string;
/** List of synonym keywords. */
synonyms: string[];
}
/**
* Summary report for a library scan run.
*/
export interface LibraryScanSummary {
/** Number of newly discovered files. */
added: number;
/** Number of existing records refreshed. */
updated: number;
/** Number of database records removed because the files disappeared. */
removed: number;
/** Total records after the scan. */
total: number;
}
/**
* Shape of persisted application settings.
*/
export interface AppSettings {
/** Current library root path. */
libraryPath: string | null;
}
/**
* Payload for tag updates flowing from the renderer to the main process.
*/
export interface TagUpdatePayload {
/** Target audio file id. */
fileId: number;
/** Free-form tag collection. */
tags: string[];
/** UCS category identifiers to attach. */
categories: string[];
}
/**
* Response for playback requests containing file binary data.
*/
export interface AudioBufferPayload {
/** Original file id to trace usage. */
fileId: number;
/** Raw audio data. */
buffer: ArrayBuffer;
/** MIME type for the audio data. */
mimeType: string;
}