# Copyright (c) 2009, 2010 hut # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. require 'fileutils' module Action extend self def close_interface closei end def start_interface starti end def copy(files, path) files = [files] unless files.is_a? Array unless files.empty? CopyBar.new(files, path) end end def move(files, path) files = [files] unless files.is_a? Array unless files.empty? MoveBar.new(files, path) end end def run(rc = nil) rc ||= RunContext.new(Fm.getfiles) assert rc, RunContext all = rc.all.or false files = rc.files mode = rc.mode.or 0 return false if files.nil? or files.empty? handler = rc.exec return false unless handler wait = rc.wait.or wait new_term = rc.new_term.or false detach = rc.detach.or false log handler if detach run_detached(handler, rc) else run_inside(handler, rc) end return true end def run_detached(what, rc) if rc.new_term p = fork { exec('x-terminal-emulator', '-e', 'bash', '-c', what) } # Process.detach(p) else p = fork { exec "#{what} 2>> /dev/null >> /dev/null < /dev/null" } Process.detach(p) end end def run_inside(what, rc) close_interface unless rc.console system(*what) wait_for_enter if rc.wait start_interface unless rc.console end def wait_for_enter print "Press [ENTER] to continue..." $stdin.gets end def delete!(*entries) for file in entries if file.is_a? Directory::Entry file = file.path end begin FileUtils.remove_entry_secure(file) rescue begin FileUtils.remove_entry(file) rescue lograise end end end end end