]> git.sesse.net Git - casparcg/blobdiff - modules/flash/flash.cpp
[flash] Moved template host copying to flash module startup instead from env setup...
[casparcg] / modules / flash / flash.cpp
index acf168463fc0fe50c8313a65c286fa738a3a9572..a5d4fcde9108b698da5a4d65717da09542074aab 100644 (file)
@@ -85,8 +85,16 @@ public:
                flash_producer_->call(std::move(params)).get();
        }
 
+       void verify_flash_player()
+       {
+               if (flash_producer_->call({ L"?" }).get() == L"0")
+                       CASPAR_THROW_EXCEPTION(expected_user_error() << msg_info("No flash player running on video layer."));
+       }
+
        void remove(int layer) override
        {
+               verify_flash_player();
+
                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(debug) << flash_producer_->print() << " Invoking remove-command: " << str;
                std::vector<std::wstring> params;
@@ -96,6 +104,8 @@ public:
 
        void play(int layer) override
        {
+               verify_flash_player();
+
                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(debug) << flash_producer_->print() << " Invoking play-command: " << str;
                std::vector<std::wstring> params;
@@ -105,6 +115,8 @@ public:
 
        void stop(int layer, unsigned int) override
        {
+               verify_flash_player();
+
                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(debug) << flash_producer_->print() << " Invoking stop-command: " << str;
                std::vector<std::wstring> params;
@@ -114,6 +126,8 @@ public:
 
        void next(int layer) override
        {
+               verify_flash_player();
+
                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(debug) << flash_producer_->print() << " Invoking next-command: " << str;
                std::vector<std::wstring> params;
@@ -123,6 +137,8 @@ public:
 
        void update(int layer, const std::wstring& data) override
        {
+               verify_flash_player();
+
                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(debug) << flash_producer_->print() << " Invoking update-command: " << str;
                std::vector<std::wstring> params;
@@ -132,6 +148,8 @@ public:
 
        std::wstring invoke(int layer, const std::wstring& label) override
        {
+               verify_flash_player();
+
                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(debug) << flash_producer_->print() << " Invoking invoke-command: " << str;
                std::vector<std::wstring> params;
@@ -142,6 +160,8 @@ public:
 
        std::wstring description(int layer) override
        {
+               verify_flash_player();
+
                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(debug) << flash_producer_->print() << " Invoking description-command: " << str;
                std::vector<std::wstring> params;
@@ -185,8 +205,35 @@ spl::shared_ptr<core::frame_producer> create_ct_producer(
        return producer;
 }
 
+void copy_template_hosts()
+{
+       try
+       {
+               for (auto it = boost::filesystem::directory_iterator(env::initial_folder()); it != boost::filesystem::directory_iterator(); ++it)
+               {
+                       if (it->path().wstring().find(L".fth") != std::wstring::npos)
+                       {
+                               auto from_path = *it;
+                               auto to_path = boost::filesystem::path(env::template_folder() + L"/" + it->path().filename().wstring());
+
+                               if (boost::filesystem::exists(to_path))
+                                       boost::filesystem::remove(to_path);
+
+                               boost::filesystem::copy_file(from_path, to_path);
+                       }
+               }
+       }
+       catch (...)
+       {
+               CASPAR_LOG_CURRENT_EXCEPTION();
+               CASPAR_LOG(error) << L"Failed to copy template-hosts from initial-path to template-path.";
+       }
+}
+
 void init(core::module_dependencies dependencies)
 {
+       copy_template_hosts();
+
        dependencies.producer_registry->register_producer_factory(L"Flash Producer (.ct)", create_ct_producer, describe_ct_producer);
        dependencies.producer_registry->register_producer_factory(L"Flash Producer (.swf)", create_swf_producer, describe_swf_producer);
        dependencies.media_info_repo->register_extractor([](const std::wstring& file, const std::wstring& extension, core::media_info& info)
@@ -229,11 +276,11 @@ std::wstring cg_version()
 }
 
 std::wstring version()
-{              
+{
        std::wstring version = L"Not found";
-#ifdef WIN32 
+#ifdef WIN32
        HKEY   hkey;
+
        DWORD dwType, dwSize;
        if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Macromedia\\FlashPlayerActiveX"), 0, KEY_QUERY_VALUE, &hkey) == ERROR_SUCCESS)
        {
@@ -242,7 +289,7 @@ std::wstring version()
                dwType = REG_SZ;
                dwSize = sizeof(ver_str);
                RegQueryValueEx(hkey, TEXT("Version"), NULL, &dwType, (PBYTE)&ver_str, &dwSize);
+
                version = ver_str;
 
                RegCloseKey(hkey);