summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Suhr Christensen <jsc@umbraculum.org>2014-05-13 11:44:45 +0200
committerJonas Suhr Christensen <jsc@umbraculum.org>2014-05-13 11:44:45 +0200
commitb69389f609c8c9c441d0251510f6b578a9437f6a (patch)
treebcd19ce53ac7f69fc1eec0e0f7e1e6cfd12060f0
parentb6405171c6a74a5227555a9b75c03f88a5f21ed2 (diff)
Added filter to exclude hidden directories.
-rw-r--r--plugingui/directory.cc61
-rw-r--r--plugingui/directory.h5
2 files changed, 50 insertions, 16 deletions
diff --git a/plugingui/directory.cc b/plugingui/directory.cc
index 057aead..d481d24 100644
--- a/plugingui/directory.cc
+++ b/plugingui/directory.cc
@@ -77,7 +77,8 @@ size_t Directory::count()
void Directory::refresh()
{
- _files = listFiles(_path);
+ _files = listFiles(_path, DIRECTORY_HIDDEN);
+// _files = listFiles(_path);
}
bool Directory::cd(std::string dir)
@@ -128,7 +129,7 @@ std::string Directory::cleanPath(std::string path)
return Directory::pathToStr(pathlst);
}
-Directory::EntryList Directory::listFiles(std::string path)
+Directory::EntryList Directory::listFiles(std::string path, unsigned char filter)
{
DEBUG(directory, "Listing files in '%s'\n", path.c_str());
@@ -149,12 +150,19 @@ Directory::EntryList Directory::listFiles(std::string path)
if(Directory::isRoot(path) && name == "..") continue;
+ unsigned char entryinfo = 0;
+ if(isHidden(name)) {
+ entryinfo |= DIRECTORY_HIDDEN;
+ }
+
std::string entrypath = path;
entrypath += SEP;
entrypath += entry->d_name;
if(Directory::isDir(entrypath)) {
- if(name == "..") directories.push_back(entry->d_name);
- else directories.push_back(std::string(SEP) + entry->d_name);
+ if(!(entryinfo && filter)) {
+ if(name == "..") directories.push_back(entry->d_name);
+ else directories.push_back(std::string(SEP) + entry->d_name);
+ }
}
else {
int drumkit_suffix_length = strlen(DRUMKIT_SUFFIX);
@@ -164,7 +172,10 @@ Directory::EntryList Directory::listFiles(std::string path)
continue;
}
- files.push_back(entry->d_name);
+
+// if(!(entryinfo && filter)) {
+ files.push_back(entry->d_name);
+// }
}
}
@@ -276,6 +287,20 @@ bool Directory::isDir()
return isDir(_path);
}
+bool Directory::isDir(std::string path)
+{
+ DEBUG(directory, "Is '%s' dir?\n", path.c_str());
+ struct stat st;
+ if(stat(path.c_str(), &st) == 0) {
+ if((st.st_mode & S_IFDIR) != 0) {
+ DEBUG(directory, "Yes\n");
+ return true;
+ }
+ }
+ DEBUG(directory, "No\n");
+ return false;
+}
+
bool Directory::fileExists(std::string filename)
{
return !isDir(_path + SEP + filename);
@@ -291,18 +316,24 @@ bool Directory::exists(std::string path)
}
}
-bool Directory::isDir(std::string path)
+bool Directory::isHidden(std::string path)
{
- DEBUG(directory, "Is '%s' dir?\n", path.c_str());
- struct stat st;
- if(stat(path.c_str(), &st) == 0) {
- if((st.st_mode & S_IFDIR) != 0) {
- DEBUG(directory, "Yes\n");
- return true;
- }
+ // TODO: Handle hidden and system files in windows
+#ifdef WIN32
+ return false
+#else
+ unsigned pos = path.find_last_of("/\\");
+ std::string entry = path.substr(pos+1);
+
+ if(entry.size() > 1 &&
+ entry.at(0) == '.' &&
+ entry.at(1) != '.') {
+ return true;
}
- DEBUG(directory, "No\n");
- return false;
+ else {
+ return false;
+ }
+#endif
}
Directory::Path Directory::parsePath(std::string path_str)
diff --git a/plugingui/directory.h b/plugingui/directory.h
index 50d5fae..04ed3e7 100644
--- a/plugingui/directory.h
+++ b/plugingui/directory.h
@@ -36,6 +36,8 @@
#include <sys/stat.h>
#include <unistd.h>
+#define DIRECTORY_HIDDEN 1
+
class Directory {
public:
@@ -70,10 +72,11 @@ class Directory {
static std::string root();
static std::string root(std::string path);
static std::string cleanPath(std::string path);
- static Directory::EntryList listFiles(std::string path);
+ static Directory::EntryList listFiles(std::string path, unsigned char filter = 0);
static bool isRoot(std::string path);
static Directory::DriveList drives();
static bool isDir(std::string path);
+ static bool isHidden(std::string entry);
static bool exists(std::string path);
static std::string pathDirectory(std::string filepath);