classifier: allow to sort by EXIF dates
[booh] / bin / booh-classifier
index ca9ce5d54e9ccd94b2a9501373d67fc0fe4179ee..f64afe4ab17f1fd70f4b319fd79c39e820b0bb0e 100644 (file)
@@ -24,6 +24,7 @@ require 'tempfile'
 require 'thread'
 
 require 'gtk2'
+require 'booh/libadds'
 
 require 'gettext'
 include GetText
@@ -42,6 +43,7 @@ $options = [
     [ '--help',          '-h', GetoptLong::NO_ARGUMENT,       _("Get help message") ],
 
     [ '--verbose-level', '-v', GetoptLong::REQUIRED_ARGUMENT, _("Set max verbosity level (0: errors, 1: warnings, 2: important messages, 3: other messages)") ],
+    [ '--sort-by-exif-date', '-s', GetoptLong::NO_ARGUMENT, _("Sort entries by EXIF date") ],
 ]
 
 def usage
@@ -64,6 +66,9 @@ def handle_options
             when '--verbose-level'
                 $verbose_level = arg.to_i
 
+            when '--sort-by-exif-date'
+                $sort_by_exif_date = true
+
             end
         end
     rescue
@@ -956,7 +961,20 @@ def open_dir(path)
             msg 1, _("Ignoring directory %s, begins with a dot (indicating a hidden directory)") % dir
             next
         end
-        Dir.entries(dir).sort.each { |file|
+        entries = Dir.entries(dir)
+        if $sort_by_exif_date
+            dates = {}
+            entries.each { |file|
+                date_time = Exif.datetimeoriginal(File.join(dir, file))
+                if ! date_time.nil?
+                    dates[file] = date_time
+                end
+            }
+            entries = smartsort(entries, dates)
+        else
+            entries.sort!
+        end
+        entries.each { |file|
             type = entry2type(file)
             if type
                 $allentries << Entry.new(File.join(dir, file), type)