destroy recordings when audio/video destroyed

This commit is contained in:
an-lee
2024-01-10 22:01:11 +08:00
parent c813a53a1e
commit f9b2ed849b
4 changed files with 32 additions and 7 deletions

View File

@@ -208,6 +208,12 @@ export class Audio extends Model<Audio> {
@AfterDestroy
static cleanupFile(audio: Audio) {
fs.remove(audio.filePath);
Recording.destroy({
where: {
targetId: audio.id,
targetType: "Audio",
},
});
}
static async buildFromLocalFile(

View File

@@ -1,4 +1,3 @@
import { app } from "electron";
import {
AfterCreate,
AfterUpdate,
@@ -28,6 +27,8 @@ import webApi from "@main/web-api";
import { AzureSpeechSdk } from "@main/azure-speech-sdk";
import camelcaseKeys from "camelcase-keys";
const logger = log.scope("db/models/recording");
@Table({
modelName: "Recording",
tableName: "recordings",
@@ -119,7 +120,7 @@ export class Recording extends Model<Recording> {
return storage
.put(this.md5, this.filePath)
.then((result) => {
log.debug("[RECORDING]", "upload result:", result.data);
logger.debug("upload result:", result.data);
if (result.data.success) {
this.update({ uploadedAt: new Date() });
} else {
@@ -127,7 +128,7 @@ export class Recording extends Model<Recording> {
}
})
.catch((err) => {
log.error("[RECORDING]", "upload failed:", err.message);
logger.error("upload failed:", err.message);
throw err;
});
}
@@ -187,10 +188,10 @@ export class Recording extends Model<Recording> {
if (!Array.isArray(findResult)) findResult = [findResult];
for (const instance of findResult) {
if (instance.targetType === "Audio" && instance.audio !== undefined) {
if (instance.targetType === "Audio" && instance.audio) {
instance.target = instance.audio.toJSON();
}
if (instance.targetType === "Video" && instance.video !== undefined) {
if (instance.targetType === "Video" && instance.video) {
instance.target = instance.video.toJSON();
}
// To prevent mistakes:
@@ -243,6 +244,13 @@ export class Recording extends Model<Recording> {
by: recording.duration,
});
});
} else if (recording.targetType === "Video") {
Video.findByPk(recording.targetId).then((video) => {
video.decrement("recordingsCount");
video.decrement("recordingsDuration", {
by: recording.duration,
});
});
}
}

View File

@@ -37,7 +37,7 @@ const logger = log.scope("db/models/video");
timestamps: true,
})
export class Video extends Model<Video> {
@IsUUID('all')
@IsUUID("all")
@Default(DataType.UUIDV4)
@Column({ primaryKey: true, type: DataType.UUID })
id: string;
@@ -230,6 +230,12 @@ export class Video extends Model<Video> {
@AfterDestroy
static cleanupFile(video: Video) {
fs.remove(video.filePath);
Recording.destroy({
where: {
targetId: video.id,
targetType: "Video",
},
});
}
static async buildFromLocalFile(

View File

@@ -28,7 +28,7 @@ export const RecordingActivities = (props: { from: string; to: string }) => {
to,
})
.then((_activities) => {
setActitivies(_activities);
setActitivies(_activities || []);
})
.finally(() => {
setLoading(false);
@@ -88,6 +88,11 @@ const Activity = (props: {
};
}) => {
const { activity, displayDate } = props;
if (!activity.target) {
return null;
}
return (
<>
{displayDate && (