destroy recordings when audio/video destroyed
This commit is contained in:
@@ -208,6 +208,12 @@ export class Audio extends Model<Audio> {
|
|||||||
@AfterDestroy
|
@AfterDestroy
|
||||||
static cleanupFile(audio: Audio) {
|
static cleanupFile(audio: Audio) {
|
||||||
fs.remove(audio.filePath);
|
fs.remove(audio.filePath);
|
||||||
|
Recording.destroy({
|
||||||
|
where: {
|
||||||
|
targetId: audio.id,
|
||||||
|
targetType: "Audio",
|
||||||
|
},
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static async buildFromLocalFile(
|
static async buildFromLocalFile(
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import { app } from "electron";
|
|
||||||
import {
|
import {
|
||||||
AfterCreate,
|
AfterCreate,
|
||||||
AfterUpdate,
|
AfterUpdate,
|
||||||
@@ -28,6 +27,8 @@ import webApi from "@main/web-api";
|
|||||||
import { AzureSpeechSdk } from "@main/azure-speech-sdk";
|
import { AzureSpeechSdk } from "@main/azure-speech-sdk";
|
||||||
import camelcaseKeys from "camelcase-keys";
|
import camelcaseKeys from "camelcase-keys";
|
||||||
|
|
||||||
|
const logger = log.scope("db/models/recording");
|
||||||
|
|
||||||
@Table({
|
@Table({
|
||||||
modelName: "Recording",
|
modelName: "Recording",
|
||||||
tableName: "recordings",
|
tableName: "recordings",
|
||||||
@@ -119,7 +120,7 @@ export class Recording extends Model<Recording> {
|
|||||||
return storage
|
return storage
|
||||||
.put(this.md5, this.filePath)
|
.put(this.md5, this.filePath)
|
||||||
.then((result) => {
|
.then((result) => {
|
||||||
log.debug("[RECORDING]", "upload result:", result.data);
|
logger.debug("upload result:", result.data);
|
||||||
if (result.data.success) {
|
if (result.data.success) {
|
||||||
this.update({ uploadedAt: new Date() });
|
this.update({ uploadedAt: new Date() });
|
||||||
} else {
|
} else {
|
||||||
@@ -127,7 +128,7 @@ export class Recording extends Model<Recording> {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
log.error("[RECORDING]", "upload failed:", err.message);
|
logger.error("upload failed:", err.message);
|
||||||
throw err;
|
throw err;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -187,10 +188,10 @@ export class Recording extends Model<Recording> {
|
|||||||
if (!Array.isArray(findResult)) findResult = [findResult];
|
if (!Array.isArray(findResult)) findResult = [findResult];
|
||||||
|
|
||||||
for (const instance of findResult) {
|
for (const instance of findResult) {
|
||||||
if (instance.targetType === "Audio" && instance.audio !== undefined) {
|
if (instance.targetType === "Audio" && instance.audio) {
|
||||||
instance.target = instance.audio.toJSON();
|
instance.target = instance.audio.toJSON();
|
||||||
}
|
}
|
||||||
if (instance.targetType === "Video" && instance.video !== undefined) {
|
if (instance.targetType === "Video" && instance.video) {
|
||||||
instance.target = instance.video.toJSON();
|
instance.target = instance.video.toJSON();
|
||||||
}
|
}
|
||||||
// To prevent mistakes:
|
// To prevent mistakes:
|
||||||
@@ -243,6 +244,13 @@ export class Recording extends Model<Recording> {
|
|||||||
by: recording.duration,
|
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,
|
timestamps: true,
|
||||||
})
|
})
|
||||||
export class Video extends Model<Video> {
|
export class Video extends Model<Video> {
|
||||||
@IsUUID('all')
|
@IsUUID("all")
|
||||||
@Default(DataType.UUIDV4)
|
@Default(DataType.UUIDV4)
|
||||||
@Column({ primaryKey: true, type: DataType.UUID })
|
@Column({ primaryKey: true, type: DataType.UUID })
|
||||||
id: string;
|
id: string;
|
||||||
@@ -230,6 +230,12 @@ export class Video extends Model<Video> {
|
|||||||
@AfterDestroy
|
@AfterDestroy
|
||||||
static cleanupFile(video: Video) {
|
static cleanupFile(video: Video) {
|
||||||
fs.remove(video.filePath);
|
fs.remove(video.filePath);
|
||||||
|
Recording.destroy({
|
||||||
|
where: {
|
||||||
|
targetId: video.id,
|
||||||
|
targetType: "Video",
|
||||||
|
},
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static async buildFromLocalFile(
|
static async buildFromLocalFile(
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ export const RecordingActivities = (props: { from: string; to: string }) => {
|
|||||||
to,
|
to,
|
||||||
})
|
})
|
||||||
.then((_activities) => {
|
.then((_activities) => {
|
||||||
setActitivies(_activities);
|
setActitivies(_activities || []);
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
@@ -88,6 +88,11 @@ const Activity = (props: {
|
|||||||
};
|
};
|
||||||
}) => {
|
}) => {
|
||||||
const { activity, displayDate } = props;
|
const { activity, displayDate } = props;
|
||||||
|
|
||||||
|
if (!activity.target) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{displayDate && (
|
{displayDate && (
|
||||||
|
|||||||
Reference in New Issue
Block a user