]> git.lyx.org Git - lyx.git/blobdiff - src/support/FileName.cpp
Getting rid of normalizePath() which is unneeded for FileName purpose (the path is...
[lyx.git] / src / support / FileName.cpp
index 170b3823b95b8dd53fc4ed3b238dd935c053c48b..91b9a33cc4db809d17927a84737af8b7a5e7373d 100644 (file)
@@ -76,7 +76,8 @@ struct FileName::Private
 
 
 FileName::FileName() : d(new Private)
-{}
+{
+}
 
 FileName::FileName(string const & abs_filename)
        : d(abs_filename.empty() ? new Private : new Private(abs_filename))
@@ -103,7 +104,6 @@ FileName & FileName::operator=(FileName const & rhs)
 
 bool FileName::empty() const
 {
-       lyxerr << "FileName::empty() '" << absFilename() << "'" << endl;
        return d->fi.absoluteFilePath().isEmpty();
 }
 
@@ -240,25 +240,32 @@ static bool rmdir(QFileInfo const & fi)
 {
        QDir dir(fi.absoluteFilePath());
        QFileInfoList list = dir.entryInfoList();
+       bool global_success = true;
        for (int i = 0; i < list.size(); ++i) {
                if (list.at(i).fileName() == ".")
                        continue;
                if (list.at(i).fileName() == "..")
                        continue;
+               bool success;
                if (list.at(i).isDir()) {
                        LYXERR(Debug::FILES, "Erasing dir " 
                                << fromqstr(list.at(i).absoluteFilePath()) << endl);
-                       if (!rmdir(list.at(i)))
-                               return false;
+                       success = rmdir(list.at(i));
                }
                else {
                        LYXERR(Debug::FILES, "Erasing file " 
                                << fromqstr(list.at(i).absoluteFilePath()) << endl);
-                       dir.remove(list.at(i).fileName());
+                       success = dir.remove(list.at(i).fileName());
+               }
+               if (!success) {
+                       global_success = false;
+                       lyxerr << "Could not delete "
+                               << fromqstr(list.at(i).absoluteFilePath()) << "." << endl;
                }
        } 
        QDir parent = fi.absolutePath();
-       return parent.rmdir(fi.fileName());
+       global_success |= parent.rmdir(fi.fileName());
+       return global_success;
 }
 
 
@@ -279,6 +286,42 @@ bool FileName::createDirectory(int permission) const
 }
 
 
+std::vector<FileName> FileName::dirList(std::string const & ext)
+{
+       std::vector<FileName> dirlist;
+       if (!exists() || !isDirectory()) {
+               lyxerr << "FileName::dirList(): Directory \"" << absFilename()
+                       << "\" does not exist!" << endl;
+               return dirlist;
+       }
+
+       QDir dir(d->fi.absoluteFilePath());
+
+       if (!ext.empty()) {
+               QString filter;
+               switch (ext[0]) {
+               case '.': filter = "*" + toqstr(ext); break;
+               case '*': filter = toqstr(ext); break;
+               default: filter = "*." + toqstr(ext);
+               }
+               dir.setNameFilters(QStringList(filter));
+               LYXERR(Debug::FILES, "FileName::dirList(): filtering on extension "
+                       << fromqstr(filter) << " is requested." << endl);
+       }
+
+       QFileInfoList list = dir.entryInfoList();
+       for (int i = 0; i < list.size(); ++i) {
+               FileName fi;
+               fi.d->fi = list.at(i);
+               dirlist.push_back(fi);
+               LYXERR(Debug::FILES, "FileName::dirList(): found file "
+                       << fi.absFilename() << endl);
+       }
+
+       return dirlist;
+}
+
+
 docstring FileName::displayName(int threshold) const
 {
        return makeDisplayPath(absFilename(), threshold);