fix unique ID for the same audio/video

This commit is contained in:
an-lee
2024-01-10 10:44:46 +08:00
parent 3fb5a429b7
commit dd7e932e71
6 changed files with 20 additions and 16 deletions

View File

@@ -2,6 +2,7 @@ import {
AfterCreate,
AfterUpdate,
AfterDestroy,
BeforeSave,
BeforeCreate,
BelongsTo,
Table,
@@ -37,7 +38,7 @@ const logger = log.scope("db/models/audio");
timestamps: true,
})
export class Audio extends Model<Audio> {
@IsUUID(4)
@IsUUID("all")
@Default(DataType.UUIDV4)
@Column({ primaryKey: true, type: DataType.UUID })
id: string;
@@ -175,11 +176,6 @@ export class Audio extends Model<Audio> {
} catch (err) {
logger.error("failed to generate metadata", err.message);
}
// Generate unique ID base on user ID and audio MD5
const userId = settings.getSync("user.id");
audio.id = uuidv5(`${userId}/${audio.md5}`, uuidv5.URL);
logger.info("generated ID:", audio.id);
}
@AfterCreate
@@ -241,6 +237,11 @@ export class Audio extends Model<Audio> {
const md5 = await hashFile(filePath, { algo: "md5" });
// Generate ID
const userId = settings.getSync("user.id");
const id = uuidv5(`${userId}/${md5}`, uuidv5.URL);
logger.debug("Generated ID:", id);
const destDir = path.join(settings.userDataPath(), "audios");
const destFile = path.join(destDir, `${md5}${extname}`);
@@ -265,6 +266,7 @@ export class Audio extends Model<Audio> {
coverUrl,
} = params || {};
const record = this.build({
id,
source,
md5,
name,

View File

@@ -31,7 +31,7 @@ import webApi from "@main/web-api";
},
}))
export class PronunciationAssessment extends Model<PronunciationAssessment> {
@IsUUID(4)
@IsUUID('all')
@Default(DataType.UUIDV4)
@Column({ primaryKey: true, type: DataType.UUID })
id: string;

View File

@@ -35,7 +35,7 @@ import camelcaseKeys from "camelcase-keys";
timestamps: true,
})
export class Recording extends Model<Recording> {
@IsUUID(4)
@IsUUID('all')
@Default(DataType.UUIDV4)
@Column({ primaryKey: true, type: DataType.UUID })
id: string;

View File

@@ -25,7 +25,7 @@ const logger = log.scope("db/models/transcription");
timestamps: true,
})
export class Transcription extends Model<Transcription> {
@IsUUID(4)
@IsUUID('all')
@Default(DataType.UUIDV4)
@Column({ primaryKey: true, type: DataType.UUID })
id: string;

View File

@@ -37,7 +37,7 @@ const logger = log.scope("db/models/video");
timestamps: true,
})
export class Video extends Model<Video> {
@IsUUID(4)
@IsUUID('all')
@Default(DataType.UUIDV4)
@Column({ primaryKey: true, type: DataType.UUID })
id: string;
@@ -196,11 +196,6 @@ export class Video extends Model<Video> {
} catch (err) {
logger.error("failed to generate metadata", err.message);
}
// Generate unique ID base on user ID and audio MD5
const userId = settings.getSync("user.id");
video.id = uuidv5(`${userId}/${video.md5}`, uuidv5.URL);
logger.info("generated ID:", video.id);
}
@AfterCreate
@@ -263,6 +258,11 @@ export class Video extends Model<Video> {
const md5 = await hashFile(filePath, { algo: "md5" });
// Generate ID
const userId = settings.getSync("user.id");
const id = uuidv5(`${userId}/${md5}`, uuidv5.URL);
logger.debug("Generated ID:", id);
const destDir = path.join(settings.userDataPath(), "videos");
const destFile = path.join(destDir, `${md5}${extname}`);
@@ -287,6 +287,7 @@ export class Video extends Model<Video> {
coverUrl,
} = params || {};
const record = this.build({
id,
source,
md5,
name,

View File

@@ -2,7 +2,7 @@ import log from "electron-log/main";
import $ from "cheerio";
import { BrowserView, ipcMain } from "electron";
const logger = log.scope("AUDIBLE_PROVIDER");
const logger = log.scope("providers/audible-provider");
export class AudibleProvider {
baseURL: string;
@@ -12,6 +12,7 @@ export class AudibleProvider {
}
scrape = async (path: string) => {
logger.debug(`Scraping ${this.baseURL + path}`);
return new Promise<string>((resolve, reject) => {
const view = new BrowserView();
view.webContents.loadURL(this.baseURL + path);