check checksum of all filename alternatives when adding media

patch thanks to Julien Baley
This commit is contained in:
Damien Elmes 2013-05-16 17:24:20 +09:00
parent 3dd72ad4d6
commit c8f4d3a582

View file

@ -72,31 +72,26 @@ If the same name exists, compare checksums."""
mdir = self.dir()
# remove any dangerous characters
base = re.sub(r"[][<>:/\\&?\"\|]", "", os.path.basename(opath))
dst = os.path.join(mdir, base)
# if it doesn't exist, copy it directly
if not os.path.exists(dst):
shutil.copyfile(opath, dst)
return base
# if it's identical, reuse
if self.filesIdentical(opath, dst):
return base
# otherwise, find a unique name
(root, ext) = os.path.splitext(base)
def repl(match):
n = int(match.group(1))
return " (%d)" % (n+1)
# find the first available name
while True:
path = os.path.join(mdir, root + ext)
# if it doesn't exist, copy it directly
if not os.path.exists(path):
break
shutil.copyfile(opath, path)
return os.path.basename(os.path.basename(path))
# if it's identical, reuse
if self.filesIdentical(opath, path):
return os.path.basename(path)
# otherwise, increment the index in the filename
reg = " \((\d+)\)$"
if not re.search(reg, root):
root = root + " (1)"
else:
root = re.sub(reg, repl, root)
# copy and return
shutil.copyfile(opath, path)
return os.path.basename(os.path.basename(path))
def filesIdentical(self, path1, path2):
"True if files are the same."