2005-04-03 22:50:05 +08:00
|
|
|
#!/usr/bin/env ruby
|
2021-05-24 01:24:22 +08:00
|
|
|
# frozen_string_literal: true
|
2005-04-03 22:50:05 +08:00
|
|
|
|
2015-03-23 01:03:50 +08:00
|
|
|
$VERBOSE = true
|
2005-04-03 22:50:05 +08:00
|
|
|
|
2019-09-27 04:46:00 +08:00
|
|
|
$LOAD_PATH << '../lib'
|
2005-04-03 22:50:05 +08:00
|
|
|
|
|
|
|
require 'Qt'
|
|
|
|
system('rbuic -o zipdialogui.rb zipdialogui.ui')
|
2021-05-24 04:11:07 +08:00
|
|
|
require 'zipdialogui'
|
2014-03-31 19:20:27 +08:00
|
|
|
require 'zip'
|
2005-04-03 22:50:05 +08:00
|
|
|
|
|
|
|
a = Qt::Application.new(ARGV)
|
|
|
|
|
|
|
|
class ZipDialog < ZipDialogUI
|
2015-03-21 16:16:57 +08:00
|
|
|
def initialize
|
2005-04-03 22:50:05 +08:00
|
|
|
super()
|
|
|
|
connect(child('add_button'), SIGNAL('clicked()'),
|
|
|
|
self, SLOT('add_files()'))
|
|
|
|
connect(child('extract_button'), SIGNAL('clicked()'),
|
|
|
|
self, SLOT('extract_files()'))
|
|
|
|
end
|
|
|
|
|
2020-02-18 06:51:53 +08:00
|
|
|
def zipfile(&a_proc)
|
|
|
|
Zip::File.open(@zip_filename, &a_proc)
|
2005-04-03 22:50:05 +08:00
|
|
|
end
|
|
|
|
|
2020-02-18 06:51:53 +08:00
|
|
|
def each(&a_proc)
|
|
|
|
Zip::File.foreach(@zip_filename, &a_proc)
|
2005-04-03 22:50:05 +08:00
|
|
|
end
|
2014-03-31 19:20:27 +08:00
|
|
|
|
2015-03-21 16:16:57 +08:00
|
|
|
def refresh
|
2015-03-21 16:27:44 +08:00
|
|
|
lv = child('entry_list_view')
|
2005-04-03 22:50:05 +08:00
|
|
|
lv.clear
|
2015-03-21 16:10:37 +08:00
|
|
|
each do |e|
|
2005-04-03 22:50:05 +08:00
|
|
|
lv.insert_item(Qt::ListViewItem.new(lv, e.name, e.size.to_s))
|
2015-03-21 16:10:37 +08:00
|
|
|
end
|
2005-04-03 22:50:05 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def load(zipfile)
|
|
|
|
@zip_filename = zipfile
|
|
|
|
refresh
|
|
|
|
end
|
|
|
|
|
|
|
|
def add_files
|
|
|
|
l = Qt::FileDialog.getOpenFileNames(nil, nil, self)
|
2015-03-21 16:10:37 +08:00
|
|
|
zipfile do |zf|
|
|
|
|
l.each do |path|
|
2005-04-03 22:50:05 +08:00
|
|
|
zf.add(File.basename(path), path)
|
2015-03-21 16:10:37 +08:00
|
|
|
end
|
|
|
|
end
|
2005-04-03 22:50:05 +08:00
|
|
|
refresh
|
|
|
|
end
|
|
|
|
|
|
|
|
def extract_files
|
|
|
|
selected_items = []
|
|
|
|
unselected_items = []
|
|
|
|
lv_item = entry_list_view.first_child
|
2015-03-23 00:25:35 +08:00
|
|
|
while lv_item
|
2005-04-03 22:50:05 +08:00
|
|
|
if entry_list_view.is_selected(lv_item)
|
|
|
|
selected_items << lv_item.text(0)
|
|
|
|
else
|
|
|
|
unselected_items << lv_item.text(0)
|
|
|
|
end
|
|
|
|
lv_item = lv_item.next_sibling
|
|
|
|
end
|
|
|
|
puts "selected_items.size = #{selected_items.size}"
|
|
|
|
puts "unselected_items.size = #{unselected_items.size}"
|
2021-05-24 04:14:33 +08:00
|
|
|
items = selected_items.empty? ? unselected_items : selected_items
|
2005-04-03 22:50:05 +08:00
|
|
|
puts "items.size = #{items.size}"
|
|
|
|
|
|
|
|
d = Qt::FileDialog.get_existing_directory(nil, self)
|
2021-05-24 04:14:33 +08:00
|
|
|
if d
|
2005-04-03 22:50:05 +08:00
|
|
|
zipfile { |zf| items.each { |e| zf.extract(e, File.join(d, e)) } }
|
2021-05-24 04:14:33 +08:00
|
|
|
else
|
|
|
|
puts 'No directory chosen'
|
2005-04-03 22:50:05 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
slots 'add_files()', 'extract_files()'
|
|
|
|
end
|
|
|
|
|
2015-03-24 00:11:32 +08:00
|
|
|
unless ARGV[0]
|
2019-09-27 04:46:00 +08:00
|
|
|
puts "usage: #{$PROGRAM_NAME} zipname"
|
2005-04-03 22:50:05 +08:00
|
|
|
exit
|
|
|
|
end
|
|
|
|
|
|
|
|
zd = ZipDialog.new
|
|
|
|
zd.load(ARGV[0])
|
|
|
|
|
|
|
|
a.mainWidget = zd
|
2015-03-24 00:06:43 +08:00
|
|
|
zd.show
|
|
|
|
a.exec
|