From 91d842ed475d16318ca17b6e3ffecfb3e9279ce7 Mon Sep 17 00:00:00 2001 From: WithoutPants <53250216+WithoutPants@users.noreply.github.com> Date: Fri, 10 Apr 2020 08:39:41 +1000 Subject: [PATCH] Delete marker preview on marker change or delete (#446) --- pkg/api/resolver_mutation_scene.go | 37 +++++++++++++++++++++++++++++- pkg/manager/scene.go | 21 +++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/pkg/api/resolver_mutation_scene.go b/pkg/api/resolver_mutation_scene.go index e170563b1..e2d6067df 100644 --- a/pkg/api/resolver_mutation_scene.go +++ b/pkg/api/resolver_mutation_scene.go @@ -454,6 +454,14 @@ func (r *mutationResolver) SceneMarkerUpdate(ctx context.Context, input models.S func (r *mutationResolver) SceneMarkerDestroy(ctx context.Context, id string) (bool, error) { qb := models.NewSceneMarkerQueryBuilder() tx := database.DB.MustBeginTx(ctx, nil) + + markerID, _ := strconv.Atoi(id) + marker, err := qb.Find(markerID) + + if err != nil { + return false, err + } + if err := qb.Destroy(id, tx); err != nil { _ = tx.Rollback() return false, err @@ -461,6 +469,16 @@ func (r *mutationResolver) SceneMarkerDestroy(ctx context.Context, id string) (b if err := tx.Commit(); err != nil { return false, err } + + // delete the preview for the marker + sqb := models.NewSceneQueryBuilder() + scene, _ := sqb.Find(int(marker.SceneID.Int64)) + + if scene != nil { + seconds := int(marker.Seconds) + manager.DeleteSceneMarkerFiles(scene, seconds) + } + return true, nil } @@ -470,13 +488,18 @@ func changeMarker(ctx context.Context, changeType int, changedMarker models.Scen qb := models.NewSceneMarkerQueryBuilder() jqb := models.NewJoinsQueryBuilder() + var existingMarker *models.SceneMarker var sceneMarker *models.SceneMarker var err error switch changeType { case create: sceneMarker, err = qb.Create(changedMarker, tx) case update: - sceneMarker, err = qb.Update(changedMarker, tx) + // check to see if timestamp was changed + existingMarker, err = qb.Find(changedMarker.ID) + if err == nil { + sceneMarker, err = qb.Update(changedMarker, tx) + } } if err != nil { _ = tx.Rollback() @@ -514,6 +537,18 @@ func changeMarker(ctx context.Context, changeType int, changedMarker models.Scen return nil, err } + // remove the marker preview if the timestamp was changed + if existingMarker != nil && existingMarker.Seconds != changedMarker.Seconds { + sqb := models.NewSceneQueryBuilder() + + scene, _ := sqb.Find(int(existingMarker.SceneID.Int64)) + + if scene != nil { + seconds := int(existingMarker.Seconds) + manager.DeleteSceneMarkerFiles(scene, seconds) + } + } + return sceneMarker, nil } diff --git a/pkg/manager/scene.go b/pkg/manager/scene.go index 1bca4568f..9afb07221 100644 --- a/pkg/manager/scene.go +++ b/pkg/manager/scene.go @@ -122,6 +122,27 @@ func DeleteGeneratedSceneFiles(scene *models.Scene) { } } +func DeleteSceneMarkerFiles(scene *models.Scene, seconds int) { + videoPath := GetInstance().Paths.SceneMarkers.GetStreamPath(scene.Checksum, seconds) + imagePath := GetInstance().Paths.SceneMarkers.GetStreamPreviewImagePath(scene.Checksum, seconds) + + exists, _ := utils.FileExists(videoPath) + if exists { + err := os.Remove(videoPath) + if err != nil { + logger.Warnf("Could not delete file %s: %s", videoPath, err.Error()) + } + } + + exists, _ = utils.FileExists(imagePath) + if exists { + err := os.Remove(imagePath) + if err != nil { + logger.Warnf("Could not delete file %s: %s", videoPath, err.Error()) + } + } +} + func DeleteSceneFile(scene *models.Scene) { // kill any running encoders KillRunningStreams(scene.Path)