From efc287d21d868d4c54fef8c9d2fd9cff59373a1f Mon Sep 17 00:00:00 2001 From: Faustino Aguilar Date: Thu, 30 Mar 2017 07:33:12 -0500 Subject: [PATCH] Add Watcher.scan and event.status --- src/watcher.cr | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/src/watcher.cr b/src/watcher.cr index 43c490e..100cbd2 100644 --- a/src/watcher.cr +++ b/src/watcher.cr @@ -4,9 +4,9 @@ module Watcher TIMESTAMPS = {} of String => String private class WatchEvent - property change = false, files = {} of String => String + property status = false, files = {} of String => String def on_change - yield files if change + yield files if status end end @@ -15,25 +15,32 @@ module Watcher File.stat(file).mtime.to_s("%Y%m%d%H%M%S") end + private def self.scan(files, event) + event.status = false + Dir.glob(files) do |file| + timestamp = timestamp_for(file) + if TIMESTAMPS[file]? && TIMESTAMPS[file] != timestamp + TIMESTAMPS[file] = timestamp + event.status = true + event.files[file] = timestamp + puts "🤖 #{file}" + elsif TIMESTAMPS[file]?.nil? + TIMESTAMPS[file] = timestamp + event.status = true + event.files[file] = timestamp + puts "🤖 watching file: #{file}" + end + end + event + end + # Allow to watch file changes using Watcher.watch def self.watch(files) - files = Dir.glob(files) - files.each do |file| - TIMESTAMPS[file] = timestamp_for(file) - end event = WatchEvent.new loop do - event.change = false - event.files.clear - files.each do |file| - timestamp = timestamp_for(file) - if TIMESTAMPS[file]? != timestamp - TIMESTAMPS[file] = timestamp - event.change = true - event.files[file] = timestamp - end - end + event = Watcher.scan(files, event) yield event + event.files.clear sleep 1 end end @@ -41,5 +48,7 @@ end # Allow to watch file changes def watch(files) - Watcher.watch(files) + Watcher.watch(files) do |event| + yield event + end end