aboutsummaryrefslogtreecommitdiff
path: root/libs/bsapacker/src/DummyPluginLogic.cpp
blob: a8e73ffecd2fc48fc7ac1e04a4d1fe92dc6f9e5d (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
#include "DummyPluginLogic.h"

#include <QFileInfo>
#include <array>
#include "SettingsService.h"

namespace BsaPacker
{
	DummyPluginLogic::DummyPluginLogic(
		const ISettingsService* settingsService,
		const IArchiveNameService* archiveNameService)
		: m_SettingsService(settingsService),
		m_ArchiveNameService(archiveNameService)
	{
	}

	bool DummyPluginLogic::canCreateDummyESP(const QString& fileNameNoExtension, const bsa_archive_type_e type) const
	{
		const std::array<QString, 2>& fileList = {
			fileNameNoExtension + ".esm",
			fileNameNoExtension + ".esp"
		};
		return this->canCreateDummy(fileList, fileNameNoExtension, type);
	}

	bool DummyPluginLogic::canCreateDummyESL(const QString& fileNameNoExtension, const bsa_archive_type_e type) const
	{
		const std::array<QString, 3>& fileList = {
			fileNameNoExtension + ".esm",
			fileNameNoExtension + ".esp",
			fileNameNoExtension + ".esl"
		};
		return this->canCreateDummy(fileList, fileNameNoExtension, type);
	}

	template<std::size_t SIZE>
	bool DummyPluginLogic::canCreateDummy(const std::array<QString, SIZE>& fileList,
		const QString& fileNameNoExtension,
		const bsa_archive_type_e type) const
	{
		const QFileInfo archive(fileNameNoExtension + this->m_ArchiveNameService->Infix(type) + this->m_ArchiveNameService->GetFileExtension());
		if (!(archive.exists() && archive.isFile())) {
			return false;
		}

		if (!this->m_SettingsService->GetPluginSetting(SettingsService::SETTING_CREATE_PLUGINS).toBool()) {
			return false;
		}

		for (const QString& info : fileList) {
			const QFileInfo fileInfo(info);
			if (fileInfo.exists() && fileInfo.isFile()) {
				return false;
			}
		}
		return true;
	}
}