]> git.sesse.net Git - casparcg/blobdiff - protocol/amcp/AMCPCommandsImpl.cpp
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
[casparcg] / protocol / amcp / AMCPCommandsImpl.cpp
index 8ee4bf81f5996a5b3803189d5cf02d2793648925..e7f538f0a038b57d853a4362679013e2215443cb 100644 (file)
@@ -42,6 +42,7 @@
 #include <core/consumer/output.h>\r
 \r
 #include <modules/flash/flash.h>\r
+#include <modules/flash/util/swf.h>\r
 #include <modules/flash/producer/flash_producer.h>\r
 #include <modules/flash/producer/cg_producer.h>\r
 \r
@@ -1316,31 +1317,54 @@ void GenerateChannelInfo(int index, const safe_ptr<core::video_channel>& pChanne
 \r
 bool InfoCommand::DoExecute()\r
 {\r
-       try\r
-       {\r
-               std::wstringstream replyString;\r
-               if(_parameters.size() >= 1)\r
+       if(_parameters.size() >= 1 && _parameters[0] == L"TEMPLATE")\r
+       {               \r
+               try\r
                {\r
-                       int channelIndex = _ttoi(_parameters.at(0).c_str())-1;\r
-                       replyString << TEXT("201 INFO OK\r\n");\r
-                       GenerateChannelInfo(channelIndex, channels_.at(channelIndex), replyString);\r
+                       // Needs to be extended for any file, not just flash.\r
+\r
+                       auto filename = flash::find_template(env::template_folder() + _parameters.at(1));\r
+\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
+                       SetReplyString(ss.str());\r
+                       return true;\r
                }\r
-               else\r
+               catch(...)\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
+                       SetReplyString(TEXT("403 INFO ERROR\r\n"));\r
+                       return false;\r
                }\r
-               SetReplyString(replyString.str());\r
        }\r
-       catch(...)\r
+       else // channel\r
        {\r
-               SetReplyString(TEXT("401 INFO ERROR\r\n"));\r
-               return false;\r
+               try\r
+               {\r
+                       std::wstringstream replyString;\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
+                       }\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
+                       }\r
+                       SetReplyString(replyString.str());\r
+                       return true;\r
+               }\r
+               catch(...)\r
+               {\r
+                       SetReplyString(TEXT("403 INFO ERROR\r\n"));\r
+                       return false;\r
+               }\r
        }\r
-\r
-       return true;\r
 }\r
 \r
 bool ClsCommand::DoExecute()\r