using AIStudio.Chat; using AIStudio.Tools.Media; namespace AIStudio.Assistants.VisualBriefing; /// /// Defines VisualBriefingTranscriptStorage for the visual briefing feature. /// public sealed class VisualBriefingTranscriptStorage(VisualBriefingStore store) : IMediaTranscriptStorage { /// /// Defines CanStore for the visual briefing feature. /// public bool CanStore(MediaImportOwner owner) => owner.Kind is MediaImportOwnerKind.VISUAL_BRIEFING && Guid.TryParse(owner.Id, out _); /// /// Defines StoreAsync for the visual briefing feature. /// public async Task StoreAsync( MediaImportTarget target, string originalMediaPath, string transcript, CancellationToken token) { if (!Guid.TryParse(target.Owner.Id, out var briefingId)) throw new InvalidDataException("The visual briefing media owner is invalid."); var sourceId = await store.FindSourceIdByPathAsync(briefingId, originalMediaPath, token) ?? throw new InvalidDataException("The visual briefing media source is not registered."); await store.SetTranscriptCurrentAsync(briefingId, sourceId, transcript, token); var transcriptPath = store.GetTranscriptPath(briefingId, sourceId); return FileAttachment.FromPath(transcriptPath); } }