From 521b121613d10ed702a3ac45bda77503d0f9288e Mon Sep 17 00:00:00 2001 From: viktorstrate Date: Tue, 31 Aug 2021 12:05:46 +0200 Subject: [PATCH] Hide faces from frontend if disabled --- api/graphql/resolvers/media.go | 5 ++ api/graphql/resolvers/root.go | 7 --- api/graphql/resolvers/site_info.go | 4 ++ api/graphql/schema.graphql | 2 +- api/scanner/face_detection/face_detector.go | 4 +- ui/src/components/layout/MainMenu.tsx | 46 +++++++++++++------ ui/src/components/sidebar/MediaSidebar.tsx | 12 ----- .../extractedTranslations/da/translation.json | 6 +-- .../extractedTranslations/en/translation.json | 4 +- 9 files changed, 49 insertions(+), 41 deletions(-) diff --git a/api/graphql/resolvers/media.go b/api/graphql/resolvers/media.go index 4f30d6ba..da62d300 100644 --- a/api/graphql/resolvers/media.go +++ b/api/graphql/resolvers/media.go @@ -8,6 +8,7 @@ import ( api "github.com/photoview/photoview/api/graphql" "github.com/photoview/photoview/api/graphql/auth" "github.com/photoview/photoview/api/graphql/models" + "github.com/photoview/photoview/api/scanner/face_detection" "github.com/pkg/errors" "gorm.io/gorm/clause" ) @@ -228,6 +229,10 @@ func (r *mutationResolver) FavoriteMedia(ctx context.Context, mediaID int, favor } func (r *mediaResolver) Faces(ctx context.Context, media *models.Media) ([]*models.ImageFace, error) { + if face_detection.GlobalFaceDetector == nil { + return []*models.ImageFace{}, nil + } + if media.Faces != nil { return media.Faces, nil } diff --git a/api/graphql/resolvers/root.go b/api/graphql/resolvers/root.go index c8e3dca4..1ffc098f 100644 --- a/api/graphql/resolvers/root.go +++ b/api/graphql/resolvers/root.go @@ -1,10 +1,7 @@ package resolvers import ( - "context" - api "github.com/photoview/photoview/api/graphql" - "github.com/photoview/photoview/api/graphql/models" "gorm.io/gorm" ) @@ -35,7 +32,3 @@ type queryResolver struct{ *Resolver } type subscriptionResolver struct { Resolver *Resolver } - -func (r *queryResolver) SiteInfo(ctx context.Context) (*models.SiteInfo, error) { - return models.GetSiteInfo(r.Database) -} diff --git a/api/graphql/resolvers/site_info.go b/api/graphql/resolvers/site_info.go index d2d3a2cd..a562e20e 100644 --- a/api/graphql/resolvers/site_info.go +++ b/api/graphql/resolvers/site_info.go @@ -8,6 +8,10 @@ import ( "github.com/photoview/photoview/api/scanner/face_detection" ) +func (r *queryResolver) SiteInfo(ctx context.Context) (*models.SiteInfo, error) { + return models.GetSiteInfo(r.Database) +} + type SiteInfoResolver struct { *Resolver } diff --git a/api/graphql/schema.graphql b/api/graphql/schema.graphql index 970d8f07..b0828dde 100644 --- a/api/graphql/schema.graphql +++ b/api/graphql/schema.graphql @@ -68,7 +68,7 @@ type Query { "Get media owned by the logged in user, returned in GeoJson format" myMediaGeoJson: Any! @isAuthorized "Get the mapbox api token, returns null if mapbox is not enabled" - mapboxToken: String + mapboxToken: String @isAuthorized shareToken(credentials: ShareTokenCredentials!): ShareToken! shareTokenValidatePassword(credentials: ShareTokenCredentials!): Boolean! diff --git a/api/scanner/face_detection/face_detector.go b/api/scanner/face_detection/face_detector.go index 11e83e1b..506cb887 100644 --- a/api/scanner/face_detection/face_detector.go +++ b/api/scanner/face_detection/face_detector.go @@ -22,8 +22,8 @@ type FaceDetector struct { var GlobalFaceDetector *FaceDetector = nil func InitializeFaceDetector(db *gorm.DB) error { - if utils.EnvDisableRawProcessing.GetBool() { - log.Printf("Face detection disabled (%s=1)\n", utils.EnvDisableRawProcessing.GetName()) + if utils.EnvDisableFaceRecognition.GetBool() { + log.Printf("Face detection disabled (%s=1)\n", utils.EnvDisableFaceRecognition.GetName()) return nil } diff --git a/ui/src/components/layout/MainMenu.tsx b/ui/src/components/layout/MainMenu.tsx index b371ef3f..c8967af9 100644 --- a/ui/src/components/layout/MainMenu.tsx +++ b/ui/src/components/layout/MainMenu.tsx @@ -3,6 +3,7 @@ import { NavLink } from 'react-router-dom' import { useQuery, gql } from '@apollo/client' import { authToken } from '../../helpers/authentication' import { useTranslation } from 'react-i18next' +import { mapboxEnabledQuery } from '../../__generated__/mapboxEnabledQuery' export const MAPBOX_QUERY = gql` query mapboxEnabledQuery { @@ -10,6 +11,14 @@ export const MAPBOX_QUERY = gql` } ` +export const FACE_DETECTION_ENABLED_QUERY = gql` + query faceDetectionEnabled { + siteInfo { + faceDetectionEnabled + } + } +` + type MenuButtonProps = { to: string exact: boolean @@ -56,9 +65,16 @@ const MenuSeparator = () => ( export const MainMenu = () => { const { t } = useTranslation() - const mapboxQuery = authToken() ? useQuery(MAPBOX_QUERY) : null + const mapboxQuery = authToken() + ? useQuery(MAPBOX_QUERY) + : null + const faceDetectionEnabledQuery = authToken() + ? useQuery(FACE_DETECTION_ENABLED_QUERY) + : null const mapboxEnabled = !!mapboxQuery?.data?.mapboxToken + const faceDetectionEnabled = + !!faceDetectionEnabledQuery?.data?.siteInfo?.faceDetectionEnabled return (
@@ -104,19 +120,21 @@ export const MainMenu = () => { } /> ) : null} - - - - } - /> + {faceDetectionEnabled ? ( + + + + } + /> + ) : null} { } } -// From https://exiftool.org/TagNames/EXIF.html -// const orientation = { -// 1: 'Horizontal (normal)', -// 2: 'Mirror horizontal', -// 3: 'Rotate 180', -// 4: 'Mirror vertical', -// 5: 'Mirror horizontal and rotate 270 CW', -// 6: 'Rotate 90 CW', -// 7: 'Mirror horizontal and rotate 90 CW', -// 8: 'Rotate 270 CW', -// } - type SidebarContentProps = { media: MediaSidebarMedia hidePreview?: boolean diff --git a/ui/src/extractedTranslations/da/translation.json b/ui/src/extractedTranslations/da/translation.json index 2ad4b2d1..045afbe6 100644 --- a/ui/src/extractedTranslations/da/translation.json +++ b/ui/src/extractedTranslations/da/translation.json @@ -107,7 +107,7 @@ } }, "photos_page": { - "title": "Billeder" + "title": "Tidslinje" }, "places_page": { "title": "Kort" @@ -285,13 +285,13 @@ "sidemenu": { "albums": "Albums", "people": "Personer", - "photos": "Billeder", + "photos": "Tidslinje", "places": "Kort", "settings": "Indstillinger" }, "title": { "loading_album": "Loader album", - "login": "Logind", + "login": "Log ind", "people": "Personer", "settings": "Indstillinger" } diff --git a/ui/src/extractedTranslations/en/translation.json b/ui/src/extractedTranslations/en/translation.json index 42cb1d4a..5426dfa6 100644 --- a/ui/src/extractedTranslations/en/translation.json +++ b/ui/src/extractedTranslations/en/translation.json @@ -107,7 +107,7 @@ } }, "photos_page": { - "title": "Photos" + "title": "Timeline" }, "places_page": { "title": "Places" @@ -285,7 +285,7 @@ "sidemenu": { "albums": "Albums", "people": "People", - "photos": "Photos", + "photos": "Timeline", "places": "Places", "settings": "Settings" },