(http://www.midnight-commander.org/), Python 2.4+ (http://www.python.org/),
module eff_bdecode.py (http://effbot.org/zone/bencode.htm).
-For mc 4.7+ put the script in $HOME/.mc/extfs.d.
+For mc 4.7+ just put the script in $HOME/[.local/share/].mc/extfs.d.
For older versions put it in /usr/[local/][lib|share]/mc/extfs
and add a line "torrent" to the /usr/[local/][lib|share]/mc/extfs/extfs.ini.
Make the script executable.
-Run this "cd" command in the Midnight Commander (in the "bindings" file the
-command is "%cd"): cd file#torrent, where "file" is the name of your torrent
-metafile. The VFS lists all files and directories from the torrent metafile;
-all files appear empty, of course, but the sizes are shown. Filenames are
-reencoded from the metafile's encoding/codepage to the current locale.
+For mc 4.7+ run this "cd" command in the Midnight Commander (in the "bindings"
+file the command is "%cd"): cd file/torrent://; In older versions it is
+cd file#torrent, where "file" is the name of your torrent metafile.
+
+See detailed installation instructions at
+http://phdru.name/Software/mc/torrent_INSTALL.html.
+
+The VFS lists all files and directories from the torrent metafile; all files
+appear empty, of course, but the sizes are shown. Filenames are reencoded from
+the metafile's encoding/codepage to the current locale.
Along with the files/directories in the torrent metafile the VFS also presents
meta information - in the form of files in .META directory. The size and
"""
-__version__ = "1.2.0"
+__version__ = "1.2.3"
__author__ = "Oleg Broytman <phd@phdru.name>"
-__copyright__ = "Copyright (C) 2010-2013 PhiloSoft Design"
+__copyright__ = "Copyright (C) 2010-2015 PhiloSoft Design"
__license__ = "GPL"
-import sys, os
+from os.path import dirname, getmtime
+import sys
+from time import localtime, asctime
from eff_bdecode import decode
try:
Author: %s
%s
-This is not a program. Put the script in $HOME/.mc/extfs.d or
+This is not a program. Put the script in $HOME/[.local/share/].mc/extfs.d or
/usr/[local/][lib|share]/mc/extfs. For more information read the source!""",
__version__, __author__, __copyright__
)
name = info['name']
name_utf8 = info.get('name.utf-8', None)
+ dt = None
if 'files' in info:
files = info['files']
paths = []
path = path.decode(encoding, 'replace').encode(default_encoding, 'replace')
length = file['length']
paths.append((path, length))
- else: # One-file torrent
+ else: # One-file torrent
if 'length' not in info:
torrent_error('Unknown length')
length = info['length']
elif name == 'codepage':
data = str(torrent[name])
elif name == 'creation date':
- data = decode_datetime(torrent[name])
+ dt = torrent[name]
+ data = decode_datetime_asc(dt)
+ dt = decode_datetime(dt)
elif name == 'nodes':
data = ['%s:%s' % (host, port) for host, port in torrent[name]]
data = '\n'.join(data)
if 'piece length' in info:
meta.append(('.META/piece length', len(str(info['piece length']))))
- for name, size in paths + meta:
- print "-r--r--r-- 1 user group %d Jan 1 00:00 %s" % (size, name)
+ paths += meta
+ dirs = set()
+ for name, size in paths:
+ if '/' in name:
+ dirs.add(dirname(name))
+
+ if not dt:
+ dt = decode_datetime(getmtime(sys.argv[2]))
+
+ for name in sorted(dirs):
+ print "dr-xr-xr-x 1 user group 0 %s %s" % (dt, name)
+
+ for name, size in sorted(paths):
+ print "-r--r--r-- 1 user group %d %s %s" % (size, dt, name)
def mctorrent_copyout():
'nodes', 'publisher', 'publisher-url':
if name == 'comment' and 'comment.utf-8' in torrent:
data = torrent['comment.utf-8'].decode('utf-8').encode(default_encoding, 'replace')
- meta.append(('.META/' + name, len(data)))
elif torrent_filename == '.META/' + name:
if name in torrent:
if name == 'announce-list':
elif name == 'codepage':
data = str(torrent[name])
elif name == 'creation date':
- data = decode_datetime(torrent[name])
+ data = decode_datetime_asc(torrent[name])
elif name == 'nodes':
data = ['%s:%s' % (host, port) for host, port in torrent[name]]
data = '\n'.join(data)
torrent_error(error_str)
+def decode_datetime_asc(dt):
+ return asctime(localtime(float(dt)))
+
def decode_datetime(dt):
- from time import localtime, asctime
- the_time = float(dt)
- l_now = localtime(the_time)
- return asctime(l_now)
+ Y, m, d, H, M = localtime(float(dt))[0:5]
+ return "%02d-%02d-%d %02d:%02d" % (m, d, Y, H, M)
def decode_announce_list(announce):
return '\n'.join(l[0] for l in announce)