lib/gui/cache_db_widget.rb
module Idb
class CacheDbWidget < Qt::Widget
def initialize(*args)
super(*args)
@refresh = Qt::PushButton.new "Refresh"
@refresh.connect(SIGNAL(:released)) do
refresh
end
@list = Qt::ListWidget.new self
@list.connect(SIGNAL('itemDoubleClicked(QListWidgetItem*)')) do |item|
cache_name = $selected_app.cache_file item.full_path
if cache_name.nil?
$log.error "File #{item.full_path} could not be downloaded. Either" \
"the file does not exist (e.g., dead symlink) or there " \
"is a permission problem."
elsif RbConfig::CONFIG['host_os'] =~ /linux/
Process.spawn "'#{$settings['sqlite_editor']}' '#{cache_name}'"
else
Process.spawn "open -a '#{$settings['sqlite_editor']}' '#{cache_name}'"
end
end
# "Launch app"
@default_protection = DefaultProtectionClassGroupWidget.new self
layout = Qt::VBoxLayout.new do |v|
v.add_widget(@default_protection)
v.add_widget(@list)
v.add_widget(@refresh)
end
setLayout(layout)
end
def clear
@list.clear
end
def setup
@list.clear
@default_protection.update
item = PathListWidgetItem.new
item.setText "Please click 'Refresh' below to show files."
@list.addItem item
@list.setEnabled false
end
def refresh
@list.clear
@list.setEnabled true
@default_protection.update
cache_dbs = $selected_app.find_cache_dbs
cache_dbs.each do |full_path|
item = PathListWidgetItem.new
if $device.simulator?
item.setText full_path.sub($selected_app.app_dir, '')
else
pc = $device.protection_class full_path
if full_path.start_with? $selected_app.app_dir
stripped_app_dir_path = full_path.sub($selected_app.app_dir, '')
item.setText "[App Bundle]" + stripped_app_dir_path + " => " + pc.strip
elsif full_path.start_with? $selected_app.data_dir
stripped_data_dir_path = full_path.sub($selected_app.data_dir, '')
item.setText "[Data Dir]" + stripped_data_dir_path + " => " + pc.strip
end
end
item.full_path = full_path
@list.addItem item
end
end
end
end