From 8437e10027b11c0f70598f9b3adaf33093f6e4c1 Mon Sep 17 00:00:00 2001 From: DingDongSoLong4 <99329275+DingDongSoLong4@users.noreply.github.com> Date: Thu, 16 Feb 2023 01:12:01 +0200 Subject: [PATCH] Improve 'item not found' pages (#3438) * Make scene 'not found' page consistent * Make backend response for no result consistent --- internal/api/resolver_query_find_gallery.go | 4 +- internal/api/resolver_query_find_image.go | 4 +- internal/api/resolver_query_find_movie.go | 5 +- internal/api/resolver_query_find_performer.go | 4 +- .../api/resolver_query_find_saved_filter.go | 6 ++- internal/api/resolver_query_find_scene.go | 4 +- internal/api/resolver_query_find_studio.go | 4 +- internal/api/resolver_query_find_tag.go | 4 +- .../components/Scenes/SceneDetails/Scene.tsx | 54 ++++++++++--------- 9 files changed, 54 insertions(+), 35 deletions(-) diff --git a/internal/api/resolver_query_find_gallery.go b/internal/api/resolver_query_find_gallery.go index e8d47d70b..43a71f4d9 100644 --- a/internal/api/resolver_query_find_gallery.go +++ b/internal/api/resolver_query_find_gallery.go @@ -2,6 +2,8 @@ package api import ( "context" + "database/sql" + "errors" "strconv" "github.com/stashapp/stash/pkg/models" @@ -16,7 +18,7 @@ func (r *queryResolver) FindGallery(ctx context.Context, id string) (ret *models if err := r.withReadTxn(ctx, func(ctx context.Context) error { ret, err = r.repository.Gallery.Find(ctx, idInt) return err - }); err != nil { + }); err != nil && !errors.Is(err, sql.ErrNoRows) { return nil, err } diff --git a/internal/api/resolver_query_find_image.go b/internal/api/resolver_query_find_image.go index 6468ba9f3..360f4fff9 100644 --- a/internal/api/resolver_query_find_image.go +++ b/internal/api/resolver_query_find_image.go @@ -2,6 +2,8 @@ package api import ( "context" + "database/sql" + "errors" "strconv" "github.com/99designs/gqlgen/graphql" @@ -23,7 +25,7 @@ func (r *queryResolver) FindImage(ctx context.Context, id *string, checksum *str } image, err = qb.Find(ctx, idInt) - if err != nil { + if err != nil && !errors.Is(err, sql.ErrNoRows) { return err } } else if checksum != nil { diff --git a/internal/api/resolver_query_find_movie.go b/internal/api/resolver_query_find_movie.go index a7e72dbdc..a728089cc 100644 --- a/internal/api/resolver_query_find_movie.go +++ b/internal/api/resolver_query_find_movie.go @@ -2,6 +2,8 @@ package api import ( "context" + "database/sql" + "errors" "strconv" "github.com/stashapp/stash/pkg/models" @@ -16,7 +18,7 @@ func (r *queryResolver) FindMovie(ctx context.Context, id string) (ret *models.M if err := r.withReadTxn(ctx, func(ctx context.Context) error { ret, err = r.repository.Movie.Find(ctx, idInt) return err - }); err != nil { + }); err != nil && !errors.Is(err, sql.ErrNoRows) { return nil, err } @@ -34,7 +36,6 @@ func (r *queryResolver) FindMovies(ctx context.Context, movieFilter *models.Movi Count: total, Movies: movies, } - return nil }); err != nil { return nil, err diff --git a/internal/api/resolver_query_find_performer.go b/internal/api/resolver_query_find_performer.go index 437ac8fcf..b94d67e94 100644 --- a/internal/api/resolver_query_find_performer.go +++ b/internal/api/resolver_query_find_performer.go @@ -2,6 +2,8 @@ package api import ( "context" + "database/sql" + "errors" "strconv" "github.com/stashapp/stash/pkg/models" @@ -16,7 +18,7 @@ func (r *queryResolver) FindPerformer(ctx context.Context, id string) (ret *mode if err := r.withReadTxn(ctx, func(ctx context.Context) error { ret, err = r.repository.Performer.Find(ctx, idInt) return err - }); err != nil { + }); err != nil && !errors.Is(err, sql.ErrNoRows) { return nil, err } diff --git a/internal/api/resolver_query_find_saved_filter.go b/internal/api/resolver_query_find_saved_filter.go index 4f196fd65..6098decea 100644 --- a/internal/api/resolver_query_find_saved_filter.go +++ b/internal/api/resolver_query_find_saved_filter.go @@ -2,6 +2,8 @@ package api import ( "context" + "database/sql" + "errors" "strconv" "github.com/stashapp/stash/pkg/models" @@ -16,7 +18,7 @@ func (r *queryResolver) FindSavedFilter(ctx context.Context, id string) (ret *mo if err := r.withReadTxn(ctx, func(ctx context.Context) error { ret, err = r.repository.SavedFilter.Find(ctx, idInt) return err - }); err != nil { + }); err != nil && !errors.Is(err, sql.ErrNoRows) { return nil, err } return ret, err @@ -40,7 +42,7 @@ func (r *queryResolver) FindDefaultFilter(ctx context.Context, mode models.Filte if err := r.withReadTxn(ctx, func(ctx context.Context) error { ret, err = r.repository.SavedFilter.FindDefault(ctx, mode) return err - }); err != nil { + }); err != nil && !errors.Is(err, sql.ErrNoRows) { return nil, err } return ret, err diff --git a/internal/api/resolver_query_find_scene.go b/internal/api/resolver_query_find_scene.go index 95519cd49..fa322d804 100644 --- a/internal/api/resolver_query_find_scene.go +++ b/internal/api/resolver_query_find_scene.go @@ -2,6 +2,8 @@ package api import ( "context" + "database/sql" + "errors" "strconv" "github.com/99designs/gqlgen/graphql" @@ -21,7 +23,7 @@ func (r *queryResolver) FindScene(ctx context.Context, id *string, checksum *str return err } scene, err = qb.Find(ctx, idInt) - if err != nil { + if err != nil && !errors.Is(err, sql.ErrNoRows) { return err } } else if checksum != nil { diff --git a/internal/api/resolver_query_find_studio.go b/internal/api/resolver_query_find_studio.go index 51cac6208..3f4260bce 100644 --- a/internal/api/resolver_query_find_studio.go +++ b/internal/api/resolver_query_find_studio.go @@ -2,6 +2,8 @@ package api import ( "context" + "database/sql" + "errors" "strconv" "github.com/stashapp/stash/pkg/models" @@ -17,7 +19,7 @@ func (r *queryResolver) FindStudio(ctx context.Context, id string) (ret *models. var err error ret, err = r.repository.Studio.Find(ctx, idInt) return err - }); err != nil { + }); err != nil && !errors.Is(err, sql.ErrNoRows) { return nil, err } diff --git a/internal/api/resolver_query_find_tag.go b/internal/api/resolver_query_find_tag.go index fd4b04ad2..9ea16525a 100644 --- a/internal/api/resolver_query_find_tag.go +++ b/internal/api/resolver_query_find_tag.go @@ -2,6 +2,8 @@ package api import ( "context" + "database/sql" + "errors" "strconv" "github.com/stashapp/stash/pkg/models" @@ -16,7 +18,7 @@ func (r *queryResolver) FindTag(ctx context.Context, id string) (ret *models.Tag if err := r.withReadTxn(ctx, func(ctx context.Context) error { ret, err = r.repository.Tag.Find(ctx, idInt) return err - }); err != nil { + }); err != nil && !errors.Is(err, sql.ErrNoRows) { return nil, err } diff --git a/ui/v2.5/src/components/Scenes/SceneDetails/Scene.tsx b/ui/v2.5/src/components/Scenes/SceneDetails/Scene.tsx index 1e7a8163f..d86973815 100644 --- a/ui/v2.5/src/components/Scenes/SceneDetails/Scene.tsx +++ b/ui/v2.5/src/components/Scenes/SceneDetails/Scene.tsx @@ -24,7 +24,12 @@ import { queryFindScenesByID, } from "src/core/StashService"; -import Icon from "src/components/Shared/Icon"; +import { + ErrorMessage, + LoadingIndicator, + Icon, + Counter, +} from "src/components/Shared"; import { useToast } from "src/hooks"; import SceneQueue, { QueuedScene } from "src/models/sceneQueue"; import { ListFilterModel } from "src/models/list-filter/filter"; @@ -58,7 +63,6 @@ const DeleteScenesDialog = lazy(() => import("../DeleteScenesDialog")); const GenerateDialog = lazy(() => import("../../Dialogs/GenerateDialog")); const SceneVideoFilterPanel = lazy(() => import("./SceneVideoFilterPanel")); import { objectPath, objectTitle } from "src/core/files"; -import { Counter } from "src/components/Shared"; interface IProps { scene: GQL.SceneDataFragment; @@ -514,7 +518,7 @@ const SceneLoader: React.FC = () => { const location = useLocation(); const history = useHistory(); const { configuration } = useContext(ConfigurationContext); - const { data, loading } = useFindScene(id ?? ""); + const { data, loading, error } = useFindScene(id ?? ""); const queryParams = useMemo( () => queryString.parse(location.search, { decode: false }), @@ -728,32 +732,32 @@ const SceneLoader: React.FC = () => { } } + if (loading) return ; + if (error) return ; + const scene = data?.findScene; + if (!scene) return ; return (
- {!loading && scene ? ( - - ) : ( -
- )} +