[gnome-boxes] util: move foreach_from_dir ()



commit 693d65d3529da456604ffad7cbbe9103e98b281c
Author: Marc-Andrà Lureau <marcandre lureau gmail com>
Date:   Sat Aug 4 02:35:43 2012 +0200

    util: move foreach_from_dir ()
    
    This is fairly generic code, make app.vala a bit smaller and can be
    later reused.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=681246

 src/app.vala  |   24 +++++-------------------
 src/util.vala |   20 ++++++++++++++++++++
 2 files changed, 25 insertions(+), 19 deletions(-)
---
diff --git a/src/app.vala b/src/app.vala
index 02c44fd..e41e78e 100644
--- a/src/app.vala
+++ b/src/app.vala
@@ -302,25 +302,11 @@ private class Boxes.App: Boxes.UI {
         }
 
         var dir = File.new_for_path (get_user_pkgconfig_source ());
-        yield get_sources_from_dir (dir);
-    }
-
-    private async void get_sources_from_dir (File dir) {
-        try {
-            var enumerator = yield dir.enumerate_children_async (FileAttribute.STANDARD_NAME, 0);
-            while (true) {
-                var files = yield enumerator.next_files_async (10);
-                if (files == null)
-                    break;
-
-                foreach (var file in files) {
-                    var source = new CollectionSource.with_file (file.get_name ());
-                    add_collection_source.begin (source);
-                }
-            }
-        } catch (GLib.Error error) {
-            warning (error.message);
-        }
+        yield foreach_filename_from_dir (dir, (filename) => {
+            var source = new CollectionSource.with_file (filename);
+            add_collection_source.begin (source);
+            return false;
+        });
     }
 
     private void save_window_geometry () {
diff --git a/src/util.vala b/src/util.vala
index 1ddefba..ef51328 100644
--- a/src/util.vala
+++ b/src/util.vala
@@ -627,4 +627,24 @@ namespace Boxes {
             debug ("File '%s' was already deleted", file.get_path ());
         }
     }
+
+    public delegate bool ForeachFilenameFromDirFunc (string filename) throws GLib.Error;
+
+    public async void foreach_filename_from_dir (File dir, ForeachFilenameFromDirFunc func) {
+        try {
+            var enumerator = yield dir.enumerate_children_async (FileAttribute.STANDARD_NAME, 0);
+            while (true) {
+                var files = yield enumerator.next_files_async (10);
+                if (files == null)
+                    break;
+
+                foreach (var file in files) {
+                    if (func (file.get_name ()))
+                        break;
+                }
+            }
+        } catch (GLib.Error error) {
+            warning (error.message);
+        }
+    }
 }



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