blob: 61d145722ccb02a912d0865e9cb2e6f5d070e997 (
plain) (
tree)
|
|
class Bar
def initialize( text = '' )
@text = text
@text_prefix = nil
@max = 0
@done = 0
@counter = 0
@thread = nil
@update_proc = nil
Fm.bar_add(self)
end
def kill(evil = true)
Fm.bar_del(self)
Fm.force_update
@thread.kill
end
def update(&block)
if block
@update_proc = block
elsif @update_proc
@update_proc.call(self)
end
end
def set_text_prefix(text)
@text_prefix = text
end
def set_text(text)
@text_prefix = nil
@text = text
end
alias text= set_text
attr_accessor :thread, :counter, :max
end
class CopyBar < Bar
def initialize( text = '' )
super
@update_proc = proc do |b|
begin
b.done = File.size(fname).to_f / finished
rescue
b.done = 0
end
end
end
end
class Bar2
def kill(evil = true)
Fm.bar_del(self)
Fm.force_update
@thread.kill
end
def set_text_prefix(text)
@text_prefix = text
end
def set_text(text)
@text_prefix = nil
@text = text
end
alias text= set_text
attr_accessor :thread, :counter, :max
def done
if @counter.is_a? MutableNumber
@counter.value.to_f / @max
else
0
end
end
def update() end
def text
if @text_prefix
"#{@text_prefix} #{(@counter.value.to_f * 10000/ @max).round.to_f/100}%"
elsif @text
@text
else
""
end
end
end
class CopyOrMoveBar < Bar2
def initialize(files, path)
path = path.path unless path.is_a? String
Fm.bar_add(self)
log([files, path])
@thread = Thread.new do
begin
for file in files
file = file.path unless file.is_a? String
if File.exists?(file)
run_operation(file, path)
end
end
rescue
log $!
log $!.backtrace
ensure
kill(false)
end
end
@thread.priority = Fm::COPY_PRIORITY
end
end
class CopyBar2 < CopyOrMoveBar
def run_operation(file, path)
if File.directory?(file)
FileUtils.cp_r_in_bar(self, file, path)
else
FileUtils.cp_in_bar(self, file, path)
end
end
end
class MoveBar2 < CopyOrMoveBar
def run_operation(file, path)
FileUtils.mv_in_bar(self, file, path)
end
end
|