From adaaf51e9a2273940013f43d307da1660f2bb156 Mon Sep 17 00:00:00 2001 From: Ade Date: Wed, 3 Sep 2014 22:35:47 +1200 Subject: [PATCH] Normalize path replacement strings Potential fix for https://github.com/rembo10/headphones/issues/1824 --- headphones/helpers.py | 9 ++++++++- headphones/postprocessor.py | 6 +++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/headphones/helpers.py b/headphones/helpers.py index fd80150b..30ab3caf 100644 --- a/headphones/helpers.py +++ b/headphones/helpers.py @@ -19,6 +19,8 @@ import time import shutil import datetime import headphones +import unicodedata +import sys from operator import itemgetter from beets.mediafile import MediaFile, FileTypeError, UnreadableFileError @@ -168,12 +170,17 @@ def piratesize(size): return size -def replace_all(text, dic): +def replace_all(text, dic, normalize=False): if not text: return '' for i, j in dic.iteritems(): + if normalize: + if sys.platform == 'darwin': + j = unicodedata.normalize('NFD', j) + else: + j = unicodedata.normalize('NFC', j) text = text.replace(i, j) return text diff --git a/headphones/postprocessor.py b/headphones/postprocessor.py index e1c6f2af..946d9514 100644 --- a/headphones/postprocessor.py +++ b/headphones/postprocessor.py @@ -624,9 +624,9 @@ def moveFiles(albumpath, release, tracks): for r,d,f in os.walk(albumpath): try: - origfolder = os.path.basename(os.path.normpath(r)) + origfolder = os.path.basename(os.path.normpath(r).decode(headphones.SYS_ENCODING, 'replace')) except: - origfolder = '' + origfolder = u'' values = { '$Artist': artist, '$SortArtist': sortname, @@ -644,7 +644,7 @@ def moveFiles(albumpath, release, tracks): '$originalfolder': origfolder.lower() } - folder = helpers.replace_all(headphones.FOLDER_FORMAT.strip(), values) + folder = helpers.replace_all(headphones.FOLDER_FORMAT.strip(), values, normalize=True) folder = helpers.replace_illegal_chars(folder, type="folder") folder = folder.replace('./', '_/').replace('/.','/_')