@model StoryIntelligenceProgressViewModel @{ ViewData["Title"] = "Review assets"; const int previewLimit = 50; var showAll = string.Equals(Context.Request.Query["view"], "all", StringComparison.OrdinalIgnoreCase); var assetCandidates = showAll ? Model.AssetReview.Candidates.ToList() : Model.AssetReview.Candidates.Take(previewLimit).ToList(); var hiddenCandidateCount = Math.Max(0, Model.AssetReview.Candidates.Count - 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) { View all @Model.AssetReview.Candidates.Count.ToString("N0") } 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 Model.AssetReview.Candidates.Where(target => !string.Equals(target.Key, candidate.Key, StringComparison.OrdinalIgnoreCase))) { @target.AssetName@(target.IsExistingMatch ? $" -> {target.ExistingAssetName}" : string.Empty) } } @if (hiddenCandidateCount > 0) { @hiddenCandidateCount.ToString("N0") more asset decision@(hiddenCandidateCount == 1 ? string.Empty : "s") available after this batch. } Back to Review Centre 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.