diff --git a/apiGo/api/Settings.go b/apiGo/api/Settings.go index 711d4de..b3a6a63 100644 --- a/apiGo/api/Settings.go +++ b/apiGo/api/Settings.go @@ -67,12 +67,13 @@ func getSettingsFromDB() { sett := settings.LoadSettings() type InitialDataTypeResponse struct { - DarkMode bool - Pasword bool - MediacenterName string - VideoPath string - TVShowPath string - TVShowEnabled bool + DarkMode bool + Pasword bool + MediacenterName string + VideoPath string + TVShowPath string + TVShowEnabled bool + FullDeleteEnabled bool } regexMatchUrl := regexp.MustCompile("^http(|s)://([0-9]){1,3}\\.([0-9]){1,3}\\.([0-9]){1,3}\\.([0-9]){1,3}:[0-9]{1,5}") @@ -82,12 +83,13 @@ func getSettingsFromDB() { serverTVShowPath := strings.TrimPrefix(sett.TVShowPath, tvshowurl) res := InitialDataTypeResponse{ - DarkMode: sett.DarkMode, - Pasword: sett.Pasword != "-1", - MediacenterName: sett.MediacenterName, - VideoPath: serverVideoPath, - TVShowPath: serverTVShowPath, - TVShowEnabled: settings.TVShowsEnabled(), + DarkMode: sett.DarkMode, + Pasword: sett.Pasword != "-1", + MediacenterName: sett.MediacenterName, + VideoPath: serverVideoPath, + TVShowPath: serverTVShowPath, + TVShowEnabled: settings.TVShowsEnabled(), + FullDeleteEnabled: settings.VideosDeletable(), } str, _ := json.Marshal(res) diff --git a/apiGo/api/Video.go b/apiGo/api/Video.go index 92b5963..b060c19 100644 --- a/apiGo/api/Video.go +++ b/apiGo/api/Video.go @@ -420,6 +420,7 @@ func addToVideoHandlers() { * @apiGroup video * * @apiParam {int} MovieId ID of video + * @apiParam {bool} FullyDelete Delete video from disk? * * @apiSuccess {string} result 'success' if successfully or error message if not */ @@ -446,6 +447,7 @@ func addToVideoHandlers() { return database.ManualSuccessResponse(err) } + // only allow deletion of video if cli flag is set, independent of passed api arg 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) @@ -457,7 +459,8 @@ func addToVideoHandlers() { err = os.Remove(vidpath) if err != nil { - fmt.Printf("unable to delete file: %s\n", vidpath) + fmt.Printf("unable to delete file: %s -- %s\n", vidpath, err.Error()) + return database.ManualSuccessResponse(err) } } diff --git a/src/App.tsx b/src/App.tsx index db339d0..d78d444 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -87,6 +87,7 @@ class App extends React.Component<{}, state> { GlobalInfos.setVideoPaths(result.VideoPath, result.TVShowPath); GlobalInfos.setTVShowsEnabled(result.TVShowEnabled); + GlobalInfos.setFullDeleteEnabled(result.FullDeleteEnabled); this.setState({ mediacentername: result.MediacenterName diff --git a/src/elements/Popups/ButtonPopup/ButtonPopup.tsx b/src/elements/Popups/ButtonPopup/ButtonPopup.tsx new file mode 100644 index 0000000..3b5b667 --- /dev/null +++ b/src/elements/Popups/ButtonPopup/ButtonPopup.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import PopupBase from '../PopupBase'; +import {Button} from '../../GPElements/Button'; + +/** + * Delete Video popup + * can only be rendered once! + * @constructor + */ +export const ButtonPopup = (props: { + onSubmit: () => void; + onDeny: () => void; + onAlternativeButton?: () => void; + SubmitButtonTitle: string; + DenyButtonTitle: string; + AlternativeButtonTitle?: string; + Title: string; +}): JSX.Element => { + return ( + <> + props.onDeny()} + height='200px' + width='400px' + ParentSubmit={(): void => { + props.onSubmit(); + }}> +