]> git.sesse.net Git - casparcg/blobdiff - protocol/amcp/AMCPCommandsImpl.cpp
2.0.2: Improved INFO.
[casparcg] / protocol / amcp / AMCPCommandsImpl.cpp
index 339415d7b898a471d79337b561ee83463d5c01fa..d0d4090d2b1180a3480cbfac826e5e0a08585820 100644 (file)
@@ -57,6 +57,7 @@
 #include <boost/algorithm/string.hpp>\r
 #include <boost/filesystem.hpp>\r
 #include <boost/regex.hpp>\r
+#include <boost/property_tree/xml_parser.hpp>\r
 \r
 /* Return codes\r
 \r
@@ -525,7 +526,8 @@ bool AddCommand::DoExecute()
        //Perform loading of the clip\r
        try\r
        {\r
-               GetChannel()->output()->add(create_consumer(_parameters));\r
+               auto consumer = create_consumer(_parameters);\r
+               GetChannel()->output()->add(GetLayerIndex(consumer->index()), consumer);\r
        \r
                CASPAR_LOG(info) << "Added " <<  _parameters[0] << TEXT(" successfully");\r
 \r
@@ -1301,7 +1303,7 @@ bool CinfCommand::DoExecute()
                        SetReplyString(TEXT("404 CINF ERROR\r\n"));\r
                        return false;\r
                }\r
-               replyString << TEXT("200 INFO OK\r\n");\r
+               replyString << TEXT("200 CINF OK\r\n");\r
                replyString << info << "\r\n";\r
        }\r
        catch(...)\r
@@ -1331,7 +1333,10 @@ bool InfoCommand::DoExecute()
 \r
                        std::wstringstream ss;\r
                        ss << L"201 INFO OK\r\n";\r
-                       ss << flash::read_template_meta_info(filename) << L"\r\n";\r
+                       \r
+                       auto xml = flash::read_template_meta_info(filename);\r
+                       ss << widen(xml);\r
+                       ss << L"\r\n";\r
 \r
                        SetReplyString(ss.str());\r
                        return true;\r
@@ -1347,19 +1352,29 @@ bool InfoCommand::DoExecute()
                try\r
                {\r
                        std::wstringstream replyString;\r
+                       replyString << TEXT("201 INFO OK\r\n");\r
+\r
                        if(_parameters.size() >= 1)\r
                        {\r
-                               int channelIndex = boost::lexical_cast<int>(_parameters.at(0).c_str())-1;\r
-                               replyString << TEXT("201 INFO OK\r\n");\r
-                               GenerateChannelInfo(channelIndex, channels_.at(channelIndex), replyString);\r
+                               int channelIndex = boost::lexical_cast<int>(_parameters.at(0).c_str())-1;                                       \r
+                               boost::property_tree::xml_parser::write_xml(replyString, channels_.at(channelIndex)->info(), boost::property_tree::xml_writer_settings<wchar_t>(' ', 3));\r
                        }\r
                        else\r
                        {\r
-                               replyString << TEXT("200 INFO OK\r\n");\r
-                               for(size_t n = 0; n < channels_.size(); ++n)\r
-                                       GenerateChannelInfo(n, channels_[n], replyString);\r
-                               replyString << TEXT("\r\n");\r
+                               boost::property_tree::wptree info;\r
+                               auto& node = info.add(L"channels", L"");\r
+                               int index = 0;\r
+                               BOOST_FOREACH(auto channel, channels_)\r
+                               {\r
+                                       BOOST_FOREACH(auto update, channel->info())\r
+                                       {\r
+                                               auto& channel = node.add_child(update.first, update.second);\r
+                                               channel.push_front(std::make_pair(L"index", boost::lexical_cast<std::wstring>(++index)));\r
+                                       }\r
+                               }\r
+                               boost::property_tree::xml_parser::write_xml(replyString, info, boost::property_tree::xml_writer_settings<wchar_t>(' ', 3));\r
                        }\r
+                       replyString << TEXT("\r\n");\r
                        SetReplyString(replyString.str());\r
                        return true;\r
                }\r