Exemplo n.º 1
0
    def __init__(self):

        # The super core
        self.aafm = Aafm('adb', os.getcwd(), '/mnt/sdcard/')
        self.queue = []

        self.basedir = os.path.dirname(os.path.abspath(__file__))

        if os.name == 'nt':
            self.get_owner = self._get_owner_windows
            self.get_group = self._get_group_windows
        else:
            self.get_owner = self._get_owner
            self.get_group = self._get_group

        # Build main window from XML
        builder = gtk.Builder()
        builder.add_from_file(
            os.path.join(self.basedir, "data/glade/interface.xml"))
        builder.connect_signals({"on_window_destroy": gtk.main_quit})
        self.window = builder.get_object("window")

        imageDir = gtk.Image()
        imageDir.set_from_file(
            os.path.join(self.basedir, './data/icons/folder.png'))
        imageFile = gtk.Image()
        imageFile.set_from_file(
            os.path.join(self.basedir, './data/icons/file.png'))

        # Host and device TreeViews

        # HOST
        self.host_treeViewFile = TreeViewFile(imageDir.get_pixbuf(),
                                              imageFile.get_pixbuf())

        hostFrame = builder.get_object('frameHost')
        hostFrame.get_child().add(self.host_treeViewFile.get_view())

        hostTree = self.host_treeViewFile.get_tree()
        hostTree.connect('row-activated', self.host_navigate_callback)
        hostTree.connect('button_press_event',
                         self.on_host_tree_view_contextual_menu)

        host_targets = [('DRAG_SELF', gtk.TARGET_SAME_WIDGET, 0),
                        ('ADB_text', 0, 1), ('text/plain', 0, 2)]

        hostTree.enable_model_drag_dest(
            host_targets,
            gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE)
        hostTree.connect('drag-data-received', self.on_host_drag_data_received)

        hostTree.enable_model_drag_source(
            gtk.gdk.BUTTON1_MASK, host_targets,
            gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE)
        hostTree.connect('drag_data_get', self.on_host_drag_data_get)

        self.hostFrame = hostFrame
        self.hostName = socket.gethostname()

        # DEVICE
        self.device_treeViewFile = TreeViewFile(imageDir.get_pixbuf(),
                                                imageFile.get_pixbuf())

        deviceFrame = builder.get_object('frameDevice')
        deviceFrame.get_child().add(self.device_treeViewFile.get_view())

        deviceTree = self.device_treeViewFile.get_tree()
        deviceTree.connect('row-activated', self.device_navigate_callback)
        deviceTree.connect('button_press_event',
                           self.on_device_tree_view_contextual_menu)

        device_targets = [('DRAG_SELF', gtk.TARGET_SAME_WIDGET, 0),
                          ('ADB_text', 0, 1), ('XdndDirectSave0', 0, 2),
                          ('text/plain', 0, 3)]

        deviceTree.enable_model_drag_dest(
            device_targets,
            gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE)
        deviceTree.connect('drag-data-received',
                           self.on_device_drag_data_received)

        deviceTree.enable_model_drag_source(
            gtk.gdk.BUTTON1_MASK, device_targets,
            gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE)
        deviceTree.connect('drag-data-get', self.on_device_drag_data_get)
        deviceTree.connect('drag-begin', self.on_device_drag_begin)

        self.deviceFrame = deviceFrame

        # Progress bar
        self.progress_bar = builder.get_object('progressBar')

        # Some more subtle details...
        self.window.set_title("Android ADB file manager")
        #self.adb = 'adb'
        self.host_cwd = os.getcwd()
        self.device_cwd = '/mnt/sdcard/'

        self.refresh_host_files()
        self.refresh_device_files()

        # Make both panels equal in size (at least initially)
        panelsPaned = builder.get_object('panelsPaned')
        panelW, panelH = panelsPaned.size_request()
        halfW = panelW / 2
        panelsPaned.set_position(halfW)

        # And we're done!
        self.window.show_all()
Exemplo n.º 2
0
    def __init__(self):

        self.done = True
        self.devices_list = []
        self.showing_notice = False
        self.progress_value = None

        # Read settings
        self.config = ConfigParser.SafeConfigParser({
            'lastdir_host': '',
            'lastdir_device': '',
            'startdir_host': 'last',
            'startdir_host_path': '',
            'startdir_device': 'last',
            'startdir_device_path': '',
            'show_hidden': 'no',
            'show_modified': 'yes',
            'show_permissions': 'no',
            'show_owner': 'no',
            'show_group': 'no',
            'last_serial': '',
            'last_ip': ''
        })
        self.config_file_loc = ""
        self.config_file_loc_default = os.path.join(os.path.expanduser("~"),
                                                    ".aafm")
        for file_loc in os.curdir, os.path.expanduser("~"), os.environ.get(
                "AAFM_CONF"):
            try:
                if file_loc is not None:
                    with open(os.path.join(file_loc, ".aafm")) as source:
                        self.config.readfp(source)
                        self.config_file_loc = file_loc
                        break
            except IOError:
                pass

        # Test for the aafm section and add it if it's missing
        try:
            self.config.get("aafm", "startdir_host")
        except ConfigParser.NoSectionError:
            self.config.add_section("aafm")

        # Store config variables
        self.startDirHost = self.config.get("aafm", "startdir_host")
        self.startDirHostPath = self.config.get("aafm", "startdir_host_path")
        self.startDirDevice = self.config.get("aafm", "startdir_device")
        self.startDirDevicePath = self.config.get("aafm",
                                                  "startdir_device_path")
        self.showHidden = (self.config.get("aafm", "show_hidden") == "yes")
        self.showModified = (self.config.get("aafm", "show_modified") == "yes")
        self.showPermissions = (self.config.get("aafm",
                                                "show_permissions") == "yes")
        self.showOwner = (self.config.get("aafm", "show_owner") == "yes")
        self.showGroup = (self.config.get("aafm", "show_group") == "yes")
        self.lastDeviceSerial = self.config.get("aafm", "last_serial")
        self.lastDeviceIP = self.config.get("aafm", "last_ip")

        if self.startDirHost == 'last':
            self.host_cwd = self.config.get("aafm", "lastdir_host")
        else:
            self.host_cwd = self.startDirHostPath

        if not os.path.isdir(self.host_cwd):
            self.host_cwd = os.path.expanduser("~")

        if self.startDirDevice == 'last':
            self.device_cwd_default = self.config.get("aafm", "lastdir_device")
        else:
            self.device_cwd_default = self.startDirDevicePath

        if self.device_cwd_default == '':
            self.device_cwd_default = '/mnt/sdcard'

        self.device_cwd = self.device_cwd_default

        # The super core
        self.aafm = Aafm('adb', self.host_cwd, self.device_cwd, self)
        self.queue = []

        self.basedir = os.path.dirname(os.path.abspath(__file__))

        if os.name == 'nt':
            self.get_owner = self._get_owner_windows
            self.get_group = self._get_group_windows
        else:
            self.get_owner = self._get_owner
            self.get_group = self._get_group

        # Build main window from XML
        builder = gtk.Builder()
        builder.add_from_file(
            os.path.join(self.basedir, "data/glade/interface.xml"))
        builder.connect_signals({"on_window_destroy": self.destroy})
        self.window = builder.get_object("window")
        vbox1 = builder.get_object("vbox1")

        # Set preferences window var
        self.window_prefs = None

        # Build menu from XML
        uimanager = gtk.UIManager()
        accelgroup = uimanager.get_accel_group()
        self.window.add_accel_group(accelgroup)

        actiongroup = gtk.ActionGroup('Main')
        actiongroup.add_actions([
            ('Preferences', gtk.STOCK_PREFERENCES, '_Preferences', None,
             'Preferences', self.open_prefs),
            ('Quit', gtk.STOCK_QUIT, '_Quit', None, 'Quit aafm', self.destroy),
            ('File', None, '_File')
        ])
        uimanager.insert_action_group(actiongroup, 0)

        uimanager.add_ui_from_file(
            os.path.join(self.basedir, "data/glade/menu.xml"))
        menubar = uimanager.get_widget('/MenuBar')

        vbox1.pack_start(menubar, False, False, 0)
        vbox1.reorder_child(menubar, 0)

        imageDir = gtk.Image()
        imageDir.set_from_file(
            os.path.join(self.basedir, "data/icons/folder.png"))
        imageFile = gtk.Image()
        imageFile.set_from_file(
            os.path.join(self.basedir, "data/icons/file.png"))

        # Show hidden files and folders
        showHidden = builder.get_object('showHidden')
        showHidden.set_active(self.showHidden)
        showHidden.connect('toggled', self.on_toggle_hidden)

        # Progress bar
        self.progress_bar = builder.get_object('progressBar')

        # Host and device TreeViews

        # HOST
        self.host_treeViewFile = TreeViewFile(imageDir.get_pixbuf(),
                                              imageFile.get_pixbuf(),
                                              self.showModified,
                                              self.showPermissions,
                                              self.showOwner, self.showGroup)

        hostFrame = builder.get_object('frameHost')
        hostFrame.get_child().add(self.host_treeViewFile.get_view())

        hostTree = self.host_treeViewFile.get_tree()
        hostTree.connect('row-activated', self.host_navigate_callback)
        hostTree.connect('button_press_event',
                         self.on_host_tree_view_contextual_menu)

        host_targets = [('DRAG_SELF', gtk.TARGET_SAME_WIDGET, 0),
                        ('ADB_text', 0, 1), ('text/plain', 0, 2)]

        hostTree.enable_model_drag_dest(
            host_targets,
            gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE)
        hostTree.connect('drag-data-received', self.on_host_drag_data_received)

        hostTree.enable_model_drag_source(
            gtk.gdk.BUTTON1_MASK, host_targets,
            gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE)
        hostTree.connect('drag_data_get', self.on_host_drag_data_get)

        self.hostFrame = hostFrame
        self.hostName = socket.gethostname()

        # DEVICE
        self.device_treeViewFile = TreeViewFile(imageDir.get_pixbuf(),
                                                imageFile.get_pixbuf(),
                                                self.showModified,
                                                self.showPermissions,
                                                self.showOwner, self.showGroup)

        deviceFrame = builder.get_object('frameDevice')
        deviceFrame.get_child().add(self.device_treeViewFile.get_view())

        deviceTree = self.device_treeViewFile.get_tree()
        deviceTree.connect('row-activated', self.device_navigate_callback)
        deviceTree.connect('button_press_event',
                           self.on_device_tree_view_contextual_menu)

        device_targets = [('DRAG_SELF', gtk.TARGET_SAME_WIDGET, 0),
                          ('ADB_text', 0, 1), ('XdndDirectSave0', 0, 2),
                          ('text/plain', 0, 3)]

        deviceTree.enable_model_drag_dest(
            device_targets,
            gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE)
        deviceTree.connect('drag-data-received',
                           self.on_device_drag_data_received)

        deviceTree.enable_model_drag_source(
            gtk.gdk.BUTTON1_MASK, device_targets,
            gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE)
        deviceTree.connect('drag-data-get', self.on_device_drag_data_get)
        deviceTree.connect('drag-begin', self.on_device_drag_begin)

        self.deviceFrame = deviceFrame

        # Add device button
        addDevice = builder.get_object('addDevice')
        addDevice.connect('clicked', self.on_clicked_add_device)

        # Devices list combobox
        self.devicesList = builder.get_object('devicesList')
        self.devices_list_store = gtk.ListStore(gobject.TYPE_STRING)
        self.refresh_devices_list(True, self.lastDeviceSerial)
        self.devicesList.set_model(self.devices_list_store)

        cell = gtk.CellRendererText()
        self.devicesList.pack_start(cell, True)
        self.devicesList.add_attribute(cell, "text", 0)

        # if self.lastDeviceSerial in self.devices_list:
        #    self.aafm.set_device(self.lastDeviceSerial)
        #elif len(self.devices_list) > 0:
        #    self.aafm.set_device(self.aafm.get_device_serial(self.devices_list[0]))

        self.devicesList.connect('changed', self.on_change_device)

        # Devices list refresh button
        refreshDevicesList = builder.get_object('refreshDevicesList')
        refreshDevicesList.connect('clicked', self.on_clicked_refresh_devices)

        # Some more subtle details...
        try:
            self.window.set_icon_from_file(
                os.path.join(self.basedir, "data/icons/aafm.svg"))
        except:
            self.window.set_icon_from_file(
                os.path.join(self.basedir, "data/icons/aafm.png"))
            # self.adb = 'adb'

        self.refresh_host_files()

        # And we're done!
        self.window.show_all()