diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c63a46..f350439 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,8 +49,6 @@ set(sdcv_SRCS src/distance.cpp src/distance.hpp src/mapfile.hpp - src/file.hpp - src/file.cpp ) if (ENABLE_NLS) diff --git a/src/file.cpp b/src/file.cpp deleted file mode 100644 index 4bb0178..0000000 --- a/src/file.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include - -#include - -#include "file.hpp" - -static void __for_each_file(const std::string& dirname, const std::string& suff, - const std::list& order_list, const std::list& disable_list, - const std::function& f) -{ - GDir *dir = g_dir_open(dirname.c_str(), 0, nullptr); - if (dir) { - const gchar *filename; - - while ((filename = g_dir_read_name(dir))!=nullptr) { - const std::string fullfilename(dirname+G_DIR_SEPARATOR_S+filename); - if (g_file_test(fullfilename.c_str(), G_FILE_TEST_IS_DIR)) - __for_each_file(fullfilename, suff, order_list, disable_list, f); - else if (g_str_has_suffix(filename, suff.c_str()) && - std::find(order_list.begin(), order_list.end(), - fullfilename)==order_list.end()) { - const bool disable = std::find(disable_list.begin(), - disable_list.end(), - fullfilename)!=disable_list.end(); - f(fullfilename, disable); - } - } - g_dir_close(dir); - } -} - - -void for_each_file(const std::list& dirs_list, const std::string& suff, - const std::list& order_list, const std::list& disable_list, - const std::function& f) -{ - for (const std::string & item : order_list) { - const bool disable = std::find(disable_list.begin(), disable_list.end(), item) != disable_list.end(); - f(item, disable); - } - for (const std::string& item : dirs_list) - __for_each_file(item, suff, order_list, disable_list, f); -} diff --git a/src/file.hpp b/src/file.hpp deleted file mode 100644 index 4657968..0000000 --- a/src/file.hpp +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - -#include -#include -#include - -extern void for_each_file(const std::list& dirs_list, const std::string& suff, - const std::list& order_list, const std::list& disable_list, - const std::function& f); - diff --git a/src/libwrapper.hpp b/src/libwrapper.hpp index b9c2180..99b4a40 100644 --- a/src/libwrapper.hpp +++ b/src/libwrapper.hpp @@ -3,7 +3,6 @@ #include #include -#include "file.hpp" #include "stardict_lib.hpp" #include "readline.hpp" diff --git a/src/stardict_lib.cpp b/src/stardict_lib.cpp index 29f0a33..7f2881c 100644 --- a/src/stardict_lib.cpp +++ b/src/stardict_lib.cpp @@ -11,8 +11,8 @@ #include #include "distance.hpp" -#include "file.hpp" #include "mapfile.hpp" +#include "utils.hpp" #include "stardict_lib.hpp" diff --git a/src/utils.cpp b/src/utils.cpp index 5c78ef9..dee1f8a 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include "utils.hpp" @@ -67,3 +68,41 @@ char *locale_to_utf8(const char *loc_str) return str; } + +static void __for_each_file(const std::string& dirname, const std::string& suff, + const std::list& order_list, const std::list& disable_list, + const std::function& f) +{ + GDir *dir = g_dir_open(dirname.c_str(), 0, nullptr); + if (dir) { + const gchar *filename; + + while ((filename = g_dir_read_name(dir))!=nullptr) { + const std::string fullfilename(dirname+G_DIR_SEPARATOR_S+filename); + if (g_file_test(fullfilename.c_str(), G_FILE_TEST_IS_DIR)) + __for_each_file(fullfilename, suff, order_list, disable_list, f); + else if (g_str_has_suffix(filename, suff.c_str()) && + std::find(order_list.begin(), order_list.end(), + fullfilename)==order_list.end()) { + const bool disable = std::find(disable_list.begin(), + disable_list.end(), + fullfilename)!=disable_list.end(); + f(fullfilename, disable); + } + } + g_dir_close(dir); + } +} + + +void for_each_file(const std::list& dirs_list, const std::string& suff, + const std::list& order_list, const std::list& disable_list, + const std::function& f) +{ + for (const std::string & item : order_list) { + const bool disable = std::find(disable_list.begin(), disable_list.end(), item) != disable_list.end(); + f(item, disable); + } + for (const std::string& item : dirs_list) + __for_each_file(item, suff, order_list, disable_list, f); +} diff --git a/src/utils.hpp b/src/utils.hpp index 2fa41dd..7b0874e 100644 --- a/src/utils.hpp +++ b/src/utils.hpp @@ -2,6 +2,8 @@ #include #include +#include +#include template class ResourceWrapper { @@ -57,3 +59,7 @@ namespace glib { extern char *locale_to_utf8(const char *locstr); extern std::string utf8_to_locale_ign_err(const std::string& utf8_str); + +extern void for_each_file(const std::list& dirs_list, const std::string& suff, + const std::list& order_list, const std::list& disable_list, + const std::function& f);