[baobab: 52/53] Add an (optional) scanning flag parameter to exclude mount points



commit add0d9240297bbfea1092cec0f608910a983f04d
Author: Stefano Facchini <stefano facchini gmail com>
Date:   Thu Apr 5 21:08:43 2012 +0200

    Add an (optional) scanning flag parameter to exclude mount points

 src/baobab-scanner.vala          |   38 ++++++++++++++++++++++++++++----------
 src/baobab-sync-scanner.vala     |    4 ++--
 src/baobab-threaded-scanner.vala |    4 ++--
 src/baobab-window.vala           |    8 ++++----
 4 files changed, 36 insertions(+), 18 deletions(-)
---
diff --git a/src/baobab-scanner.vala b/src/baobab-scanner.vala
index bd3915c..2605039 100644
--- a/src/baobab-scanner.vala
+++ b/src/baobab-scanner.vala
@@ -20,6 +20,12 @@
  */
 
 namespace Baobab {
+	[Flags]
+	public enum ScanFlags {
+		NONE,
+		EXCLUDE_MOUNTS
+	}
+
 	abstract class Scanner : Gtk.TreeStore {
 		public enum Columns {
 			DISPLAY_NAME,
@@ -61,7 +67,7 @@ namespace Baobab {
 			FileAttribute.STANDARD_DISPLAY_NAME + "," +
 			FileAttribute.STANDARD_TYPE + "," +
 			FileAttribute.STANDARD_SIZE +  "," +
-			FileAttribute.STANDARD_ALLOCATED_SIZE +  "," +
+			FileAttribute.STANDARD_ALLOCATED_SIZE +	 "," +
 			FileAttribute.UNIX_NLINK + "," +
 			FileAttribute.UNIX_INODE + "," +
 			FileAttribute.UNIX_DEVICE + "," +
@@ -69,6 +75,8 @@ namespace Baobab {
 
 		public File directory { get; private set; }
 
+		public ScanFlags scan_flags { get; private set; }
+
 		public int max_depth { get; protected set; }
 
 		public signal void completed();
@@ -136,21 +144,31 @@ namespace Baobab {
 			     Columns.ERROR, null);
 		}
 
-		public Scanner (File directory) {
+		public Scanner (File directory, ScanFlags flags) {
 			this.directory = directory;
+			this.scan_flags = flags;
 			cancellable = new Cancellable();
 			scan_error = null;
 			set_column_types (new Type[] {
-			                  typeof (string),  // DIR_NAME
-			                  typeof (string),  // PARSE_NAME
-			                  typeof (double),  // PERCENT
-			                  typeof (uint64),  // SIZE
-			                  typeof (uint64),  // ALLOC_SIZE
-			                  typeof (int),     // ELEMENTS
-			                  typeof (State),   // STATE
-			                  typeof (Error)}); // ERROR (if STATE is ERROR)
+					  typeof (string),  // DIR_NAME
+					  typeof (string),  // PARSE_NAME
+					  typeof (double),  // PERCENT
+					  typeof (uint64),  // SIZE
+					  typeof (uint64),  // ALLOC_SIZE
+					  typeof (int),	    // ELEMENTS
+					  typeof (State),   // STATE
+					  typeof (Error)}); // ERROR (if STATE is ERROR)
 			set_sort_column_id (Columns.SIZE, Gtk.SortType.DESCENDING);
+
 			excluded_locations = Application.get_excluded_locations ();
+
+			if (ScanFlags.EXCLUDE_MOUNTS in flags) {
+				foreach (unowned UnixMountEntry mount in UnixMountEntry.get (null)) {
+					excluded_locations.add (File.new_for_path (mount.get_mount_path ()));
+				}
+			}
+
+			excluded_locations.remove (directory);
 		}
 	}
 }
diff --git a/src/baobab-sync-scanner.vala b/src/baobab-sync-scanner.vala
index 97bff67..c585ab5 100644
--- a/src/baobab-sync-scanner.vala
+++ b/src/baobab-sync-scanner.vala
@@ -139,8 +139,8 @@ namespace Baobab {
 			} catch { }
 		}
 
-		public SyncScanner (File directory) {
-			base (directory);
+		public SyncScanner (File directory, ScanFlags flags) {
+			base (directory, flags);
 		}
 	}
 }
diff --git a/src/baobab-threaded-scanner.vala b/src/baobab-threaded-scanner.vala
index 2cd6d14..e0927cf 100644
--- a/src/baobab-threaded-scanner.vala
+++ b/src/baobab-threaded-scanner.vala
@@ -256,8 +256,8 @@ namespace Baobab {
 			Timeout.add (100, process_results);
 		}
 
-		public ThreadedScanner (File directory) {
-			base (directory);
+		public ThreadedScanner (File directory, ScanFlags flags) {
+			base (directory, flags);
 
 			results_queue = new AsyncQueue<ResultsArray> ();
 
diff --git a/src/baobab-window.vala b/src/baobab-window.vala
index 97a217e..52233d7 100644
--- a/src/baobab-window.vala
+++ b/src/baobab-window.vala
@@ -197,7 +197,7 @@ namespace Baobab {
 
 		void on_reload_activate () {
 			if (scanner != null) {
-				scan_directory (scanner.directory);
+				scan_directory (scanner.directory, scanner.scan_flags);
 			}
 		}
 
@@ -460,7 +460,7 @@ namespace Baobab {
 		public void show_filesystem_usage () {
 			var dir = File.new_for_uri ("file:///");
 
-			scanner = new ThreadedScanner (dir);
+			scanner = new ThreadedScanner (dir, ScanFlags.NONE);
 			set_model (scanner);
 
 			try {
@@ -472,12 +472,12 @@ namespace Baobab {
 			treeview.set_headers_visible (false);
 		}
 
-		public void scan_directory (File directory) {
+		public void scan_directory (File directory, ScanFlags flags = ScanFlags.NONE) {
 			if (!check_dir (directory)) {
 				return;
 			}
 
-			scanner = new ThreadedScanner (directory);
+			scanner = new ThreadedScanner (directory, flags);
 			set_model (scanner);
 
 			scanner.completed.connect(() => {



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