Get charset from environment
authorOleg Broytman <phd@phdru.name>
Fri, 15 Nov 2013 20:52:20 +0000 (00:52 +0400)
committerOleg Broytman <phd@phdru.name>
Sat, 16 Nov 2013 02:05:38 +0000 (06:05 +0400)
obexftp
obexftp-ANNOUNCE
torrent
torrent-ANNOUNCE

diff --git a/obexftp b/obexftp
index 3eff7bf..211fbf7 100755 (executable)
--- a/obexftp
+++ b/obexftp
@@ -64,7 +64,7 @@ named in $TMP environment variable.
 
 """
 
-__version__ = "1.3.2"
+__version__ = "1.4.0"
 __author__ = "Oleg Broytman <phd@phdru.name>"
 __copyright__ = "Copyright (C) 2004-2013 PhiloSoft Design"
 __license__ = "GPL"
@@ -76,9 +76,34 @@ obexftp_prog = "/usr/bin/obexftp"
 
 import sys, os, shutil
 from time import sleep
-import xml.dom.minidom, locale
+import xml.dom.minidom
 from tempfile import mkstemp, mkdtemp, _candidate_tempdir_list
 
+try:
+   import locale
+   use_locale = True
+except ImportError:
+   use_locale = False
+
+if use_locale:
+   # Get the default charset.
+   try:
+      lcAll = locale.getdefaultlocale()
+   except locale.Error, err:
+      print >>sys.stderr, "WARNING:", err
+      lcAll = []
+
+   if len(lcAll) == 2:
+      default_encoding = lcAll[1]
+   else:
+      try:
+         default_encoding = locale.getpreferredencoding()
+      except locale.Error, err:
+         print >>sys.stderr, "WARNING:", err
+         default_encoding = sys.getdefaultencoding()
+else:
+   default_encoding = sys.getdefaultencoding()
+
 
 import logging
 logger = logging.getLogger('obexftp-mcextfs')
@@ -123,7 +148,6 @@ logger.removeHandler(log_err_handler)
 logger.addHandler(logging.FileHandler(logfile_name))
 
 locale.setlocale(locale.LC_ALL, '')
-charset = locale.getpreferredencoding()
 
 
 # Parse ObexFTP XML directory listings
@@ -238,7 +262,7 @@ def recursive_list(directory='/'):
 
    for entry in directories + files:
       fullpath = "%s/%s" % (directory, entry.name)
-      fullpath = fullpath.encode(charset)
+      fullpath = fullpath.encode(default_encoding)
       if fullpath.startswith('//'): fullpath = fullpath[1:]
       print entry.perm, "1 user group", entry.size, entry.mtime, fullpath
 
index 1f5190a..069ee29 100644 (file)
@@ -6,6 +6,9 @@ WHAT IS IT
 binary.
 
 
+WHAT'S NEW in version 1.4.0 (2013-11-??)
+   Get charset from the environment.
+
 WHAT'S NEW in version 1.3.2 (2013-11-11)
    Documented the fact that the script can be put in $HOME/.mc/extfs.d.
 
diff --git a/torrent b/torrent
index ebaa7bf..b02c90d 100755 (executable)
--- a/torrent
+++ b/torrent
@@ -27,14 +27,40 @@ year. The filesystem is, naturally, read-only.
 
 """
 
-__version__ = "1.1.1"
+__version__ = "1.2.0"
 __author__ = "Oleg Broytman <phd@phdru.name>"
 __copyright__ = "Copyright (C) 2010-2013 PhiloSoft Design"
 __license__ = "GPL"
 
-import locale, sys, os
+
+import sys, os
 from eff_bdecode import decode
 
+try:
+   import locale
+   use_locale = True
+except ImportError:
+   use_locale = False
+
+if use_locale:
+   # Get the default charset.
+   try:
+      lcAll = locale.getdefaultlocale()
+   except locale.Error, err:
+      print >>sys.stderr, "WARNING:", err
+      lcAll = []
+
+   if len(lcAll) == 2:
+      default_encoding = lcAll[1]
+   else:
+      try:
+         default_encoding = locale.getpreferredencoding()
+      except locale.Error, err:
+         print >>sys.stderr, "WARNING:", err
+         default_encoding = sys.getdefaultencoding()
+else:
+   default_encoding = sys.getdefaultencoding()
+
 import logging
 logger = logging.getLogger('torrent-mcextfs')
 log_err_handler = logging.StreamHandler(sys.stderr)
@@ -53,9 +79,7 @@ This is not a program. Put the script in $HOME/.mc/extfs.d or
 )
     sys.exit(1)
 
-
 locale.setlocale(locale.LC_ALL, '')
-charset = locale.getpreferredencoding()
 
 
 def mctorrent_list():
@@ -87,27 +111,27 @@ def mctorrent_list():
             if 'path.utf-8' in file:
                 if name_utf8:
                     path = '/'.join([name_utf8] + file['path.utf-8'])
-                    if charset and (charset != 'utf-8'):
-                        path = path.decode('utf-8', 'replace').encode(charset, 'replace')
+                    if default_encoding != 'utf-8':
+                        path = path.decode('utf-8', 'replace').encode(default_encoding, 'replace')
                 else:
                     _name_utf8 = name
                     if encoding and (encoding != 'utf-8'):
                         _name_utf8 = _name_utf8.decode(encoding, 'replace').encode('utf-8', 'replace')
                     path = '/'.join([_name_utf8] + file['path.utf-8'])
-                    if charset and (charset != 'utf-8'):
-                        path = path.decode('utf-8', 'replace').encode(charset, 'replace')
+                    if default_encoding != 'utf-8':
+                        path = path.decode('utf-8', 'replace').encode(default_encoding, 'replace')
             else:
                 if name_utf8:
                     path = file['path']
                     if encoding and (encoding != 'utf-8'):
                         path = path.decode(encoding, 'replace').encode('utf-8', 'replace')
                     path = '/'.join([name_utf8] + path)
-                    if charset and (charset != 'utf-8'):
-                        path = path.decode('utf-8', 'replace').encode(charset, 'replace')
+                    if default_encoding != 'utf-8':
+                        path = path.decode('utf-8', 'replace').encode(default_encoding, 'replace')
                 else:
                     path = '/'.join([name] + file['path'])
-                    if charset and encoding and (charset != encoding):
-                        path = path.decode(encoding, 'replace').encode(charset, 'replace')
+                    if encoding and (default_encoding != encoding):
+                        path = path.decode(encoding, 'replace').encode(default_encoding, 'replace')
             length = file['length']
             paths.append((path, length))
     else: # One-file torrent
@@ -115,10 +139,10 @@ def mctorrent_list():
             torrent_error('Unknown length')
         length = info['length']
         if name_utf8:
-            if charset and (charset != 'utf-8'):
-                name = name_utf8.decode('utf-8', 'replace').encode(charset, 'replace')
-        elif charset and encoding and (charset != encoding):
-            name = name.decode(encoding, 'replace').encode(charset, 'replace')
+            if default_encoding != 'utf-8':
+                name = name_utf8.decode('utf-8', 'replace').encode(default_encoding, 'replace')
+        elif encoding and (default_encoding != encoding):
+            name = name.decode(encoding, 'replace').encode(default_encoding, 'replace')
         paths = [(name, length)]
 
     meta = []
@@ -126,7 +150,7 @@ def mctorrent_list():
                 'created by', 'creation date', 'encoding', \
                 'nodes', 'publisher', 'publisher-url':
         if name == 'comment' and 'comment.utf-8' in torrent:
-            data = torrent['comment.utf-8'].decode('utf-8').encode(charset, 'replace')
+            data = torrent['comment.utf-8'].decode('utf-8').encode(default_encoding, 'replace')
             meta.append(('.META/' + name, len(data)))
         elif name in torrent:
             if name == 'announce-list':
@@ -163,7 +187,7 @@ def mctorrent_copyout():
                 'created by', 'creation date', 'encoding', \
                 'nodes', 'publisher', 'publisher-url':
         if name == 'comment' and 'comment.utf-8' in torrent:
-            data = torrent['comment.utf-8'].decode('utf-8').encode(charset, 'replace')
+            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:
index 6f232f5..1d55cc1 100644 (file)
@@ -6,6 +6,9 @@ WHAT IS IT
 Midnight Commander.
 
 
+WHAT'S NEW in version 1.2.0 (2013-11-??)
+   Get charset from the environment.
+
 WHAT'S NEW in version 1.1.1 (2013-11-11)
    Documented the fact that the script can be put in $HOME/.mc/extfs.d.