diff --git a/include/dindexer-machinery/scantask/mime.hpp b/include/dindexer-machinery/scantask/mime.hpp index 1bccde7..7065040 100644 --- a/include/dindexer-machinery/scantask/mime.hpp +++ b/include/dindexer-machinery/scantask/mime.hpp @@ -31,7 +31,7 @@ namespace mchlib { public: using DirTreeTaskPtr = std::shared_ptr>>; - explicit Mime ( DirTreeTaskPtr parDirTree ); + Mime (DirTreeTaskPtr parDirTree, bool parIgnoreErrors); virtual ~Mime ( void ) noexcept; private: @@ -39,6 +39,7 @@ namespace mchlib { virtual std::vector& on_data_get ( void ) override; DirTreeTaskPtr m_file_tree_task; + bool m_ignore_errors; }; } //namespace scantask } //namespace mchlib diff --git a/src/machinery/scantask/mime.cpp b/src/machinery/scantask/mime.cpp index 110d0c4..5bd20cf 100644 --- a/src/machinery/scantask/mime.cpp +++ b/src/machinery/scantask/mime.cpp @@ -25,8 +25,9 @@ namespace mchlib { } //unnamed namespace namespace scantask { - Mime::Mime (DirTreeTaskPtr parDirTree) : - m_file_tree_task(parDirTree) + Mime::Mime (DirTreeTaskPtr parDirTree, bool parIgnoreErrors) : + m_file_tree_task(parDirTree), + m_ignore_errors(parIgnoreErrors) { assert(m_file_tree_task); } @@ -39,9 +40,14 @@ namespace mchlib { auto& list = m_file_tree_task->get_or_create(); for (auto& itm : list) { - itm.mime_full = mime.analyze(itm.abs_path); - auto mime_pair = split_mime(itm.mime_full); - itm.set_mime_parts(mime_pair.first, mime_pair.second); + try { + itm.mime_full = mime.analyze(itm.abs_path); + auto mime_pair = split_mime(itm.mime_full); + itm.set_mime_parts(mime_pair.first, mime_pair.second); + } + catch (const std::runtime_error&) { + itm.mime_full = ""; + } } } diff --git a/src/scan/main.cpp b/src/scan/main.cpp index 207feec..36e7bcb 100644 --- a/src/scan/main.cpp +++ b/src/scan/main.cpp @@ -91,7 +91,7 @@ int main (int parArgc, char* parArgv[]) { std::shared_ptr media_type(new stask::MediaType(setbasic, def_media_type, vm.count("type"), search_path)); std::shared_ptr hashing(new stask::Hashing(scan_dirtree, ignore_read_errors)); std::shared_ptr content_type(new stask::ContentType(setbasic, scan_dirtree, media_type)); - std::shared_ptr mime(new stask::Mime(scan_dirtree)); + std::shared_ptr mime(new stask::Mime(scan_dirtree, ignore_read_errors)); std::shared_ptr filerecdata(new FileRecordDataFiller(mime, hashing)); std::shared_ptr setrecdata(new SetRecordDataFiller(media_type, content_type));