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); }
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); }