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()
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()