filerenamer: Prevent creating track name folders
When renaming/moving tracks using the "file renamer" utility, a directory with the name of the file to be moved is created in the destination, which causes a later move of the file to fail.
As an example, let's say the renamer is set to move the file to the
directory ~/Music/Artist/Album/Track.mp3
. We now have a file called
~/Music/staging/Awesome.mp3
by "Johnny" from the album "Extension".
Telling JuK to rename this file will result in the creation of the
directories ~/Music/Johnny/
, ~/Music/Johnny/Extension/
and
~/Music/Johnny/Extension/Awesome.mp3/
. The creation of that last
directory means that moving the real Awesome.mp3
to
~/Music/Johnny/Extension/
will fail, as a directory already exists
with it's name. A generic error will appear saying that the rename
failed.
A line in FileRenamer::moveFile
already exists which aims to prevent
this, and it may have worked in the past, but it doesn't seem to
anymore. The resulting dir
variable retains the name of the file
even after the .resolved()
call, which of course results in the
extra directory being created.
To fix this, I replaced the call to .resolved()
with one to
.adjusted()
which is supposed to guarantee that a file name is
not part of the new generated URL. This should prevent any extra
directories from being created, as the name of the file (or anything
after the final forward slash in the destination path) is now
stripped.
Another thing that could possibly be done is to keep the call to
.resolved()
but replace the relative path with ..
instead of
.
as this would likely have the same effect. I chose to use
.adjusted()
as this seems like the cleaner and more readable
solution, at least according to Qt documentation.