From 1872dc07424e6c22702b55c1af9fd375239e3cc6 Mon Sep 17 00:00:00 2001 From: Roman Dobosz Date: Thu, 3 Sep 2015 21:52:59 +0200 Subject: [PATCH] Added first implementation for removing things --- adbfs | 71 ++++++++++++++++++++++++++--------------------------------- 1 file changed, 31 insertions(+), 40 deletions(-) diff --git a/adbfs b/adbfs index aecb0c4..bdb3300 100755 --- a/adbfs +++ b/adbfs @@ -2,12 +2,10 @@ """ adbfs Virtual filesystem for Midnight Commander - * Copyright (c) 2015, Roman Dobosz, * Published under 3-clause BSD-style license (see LICENSE file) """ -from argparse import ArgumentParser from datetime import datetime import subprocess import os @@ -15,7 +13,6 @@ import re import sys - class Adb(object): """Class for interact with android rooted device through adb""" adb = "/opt/android-sdk-update-manager/platform-tools/adb" @@ -31,6 +28,7 @@ class Adb(object): r'(?P.*)') current_re = re.compile(r"^(\./)?(?P.+):$") + as_root = os.getenv("ADBFS_AS_ROOT", False) verbose = os.getenv("ADBFS_VERBOSE", False) def __init__(self): @@ -63,35 +61,6 @@ class Adb(object): date = datetime.strptime(date, "%d-%m-%Y %H:%M:%S") entry["datetime"] = date.strftime("%m/%d/%Y %H:%M:01") - def scan_subdirectory(self, entry): - """Recursively scan directory""" - lines = subprocess.check_output([Adb.adb, "shell", "su", "-c", - asdjhsfudh.format(**entry)]) - current_dir = entry["dir"] - for line in lines.split("\n"): - line = line.strip() - current_dir_re = self.current_re.match(line) - if current_dir_re: - current_dir = current_dir_re.groupdict()["dir"] - continue - - reg_match = self.file_re.match(line) - if not reg_match: - continue - - entry = reg_match.groupdict() - if entry["name"] in (".", ".."): - continue - self.correct_entry(entry, current_dir) - - if Adb.skip_system_dir and entry['name'] in Adb.dirs_to_skip: - continue - - self._entries.append(entry) - self._str_ls.append("{perms} {links:>4} {uid:<8} " - "{gid:<8} {size:>8} " - "{datetime} {dir}/{name}\n".format(**entry)) - def retrieve_file_list(self, root=None): """Retrieve file list using adb""" @@ -165,14 +134,34 @@ class Adb(object): return 0 def rm(self, dst): - """Remove file from device through adb.""" - sys.stderr.write("not implemented\n") - return 1 + """Remove file from device.""" + cmd = [Adb.adb, "shell", "rm", dst] + err = subprocess.check_output(cmd) + + if err != "": + sys.stderr.write(err) + return 1 + return 0 + + def rmdir(self, dst): + """Remove directory from device.""" + cmd = [Adb.adb, "shell", "rm", "-r", dst] + err = subprocess.check_output(cmd) + + if err != "": + sys.stderr.write(err) + return 1 + return 0 def mkdir(self, dst): """Make directory on the device through adb.""" - sys.stderr.write("not implemented\n") - return 1 + cmd = [Adb.adb, "shell", "mkdir", dst] + err = subprocess.check_output(cmd) + + if err != "": + sys.stderr.write(err) + return 1 + return 0 def _show_error(self): """ @@ -188,14 +177,16 @@ CALL_MAP = {'list': lambda a: Adb().list(), 'copyin': lambda a: Adb().copyin(a.src, a.dst), 'copyout': lambda a: Adb().copyout(a.src, a.dst), 'mkdir': lambda a: Adb().mkdir(a.dst), + 'rmdir': lambda a: Adb().rmdir(a.dst), 'rm': lambda a: Adb().rm(a.dst), 'run': lambda a: Adb().run(a.dst)} def main(): """parse commandline""" try: - if sys.argv[1] not in ('list', 'copyin', 'copyout', 'rm', 'mkdir', - "run"): + sys.stderr.write("comnandline: %s\n" % " ".join(sys.argv)) + if sys.argv[1] not in ('list', 'copyin', 'copyout', 'rm', "rmdir", + 'mkdir', "run"): sys.exit(2) except IndexError: sys.exit(2) @@ -216,7 +207,7 @@ def main(): if sys.argv[1] == 'copyout': arg.src = sys.argv[3] arg.dst = sys.argv[4] - elif sys.argv[1] in ('rm', 'run', 'mkdir'): + elif sys.argv[1] in ('rm', 'rmdir', 'run', 'mkdir'): arg.dst = sys.argv[3] except IndexError: sys.exit(2)