1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
/* Copyright 2013 MultiMC Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "include/pathutils.h"
#include <QFileInfo>
#include <QDir>
#include <QDesktopServices>
#include <QUrl>
#include <QDebug>
QString PathCombine(QString path1, QString path2)
{
if (!path1.endsWith('/'))
return path1.append('/').append(path2);
else
return path1.append(path2);
}
QString PathCombine(QString path1, QString path2, QString path3)
{
return PathCombine(PathCombine(path1, path2), path3);
}
QString AbsolutePath(QString path)
{
return QFileInfo(path).absolutePath();
}
QString badFilenameChars = "\"\\/?<>:*|!";
QString RemoveInvalidFilenameChars(QString string, QChar replaceWith)
{
for (int i = 0; i < string.length(); i++)
{
if (badFilenameChars.contains(string[i]))
{
string[i] = replaceWith;
}
}
return string;
}
QString DirNameFromString(QString string, QString inDir)
{
int num = 0;
QString dirName = RemoveInvalidFilenameChars(string, '-');
while (QFileInfo(PathCombine(inDir, dirName)).exists())
{
num++;
dirName = RemoveInvalidFilenameChars(dirName, '-') + QString::number(num);
// If it's over 9000
if (num > 9000)
return "";
}
return dirName;
}
bool ensureFilePathExists(QString filenamepath)
{
QFileInfo a ( filenamepath );
QDir dir;
QString ensuredPath = a.path();
bool success = dir.mkpath ( ensuredPath );
qDebug() << "ensureFilePathExists:" << success << ensuredPath << filenamepath;
return success;
}
bool ensureFolderPathExists(QString foldernamepath)
{
QFileInfo a ( foldernamepath );
QDir dir;
QString ensuredPath = a.filePath();
bool success = dir.mkpath ( ensuredPath );
qDebug() << "ensureFolderPathExists:" << success << ensuredPath << foldernamepath;
return success;
}
bool copyPath(QString src, QString dst)
{
QDir dir(src);
if (!dir.exists())
return false;
if(!ensureFolderPathExists(dst))
return false;
foreach (QString d, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot))
{
QString inner_src = src + QDir::separator() + d;
QString inner_dst = dst + QDir::separator() + d;
copyPath(inner_src, inner_dst);
}
foreach (QString f, dir.entryList(QDir::Files))
{
QFile::copy(src + QDir::separator() + f, dst + QDir::separator() + f);
}
return true;
}
void openDirInDefaultProgram ( QString path, bool ensureExists )
{
QDir parentPath;
QDir dir( path );
if(!dir.exists())
{
parentPath.mkpath(dir.absolutePath());
}
QDesktopServices::openUrl ( "file:///" + dir.absolutePath() );
}
void openFileInDefaultProgram ( QString filename )
{
QDesktopServices::openUrl ( "file:///" + QFileInfo ( filename ).absolutePath() );
}
|