X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=common%2Fenv.cpp;h=1ce341d46f349cf33805e96592640d3c41cb6f38;hb=1dd7f451acbf1cac0f44679990e304bcfe29f631;hp=5aca238f94d4fdf267e2bf8f70f3d60cd231433f;hpb=95eef423ec961f3482981752ee4a5b81622ade32;p=casparcg diff --git a/common/env.cpp b/common/env.cpp index 5aca238f9..1ce341d46 100644 --- a/common/env.cpp +++ b/common/env.cpp @@ -28,14 +28,17 @@ #include "except.h" #include "log.h" #include "string.h" +#include "os/filesystem.h" #include #include #include +#include #include #include #include +#include namespace caspar { namespace env { @@ -44,6 +47,7 @@ std::wstring log; std::wstring ftemplate; std::wstring data; std::wstring font; +std::wstring thumbnails; boost::property_tree::wptree pt; void check_is_configured() @@ -56,32 +60,93 @@ void configure(const std::wstring& filename) { try { - auto initialPath = boost::filesystem3::initial_path().wstring(); + auto initialPath = boost::filesystem::initial_path().wstring(); - std::wifstream file(initialPath + L"\\" + filename); + boost::filesystem::wifstream file(initialPath + 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::filesystem3::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"\\fonts\\"); + 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/"); + } + catch(...) + { + CASPAR_LOG(error) << L" ### Invalid configuration file. ###"; + throw; + } + + try + { + auto found_media_path = find_case_insensitive(media); + if (found_media_path) + media = *found_media_path; + else + boost::filesystem::create_directories(media); + + auto found_template_path = find_case_insensitive(ftemplate); + if (found_template_path) + ftemplate = *found_template_path; + else + boost::filesystem::create_directories(ftemplate); + + auto found_data_path = find_case_insensitive(data); + if (found_data_path) + data = *found_data_path; + else + boost::filesystem::create_directories(data); + + auto found_font_path = find_case_insensitive(font); + if (found_font_path) + font = *found_font_path; + else + boost::filesystem::create_directories(font); + + auto found_thumbnails_path = find_case_insensitive(thumbnails); + if (found_thumbnails_path) + thumbnails = *found_thumbnails_path; + else + boost::filesystem::create_directories(thumbnails); + + auto found_log_path = find_case_insensitive(log); + if (found_log_path) + log = *found_log_path; + else if (!boost::filesystem::create_directories(log)) + log = L"./"; + + //Make sure that all paths have a trailing slash + if(media.at(media.length()-1) != L'/') + media.append(L"/"); + if(log.at(log.length()-1) != L'/') + log.append(L"/"); + if(ftemplate.at(ftemplate.length()-1) != L'/') + ftemplate.append(L"/"); + if(data.at(data.length()-1) != L'/') + data.append(L"/"); + if(font.at(font.length()-1) != L'/') + 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) + if(it->path().wstring().find(L".fth") != std::wstring::npos) { auto from_path = *it; auto to_path = boost::filesystem::path(ftemplate + L"/" + it->path().wstring()); - + if(boost::filesystem::exists(to_path)) boost::filesystem::remove(to_path); boost::filesystem::copy_file(from_path, to_path); - } + } } } catch(...) @@ -91,37 +156,6 @@ void configure(const std::wstring& filename) } } catch(...) - { - CASPAR_LOG(error) << L" ### Invalid configuration file. ###"; - throw; - } - - try - { - try - { - auto log_path = boost::filesystem::path(log); - if(!boost::filesystem::exists(log_path)) - boost::filesystem::create_directories(log_path); - } - catch(...) - { - log = L"./"; - } - - auto media_path = boost::filesystem::path(media); - if(!boost::filesystem::exists(media_path)) - boost::filesystem::create_directories(media_path); - - auto template_path = boost::filesystem::path(ftemplate); - if(!boost::filesystem::exists(template_path)) - boost::filesystem::create_directories(template_path); - - auto data_path = boost::filesystem::path(data); - if(!boost::filesystem::exists(data_path)) - boost::filesystem::create_directories(data_path); - } - catch(...) { CASPAR_LOG_CURRENT_EXCEPTION(); CASPAR_LOG(error) << L"Failed to create configured directories."; @@ -158,6 +192,12 @@ const std::wstring& font_folder() return font; } +const std::wstring& thumbnails_folder() +{ + check_is_configured(); + return thumbnails; +} + #define QUOTE(str) #str #define EXPAND_AND_QUOTE(str) QUOTE(str) @@ -178,9 +218,4 @@ const boost::property_tree::wptree& properties() return pt; } -std::wstring system_font_folder() -{ - return L"C:\\windows\\Fonts\\"; -} - -}} \ No newline at end of file +}}