lib/gui/cache_db_widget.rb

Summary

Maintainability
A
1 hr
Test Coverage
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