Krita Source Code Documentation
Loading...
Searching...
No Matches
KisFileUtils.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2019 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: LGPL-2.1-or-later
5 */
6
7#include "KisFileUtils.h"
8
9#include <QString>
10#include <QFileInfo>
11#include <QDir>
12#include <QRegularExpression>
13#include <KisPortingUtils.h>
14
15
16namespace KritaUtils {
17
18QString resolveAbsoluteFilePath(const QString &baseDir, const QString &fileName)
19{
20 if (QFileInfo(fileName).isAbsolute()) {
21 return fileName;
22 }
23
24 QFileInfo fallbackBaseDirInfo(baseDir);
25
26 return QFileInfo(QDir(fallbackBaseDirInfo.isDir() ?
27 fallbackBaseDirInfo.absoluteFilePath() :
28 fallbackBaseDirInfo.absolutePath()),
29 fileName).absoluteFilePath();
30}
31
32QString deduplicateFileName(const QString &fileName,
33 const QString &separator,
34 std::function<bool(QString)> fileAllowedCallback)
35{
36 const QFileInfo fileInfo(fileName);
37
38 int counter = 0;
39 QString proposedFileName = fileInfo.fileName();
40
41 QString baseName = fileInfo.baseName();
42 QString completeSuffix = fileInfo.completeSuffix();
43
52 QRegularExpression rex(QString("^([^.]+)%1\\d+(\\.(.+))?$").arg(separator));
53 auto match = rex.match(proposedFileName);
54
55 if (match.hasMatch()) {
57 baseName = match.captured(1);
58 completeSuffix = stringRemoveFirst(match.captured(2));
59 }
60
61 while (!fileAllowedCallback(proposedFileName)) {
62 QStringList fileParts = {baseName, separator, QString::number(counter++)};
63
64 if (!completeSuffix.isEmpty()) {
65 fileParts += ".";
66 fileParts += completeSuffix;
67 }
68 proposedFileName = fileParts.join("");
69 }
70
71 return proposedFileName;
72}
73}
QString stringRemoveFirst(QString str)
QString deduplicateFileName(const QString &fileName, const QString &separator, std::function< bool(QString)> fileAllowedCallback)
QString resolveAbsoluteFilePath(const QString &baseDir, const QString &fileName)
Resolve absolute file path from a file path and base dir.