summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStapper <stapper@partyreason.be>2020-11-13 17:35:36 +0100
committerStapper <stapper@partyreason.be>2020-11-15 19:47:53 +0100
commitba5531f9dd1f7f22e696d3927f379839d7bdd9fc (patch)
tree63e8fb53aa28b559570ea68b1e919bd41b3da9a4 /src
parent60d19b23803d33c99bed644976387b78c17a470a (diff)
Fixes #994 - moveoutput: new AudioOutputControl created from copyMoving an output to a partition is now done via MultipleOutputs::AddCopy(),using a new AudioOutputControl constructor. Tags and always_on settings willpersist when moving outputs between partitions.
Diffstat (limited to 'src')
-rw-r--r--src/command/PartitionCommands.cxx5
-rw-r--r--src/output/Control.cxx11
-rw-r--r--src/output/Control.hxx3
-rw-r--r--src/output/MultipleOutputs.cxx13
-rw-r--r--src/output/MultipleOutputs.hxx4
5 files changed, 33 insertions, 3 deletions
diff --git a/src/command/PartitionCommands.cxx b/src/command/PartitionCommands.cxx
index fbcb8a754..9d260425f 100644
--- a/src/command/PartitionCommands.cxx
+++ b/src/command/PartitionCommands.cxx
@@ -183,9 +183,8 @@ handle_moveoutput(Client &client, Request request, Response &response)
existing_output->ReplaceDummy(output->Steal(),
was_enabled);
else
- /* add it to the output list */
- dest_partition.outputs.Add(output->Steal(),
- was_enabled);
+ /* copy the AudioOutputControl and add it to the output list */
+ dest_partition.outputs.AddCopy(output,was_enabled);
instance.EmitIdle(IDLE_OUTPUT);
return CommandResult::OK;
diff --git a/src/output/Control.cxx b/src/output/Control.cxx
index fd4a1aa50..f05ec29ff 100644
--- a/src/output/Control.cxx
+++ b/src/output/Control.cxx
@@ -39,6 +39,17 @@ AudioOutputControl::AudioOutputControl(std::unique_ptr<FilteredAudioOutput> _out
{
}
+AudioOutputControl::AudioOutputControl(AudioOutputControl *_output,
+ AudioOutputClient &_client) noexcept
+ :output(std::move(_output->Steal())),
+ name(output->GetName()),
+ client(_client),
+ thread(BIND_THIS_METHOD(Task))
+{
+ tags =_output->tags;
+ always_on=_output->always_on;
+}
+
AudioOutputControl::~AudioOutputControl() noexcept
{
StopThread();
diff --git a/src/output/Control.hxx b/src/output/Control.hxx
index 809c65101..ab8637f47 100644
--- a/src/output/Control.hxx
+++ b/src/output/Control.hxx
@@ -245,6 +245,9 @@ public:
AudioOutputControl(std::unique_ptr<FilteredAudioOutput> _output,
AudioOutputClient &_client) noexcept;
+ AudioOutputControl(AudioOutputControl *_outputControl,
+ AudioOutputClient &_client) noexcept;
+
~AudioOutputControl() noexcept;
AudioOutputControl(const AudioOutputControl &) = delete;
diff --git a/src/output/MultipleOutputs.cxx b/src/output/MultipleOutputs.cxx
index 71014e8d1..0639d51c7 100644
--- a/src/output/MultipleOutputs.cxx
+++ b/src/output/MultipleOutputs.cxx
@@ -141,6 +141,19 @@ MultipleOutputs::Add(std::unique_ptr<FilteredAudioOutput> output,
}
void
+MultipleOutputs::AddCopy(AudioOutputControl *outputControl,
+ bool enable) noexcept
+{
+ // TODO: this operation needs to be protected with a mutex
+ outputs.emplace_back(std::make_unique<AudioOutputControl>(outputControl,
+ client));
+
+ outputs.back()->LockSetEnabled(enable);
+
+ client.ApplyEnabled();
+}
+
+void
MultipleOutputs::EnableDisable()
{
/* parallel execution */
diff --git a/src/output/MultipleOutputs.hxx b/src/output/MultipleOutputs.hxx
index 9c885cb3a..6b3e538c2 100644
--- a/src/output/MultipleOutputs.hxx
+++ b/src/output/MultipleOutputs.hxx
@@ -128,6 +128,10 @@ public:
void Add(std::unique_ptr<FilteredAudioOutput> output,
bool enable) noexcept;
+ void AddCopy(AudioOutputControl *outputControl,
+ bool enable) noexcept;
+
+
void SetReplayGainMode(ReplayGainMode mode) noexcept;
/**