From 17662d4eb8cb7261b79d3b36377fec295ff16964 Mon Sep 17 00:00:00 2001 From: emeric Date: Wed, 25 Jun 2014 12:42:52 +0200 Subject: [PATCH] WIP. Convert to UTF-8 before DB inserts --- database/Database.cpp | 19 ++++++++++++------- metadata/AvFormat.cpp | 7 ++++--- metadata/Utils.cpp | 8 +++++--- metadata/Utils.hpp | 8 ++++++++ 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/database/Database.cpp b/database/Database.cpp index a5134d20..785fdb3a 100644 --- a/database/Database.cpp +++ b/database/Database.cpp @@ -240,14 +240,19 @@ Database::refreshAudioDirectory( const boost::filesystem::path& p) BOOST_FOREACH(const boost::filesystem::path& file, files) { - if (boost::filesystem::is_directory(file)) { - refreshAudioDirectory( file ); + try { + if (boost::filesystem::is_directory(file)) { + refreshAudioDirectory( file ); + } + else if (boost::filesystem::is_regular(file)) { + processAudioFile( file ); + } + else { + std::cout << "Skipped '" << file << "' (not regular)" << std::endl; + } } - else if (boost::filesystem::is_regular(file)) { - processAudioFile( file ); - } - else { - std::cout << "Skipped '" << file << "' (not regular)" << std::endl; + catch(std::exception& e) { + std::cerr << "Exception while accessing '" << file << ": " << e.what() << std::endl; } } } diff --git a/metadata/AvFormat.cpp b/metadata/AvFormat.cpp index e587e832..e608a12f 100644 --- a/metadata/AvFormat.cpp +++ b/metadata/AvFormat.cpp @@ -44,15 +44,16 @@ AvFormat::parse(const boost::filesystem::path& p, Items& items) items.insert( std::make_pair(MetaData::Duration, boost::posix_time::time_duration( boost::posix_time::seconds( input.getDurationSecs() )) )); + // Make sure to convert strings into UTF-8 std::map::const_iterator it; for (it = metadata.begin(); it != metadata.end(); ++it) { if (boost::iequals(it->first, "artist")) - items.insert( std::make_pair(MetaData::Artist, it->second )); + items.insert( std::make_pair(MetaData::Artist, string_to_utf8(it->second)) ); else if (boost::iequals(it->first, "album")) - items.insert( std::make_pair(MetaData::Album, it->second )); + items.insert( std::make_pair(MetaData::Album, string_to_utf8(it->second) )); else if (boost::iequals(it->first, "title")) - items.insert( std::make_pair(MetaData::Title, it->second )); + items.insert( std::make_pair(MetaData::Title, string_to_utf8(it->second) )); else if (boost::iequals(it->first, "track")) { std::size_t number; if (readAs(it->second, number)) diff --git a/metadata/Utils.cpp b/metadata/Utils.cpp index 78164166..0b4f77b5 100644 --- a/metadata/Utils.cpp +++ b/metadata/Utils.cpp @@ -40,8 +40,10 @@ bool readList(const std::string& str, const std::string& separators, std::list #include +#include + namespace MetaData { @@ -18,7 +20,13 @@ static inline bool readAs(const std::string& str, T& data) return iss >> data; } +std::string +static inline string_to_utf8(const std::string& str) +{ + return boost::locale::conv::to_utf(str, "UTF-8"); } +} // namespace MetaData + #endif