mirror of
https://github.com/stashapp/stash.git
synced 2026-01-20 23:24:13 +01:00
FR: Add Delete Button For Scene Covers (#6444)
This commit is contained in:
parent
77d0008c6d
commit
0fa132cf60
4 changed files with 35 additions and 9 deletions
|
|
@ -297,6 +297,7 @@ func (r *mutationResolver) sceneUpdate(ctx context.Context, input models.SceneUp
|
|||
}
|
||||
|
||||
var coverImageData []byte
|
||||
coverImageIncluded := translator.hasField("cover_image")
|
||||
if input.CoverImage != nil {
|
||||
var err error
|
||||
coverImageData, err = utils.ProcessImageInput(ctx, *input.CoverImage)
|
||||
|
|
@ -310,21 +311,21 @@ func (r *mutationResolver) sceneUpdate(ctx context.Context, input models.SceneUp
|
|||
return nil, err
|
||||
}
|
||||
|
||||
if err := r.sceneUpdateCoverImage(ctx, scene, coverImageData); err != nil {
|
||||
return nil, err
|
||||
if coverImageIncluded {
|
||||
if err := r.sceneUpdateCoverImage(ctx, scene, coverImageData); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return scene, nil
|
||||
}
|
||||
|
||||
func (r *mutationResolver) sceneUpdateCoverImage(ctx context.Context, s *models.Scene, coverImageData []byte) error {
|
||||
if len(coverImageData) > 0 {
|
||||
qb := r.repository.Scene
|
||||
qb := r.repository.Scene
|
||||
|
||||
// update cover table
|
||||
if err := qb.UpdateCover(ctx, s.ID, coverImageData); err != nil {
|
||||
return err
|
||||
}
|
||||
// update cover table - empty data will clear the cover
|
||||
if err := qb.UpdateCover(ctx, s.ID, coverImageData); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import (
|
|||
|
||||
"github.com/stashapp/stash/internal/manager"
|
||||
"github.com/stashapp/stash/internal/manager/config"
|
||||
"github.com/stashapp/stash/internal/static"
|
||||
"github.com/stashapp/stash/pkg/ffmpeg"
|
||||
"github.com/stashapp/stash/pkg/file/video"
|
||||
"github.com/stashapp/stash/pkg/fsutil"
|
||||
|
|
@ -243,6 +244,12 @@ func (rs sceneRoutes) streamSegment(w http.ResponseWriter, r *http.Request, stre
|
|||
}
|
||||
|
||||
func (rs sceneRoutes) Screenshot(w http.ResponseWriter, r *http.Request) {
|
||||
// if default flag is set, return the default image
|
||||
if r.URL.Query().Get("default") == "true" {
|
||||
utils.ServeImage(w, r, static.ReadAll(static.DefaultSceneImage))
|
||||
return
|
||||
}
|
||||
|
||||
scene := r.Context().Value(sceneKey).(*models.Scene)
|
||||
|
||||
ss := manager.SceneServer{
|
||||
|
|
|
|||
|
|
@ -302,6 +302,10 @@ export const SceneEditPanel: React.FC<IProps> = ({
|
|||
ImageUtils.onImageChange(event, onImageLoad);
|
||||
}
|
||||
|
||||
function onResetCover() {
|
||||
formik.setFieldValue("cover_image", null);
|
||||
}
|
||||
|
||||
async function onScrapeClicked(s: GQL.ScraperSourceInput) {
|
||||
setIsLoading(true);
|
||||
try {
|
||||
|
|
@ -856,6 +860,7 @@ export const SceneEditPanel: React.FC<IProps> = ({
|
|||
isEditing
|
||||
onImageChange={onCoverImageChange}
|
||||
onImageURL={onImageLoad}
|
||||
onReset={scene.id ? onResetCover : undefined}
|
||||
/>
|
||||
</Form.Group>
|
||||
</Col>
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ interface IImageInput {
|
|||
text?: string;
|
||||
onImageChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
||||
onImageURL?: (url: string) => void;
|
||||
onReset?: () => void;
|
||||
acceptSVG?: boolean;
|
||||
}
|
||||
|
||||
|
|
@ -27,7 +28,14 @@ function acceptExtensions(acceptSVG: boolean = false) {
|
|||
|
||||
export const ImageInput: React.FC<IImageInput> = PatchComponent(
|
||||
"ImageInput",
|
||||
({ isEditing, text, onImageChange, onImageURL, acceptSVG = false }) => {
|
||||
({
|
||||
isEditing,
|
||||
text,
|
||||
onImageChange,
|
||||
onImageURL,
|
||||
onReset,
|
||||
acceptSVG = false,
|
||||
}) => {
|
||||
const [isShowDialog, setIsShowDialog] = useState(false);
|
||||
const [url, setURL] = useState("");
|
||||
const intl = useIntl();
|
||||
|
|
@ -137,6 +145,11 @@ export const ImageInput: React.FC<IImageInput> = PatchComponent(
|
|||
{text ?? intl.formatMessage({ id: "actions.set_image" })}
|
||||
</Button>
|
||||
</OverlayTrigger>
|
||||
{onReset && (
|
||||
<Button variant="danger" className="mr-2" onClick={onReset}>
|
||||
{intl.formatMessage({ id: "actions.clear_image" })}
|
||||
</Button>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue