]> git.phdru.name Git - extfs.d.git/blobdiff - obexftp
Version 1.0.0. Fixed the name of SieFS. Comments.
[extfs.d.git] / obexftp
diff --git a/obexftp b/obexftp
index bfe801e4b8b09e17713b8c465ddef080568efd69..5029895beb1a9e5f68ec21c920520ea212688c7a 100755 (executable)
--- a/obexftp
+++ b/obexftp
@@ -1,23 +1,32 @@
 #! /usr/local/bin/python -O
 
 """
 #! /usr/local/bin/python -O
 
 """
-ObexFTP VFS for Midnight Commander. Manipulate a cell phone's filesystem using obexftp.
+ObexFTP Virtual FileSystem for Midnight Commander.
 
 Author: Oleg BroytMann <phd@phd.pp.ru>.
 Copyright (C) 2004 PhiloSoft Design.
 License: GPL.
 
 
 Author: Oleg BroytMann <phd@phd.pp.ru>.
 Copyright (C) 2004 PhiloSoft Design.
 License: GPL.
 
+Manipulate a cell phone's filesystem calling obexftp binary. This is a complete
+user-mode solution, no kernel modules required (unlike SieFS or such). The
+script implements all commands of Midnight VFS, except for undocumented "run";
+but there are no runnable files in the cell phone. The script is written in
+Python because I love Python, the best of all languages, and I need to parse
+XML directory listings from obexftp.
+
 The script requires Midnight Commander 3.1+ (http://www.ibiblio.org/mc/),
 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/)
+Python 2.2+ (http://www.python.org/),
+OpenOBEX 1.0.1+ (http://openobex.sourceforge.net/)
 and ObexFTP 0.10.4+ (http://triq.net/obexftp).
 
 and ObexFTP 0.10.4+ (http://triq.net/obexftp).
 
-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 transport file.
+Edit the script, and correct the shebang path, if your python is not in the
+/usr/local. Edit the full path to the obexftp binary (see below). Put the file
+in the /usr/[local/]lib/mc/extfs, and add a line "obexftp" to the
+/usr/[local/]lib/mc/extfs/extfs.ini.
 
 
-The transport file can have any name, and is expected to be a text file with at
-least one line defining the transport to your device. Other lines in the file
-are ignored.
+Create somewhere a transport file. The transport file can have any name, and is
+expected to be a text file with at least one line defining the transport to
+your device. Other lines in the file are ignored.
 
 First word in the line is a transport name - Bluetooth, IrDA or TTY. The name
 is case-insensitive.
 
 First word in the line is a transport name - Bluetooth, IrDA or TTY. The name
 is case-insensitive.
@@ -28,23 +37,24 @@ and channel is the OBEX File Transfer channel; you can discover the address and
 the channel for your device by using commands like "hcitool scan" and "sdptool
 browse".
 
 the channel for your device by using commands like "hcitool scan" and "sdptool
 browse".
 
-For the TTY put a device name: "tty /dev/rfcomm0".
+For the IrDA: just put "IrDA" in the file.
 
 
-The content with the IrDA just put "IrDA" in the file.
+For the TTY put a device name: "tty /dev/rfcomm0".
 
 Now run this "cd" command in the Midnight Commander (in the "bindings" files
 
 Now run this "cd" command in the Midnight Commander (in the "bindings" files
-the command is "%cd"): cd description#obexftp. The VFS script uses obexftp 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. And there must be a timeout between
-connections, which doesn't make the scanning process faster. Midnight Commander
-caches the result, so you can browse directories quickly.
+the command is "%cd"): cd description#obexftp, where "description" is the name
+of your file. The VFS script uses obexftp to connect to the device and list
+files and directories. Please 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. And there must be timeouts between connections, which don't make
+the scanning faster. Midnight Commander caches the result, so you can browse
+directories quickly.
 
 """
 
 
 """
 
-__version__ = "0.5.0"
-__revision__ = "$Id: obexftp,v 1.6 2004/06/13 21:48:59 phd Exp $"
-__date__ = "$Date: 2004/06/13 21:48:59 $"[7:-2]
+__version__ = "1.0.0"
+__revision__ = "$Id: obexftp,v 1.9 2004/06/19 17:28:44 phd Exp $"
+__date__ = "$Date: 2004/06/19 17:28:44 $"[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"
 
@@ -63,14 +73,18 @@ def log_error(msg):
    sys.stderr.write(msg + '\n')
 
 def error(msg):
    sys.stderr.write(msg + '\n')
 
 def error(msg):
-   log_error(msg + '\n')
+   log_error(msg)
    sys.exit(1)
 
 
 if len(sys.argv) < 2:
    error("""\
    sys.exit(1)
 
 
 if len(sys.argv) < 2:
    error("""\
-It is not a program - it is a VFS for Midnight Commander.
-Put it in /usr/lib/mc/extfs.""")
+ObexFTP Virtual FileSystem for Midnight Commander version %s
+Author: %s
+%s
+Put it in /usr/lib/mc/extfs. For more information read the source!""" % (
+   __version__, __author__, __copyright__
+))
 
 
 def setup_transport():
 
 
 def setup_transport():
@@ -95,6 +109,8 @@ def setup_transport():
 # Parse ObexFTP XML directory listings
 
 class DirectoryEntry(object):
 # Parse ObexFTP XML directory listings
 
 class DirectoryEntry(object):
+   """Represent remote files and directories"""
+
    def __init__(self, type):
       self.type = type
       self.size = 0
    def __init__(self, type):
       self.type = type
       self.size = 0
@@ -130,11 +146,11 @@ class DirectoryEntry(object):
             )
       raise ValueError, "unknown type '%s'; expected 'file' or 'folder'" % self.type
 
             )
       raise ValueError, "unknown type '%s'; expected 'file' or 'folder'" % self.type
 
-def get_entries(dom, tag):
+def get_entries(dom, type):
    entries = []
    entries = []
-   for subtag in dom.getElementsByTagName(tag):
-      entry = DirectoryEntry(tag)
-      attrs = subtag.attributes
+   for obj in dom.getElementsByTagName(type):
+      entry = DirectoryEntry(type)
+      attrs = obj.attributes
       for i in range(attrs.length):
          attr = attrs.item(i)
          setattr(entry, attr.name, attr.value)
       for i in range(attrs.length):
          attr = attrs.item(i)
          setattr(entry, attr.name, attr.value)
@@ -221,20 +237,14 @@ def mcobex_rm():
    """Remove a file from the VFS"""
    obexftp_args = setup_transport()
    obex_filename = sys.argv[3]
    """Remove a file from the VFS"""
    obexftp_args = setup_transport()
    obex_filename = sys.argv[3]
-
-   setup_tmpdir()
    os.system("%s %s -k '%s' 2>/dev/null" % (obexftp_prog, obexftp_args, obex_filename))
    os.system("%s %s -k '%s' 2>/dev/null" % (obexftp_prog, obexftp_args, obex_filename))
-   cleanup_tmpdir()
 
 
 def mcobex_mkdir():
    """Create a directory in the VFS"""
    obexftp_args = setup_transport()
    obex_dirname = sys.argv[3]
 
 
 def mcobex_mkdir():
    """Create a directory in the VFS"""
    obexftp_args = setup_transport()
    obex_dirname = sys.argv[3]
-
-   setup_tmpdir()
    os.system("%s %s -C '%s' 2>/dev/null" % (obexftp_prog, obexftp_args, obex_dirname))
    os.system("%s %s -C '%s' 2>/dev/null" % (obexftp_prog, obexftp_args, obex_dirname))
-   cleanup_tmpdir()
 
 
 mcobex_rmdir = mcobex_rm
 
 
 mcobex_rmdir = mcobex_rm