@model StoryIntelligenceProgressViewModel @{ ViewData["Title"] = "Review assets"; var assetCandidates = Model.AssetReview.Candidates.ToList(); }

Story Intelligence

Review Assets

Review important object suggestions that need a create, same-asset, 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
} else {
Page @Model.AssetReview.PageNumber.ToString("N0") of @Model.AssetReview.PageCount.ToString("N0") · Showing @Model.AssetReview.ShowingStart.ToString("N0")-@Model.AssetReview.ShowingEnd.ToString("N0") of @Model.AssetReview.PendingCandidateCount.ToString("N0") pending
@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) {
Existing asset matched

@candidate.AssetName is linked to @candidate.ExistingAssetName.

} @if (candidate.IsExistingMatch) { } else {
Decision
}
}
Page @Model.AssetReview.PageNumber.ToString("N0") of @Model.AssetReview.PageCount.ToString("N0") · Showing @Model.AssetReview.ShowingStart.ToString("N0")-@Model.AssetReview.ShowingEnd.ToString("N0") of @Model.AssetReview.PendingCandidateCount.ToString("N0") pending @if (Model.AssetReview.HasPreviousPage) { } @if (Model.AssetReview.HasNextPage) { } else { }
}
@section Scripts { } @functions { private static string Display(string? value) => string.IsNullOrWhiteSpace(value) ? "Not detected" : value; private static string TargetLabel(StoryIntelligenceAssetTargetOptionViewModel target) => string.IsNullOrWhiteSpace(target.AliasSummary) ? target.DisplayName : $"{target.DisplayName} ({target.AliasSummary})"; private static bool IsSelfTarget(StoryIntelligenceAssetTargetOptionViewModel target, StoryIntelligenceAssetReviewCandidateViewModel candidate) => (target.AssetID.HasValue && candidate.ExistingAssetID == target.AssetID) || (!string.IsNullOrWhiteSpace(target.CandidateKey) && string.Equals(target.CandidateKey, candidate.Key, StringComparison.OrdinalIgnoreCase)); }