@@ -183,11 +183,9 @@ QString Mask::interpret(const QUrl &url, const QString &customFileName, const QS
183183 if (!url.isValid ()) {
184184 return {};
185185 }
186- auto decodedMask = QString ( " %0.%1 " ). arg (NAME, EXT );
187- if (mask .isEmpty ()) {
186+ auto decodedMask = mask; // .trimmed( );
187+ if (decodedMask .isEmpty ()) {
188188 decodedMask = QString (" %0/%1/%2.%3" ).arg (URL, SUBDIRS, NAME, EXT);
189- } else {
190- decodedMask = mask;
191189 }
192190
193191 auto host = url.host ();
@@ -199,10 +197,6 @@ QString Mask::interpret(const QUrl &url, const QString &customFileName, const QS
199197 auto basename = fi.completeBaseName ();
200198 auto suffix = fi.suffix ();
201199
202- if (!customFileName.isEmpty ()) {
203- basename = customFileName;
204- }
205-
206200 auto subdirs = path;
207201 subdirs.chop (filename.count ());
208202 if (subdirs.startsWith (QChar (' /' ))) {
@@ -223,6 +217,25 @@ QString Mask::interpret(const QUrl &url, const QString &customFileName, const QS
223217 // Renaming Tags
224218 decodedMask.replace (QChar (' \\ ' ), QChar (' /' ));
225219
220+ // BUGFIX
221+ if (!customFileName.isEmpty ()) {
222+ QString temp = " " ;
223+ auto parts = decodedMask.split (QChar (' /' ));
224+ for (QString part : parts) {
225+ if (part.contains (NAME)) {
226+ if (part.contains (EXT)) {
227+ part = customFileName;
228+ part.append (" ." ).append (suffix);
229+ } else {
230+ part = customFileName;
231+ }
232+ }
233+ temp.append (part).append (QChar (' /' ));
234+ }
235+ temp.removeLast ();
236+ decodedMask = temp;
237+ }
238+
226239 decodedMask.replace ( NAME , basename );
227240 decodedMask.replace ( EXT , suffix );
228241 decodedMask.replace ( URL , host );
@@ -233,9 +246,12 @@ QString Mask::interpret(const QUrl &url, const QString &customFileName, const QS
233246 decodedMask.replace ( QSTRING , query );
234247
235248 /* Remove the trailing '.' and duplicated '/' */
236- decodedMask.replace (QRegularExpression (" /+" ), " /" );
237- decodedMask.replace (QRegularExpression (" ^/" ), " " );
238- decodedMask.replace (QRegularExpression (" [/\\ .]*$" ), " " );
249+ static QRegularExpression reDuplicateSlash (" /+" );
250+ static QRegularExpression reLeadingSlash (" ^/" );
251+ static QRegularExpression reTrailingSlashAndDot (" [/\\ .]*$" );
252+ decodedMask.replace (reDuplicateSlash, " /" );
253+ decodedMask.replace (reLeadingSlash, " " );
254+ decodedMask.replace (reTrailingSlashAndDot, " " );
239255
240256 /* Replace reserved characters */
241257 cleanNameForWindows (decodedMask);
0 commit comments