载入中...
搜索中...
未找到
AudioPublishingTarget.cpp
浏览该文件的文档.
2
3namespace eve::audio_editing {
4namespace {
5
6} // namespace
7
9 std::string id, IAudioSourceRuntimeSink* sink)
10 : document_(std::move(id)), sink_(sink) {}
11
14 descriptor.type = "audio-source-runtime";
15 return descriptor;
16}
17
18void* AudioSourcePublishingTarget::queryCapability(const CapabilityId& capability) {
19 return document_.queryCapability(capability);
20}
21
24 if (staging_) return document_.applyDomainOperation(operation);
25 auto candidate = cloneDomainState();
26 auto applied = candidate->applyDomainOperation(operation);
27 if (!applied.ok()) return applied;
28 return commitDomainState(std::move(candidate));
29}
30
31std::unique_ptr<IDomainOperationTarget> AudioSourcePublishingTarget::cloneDomainState() const {
32 auto candidate = std::make_unique<AudioSourcePublishingTarget>(*this);
33 candidate->staging_ = true;
34 return candidate;
35}
36
38 std::unique_ptr<IDomainOperationTarget> candidate) {
39 auto* typed = dynamic_cast<AudioSourcePublishingTarget*>(candidate.get());
40 if (!typed || typed->targetId() != targetId() || typed->sink_ != sink_ || !typed->staging_)
41 return eve::editing::failed<void>(EditorStatus::Conflict, RuleId("editor.audio.publishing-candidate-mismatch"),
42 "Audio publishing candidate belongs to another live target");
43 if (!sink_)
44 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.audio.publishing-sink-missing"),
45 "Audio publishing target requires a live runtime sink");
46 Result<void> published = sink_->publish(typed->document_);
47 if (!published.ok()) return published;
48 document_ = typed->document_;
49 return eve::editing::applied<void>();
50}
51
52} // namespace eve::audio_editing
ActionParameterOperation operation
std::string descriptor
std::string id
Definition PlayHost.cpp:108
Move-only operation result carrying either a value or Status.
Definition Result.h:155
bool ok() const noexcept
Whether this result represents a non-failure outcome.
Definition Result.h:255
Operation target coupling an owned audio document to an atomic live sink.
Definition AudioTarget.h:91
Result< void > applyDomainOperation(const DomainOperation &operation) override
Applies domain operation.
std::unique_ptr< IDomainOperationTarget > cloneDomainState() const override
Clones domain state.
void * queryCapability(const CapabilityId &capability) override
Forward authoring capabilities from the owned document.
Result< void > commitDomainState(std::unique_ptr< IDomainOperationTarget > candidate) override
Commits domain state.
TargetId targetId() const override
Target id.
Definition AudioTarget.h:97
TargetDescriptor describe() const override
Describe.
AudioSourcePublishingTarget(std::string id, IAudioSourceRuntimeSink *sink)
Create an authoring target bound to a non-owning runtime sink.
void * queryCapability(const CapabilityId &capability) override
Query an optional target capability.
TargetDescriptor describe() const override
Describe.
Result< void > applyDomainOperation(const DomainOperation &operation) override
Applies domain operation.
Atomic runtime publication boundary for one authored audio source.
Definition AudioTarget.h:72
virtual Result< void > publish(const AudioSourceTarget &candidate)=0
Publish one fully validated authoring candidate.
eve::OptionalRef< C > capability()
Query a capability through its interface-owned stable identity.
DomainOperation public API.
Stable discovery metadata exposed by every editable target.