Fixed validation for source material

This commit is contained in:
Thorsten Sommer 2026-08-01 11:36:20 +02:00
parent 6eeb37625e
commit 0f5b053856
Signed by untrusted user who does not match committer: tsommer
GPG Key ID: 371BBA77A02C0108
8 changed files with 43 additions and 0 deletions

View File

@ -2344,6 +2344,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Please select a provider.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1809312323"] = "Please select a provider."
-- Please add at least one source material file.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1957239290"] = "Please add at least one source material file."
-- Cannot be opened
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1981873292"] = "Cannot be opened"

View File

@ -24,6 +24,7 @@ public partial class VisualBriefingAssistant
string.IsNullOrWhiteSpace(this.projectName) ||
this.targetLanguage is CommonLanguages.OTHER && string.IsNullOrWhiteSpace(this.customTargetLanguage) ||
this.protectionLevel is VisualBriefingProtectionLevel.OTHER && string.IsNullOrWhiteSpace(this.customProtectionLevel) ||
mode is not VisualBriefingEditMode.CHANGE_DESIGN && !this.HasSourceMaterial ||
mode is VisualBriefingEditMode.CHANGE_DESIGN or VisualBriefingEditMode.UPDATE_CONTENT &&
!this.SelectedVersionSupportsEdits ||
mode is not VisualBriefingEditMode.CHANGE_DESIGN &&

View File

@ -6,6 +6,9 @@ namespace AIStudio.Assistants.VisualBriefing;
public partial class VisualBriefingAssistant
{
/// <summary>Gets whether the briefing contains at least one actual source-material file.</summary>
private bool HasSourceMaterial => this.selectedBriefing?.Sources.Any(source => source.Kind is VisualBriefingSourceKind.SOURCE_MATERIAL) == true;
/// <summary>Gets all current field, source, and revision issues shown below the actions.</summary>
private IReadOnlyList<string> ValidationIssues
{
@ -20,6 +23,9 @@ public partial class VisualBriefingAssistant
if (this.selectedBriefing is not null)
{
if (!this.HasSourceMaterial)
issues.Add(T("Please add at least one source material file."));
foreach (var source in this.selectedBriefing.Sources)
{
var fileName = Path.GetFileName(source.Path);

View File

@ -233,6 +233,26 @@ internal sealed partial class VisualBriefingBuildOrchestrator
"No provider is selected.");
}
/// <summary>
/// Ensures content-generating builds have at least one source-material file.
/// </summary>
/// <param name="manifest">The briefing manifest.</param>
/// <param name="mode">The requested edit mode.</param>
private static void ValidateSourceMaterial(VisualBriefingManifest manifest, VisualBriefingEditMode mode)
{
if (mode is VisualBriefingEditMode.CHANGE_DESIGN or VisualBriefingEditMode.RECOMPILE ||
manifest.Sources.Any(source => source.Kind is VisualBriefingSourceKind.SOURCE_MATERIAL))
{
return;
}
throw new VisualBriefingBuildException(
VisualBriefingFailureCode.SOURCE_PREPARATION_FAILED,
VisualBriefingBuildStage.SOURCE_PREPARATION,
"Please add at least one source material file.",
"The briefing has no SOURCE_MATERIAL source.");
}
/// <summary>
/// Validates image-input capabilities for content analysis.
/// </summary>

View File

@ -99,6 +99,7 @@ internal sealed partial class VisualBriefingBuildOrchestrator
try
{
ValidateProvider(provider);
ValidateSourceMaterial(manifest, mode);
var parentContext = await this.LoadParentContextAsync(manifest, mode, parentRevisionId, token);
VisualBriefingEvidenceArtifact? reusableEvidence = null;

View File

@ -20,6 +20,12 @@ public sealed partial class VisualBriefingStore
{
var manifest = await this.LoadRequiredWithoutInitializeAsync(request.BriefingId, token);
RefreshSourceStatuses(manifest);
if (request.EditMode is not (VisualBriefingEditMode.CHANGE_DESIGN or VisualBriefingEditMode.RECOMPILE) &&
manifest.Sources.All(source => source.Kind is not VisualBriefingSourceKind.SOURCE_MATERIAL))
{
return VisualBriefingRevisionResult.Failure("Please add at least one source material file.");
}
var blockingSources = manifest.Sources
.Where(source => source.Status is VisualBriefingSourceStatus.UNREACHABLE or VisualBriefingSourceStatus.TRANSCRIPT_OUTDATED)
.ToArray();

View File

@ -2346,6 +2346,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Please select a provider.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1809312323"] = "Bitte wählen Sie einen Anbieter aus."
-- Please add at least one source material file.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1957239290"] = "Bitte fügen Sie mindestens eine Quelldatei hinzu."
-- Cannot be opened
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1981873292"] = "Kann nicht geöffnet werden"

View File

@ -2346,6 +2346,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::
-- Please select a provider.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1809312323"] = "Please select a provider."
-- Please add at least one source material file.
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1957239290"] = "Please add at least one source material file."
-- Cannot be opened
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::VISUALBRIEFING::VISUALBRIEFINGASSISTANT::T1981873292"] = "Cannot be opened"