From f9cc86be086bb9ff5923cfbb6af4bb7c81396a27 Mon Sep 17 00:00:00 2001 From: Adrian Sampson Date: Sun, 29 Sep 2013 18:35:43 -0700 Subject: [PATCH] fromfilename: use unicode filename As pointed out in #395, we need to decode the filename before doing our fancy matches on it. --- beetsplug/fromfilename.py | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/beetsplug/fromfilename.py b/beetsplug/fromfilename.py index 2d17e3394..bd10af4db 100644 --- a/beetsplug/fromfilename.py +++ b/beetsplug/fromfilename.py @@ -16,6 +16,7 @@ filename. """ from beets import plugins +from beets.util import displayable_path import os import re @@ -23,25 +24,25 @@ import re # Filename field extraction patterns. PATTERNS = [ # "01 - Track 01" and "01": do nothing - r'^(\d+)\s*-\s*track\s*\d$', - r'^\d+$', + ur'^(\d+)\s*-\s*track\s*\d$', + ur'^\d+$', # Useful patterns. - r'^(?P\d+)\s*-(?P.+)-(?P.+)-(?P<tag>.*)$', - r'^(?P<track>\d+)\s(?P<artist>.+)-(?P<title>.+)-(?P<tag>.*)$', - r'^(?P<track>\d+)\.\s*(?P<artist>.+)-(?P<title>.+)$', - r'^(?P<track>\d+)\s*-\s*(?P<artist>.+)-(?P<title>.+)$', - r'^(?P<track>\d+)\s*-(?P<artist>.+)-(?P<title>.+)$', - r'^(?P<track>\d+)\s(?P<artist>.+)-(?P<title>.+)$', - r'^(?P<track>\d+)\.\s*(?P<title>.+)$', - r'^(?P<track>\d+)\s*-\s*(?P<title>.+)$', - r'^(?P<track>\d+)\s(?P<title>.+)$', + ur'^(?P<track>\d+)\s*-(?P<artist>.+)-(?P<title>.+)-(?P<tag>.*)$', + ur'^(?P<track>\d+)\s(?P<artist>.+)-(?P<title>.+)-(?P<tag>.*)$', + ur'^(?P<track>\d+)\.\s*(?P<artist>.+)-(?P<title>.+)$', + ur'^(?P<track>\d+)\s*-\s*(?P<artist>.+)-(?P<title>.+)$', + ur'^(?P<track>\d+)\s*-(?P<artist>.+)-(?P<title>.+)$', + ur'^(?P<track>\d+)\s(?P<artist>.+)-(?P<title>.+)$', + ur'^(?P<track>\d+)\.\s*(?P<title>.+)$', + ur'^(?P<track>\d+)\s*-\s*(?P<title>.+)$', + ur'^(?P<track>\d+)\s(?P<title>.+)$', ] # Titles considered "empty" and in need of replacement. BAD_TITLE_PATTERNS = [ - r'^$', - r'\d+?\s?-?\s*track\s*\d+', + ur'^$', + ur'\d+?\s?-?\s*track\s*\d+', ] @@ -149,7 +150,8 @@ def filename_task(task, session): # Get the base filenames (no path or extension). names = {} for item in items: - name, _ = os.path.splitext(os.path.basename(item.path)) + path = displayable_path(item.path) + name, _ = os.path.splitext(os.path.basename(path)) names[item] = name # Look for useful information in the filenames.