destroy recordings when audio/video destroyed
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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 && (
|
||||
|
||||
Reference in New Issue
Block a user