@model StoryIntelligenceProgressViewModel @{ ViewData["Title"] = "Review assets"; const int previewLimit = 25; var assetCandidates = Model.AssetReview.Candidates.Take(previewLimit).ToList(); var hiddenCandidateCount = Math.Max(0, Model.AssetReview.PendingCandidateCount - assetCandidates.Count); } Story Intelligence Review Assets Review important object suggestions that need a create, link, alias, or ignore decision. @if (TempData["OnboardingStoryIntelligenceError"] is string error) { @error } @if (TempData["OnboardingStoryIntelligenceMessage"] is string message) { @message } @if (Model.AssetReview.Candidates.Count == 0) { No asset decisions are waiting. Assets are already up to date, or there were no story-significant asset suggestions ready to import. Back to Review Centre Mark reviewed } else { @if (hiddenCandidateCount > 0) { Showing @assetCandidates.Count.ToString("N0") of @Model.AssetReview.PendingCandidateCount.ToString("N0") pending } Create all Link existing matches Ignore all Expand all Collapse all @for (var i = 0; i < assetCandidates.Count; i++) { var candidate = assetCandidates[i]; @candidate.AssetName @candidate.Category ยท @candidate.AppearsInScenes.ToString("N0") scene@(candidate.AppearsInScenes == 1 ? string.Empty : "s") @candidate.Confidence First appearance@Display(candidate.ExampleFirstAppearance) Possible owner@Display(candidate.PossibleOwner) Existing match@(candidate.ExistingAssetName ?? "None") @if (candidate.PossibleAliases.Any()) { Possible aliases @string.Join(", ", candidate.PossibleAliases) } @if (!string.IsNullOrWhiteSpace(candidate.ExampleContext)) { Scene context @candidate.ExampleContext } @if (candidate.IsExistingMatch) { Possible existing asset @candidate.AssetName may already be @candidate.ExistingAssetName. Choose whether to link them or create a separate asset. } Decision Create new asset Link existing asset Alias of another asset Ignore Import name Alias/variant target Choose asset... @foreach (var target in assetCandidates.Where(target => !string.Equals(target.Key, candidate.Key, StringComparison.OrdinalIgnoreCase))) { @target.AssetName@(target.IsExistingMatch ? $" -> {target.ExistingAssetName}" : string.Empty) } } @if (hiddenCandidateCount > 0) { Save this batch to continue with @hiddenCandidateCount.ToString("N0") more asset decision@(hiddenCandidateCount == 1 ? string.Empty : "s"). } Back to Review Centre @if (Model.AssetReview.HasPreviousPage) { Previous } @if (Model.AssetReview.HasNextPage) { Next } Save asset decisions } @section Scripts { } @functions { private static string Display(string? value) => string.IsNullOrWhiteSpace(value) ? "Not detected" : value; }
Story Intelligence
Review important object suggestions that need a create, link, alias, or ignore decision.
Assets are already up to date, or there were no story-significant asset suggestions ready to import.
@string.Join(", ", candidate.PossibleAliases)
@candidate.ExampleContext
@candidate.AssetName may already be @candidate.ExistingAssetName. Choose whether to link them or create a separate asset.