[gnote] Add directory_delete for Gio::File



commit 21bf710b00df41ff04a3316666c2ca890ddbb66e
Author: Aurimas Černius <aurisc4 gmail com>
Date:   Mon Jul 30 23:04:32 2018 +0300

    Add directory_delete for Gio::File

 src/sharp/directory.cpp | 26 ++++++++++++++++++++++++++
 src/sharp/directory.hpp |  2 +-
 2 files changed, 27 insertions(+), 1 deletion(-)
---
diff --git a/src/sharp/directory.cpp b/src/sharp/directory.cpp
index 4f23aa2b..3670dba9 100644
--- a/src/sharp/directory.cpp
+++ b/src/sharp/directory.cpp
@@ -34,6 +34,8 @@
 #include "sharp/fileinfo.hpp"
 #include "sharp/string.hpp"
 
+#include "debug.hpp"
+
 namespace sharp {
 
 
@@ -209,4 +211,28 @@ namespace sharp {
     return g_remove(dir.c_str()) == 0;
   }
 
+  bool directory_delete(const Glib::RefPtr<Gio::File> & dir, bool recursive)
+  {
+    if(recursive) {
+      std::vector<Glib::RefPtr<Gio::File>> files;
+      directory_get_files(dir, files);
+      for(auto file : files) {
+        if(!file->remove()) {
+          ERR_OUT("Failed to remove file %s", file->get_uri().c_str());
+          return false;
+        }
+      }
+      files.clear();
+      directory_get_directories(dir, files);
+      for(auto d : files) {
+        if(!directory_delete(d, true)) {
+          ERR_OUT("Failed to remove directory %s", d->get_uri().c_str());
+          return false;
+        }
+      }
+    }
+
+    return dir->remove();
+  }
+
 }
diff --git a/src/sharp/directory.hpp b/src/sharp/directory.hpp
index 8562dd70..d3c4ee61 100644
--- a/src/sharp/directory.hpp
+++ b/src/sharp/directory.hpp
@@ -70,7 +70,7 @@ namespace sharp {
   bool directory_create(const Glib::ustring & dir);
 
   bool directory_delete(const Glib::ustring & dir, bool recursive);
-
+  bool directory_delete(const Glib::RefPtr<Gio::File> & dir, bool recursive);
 }
 
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]