mirror of
https://github.com/gryf/mc_adbfs.git
synced 2025-12-18 12:00:19 +01:00
Added first implementation for removing things
This commit is contained in:
71
adbfs
71
adbfs
@@ -2,12 +2,10 @@
|
|||||||
"""
|
"""
|
||||||
adbfs Virtual filesystem for Midnight Commander
|
adbfs Virtual filesystem for Midnight Commander
|
||||||
|
|
||||||
|
|
||||||
* Copyright (c) 2015, Roman Dobosz,
|
* Copyright (c) 2015, Roman Dobosz,
|
||||||
* Published under 3-clause BSD-style license (see LICENSE file)
|
* Published under 3-clause BSD-style license (see LICENSE file)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from argparse import ArgumentParser
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import subprocess
|
import subprocess
|
||||||
import os
|
import os
|
||||||
@@ -15,7 +13,6 @@ import re
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Adb(object):
|
class Adb(object):
|
||||||
"""Class for interact with android rooted device through adb"""
|
"""Class for interact with android rooted device through adb"""
|
||||||
adb = "/opt/android-sdk-update-manager/platform-tools/adb"
|
adb = "/opt/android-sdk-update-manager/platform-tools/adb"
|
||||||
@@ -31,6 +28,7 @@ class Adb(object):
|
|||||||
r'(?P<name>.*)')
|
r'(?P<name>.*)')
|
||||||
|
|
||||||
current_re = re.compile(r"^(\./)?(?P<dir>.+):$")
|
current_re = re.compile(r"^(\./)?(?P<dir>.+):$")
|
||||||
|
as_root = os.getenv("ADBFS_AS_ROOT", False)
|
||||||
verbose = os.getenv("ADBFS_VERBOSE", False)
|
verbose = os.getenv("ADBFS_VERBOSE", False)
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@@ -63,35 +61,6 @@ class Adb(object):
|
|||||||
date = datetime.strptime(date, "%d-%m-%Y %H:%M:%S")
|
date = datetime.strptime(date, "%d-%m-%Y %H:%M:%S")
|
||||||
entry["datetime"] = date.strftime("%m/%d/%Y %H:%M:01")
|
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):
|
def retrieve_file_list(self, root=None):
|
||||||
"""Retrieve file list using adb"""
|
"""Retrieve file list using adb"""
|
||||||
|
|
||||||
@@ -165,14 +134,34 @@ class Adb(object):
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
def rm(self, dst):
|
def rm(self, dst):
|
||||||
"""Remove file from device through adb."""
|
"""Remove file from device."""
|
||||||
sys.stderr.write("not implemented\n")
|
cmd = [Adb.adb, "shell", "rm", dst]
|
||||||
return 1
|
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):
|
def mkdir(self, dst):
|
||||||
"""Make directory on the device through adb."""
|
"""Make directory on the device through adb."""
|
||||||
sys.stderr.write("not implemented\n")
|
cmd = [Adb.adb, "shell", "mkdir", dst]
|
||||||
return 1
|
err = subprocess.check_output(cmd)
|
||||||
|
|
||||||
|
if err != "":
|
||||||
|
sys.stderr.write(err)
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
def _show_error(self):
|
def _show_error(self):
|
||||||
"""
|
"""
|
||||||
@@ -188,14 +177,16 @@ CALL_MAP = {'list': lambda a: Adb().list(),
|
|||||||
'copyin': lambda a: Adb().copyin(a.src, a.dst),
|
'copyin': lambda a: Adb().copyin(a.src, a.dst),
|
||||||
'copyout': lambda a: Adb().copyout(a.src, a.dst),
|
'copyout': lambda a: Adb().copyout(a.src, a.dst),
|
||||||
'mkdir': lambda a: Adb().mkdir(a.dst),
|
'mkdir': lambda a: Adb().mkdir(a.dst),
|
||||||
|
'rmdir': lambda a: Adb().rmdir(a.dst),
|
||||||
'rm': lambda a: Adb().rm(a.dst),
|
'rm': lambda a: Adb().rm(a.dst),
|
||||||
'run': lambda a: Adb().run(a.dst)}
|
'run': lambda a: Adb().run(a.dst)}
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
"""parse commandline"""
|
"""parse commandline"""
|
||||||
try:
|
try:
|
||||||
if sys.argv[1] not in ('list', 'copyin', 'copyout', 'rm', 'mkdir',
|
sys.stderr.write("comnandline: %s\n" % " ".join(sys.argv))
|
||||||
"run"):
|
if sys.argv[1] not in ('list', 'copyin', 'copyout', 'rm', "rmdir",
|
||||||
|
'mkdir', "run"):
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
except IndexError:
|
except IndexError:
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
@@ -216,7 +207,7 @@ def main():
|
|||||||
if sys.argv[1] == 'copyout':
|
if sys.argv[1] == 'copyout':
|
||||||
arg.src = sys.argv[3]
|
arg.src = sys.argv[3]
|
||||||
arg.dst = sys.argv[4]
|
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]
|
arg.dst = sys.argv[3]
|
||||||
except IndexError:
|
except IndexError:
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|||||||
Reference in New Issue
Block a user