Initial commit

This commit is contained in:
MF
2019-11-13 21:19:08 +00:00
commit 2fb5ea9a59
100 changed files with 4602 additions and 0 deletions
+167
View File
@@ -0,0 +1,167 @@
cmake_minimum_required(VERSION 2.8.12)
add_compile_options($<$<CXX_COMPILER_ID:MSVC>:/MP> $<$<CXX_COMPILER_ID:MSVC>:$<$<CONFIG:RELEASE>:/O2>> $<$<CXX_COMPILER_ID:MSVC>:$<$<CONFIG:RELWITHDEBINFO>:/O2>>)
set(PROJ_NAME bsa_packer)
project(${PROJ_NAME})
set(DEPENDENCIES_DIR CACHE PATH "")
# hint to find qt in dependencies path
list(APPEND CMAKE_PREFIX_PATH ${QT_ROOT}/lib/cmake)
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake)
# pasted
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
find_package(Qt5 COMPONENTS Core Concurrent Widgets REQUIRED)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost REQUIRED)
# MO projects
set(default_project_path "${DEPENDENCIES_DIR}/modorganizer_super")
get_filename_component(${default_project_path} ${default_project_path} REALPATH)
set(project_path "${default_project_path}" CACHE PATH "path to the other mo projects")
set(lib_path "${default_project_path}/../../install/libs")
add_library(${PROJ_NAME} SHARED
include/bsapacker/IArchiveAutoService.h
include/bsapacker/IArchiveBuilder.h
include/bsapacker/IArchiveBuilderFactory.h
include/bsapacker/IArchiveBuilderHelper.h
include/bsapacker/IArchiveExtensionService.h
include/bsapacker/IDummyPluginLogic.h
include/bsapacker/IDummyPluginService.h
include/bsapacker/IDummyPluginServiceFactory.h
include/bsapacker/IEmitsValueChanged.h
include/bsapacker/IFileWriterService.h
include/bsapacker/IHideLooseAssetService.h
include/bsapacker/IModDtoFactory.h
include/bsapacker/IPackerDialog.h
include/bsapacker/IPackerDialogFactory.h
include/bsapacker/IPackerProgressDialog.h
include/bsapacker/IPackerProgressDialogFactory.h
include/bsapacker/ISettingsService.h
include/bsapacker/GeneralArchiveBuilder.h
include/bsapacker/ModDtoFactory.h
include/bsapacker/NullArchiveBuilder.h
include/bsapacker/TextureArchiveBuilder.h
include/bsapacker/TexturelessArchiveBuilder.h
src/NexusId.h
src/BsaPackerWorker.h
src/BsaPackerWorker.cpp
src/ArchiveAutoService.cpp
src/ArchiveBuildDirector.cpp
src/ArchiveBuilderFactory.cpp
src/ArchiveBuilderHelper.cpp
src/ArchiveExtensionService.cpp
src/BsaPacker.cpp
src/BSArchive.cpp
src/BSArchiveAuto.cpp
src/BSArchiveEntries.cpp
src/DummyPluginLogic.cpp
src/DummyPluginServiceFactory.cpp
src/Fallout3DummyPluginService.cpp
src/Fallout4DummyPluginService.cpp
src/FileWriterService.cpp
src/GeneralArchiveBuilder.cpp
src/HideLooseAssetService.cpp
src/ModContext.cpp
src/ModDto.cpp
src/ModDtoFactory.cpp
src/NewVegasDummyPluginService.cpp
src/NullArchiveBuilder.cpp
src/NullDummyPluginService.cpp
src/NullModDto.cpp
src/OblivionDummyPluginService.cpp
src/PackerDialog.cpp
src/PackerDialogFactory.cpp
src/PackerProgressDialog.cpp
src/PackerProgressDialogFactory.cpp
src/SettingsService.cpp
src/SkyrimDummyPluginService.cpp
src/SkyrimSEDummyPluginService.cpp
src/TextureArchiveBuilder.cpp
src/TexturelessArchiveBuilder.cpp
)
add_library(BsaPacker::${PROJ_NAME} ALIAS ${PROJ_NAME})
target_compile_features(${PROJ_NAME} PRIVATE cxx_auto_type)
target_compile_options(${PROJ_NAME} PRIVATE $<$<CXX_COMPILER_ID:GNU>:-Wall>)
target_include_directories(${PROJ_NAME}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${Boost_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}/src
${default_project_path}/uibase/src
)
target_link_directories(${PROJ_NAME}
PUBLIC
${lib_path}
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/lib>
${Boost_LIBRARY_DIRS})
message("Default path is: ${default_project_path}")
message("Project path is: ${project_path}")
message("Lib path is: ${lib_path}")
message("packer path is ${CMAKE_SOURCE_DIR}/include/bsapacker")
target_link_libraries(${PROJ_NAME}
PUBLIC
Qt5::Widgets
Qt5::Concurrent
Qt5::Gui
${Boost_LIBRARIES}
uibase
libbsarch
DirectXTex
)
if (MSVC)
set_target_properties(${PROJ_NAME} PROPERTIES COMPILE_FLAGS "/std:c++latest")
endif()
if (MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 4)
# 32 bits
set_target_properties(${PROJ_NAME} PROPERTIES LINK_FLAGS "/LARGEADDRESSAWARE")
endif()
if (NOT "${OPTIMIZE_COMPILE_FLAGS}" STREQUAL "")
set_target_properties(${PROJ_NAME} PROPERTIES COMPILE_FLAGS_RELWITHDEBINFO ${OPTIMIZE_COMPILE_FLAGS})
endif()
if (NOT "${OPTIMIZE_LINK_FLAGS}" STREQUAL "")
set_target_properties(${PROJ_NAME} PROPERTIES LINK_FLAGS_RELWITHDEBINFO ${OPTIMIZE_LINK_FLAGS})
endif()
###############
## Installation
install(TARGETS ${PROJ_NAME}
EXPORT ${PROJ_NAME}-targets
#ARCHIVE DESTINATION libs
RUNTIME DESTINATION bin/plugins)
install(FILES $<TARGET_PDB_FILE:${PROJ_NAME}>
DESTINATION pdb)
install(EXPORT ${PROJ_NAME}-targets
FILE BsaPackerTargets.cmake
NAMESPACE BsaPacker::
DESTINATION libs)
#add_subdirectory(tests)
+15
View File
@@ -0,0 +1,15 @@
set(DirectXTex_INCLUDE_DIR ${DirectXTex_DIR}/include)
set(DirectXTex_LIBRARY_DIR ${DirectXTex_DIR}/lib)
set(DirectXTex_VERSION ${PC_modorganizer_VERSION})
mark_as_advanced(DirectXTex_FOUND DirectXTex_DIR DirectXTex_INCLUDE_DIR DirectXTex_LIBRARY_DIR DirectXTex_VERSION)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(DirectXTex
REQUIRED_VARS DirectXTex_DIR DirectXTex_INCLUDE_DIR DirectXTex_LIBRARY_DIR
VERSION_VAR DirectXTex_VERSION
)
if(DirectXTex_FOUND)
set(DirectXTex_INCLUDE_DIRS ${modorganizer_INCLUDE_DIR})
endif()
+15
View File
@@ -0,0 +1,15 @@
cmake_minimum_required(VERSION 3.5.0)
project(googletest-download NONE)
include(ExternalProject)
ExternalProject_Add(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG master
SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
+19
View File
@@ -0,0 +1,19 @@
#ifndef ARCHIVEAUTOSERVICE_H
#define ARCHIVEAUTOSERVICE_H
#include <bsapacker/IModDto.h>
#include <bsapacker/IArchiveAutoService.h>
#include <qlibbsarch/BSArchiveAuto.h>
namespace BsaPacker
{
class ArchiveAutoService : public IArchiveAutoService
{
public:
ArchiveAutoService() = default;
~ArchiveAutoService() override = default;
void CreateBSA(BSArchiveAuto* archive, const QString& archiveName, bsa_archive_type_e type) const override;
};
}
#endif // ARCHIVEAUTOSERVICE_H
+27
View File
@@ -0,0 +1,27 @@
#ifndef ARCHIVEBUILDDIRECTOR_H
#define ARCHIVEBUILDDIRECTOR_H
#include "ISettingsService.h"
#include <bsapacker/IArchiveBuilder.h>
#include <bsapacker/IPackerProgressDialogFactory.h>
namespace BsaPacker
{
class ArchiveBuildDirector
{
public:
explicit ArchiveBuildDirector(
const ISettingsService* settingsService,
IArchiveBuilder* archiveFileBuildService);
~ArchiveBuildDirector() = default;
void Construct();
private:
IArchiveBuilder* m_ArchiveFileBuildService = nullptr;
const ISettingsService* m_SettingsService = nullptr;
};
} // namespace BsaPacker
#endif // ARCHIVEBUILDDIRECTOR_H
+27
View File
@@ -0,0 +1,27 @@
#ifndef ARCHIVEBUILDERFACTORY_H
#define ARCHIVEBUILDERFACTORY_H
#include <bsapacker/IArchiveBuilderFactory.h>
#include <bsapacker/IArchiveBuilder.h>
#include <bsapacker/IArchiveBuilderHelper.h>
#include <bsapacker/IModDto.h>
#include <libbsarch/libbsarch.h>
namespace BsaPacker
{
class ArchiveBuilderFactory : public IArchiveBuilderFactory
{
public:
explicit ArchiveBuilderFactory(const IArchiveBuilderHelper* archiveBuilderHelper);
~ArchiveBuilderFactory() override = default;
// IArchiveBuilderFactory interface
[[nodiscard]] std::vector<bsa_archive_type_e> GetArchiveTypes(const IModDto* modDto) const override;
[[nodiscard]] std::unique_ptr<IArchiveBuilder> Create(bsa_archive_type_e archiveType, const IModDto* modDto) const override;
private:
const IArchiveBuilderHelper* m_ArchiveBuilderHelper = nullptr;
};
} // namespace BsaPacker
#endif // ARCHIVEBUILDERFACTORY_H
+37
View File
@@ -0,0 +1,37 @@
#ifndef ARCHIVEBUILDERHELPER_H
#define ARCHIVEBUILDERHELPER_H
#include <bsapacker/IArchiveBuilderHelper.h>
#include <bsapacker/ISettingsService.h>
#include <qlibbsarch/BSArchiveAuto.h>
#include <array>
#include <cstdint>
#include <QDir>
#include <QObject>
#include <QProgressBar>
#include <QString>
#include <QStringList>
namespace BsaPacker
{
class ArchiveBuilderHelper : public IArchiveBuilderHelper
{
public:
ArchiveBuilderHelper(const ISettingsService* settingsService);
~ArchiveBuilderHelper() override = default;
[[nodiscard]] bool isFileIgnorable(const QString&, const QStringList&) const override;
[[nodiscard]] bool isIncompressible(const QString&) const override;
[[nodiscard]] bool isExtensionBlacklisted(const QString&) const override;
[[nodiscard]] uint32_t getFileCount(const QDir&) const override;
[[nodiscard]] QStringList getRootDirectoryFilenames(const QDir&) const override;
const static std::array <QString, 3> INCOMPRESSIBLE_TYPES;
//const static std::array <QString, 2> BLACKLIST;
private:
const ISettingsService* m_SettingsService = nullptr;
};
} // namespace BsaPacker
#endif // ARCHIVEBUILDERHELPER_H
+36
View File
@@ -0,0 +1,36 @@
#ifndef GENERALARCHIVEBUILDER_H
#define GENERALARCHIVEBUILDER_H
#include <bsapacker/IArchiveBuilder.h>
#include <bsapacker/IArchiveBuilderHelper.h>
namespace BsaPacker
{
class GeneralArchiveBuilder : public IArchiveBuilder
{
Q_OBJECT
Q_INTERFACES(BsaPacker::IEmitsValueChanged)
public:
explicit GeneralArchiveBuilder(const IArchiveBuilderHelper* archiveBuilderHelper, const QDir& rootDir);
~GeneralArchiveBuilder() override = default;
uint32_t setFiles() override;
void setShareData(bool value) override;
[[nodiscard]] std::unique_ptr<BSArchiveAuto> getArchive() override;
[[nodiscard]] uint32_t getFileCount() const override;
public Q_SLOTS:
void cancel() override;
Q_SIGNALS:
void valueChanged(int) override;
private:
const IArchiveBuilderHelper* m_ArchiveBuilderHelper = nullptr;
std::unique_ptr<BSArchiveAuto> m_Archive;
bool m_Cancelled;
QDir m_RootDirectory;
};
} // namespace BsaPacker
#endif // GENERALARCHIVEBUILDER_H
+17
View File
@@ -0,0 +1,17 @@
#ifndef IARCHIVEAUTOSERVICE_H
#define IARCHIVEAUTOSERVICE_H
#include <qlibbsarch/BSArchiveAuto.h>
#include <bsapacker/IModDto.h>
namespace BsaPacker
{
class IArchiveAutoService
{
public:
virtual ~IArchiveAutoService() = default;
virtual void CreateBSA(BSArchiveAuto*, const QString&, bsa_archive_type_e) const = 0;
};
}
#endif // IARCHIVEAUTOSERVICE_H
+23
View File
@@ -0,0 +1,23 @@
#ifndef IARCHIVEBUILDER_H
#define IARCHIVEBUILDER_H
#include <bsapacker/IEmitsValueChanged.h>
#include <qlibbsarch/BSArchiveAuto.h>
namespace BsaPacker
{
class IArchiveBuilder : public IEmitsValueChanged
{
Q_OBJECT
Q_INTERFACES(BsaPacker::IEmitsValueChanged)
public:
virtual ~IArchiveBuilder() = default;
virtual uint32_t setFiles() = 0;
virtual void setShareData(bool) = 0;
[[nodiscard]] virtual std::unique_ptr<BSArchiveAuto> getArchive() = 0;
[[nodiscard]] virtual uint32_t getFileCount() const = 0;
};
} // namespace BsaPacker
#endif // IARCHIVEBUILDER_H
@@ -0,0 +1,18 @@
#ifndef IARCHIVEBUILDERFACTORY_H
#define IARCHIVEBUILDERFACTORY_H
#include <bsapacker/IModDto.h>
#include <bsapacker/IArchiveBuilder.h>
namespace BsaPacker
{
class IArchiveBuilderFactory
{
public:
virtual ~IArchiveBuilderFactory() = default;
virtual std::vector<bsa_archive_type_e> GetArchiveTypes(const IModDto* modDto) const = 0;
virtual std::unique_ptr<IArchiveBuilder> Create(bsa_archive_type_e archiveType, const IModDto* modDto) const = 0;
};
}
#endif // IARCHIVEBUILDERFACTORY_H
+23
View File
@@ -0,0 +1,23 @@
#ifndef IARCHIVEBUILDERHELPER_H
#define IARCHIVEBUILDERHELPER_H
#include <QDir>
#include <QString>
#include <QStringList>
#include <cstdint>
namespace BsaPacker
{
class IArchiveBuilderHelper
{
public:
virtual ~IArchiveBuilderHelper() = default;
[[nodiscard]] virtual bool isFileIgnorable(const QString&, const QStringList&) const = 0;
[[nodiscard]] virtual bool isIncompressible(const QString&) const = 0;
[[nodiscard]] virtual bool isExtensionBlacklisted(const QString&) const = 0;
[[nodiscard]] virtual uint32_t getFileCount(const QDir&) const = 0;
[[nodiscard]] virtual QStringList getRootDirectoryFilenames(const QDir&) const = 0;
};
} // namespace BsaPacker
#endif // IARCHIVEBUILDERHELPER_H
@@ -0,0 +1,16 @@
#ifndef IARCHIVEEXTENSIONSERVICE_H
#define IARCHIVEEXTENSIONSERVICE_H
#include <QString>
namespace BsaPacker
{
class IArchiveExtensionService
{
public:
virtual ~IArchiveExtensionService() = default;
virtual QString GetFileExtension() const = 0;
};
}
#endif // IARCHIVEEXTENSIONSERVICE_H
+18
View File
@@ -0,0 +1,18 @@
#ifndef IDUMMYPLUGINLOGIC_H
#define IDUMMYPLUGINLOGIC_H
#include <QString>
#include <array>
namespace BsaPacker
{
class IDummyPluginLogic
{
public:
virtual ~IDummyPluginLogic() = default;
[[nodiscard]] virtual bool canCreateDummyESP(const QString& fileNameNoExtension) const = 0;
[[nodiscard]] virtual bool canCreateDummyESL(const QString& fileNameNoExtension) const = 0;
};
}
#endif // IDUMMYPLUGINLOGIC_H
+17
View File
@@ -0,0 +1,17 @@
#ifndef IDUMMYPLUGINSERVICE_H
#define IDUMMYPLUGINSERVICE_H
#include <QString>
namespace BsaPacker
{
class IDummyPluginService
{
public:
virtual ~IDummyPluginService() = default;
virtual bool CreatePlugin(const QString& modPath,
const QString& archiveNameBase) const = 0;
};
}
#endif // IDUMMYPLUGINSERVICE_H
@@ -0,0 +1,16 @@
#ifndef IDUMMYPLUGINSERVICEFACTORY_H
#define IDUMMYPLUGINSERVICEFACTORY_H
#include <bsapacker/IDummyPluginService.h>
namespace BsaPacker
{
class IDummyPluginServiceFactory
{
public:
virtual ~IDummyPluginServiceFactory() = default;
[[nodiscard]] virtual std::unique_ptr<IDummyPluginService> Create() const = 0;
};
}
#endif // IDUMMYPLUGINSERVICEFACTORY_H
+25
View File
@@ -0,0 +1,25 @@
#ifndef IEMITSVALUECHANGED_H
#define IEMITSVALUECHANGED_H
#include <QObject>
namespace BsaPacker
{
class IEmitsValueChanged : public QObject
{
Q_OBJECT
public:
virtual ~IEmitsValueChanged() = default;
public Q_SLOTS:
virtual void cancel() = 0;
Q_SIGNALS:
virtual void valueChanged(int) = 0;
};
} // namespace BsaPacker
Q_DECLARE_INTERFACE(BsaPacker::IEmitsValueChanged, "IEmitsValueChanged");
#endif // IEMITSVALUECHANGED_H
+16
View File
@@ -0,0 +1,16 @@
#ifndef IFILEWRITERSERVICE_H
#define IFILEWRITERSERVICE_H
#include <string>
namespace BsaPacker
{
class IFileWriterService
{
public:
virtual ~IFileWriterService() = default;
virtual bool Write(const std::string& path, const char* payload, const uint32_t size) const = 0;
};
}
#endif // IFILEWRITERSERVICE_H
@@ -0,0 +1,16 @@
#ifndef IHIDELOOSEASSETSERVICE_H
#define IHIDELOOSEASSETSERVICE_H
#include <QDir>
namespace BsaPacker
{
class IHideLooseAssetService
{
public:
virtual ~IHideLooseAssetService() = default;
virtual bool HideLooseAssets(const QDir& modDirectory) const = 0;
};
}
#endif // IHIDELOOSEASSETSERVICE_H
+20
View File
@@ -0,0 +1,20 @@
#ifndef IMODCONTEXT_H
#define IMODCONTEXT_H
#include <QDir>
#include <QStringList>
namespace BsaPacker
{
class IModContext
{
public:
virtual ~IModContext() = default;
[[nodiscard]] virtual QString GetAbsoluteModPath(const QString& modName) const = 0;
[[nodiscard]] virtual int GetNexusId() const = 0;
[[nodiscard]] virtual QStringList GetPlugins(const QDir& modDirectory) const = 0;
[[nodiscard]] virtual QStringList GetValidMods() const = 0;
};
} // namespace BsaPacker
#endif // IMODCONTEXT_H

Some files were not shown because too many files have changed in this diff Show More