Пример #1
0
        public override CommandState QueryState(CommandContext context)
        {
            if (Settings.MissingKeys())
            {
                return(CommandState.Disabled);
            }

            Item ctxItem = DataWrapper?.ExtractItem(context);

            if (ctxItem == null || !MediaWrapper.IsMediaFile(ctxItem))
            {
                return(CommandState.Hidden);
            }

            var persons = PersonGroupService.GetAllPersonItems(ctxItem.Database.Name);

            if (persons == null || !persons.Any())
            {
                return(CommandState.Hidden);
            }

            var searchResult = SearchService.GetSearchResult(ctxItem.ID.ToString(), ctxItem.Language.Name, ctxItem.Database.Name);

            if (searchResult == null)
            {
                return(CommandState.Hidden);
            }

            var faceIds      = searchResult.FacialAnalysis?.Select(a => a.FaceId).ToArray() ?? new Guid[0];
            var peopleDiffer = searchResult.People == null || searchResult.People.Length != faceIds.Length;

            return(peopleDiffer
                ? CommandState.Enabled
                : CommandState.Hidden);
        }
Пример #2
0
        public override CommandState QueryState(CommandContext context)
        {
            if (Settings.MissingKeys())
            {
                return(CommandState.Disabled);
            }

            Item ctxItem = DataWrapper?.ExtractItem(context);

            if (ctxItem == null || !MediaWrapper.IsMediaFile(ctxItem))
            {
                return(CommandState.Hidden);
            }

            var hasPersons = PersonGroupService.GetAllPersonItems(ctxItem.Database.Name).Any();

            if (!hasPersons)
            {
                return(CommandState.Hidden);
            }

            var faces = SearchService
                        .GetImageAnalysis(ctxItem.ID.ToString(), ctxItem.Language.Name, ctxItem.Database.Name)
                        ?.FacialAnalysis;
            var hasOneFace = faces != null && faces.Length == 1;

            if (!hasOneFace)
            {
                return(CommandState.Hidden);
            }

            //show on images that have no face item pointing to them
            var links       = Globals.LinkDatabase.GetItemReferrers(ctxItem, false);
            var hasFaceLink = links
                              .Any(a => a.GetSourceItem().TemplateID.Guid == Settings.PersonFaceTemplateId.Guid);

            return(hasFaceLink
                ? CommandState.Hidden
                : CommandState.Enabled);
        }