From 543ce5b2507539404aeb65666d75c42fca150840 Mon Sep 17 00:00:00 2001 From: lukas Date: Sun, 29 Aug 2021 19:48:03 +0200 Subject: [PATCH] fully deletable videos -- enable/disable with cli args --- apiGo/api/Helpers.go | 3 +- apiGo/api/Video.go | 21 ++++++++++- apiGo/database/settings/Settings.go | 9 +++++ apiGo/main.go | 2 + .../FullyDeletePopup/FullyDeletePopup.tsx | 37 +++++++++++++++++++ src/pages/Player/Player.tsx | 22 +++++++++-- 6 files changed, 89 insertions(+), 5 deletions(-) create mode 100644 src/elements/Popups/FullyDeletePopup/FullyDeletePopup.tsx diff --git a/apiGo/api/Helpers.go b/apiGo/api/Helpers.go index aac7b93..1696c57 100644 --- a/apiGo/api/Helpers.go +++ b/apiGo/api/Helpers.go @@ -15,7 +15,8 @@ func readVideosFromResultset(rows *sql.Rows) []types.VideoUnloadedType { var vid types.VideoUnloadedType err := rows.Scan(&vid.MovieId, &vid.MovieName) if err != nil { - panic(err.Error()) // proper error handling instead of panic in your app + fmt.Println(err.Error()) + return nil } result = append(result, vid) } diff --git a/apiGo/api/Video.go b/apiGo/api/Video.go index 9e6c1d2..92b5963 100644 --- a/apiGo/api/Video.go +++ b/apiGo/api/Video.go @@ -6,6 +6,8 @@ import ( "net/url" "openmediacenter/apiGo/api/types" "openmediacenter/apiGo/database" + "openmediacenter/apiGo/database/settings" + "os" "strconv" ) @@ -423,7 +425,8 @@ func addToVideoHandlers() { */ AddHandler("deleteVideo", VideoNode, func(info *HandlerInfo) []byte { var args struct { - MovieId int + MovieId int + FullyDelete bool } if err := FillStruct(&args, info.Data); err != nil { fmt.Println(err.Error()) @@ -443,6 +446,22 @@ func addToVideoHandlers() { return database.ManualSuccessResponse(err) } + if settings.VideosDeletable() && args.FullyDelete { + // get physical path of video to delete + query = fmt.Sprintf("SELECT movie_url FROM videos WHERE movie_id=%d", args.MovieId) + var vidpath string + err := database.QueryRow(query).Scan(&vidpath) + if err != nil { + return database.ManualSuccessResponse(err) + } + + err = os.Remove(vidpath) + if err != nil { + fmt.Printf("unable to delete file: %s\n", vidpath) + } + } + + // delete video row from db query = fmt.Sprintf("DELETE FROM videos WHERE movie_id=%d", args.MovieId) return database.SuccessQuery(query) }) diff --git a/apiGo/database/settings/Settings.go b/apiGo/database/settings/Settings.go index 409a071..d13d305 100644 --- a/apiGo/database/settings/Settings.go +++ b/apiGo/database/settings/Settings.go @@ -1,6 +1,7 @@ package settings var tvShowEnabled bool +var videosDeletable bool func TVShowsEnabled() bool { return tvShowEnabled @@ -9,3 +10,11 @@ func TVShowsEnabled() bool { func SetTVShowEnabled(enabled bool) { tvShowEnabled = enabled } + +func VideosDeletable() bool { + return videosDeletable +} + +func SetVideosDeletable(deletable bool) { + videosDeletable = deletable +} diff --git a/apiGo/main.go b/apiGo/main.go index 80e138c..9d96e0e 100644 --- a/apiGo/main.go +++ b/apiGo/main.go @@ -57,10 +57,12 @@ func handleCommandLineArguments() (*database.DatabaseConfig, bool, *string) { pathPrefix := flag.String("ReindexPrefix", "/var/www/openmediacenter", "Prefix path for videos to reindex") disableTVShowSupport := flag.Bool("DisableTVSupport", false, "Disable the TVShow support and pages") + videosFullyDeletable := flag.Bool("FullyDeletableVideos", false, "Allow deletion from harddisk") flag.Parse() settings2.SetTVShowEnabled(!*disableTVShowSupport) + settings2.SetVideosDeletable(*videosFullyDeletable) return &database.DatabaseConfig{ DBHost: *dbhostPtr, diff --git a/src/elements/Popups/FullyDeletePopup/FullyDeletePopup.tsx b/src/elements/Popups/FullyDeletePopup/FullyDeletePopup.tsx new file mode 100644 index 0000000..6c95295 --- /dev/null +++ b/src/elements/Popups/FullyDeletePopup/FullyDeletePopup.tsx @@ -0,0 +1,37 @@ +import React from 'react'; +import PopupBase from '../PopupBase'; +import {Button} from '../../GPElements/Button'; + +/** + * Delete Video popup + * can only be rendered once! + * @constructor + */ +export const FullyDeletePopup = (props: {onSubmit: () => void; onDeny: () => void; onDiscard: () => void}): JSX.Element => { + return ( + <> + props.onDiscard()} + height='200px' + width='350px' + ParentSubmit={(): void => { + props.onSubmit(); + }}> +