return impl_->last_frame();
}
-boost::unique_future<std::wstring> frame_producer_base::call(const std::wstring&)
+boost::unique_future<std::wstring> frame_producer_base::call(const std::vector<std::wstring>&)
{
CASPAR_THROW_EXCEPTION(not_supported());
}
void unsubscribe(const monitor::observable::observer_ptr& o) override{}
std::wstring name() const override {return L"empty";}
uint32_t frame_number() const override {return 0;}
- boost::unique_future<std::wstring> call(const std::wstring& params) override{CASPAR_THROW_EXCEPTION(not_supported());}
+ boost::unique_future<std::wstring> call(const std::vector<std::wstring>& params) override{CASPAR_THROW_EXCEPTION(not_supported());}
draw_frame last_frame() {return draw_frame::empty();}
constraints& pixel_constraints() override { static constraints c; return c; }
std::wstring name() const override {return producer_->name();}
uint32_t frame_number() const override {return producer_->frame_number();}
boost::property_tree::wptree info() const override {return producer_->info();}
- boost::unique_future<std::wstring> call(const std::wstring& str) override {return producer_->call(str);}
+ boost::unique_future<std::wstring> call(const std::vector<std::wstring>& params) override {return producer_->call(params);}
void leading_producer(const spl::shared_ptr<frame_producer>& producer) override {return producer_->leading_producer(producer);}
uint32_t nb_frames() const override {return producer_->nb_frames();}
class draw_frame last_frame() {return producer_->last_frame();}
// Methods
virtual class draw_frame receive() = 0;
- virtual boost::unique_future<std::wstring> call(const std::wstring& params) = 0;
+ virtual boost::unique_future<std::wstring> call(const std::vector<std::wstring>& params) = 0;
// monitor::observable
// Methods
- virtual boost::unique_future<std::wstring> call(const std::wstring& params);
+ virtual boost::unique_future<std::wstring> call(const std::vector<std::wstring>& params);
// monitor::observable
return boost::optional<interaction_target>();
}
- boost::unique_future<std::wstring> call(const std::wstring& params)
+ boost::unique_future<std::wstring> call(const std::vector<std::wstring>& params)
{
std::wstring result;
- std::vector<std::wstring> words;
- boost::split(words, params, [](wchar_t c) { return c == L' '; }, boost::token_compress_on);
-
- if(words.size() >= 2)
+ if(params.size() >= 2)
{
struct layer_comparer
{
bool operator()(const layer& val) { return boost::iequals(val.name.get(), str); }
};
- auto it = std::find_if(layers_.begin(), layers_.end(), layer_comparer(words[0]));
+ auto it = std::find_if(layers_.begin(), layers_.end(), layer_comparer(params[0]));
if(it != layers_.end())
- (*it).producer.get()->call(words[1]);
+ {
+ auto params2 = params;
+ params2.erase(params2.cbegin());
+ (*it).producer.get()->call(params2);
+ }
}
return async(launch::deferred, [=]{return result;});
return impl_->info();
}
-boost::unique_future<std::wstring> scene_producer::call(const std::wstring& params)
+boost::unique_future<std::wstring> scene_producer::call(const std::vector<std::wstring>& params)
{
return impl_->call(params);
}
bool collides(double x, double y) const override;
std::wstring print() const override;
std::wstring name() const override;
- boost::unique_future<std::wstring> call(const std::wstring& params) override;
+ boost::unique_future<std::wstring> call(const std::vector<std::wstring>& params) override;
boost::property_tree::wptree info() const override;
void subscribe(const monitor::observable::observer_ptr& o) override;
void unsubscribe(const monitor::observable::observer_ptr& o) override;
return L"separated[fill:" + fill_producer_->print() + L"|key[" + key_producer_->print() + L"]]";
}
- boost::unique_future<std::wstring> call(const std::wstring& str) override
+ boost::unique_future<std::wstring> call(const std::vector<std::wstring>& params) override
{
- key_producer_->call(str);
- return fill_producer_->call(str);
+ key_producer_->call(params);
+ return fill_producer_->call(params);
}
std::wstring name() const override
}, task_priority::high_priority);
}
- boost::unique_future<std::wstring> call(int index, const std::wstring& params)
+ boost::unique_future<std::wstring> call(int index, const std::vector<std::wstring>& params)
{
return flatten(executor_.begin_invoke([=]
{
};
stage::stage(spl::shared_ptr<diagnostics::graph> graph) : impl_(new impl(std::move(graph))){}
-boost::unique_future<std::wstring> stage::call(int index, const std::wstring& params){return impl_->call(index, params);}
+boost::unique_future<std::wstring> stage::call(int index, const std::vector<std::wstring>& params){return impl_->call(index, params);}
boost::unique_future<void> stage::apply_transforms(const std::vector<stage::transform_tuple_t>& transforms){return impl_->apply_transforms(transforms);}
boost::unique_future<void> stage::apply_transform(int index, const std::function<core::frame_transform(core::frame_transform)>& transform, unsigned int mix_duration, const tweener& tween){return impl_->apply_transform(index, transform, mix_duration, tween);}
boost::unique_future<void> stage::clear_transforms(int index){return impl_->clear_transforms(index);}
boost::unique_future<void> pause(int index);
boost::unique_future<void> play(int index);
boost::unique_future<void> stop(int index);
- boost::unique_future<std::wstring> call(int index, const std::wstring& params);
+ boost::unique_future<std::wstring> call(int index, const std::vector<std::wstring>& params);
boost::unique_future<void> clear(int index);
boost::unique_future<void> clear();
boost::unique_future<void> swap_layers(stage& other);
return frame_;
}
- boost::unique_future<std::wstring> call(const std::wstring& param)
+ boost::unique_future<std::wstring> call(const std::vector<std::wstring>& param)
{
std::wstring result;
- generate_frame(param);
+ generate_frame(param.empty() ? L"" : param[0]);
return async(launch::deferred, [=]{return result;});
}
{}
draw_frame text_producer::receive_impl() { return impl_->receive_impl(); }
-boost::unique_future<std::wstring> text_producer::call(const std::wstring& param) { return impl_->call(param); }
+boost::unique_future<std::wstring> text_producer::call(const std::vector<std::wstring>& param) { return impl_->call(param); }
text::string_metrics text_producer::measure_string(const std::wstring& str) { return impl_->measure_string(str); }
constraints& text_producer::pixel_constraints() { return impl_->pixel_constraints(); }
public:
text_producer(const spl::shared_ptr<frame_factory>& frame_factory, int x, int y, const std::wstring& str, const text::text_info& text_info, long parent_width, long parent_height);
draw_frame receive_impl() override;
- boost::unique_future<std::wstring> call(const std::wstring& param) override;
+ boost::unique_future<std::wstring> call(const std::vector<std::wstring>& param) override;
text::string_metrics measure_string(const std::wstring& str);
return dest_producer_->info();
}
- boost::unique_future<std::wstring> call(const std::wstring& str) override
+ boost::unique_future<std::wstring> call(const std::vector<std::wstring>& params) override
{
- return dest_producer_->call(str);
+ return dest_producer_->call(params);
}
// transition_producer
return video_decoder_ ? video_decoder_->file_frame_number() : 0;
}
- boost::unique_future<std::wstring> call(const std::wstring& param) override
+ boost::unique_future<std::wstring> call(const std::vector<std::wstring>& params) override
{
static const boost::wregex loop_exp(L"LOOP\\s*(?<VALUE>\\d?)?", boost::regex::icase);
static const boost::wregex seek_exp(L"SEEK\\s+(?<VALUE>\\d+)", boost::regex::icase);
static const boost::wregex length_exp(L"LENGTH\\s+(?<VALUE>\\d+)?", boost::regex::icase);
static const boost::wregex start_exp(L"START\\s+(?<VALUE>\\d+)?", boost::regex::icase);
+
+ auto param = boost::algorithm::join(params, L" ");
std::wstring result;
filename += L".ft";
auto str = (boost::wformat(L"<invoke name=\"Add\" returntype=\"xml\"><arguments><number>%1%</number><string>%2%</string>%3%<string>%4%</string><string><![CDATA[%5%]]></string></arguments></invoke>") % layer % filename % (play_on_load?L"<true/>":L"<false/>") % label % data).str();
-
CASPAR_LOG(info) << flash_producer_->print() << " Invoking add-command: " << str;
- return flash_producer_->call(str);
+ std::vector<std::wstring> params;
+ params.push_back(std::move(str));
+ return flash_producer_->call(std::move(params));
}
boost::unique_future<std::wstring> remove(int layer)
{
auto str = (boost::wformat(L"<invoke name=\"Delete\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array></arguments></invoke>") % layer).str();
CASPAR_LOG(info) << flash_producer_->print() << " Invoking remove-command: " << str;
- return flash_producer_->call(str);
+ std::vector<std::wstring> params;
+ params.push_back(std::move(str));
+ return flash_producer_->call(std::move(params));
}
boost::unique_future<std::wstring> play(int layer)
{
auto str = (boost::wformat(L"<invoke name=\"Play\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array></arguments></invoke>") % layer).str();
CASPAR_LOG(info) << flash_producer_->print() << " Invoking play-command: " << str;
- return flash_producer_->call(str);
+ std::vector<std::wstring> params;
+ params.push_back(std::move(str));
+ return flash_producer_->call(std::move(params));
}
boost::unique_future<std::wstring> stop(int layer, unsigned int)
{
auto str = (boost::wformat(L"<invoke name=\"Stop\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array><number>0</number></arguments></invoke>") % layer).str();
CASPAR_LOG(info) << flash_producer_->print() << " Invoking stop-command: " << str;
- return flash_producer_->call(str);
+ std::vector<std::wstring> params;
+ params.push_back(std::move(str));
+ return flash_producer_->call(std::move(params));
}
boost::unique_future<std::wstring> next(int layer)
{
auto str = (boost::wformat(L"<invoke name=\"Next\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array></arguments></invoke>") % layer).str();
CASPAR_LOG(info) << flash_producer_->print() << " Invoking next-command: " << str;
- return flash_producer_->call(str);
+ std::vector<std::wstring> params;
+ params.push_back(std::move(str));
+ return flash_producer_->call(std::move(params));
}
boost::unique_future<std::wstring> update(int layer, const std::wstring& data)
{
auto str = (boost::wformat(L"<invoke name=\"SetData\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array><string><![CDATA[%2%]]></string></arguments></invoke>") % layer % data).str();
CASPAR_LOG(info) << flash_producer_->print() <<" Invoking update-command: " << str;
- return flash_producer_->call(str);
+ std::vector<std::wstring> params;
+ params.push_back(std::move(str));
+ return flash_producer_->call(std::move(params));
}
boost::unique_future<std::wstring> invoke(int layer, const std::wstring& label)
{
auto str = (boost::wformat(L"<invoke name=\"Invoke\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array><string>%2%</string></arguments></invoke>") % layer % label).str();
CASPAR_LOG(info) << flash_producer_->print() << " Invoking invoke-command: " << str;
- return flash_producer_->call(str);
+ std::vector<std::wstring> params;
+ params.push_back(std::move(str));
+ return flash_producer_->call(std::move(params));
}
boost::unique_future<std::wstring> description(int layer)
{
auto str = (boost::wformat(L"<invoke name=\"GetDescription\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array></arguments></invoke>") % layer).str();
CASPAR_LOG(info) << flash_producer_->print() << " Invoking description-command: " << str;
- return flash_producer_->call(str);
+ std::vector<std::wstring> params;
+ params.push_back(std::move(str));
+ return flash_producer_->call(std::move(params));
}
boost::unique_future<std::wstring> template_host_info()
{
auto str = (boost::wformat(L"<invoke name=\"GetInfo\" returntype=\"xml\"><arguments></arguments></invoke>")).str();
CASPAR_LOG(info) << flash_producer_->print() << " Invoking info-command: " << str;
- return flash_producer_->call(str);
+ std::vector<std::wstring> params;
+ params.push_back(std::move(str));
+ return flash_producer_->call(std::move(params));
}
std::wstring timed_invoke(int layer, const std::wstring& label)
return constraints_;
}
- boost::unique_future<std::wstring> call(const std::wstring& param) override
- {
+ boost::unique_future<std::wstring> call(const std::vector<std::wstring>& params) override
+ {
+ auto param = boost::algorithm::join(params, L" ");
+
return executor_.begin_invoke([this, param]() -> std::wstring
{
try
try
{
auto what = _parameters.at(0);
-
- std::wstring param;
- for(auto it = std::begin(_parameters2); it != std::end(_parameters2); ++it, param += L" ")
- param += *it;
-
- auto result = GetChannel()->stage().call(GetLayerIndex(), boost::trim_copy(param));
+ auto result = GetChannel()->stage().call(GetLayerIndex(), _parameters2);
if(!result.timed_wait(boost::posix_time::seconds(2)))
CASPAR_THROW_EXCEPTION(timed_out());
std::wstringstream flashParam;
flashParam << TEXT("<invoke name=\"Add\" returntype=\"xml\"><arguments><number>1</number><string>") << currentProfile_ << '/' << templateName << TEXT("</string><number>0</number><true/><string> </string><string><![CDATA[ ") << xmlData << TEXT(" ]]></string></arguments></invoke>");
- producer->call(flashParam.str());
+ std::vector<std::wstring> params;
+ params.push_back(flashParam.str());
+ producer->call(std::move(params));
CASPAR_LOG(info) << "Saved an instance of " << templateName << TEXT(" as ") << titleName ;