blob: 8342e567b7c8cca39fb5d82f52aaa495e4577259 (
plain)
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
|
#include "HideLooseAssetService.h"
#include <QDir>
#include <QDirIterator>
#include <QString>
#include <QtConcurrent/QtConcurrentMap>
#include "SettingsService.h"
namespace BsaPacker
{
QString HideLooseAssetService::s_HiddenExt(".mohidden");
HideLooseAssetService::HideLooseAssetService(const ISettingsService* settingsService)
: m_SettingsService(settingsService)
{
}
bool HideLooseAssetService::HideLooseAssets(const QDir& modDirectory) const
{
if (!this->m_SettingsService->GetPluginSetting(SettingsService::SETTING_HIDE_LOOSE_ASSETS).toBool()) {
return false;
}
// Only hide loose files that were not excluded when creating the archive (blacklisted), so might still be needed by the mod
QStringList blacklistExtensions = this->m_SettingsService->GetPluginSetting(SettingsService::SETTING_BLACKLISTED_FILES).toString().split(';');
for (auto& ext : blacklistExtensions) {
ext.prepend("*");
}
const QString& absModDir = modDirectory.absolutePath();
for (const QString& subDir : modDirectory.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) {
// Hide subdirectories
const QString& absPath = absModDir + '/' + subDir;
QDir originalDir(absPath);
if (originalDir.dirName().endsWith(s_HiddenExt) || originalDir.isEmpty()) {
continue;
}
if (!originalDir.rename(originalDir.absolutePath(), originalDir.absolutePath() + s_HiddenExt)) {
qWarning() << "Failed to hide " << originalDir.absolutePath();
continue;
}
// Restore files with blacklisted extension to their original directories
QDir hiddenDir(originalDir.absolutePath() + s_HiddenExt);
QDirIterator iterator(hiddenDir.absolutePath(), blacklistExtensions, QDir::Files, QDirIterator::Subdirectories);
while (iterator.hasNext()) {
QString hiddenFilePath = iterator.next();
QString originalFilePath = originalDir.absoluteFilePath(hiddenDir.relativeFilePath(hiddenFilePath));
originalDir.mkpath(originalFilePath.left(originalFilePath.lastIndexOf("/")));
if (!originalDir.rename(hiddenFilePath, originalFilePath)) {
qWarning() << "Failed to unhide " << hiddenFilePath;
}
}
}
return true;
/*
const std::function<void(const QString&)> hideFolder = [&](const QString& subDir)
{
const QString& absPath = absModDir + '/' + subDir;
QDir dir(absPath);
if (!dir.dirName().endsWith(".mohidden"))
dir.rename(absPath, absPath + ".mohidden");
};
*/
//QtConcurrent::blockingMap(modDirectory.entryList(QDir::Dirs | QDir::NoDotAndDotDot), hideFolder);
}
}
|