diff options
| author | 2011-12-05 21:01:34 +0100 | |
|---|---|---|
| committer | 2011-12-05 21:01:34 +0100 | |
| commit | c135b3575179015f01cb9e51034bac057fa8f014 (patch) | |
| tree | 6ae5505190948d8c249c10489f23273894d1f746 | |
| parent | simplehoster - use parseFileSize (diff) | |
| download | pyload-c135b3575179015f01cb9e51034bac057fa8f014.tar.xz | |
little fs improvements
| -rw-r--r-- | module/Utils.py | 49 | ||||
| -rw-r--r-- | module/plugins/Plugin.py | 14 | ||||
| -rw-r--r-- | module/plugins/hooks/ExtractArchive.py | 2 | ||||
| -rw-r--r-- | module/web/pyload_app.py | 14 | 
4 files changed, 35 insertions, 44 deletions
diff --git a/module/Utils.py b/module/Utils.py index f626eef10..1f4f8c047 100644 --- a/module/Utils.py +++ b/module/Utils.py @@ -32,6 +32,7 @@ def remove_chars(string, repl):      elif type(string) == unicode:          return string.translate(dict([(ord(s), None) for s in repl])) +  def save_path(name):      #remove some chars      if os.name == 'nt': @@ -39,39 +40,27 @@ def save_path(name):      else:          return remove_chars(name, '/\\"') +  def save_join(*args):      """ joins a path, encoding aware """ -    paths = [] -    for i, path in enumerate(args): -        # remove : for win comp, but not for first segment -        if i: -            path = path.replace(":", "") - -        paths.append(unicode(path)) -    return join(*paths) - -def fs_encode(string): -    """ Encodes string with utf-8 if locale support seems to be missing  -     -    :param string: string to decode -    :return: -    """ -    try:  -        if sys.getfilesystemencoding() == 'ANSI_X3.4-1968': +    return fs_encode(join(*[unicode(x) for x in args])) + + +# File System Encoding functions: +# Use fs_encode before accesing files on disk, it will encode the string properly + +if sys.getfilesystemencoding() == 'ANSI_X3.4-1968': +    def fs_encode(string): +        try:              string = string.encode('utf-8') -    finally: -        return string +        finally: +            return string -def fs_decode(string): -    """ Decodes with filesystem encoding +    fs_decode = decode #decode utf8 + +else: +    fs_encode = fs_decode = lambda x: x  # do nothing -    :param string: string to decode -    :return: -    """ -    try: -       return string.decode(sys.getfilesystemencoding(), "replace") -    except: -        return string  def compare_time(start, end):      start = map(int, start) @@ -158,6 +147,7 @@ def parseFileSize(string, unit=None): #returns bytes      return traffic +  def lock(func):      def new(*args):          #print "Handler: %s args: %s" % (func,args[1:]) @@ -188,9 +178,10 @@ def fixup(m):              text = unichr(name2codepoint[name])          except KeyError:              pass -         +      return text # leave as is +  def html_unescape(text):      """Removes HTML or XML character references and entities from a text string"""      return re.sub("&#?\w+;", fixup, text) diff --git a/module/plugins/Plugin.py b/module/plugins/Plugin.py index e2aadb38e..f7587d3f2 100644 --- a/module/plugins/Plugin.py +++ b/module/plugins/Plugin.py @@ -532,16 +532,16 @@ class Plugin(Base):          :param read_size: amount of bytes to read from files larger then max_size          :return: dictionary key of the first rule that matched          """ -        fs_name = fs_encode(self.lastDownload) -        if not exists(fs_name): return None +        lastDownload = fs_encode(self.lastDownload) +        if not exists(lastDownload): return None -        size = stat(fs_name) +        size = stat(lastDownload)          size = size.st_size          if api_size and api_size <= size: return None          elif size > max_size and not read_size: return None          self.log.debug("Download Check triggered") -        f = open(fs_name, "rb") +        f = open(lastDownload, "rb")          content = f.read(read_size if read_size else -1)          f.close()          #produces encoding errors, better log to other file in the future? @@ -550,13 +550,13 @@ class Plugin(Base):              if type(rule) in (str, unicode):                  if rule in content:                      if delete: -                        remove(fs_name) +                        remove(lastDownload)                      return name              elif hasattr(rule, "search"):                  m = rule.search(content)                  if m:                      if delete: -                        remove(fs_name) +                        remove(lastDownload)                      self.lastCheck = m                      return name @@ -586,7 +586,7 @@ class Plugin(Base):                      raise SkipDownload(pyfile.pluginname)          download_folder = self.config['general']['download_folder'] -        location = fs_encode(save_join(download_folder, pack.folder, self.pyfile.name)) +        location = save_join(download_folder, pack.folder, self.pyfile.name)          if starting and self.core.config['download']['skip_existing'] and exists(location):              size = os.stat(location).st_size diff --git a/module/plugins/hooks/ExtractArchive.py b/module/plugins/hooks/ExtractArchive.py index 359bfca76..82e9c1d36 100644 --- a/module/plugins/hooks/ExtractArchive.py +++ b/module/plugins/hooks/ExtractArchive.py @@ -165,7 +165,7 @@ class ExtractArchive(Hook):                  for plugin in self.plugins:                      targets = plugin.getTargets(files_ids) -                    if targets: self.logDebug("Targets: %s" % targets) +                    if targets: self.logDebug("Targets for %s: %s" % (plugin.__name__, targets))                      for target, fid in targets:                          if target in extracted:                              self.logDebug(basename(target), "skipped") diff --git a/module/web/pyload_app.py b/module/web/pyload_app.py index c64619c57..067eea9d3 100644 --- a/module/web/pyload_app.py +++ b/module/web/pyload_app.py @@ -36,7 +36,7 @@ from utils import render_to_response, parse_permissions, parse_userdata, \  from filters import relpath, unquotepath -from module.utils import formatSize, fs_decode +from module.utils import formatSize, save_join  # Helper @@ -187,7 +187,7 @@ def collector():  @route("/downloads")  @login_required('DOWNLOAD')  def downloads(): -    root = fs_decode(PYLOAD.getConfigValue("general", "download_folder")) +    root = PYLOAD.getConfigValue("general", "download_folder")      if not isdir(root):          return base([_('Download directory not found.')]) @@ -196,19 +196,19 @@ def downloads():          'files': []      } -    items = [fs_decode(x) for x in listdir(root)] +    items = listdir(root)      for item in sorted(items): -        if isdir(join(root, item)): +        if isdir(save_join(root, item)):              folder = {                  'name': item,                  'path': item,                  'files': []              } -            files = [fs_decode(x) for x in listdir(join(root, item))] +            files = listdir(save_join(root, item))              for file in sorted(files):                  try: -                    if isfile(join(root, item, file)): +                    if isfile(save_join(root, item, file)):                          folder['files'].append(file)                  except:                      pass @@ -223,7 +223,7 @@ def downloads():  @route("/downloads/get/:path#.+#")  @login_required("DOWNLOAD")  def get_download(path): -    path = unquote(path) +    path = unquote(path).decode("utf8")      #@TODO some files can not be downloaded      root = PYLOAD.getConfigValue("general", "download_folder")  | 
