summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
70b0cfc)
Scan with retries, up to 3. Fixed bugs in recursive scan.
git-svn-id: file:///home/phd/archive/SVN/mc-extfs/trunk@10
1a6e6372-1aea-0310-bd00-
dc960550e1df
Copyright (C) 2004 PhiloSoft Design.
License: GPL.
Copyright (C) 2004 PhiloSoft Design.
License: GPL.
-To use it install OpenOBEX (http://openobex.sourceforge.net/) and ObexFTP
-(http://triq.net/obexftp) and edit the full path to the obexftp binary.
+The script requires Midnight Commander 3.1+ (http://www.ibiblio.org/mc/),
+Python 2.2+ (http://www.python.org/), OpenOBEX 1.0.1+ (http://openobex.sourceforge.net/)
+and ObexFTP 0.10.4+ (http://triq.net/obexftp).
-Put the file to the /usr/[local/]lib/mc/extfs, and add a line "obexftp" to the
+Edit the full path to the obexftp binary (see below). Put the file to the
+/usr/[local/]lib/mc/extfs, and add a line "obexftp" to the
/usr/[local/]lib/mc/extfs/extfs.ini. Then create somewhere a file called
"irda", "bluetooth" or "tty" to connect to the device using IrDA, Bluetooth or
TTY transport.
/usr/[local/]lib/mc/extfs/extfs.ini. Then create somewhere a file called
"irda", "bluetooth" or "tty" to connect to the device using IrDA, Bluetooth or
TTY transport.
Now run this "cd" command in the Midnight Commander (in the "bindings" files
the command is "%cd"): cd bluetooth#obexftp. The VFS script use obexftp to try
Now run this "cd" command in the Midnight Commander (in the "bindings" files
the command is "%cd"): cd bluetooth#obexftp. The VFS script use obexftp to try
-to connect to the device and list files and directories. It could be very slow...
+to connect to the device and list files and directories. Plese be warned that
+opening the VFS for the first time is VERY slow, because the script needs to
+scan the entire cell phone's filesystem. Often obexftp fails to list a
+directory, and the script retries after a second or two timeouts, which don't
+make the scanning process faster. Midnight Commander caches the result.
"""
__version__ = "0.1.0"
"""
__version__ = "0.1.0"
-__revision__ = "$Id: obexftp,v 1.1 2004/06/13 13:27:47 phd Exp $"
-__date__ = "$Date: 2004/06/13 13:27:47 $"[7:-2]
+__revision__ = "$Id: obexftp,v 1.2 2004/06/13 18:49:25 phd Exp $"
+__date__ = "$Date: 2004/06/13 18:49:25 $"[7:-2]
__author__ = "Oleg Broytmann <phd@phd.pp.ru>"
__copyright__ = "Copyright (C) 2004 PhiloSoft Design"
__author__ = "Oleg Broytmann <phd@phd.pp.ru>"
__copyright__ = "Copyright (C) 2004 PhiloSoft Design"
+# Change this to suite your needs
obexftp_prog = "/usr/local/obex/bin/obexftp"
obexftp_prog = "/usr/local/obex/bin/obexftp"
import xml.dom.minidom
def log_error(msg):
import xml.dom.minidom
def log_error(msg):
transport_file.close()
return ' '.join(["-t", device])
elif base_filename == "irda":
transport_file.close()
return ' '.join(["-t", device])
elif base_filename == "irda":
- return ' '.join(["-i"])
else:
error("Unknown transport '%s'; expected 'bluetooth', 'tty' or 'irda'" % base_filename)
else:
error("Unknown transport '%s'; expected 'bluetooth', 'tty' or 'irda'" % base_filename)
def _recursive_list(obexftp_args, directory):
"""List the directory recursively"""
def _recursive_list(obexftp_args, directory):
"""List the directory recursively"""
- pipe = os.popen("%s %s -l '%s' 2>/dev/null" % (obexftp_prog, obexftp_args, directory), 'r')
- listing = pipe.read()
- pipe.close()
+ debug = open("debug", 'a')
+ for i in range(3):
+ time.sleep(2*i)
+ pipe = os.popen("%s %s -l '%s' 2>/dev/null" % (obexftp_prog, obexftp_args, directory), 'r')
+ listing = pipe.read()
+ pipe.close()
+
+ if listing:
+ break
+
+ debug.write("Cannot list '%s', retrying...\n" % directory)
+ debug.write("Cannot list '%s'\n" % directory)
+ debug.close()
+ debug.write("Got listing of '%s'\n" % directory)
+
try:
dom = xml.dom.minidom.parseString(listing)
except:
try:
dom = xml.dom.minidom.parseString(listing)
except:
directories = get_entries(dom, "folder")
files = get_entries(dom, "file")
directories = get_entries(dom, "folder")
files = get_entries(dom, "file")
- prefix = directory[1:] # omit leading slash
- debug = open("debug", 'a')
for entry in directories + files:
for entry in directories + files:
- print >>debug, entry.perm, "1 user group", entry.size, entry.mtime, "%s/%s" % (prefix, entry.name)
- print entry.perm, "1 user group", entry.size, entry.mtime, "%s/%s" % (prefix, entry.name)
+ fullpath = "%s/%s" % (directory, entry.name)
+ if fullpath.startswith('//'): fullpath = fullpath[1:]
+ print entry.perm, "1 user group", entry.size, entry.mtime, fullpath
debug.close()
for entry in directories:
debug.close()
for entry in directories:
- _recursive_list(obexftp_args, "%s/%s" % (directory, entry.name))
+ fullpath = "%s/%s" % (directory, entry.name)
+ if fullpath.startswith('//'): fullpath = fullpath[1:]
+ _recursive_list(obexftp_args, fullpath)
def mcobex_list():
"""List the entire VFS"""
def mcobex_list():
"""List the entire VFS"""