From 48e6b878823d7a118df54b91ee8d6bd7ce84c8e8 Mon Sep 17 00:00:00 2001 From: Helge Norberg Date: Tue, 15 Nov 2016 18:17:15 +0100 Subject: [PATCH] [flash] Moved template host copying to flash module startup instead from env setup so that errors during copying is logged to the log file (setup after env setup) in addition to console. This also removes flash specific code from core. --- common/env.cpp | 61 ++++++++--------------- common/env.h | 1 + modules/flash/flash.cpp | 35 +++++++++++-- modules/flash/producer/flash_producer.cpp | 2 +- protocol/amcp/AMCPCommandsImpl.cpp | 2 +- 5 files changed, 56 insertions(+), 45 deletions(-) diff --git a/common/env.cpp b/common/env.cpp index e7b78298c..f422fb0c0 100644 --- a/common/env.cpp +++ b/common/env.cpp @@ -41,7 +41,8 @@ #include namespace caspar { namespace env { - + +std::wstring initial; std::wstring media; std::wstring log; std::wstring ftemplate; @@ -60,18 +61,18 @@ void configure(const std::wstring& filename) { try { - auto initialPath = boost::filesystem::initial_path().wstring(); - - boost::filesystem::wifstream file(initialPath + L"/" + filename); + initial = boost::filesystem::initial_path().wstring(); + + boost::filesystem::wifstream file(initial + L"/" + filename); boost::property_tree::read_xml(file, pt, boost::property_tree::xml_parser::trim_whitespace | boost::property_tree::xml_parser::no_comments); auto paths = pt.get_child(L"configuration.paths"); - media = paths.get(L"media-path", initialPath + L"/media/"); - log = paths.get(L"log-path", initialPath + L"/log/"); - ftemplate = boost::filesystem::complete(paths.get(L"template-path", initialPath + L"/template/")).wstring(); - data = paths.get(L"data-path", initialPath + L"/data/"); - font = paths.get(L"font-path", initialPath + L"/font/"); - thumbnails = paths.get(L"thumbnail-path", initialPath + L"/thumbnail/"); + media = paths.get(L"media-path", initial + L"/media/"); + log = paths.get(L"log-path", initial + L"/log/"); + ftemplate = boost::filesystem::complete(paths.get(L"template-path", initial + L"/template/")).wstring(); + data = paths.get(L"data-path", initial + L"/data/"); + font = paths.get(L"font-path", initial + L"/font/"); + thumbnails = paths.get(L"thumbnail-path", initial + L"/thumbnail/"); } catch(...) { @@ -130,30 +131,6 @@ void configure(const std::wstring& filename) font.append(L"/"); if(thumbnails.at(thumbnails.length()-1) != L'/') thumbnails.append(L"/"); - - try - { - auto initialPath = boost::filesystem::initial_path().wstring(); - - for(auto it = boost::filesystem::directory_iterator(initialPath); 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(ftemplate + 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."; - } } catch(...) { @@ -161,7 +138,13 @@ void configure(const std::wstring& filename) CASPAR_LOG(error) << L"Failed to create configured directories."; } } - + +const std::wstring& initial_folder() +{ + check_is_configured(); + return initial; +} + const std::wstring& media_folder() { check_is_configured(); @@ -204,10 +187,10 @@ const std::wstring& thumbnails_folder() const std::wstring& version() { static std::wstring ver = u16( - EXPAND_AND_QUOTE(CASPAR_GEN) "." - EXPAND_AND_QUOTE(CASPAR_MAYOR) "." - EXPAND_AND_QUOTE(CASPAR_MINOR) "." - CASPAR_REV " " + EXPAND_AND_QUOTE(CASPAR_GEN) "." + EXPAND_AND_QUOTE(CASPAR_MAYOR) "." + EXPAND_AND_QUOTE(CASPAR_MINOR) "." + CASPAR_REV " " CASPAR_TAG); return ver; } diff --git a/common/env.h b/common/env.h index c7c78ff06..da4cde38d 100644 --- a/common/env.h +++ b/common/env.h @@ -29,6 +29,7 @@ namespace caspar { namespace env { void configure(const std::wstring& filename); +const std::wstring& initial_folder(); const std::wstring& media_folder(); const std::wstring& log_folder(); const std::wstring& template_folder(); diff --git a/modules/flash/flash.cpp b/modules/flash/flash.cpp index e0b85e92e..a5d4fcde9 100644 --- a/modules/flash/flash.cpp +++ b/modules/flash/flash.cpp @@ -205,8 +205,35 @@ spl::shared_ptr 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) @@ -249,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) { @@ -262,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); diff --git a/modules/flash/producer/flash_producer.cpp b/modules/flash/producer/flash_producer.cpp index 8cefe4d4c..cbbae1aa2 100644 --- a/modules/flash/producer/flash_producer.cpp +++ b/modules/flash/producer/flash_producer.cpp @@ -625,7 +625,7 @@ spl::shared_ptr create_producer(const core::frame_producer auto filename = env::template_folder() + L"\\" + template_host.filename; if(!boost::filesystem::exists(filename)) - CASPAR_THROW_EXCEPTION(file_not_found() << boost::errinfo_file_name(u8(filename))); + CASPAR_THROW_EXCEPTION(file_not_found() << msg_info(L"Could not open flash movie " + filename)); return create_destroy_proxy(spl::make_shared(dependencies.frame_factory, dependencies.format_desc, filename, template_host.width, template_host.height)); } diff --git a/protocol/amcp/AMCPCommandsImpl.cpp b/protocol/amcp/AMCPCommandsImpl.cpp index 2788325c7..0fe0d942b 100644 --- a/protocol/amcp/AMCPCommandsImpl.cpp +++ b/protocol/amcp/AMCPCommandsImpl.cpp @@ -2444,7 +2444,7 @@ std::wstring info_paths_command(command_context& ctx) { boost::property_tree::wptree info; info.add_child(L"paths", caspar::env::properties().get_child(L"configuration.paths")); - info.add(L"paths.initial-path", boost::filesystem::initial_path().wstring() + L"/"); + info.add(L"paths.initial-path", caspar::env::initial_folder() + L"/"); return create_info_xml_reply(info, L"PATHS"); } -- 2.39.2