-#! /usr/bin/env python
+#! /usr/bin/env python3
"""Torrent Virtual FileSystem for Midnight Commander
The script requires Midnight Commander 3.1+
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.
+https://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
"""
-__version__ = "1.2.3"
+__version__ = "1.3.0"
__author__ = "Oleg Broytman <phd@phdru.name>"
-__copyright__ = "Copyright (C) 2010-2015 PhiloSoft Design"
+__copyright__ = "Copyright (C) 2010-2023 PhiloSoft Design"
__license__ = "GPL"
+from datetime import datetime
from os.path import dirname, getmtime
import sys
from time import localtime, asctime
# Get the default charset.
try:
lcAll = locale.getdefaultlocale()
- except locale.Error, err:
- print >>sys.stderr, "WARNING:", err
+ except locale.Error as err:
+ print("WARNING:", err, file=sys.stderr)
lcAll = []
if len(lcAll) == 2:
else:
try:
default_encoding = locale.getpreferredencoding()
- except locale.Error, err:
- print >>sys.stderr, "WARNING:", err
+ except locale.Error as err:
+ print("WARNING:", err, file=sys.stderr)
default_encoding = sys.getdefaultencoding()
else:
default_encoding = sys.getdefaultencoding()
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)
+ 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)
+ print("-r--r--r-- 1 user group %d %s %s" % (size, dt, name))
def mctorrent_copyout():
data = torrent_file.read()
torrent_file.close()
return decode(data)
- except IOError, error_str:
+ except IOError as error_str:
torrent_error(error_str)
def decode_datetime_asc(dt):
- return asctime(localtime(float(dt)))
+ try:
+ return asctime(localtime(float(dt)))
+ except ValueError:
+ return datetime.max.ctime()
def decode_datetime(dt):
- Y, m, d, H, M = localtime(float(dt))[0:5]
- return "%02d-%02d-%d %02d:%02d" % (m, d, Y, H, M)
+ try:
+ Y, m, d, H, M = localtime(float(dt))[0:5]
+ except ValueError:
+ return datetime.max.ctime()
+ else:
+ 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)
+ return '\n'.join(a[0] for a in announce if a)
command = sys.argv[1]
g[procname]()
except SystemExit:
raise
-except:
+except Exception:
logger.exception("Error during run")