mirror of
https://github.com/redstrate/Novus.git
synced 2025-04-27 06:07:45 +00:00
Add support for adding filenames via HTTP
Meant to be used by the new Dalamud plugin
This commit is contained in:
parent
cce7bb8e0a
commit
24461f362a
3 changed files with 90 additions and 33 deletions
|
@ -35,7 +35,7 @@ ecm_setup_version(${PROJECT_VERSION}
|
|||
VERSION_HEADER ${CMAKE_CURRENT_BINARY_DIR}/novus-version.h
|
||||
)
|
||||
|
||||
find_package(Qt6 ${QT_MIN_VERSION} COMPONENTS Core Widgets Concurrent Core5Compat Sql CONFIG REQUIRED)
|
||||
find_package(Qt6 ${QT_MIN_VERSION} COMPONENTS Core Widgets Concurrent Core5Compat Sql HttpServer CONFIG REQUIRED)
|
||||
find_package(KF6 ${KF_MIN_VERSION} REQUIRED COMPONENTS CoreAddons Config XmlGui)
|
||||
find_package(Vulkan REQUIRED)
|
||||
find_package(glm REQUIRED)
|
||||
|
@ -44,12 +44,6 @@ if (NOT TARGET glm::glm)
|
|||
endif()
|
||||
|
||||
add_subdirectory(extern)
|
||||
|
||||
# macos
|
||||
if(APPLE)
|
||||
set(USE_STANDALONE_WINDOW TRUE)
|
||||
endif()
|
||||
|
||||
add_subdirectory(renderer)
|
||||
add_subdirectory(karuku)
|
||||
add_subdirectory(armoury)
|
||||
|
|
|
@ -11,7 +11,7 @@ target_include_directories(novus-sagasu-static PRIVATE include)
|
|||
add_executable(novus-sagasu-indexer)
|
||||
target_sources(novus-sagasu-indexer PRIVATE
|
||||
src/indexer.cpp)
|
||||
target_link_libraries(novus-sagasu-indexer PRIVATE novus-sagasu-static)
|
||||
target_link_libraries(novus-sagasu-indexer PRIVATE Qt6::HttpServer novus-sagasu-static)
|
||||
target_include_directories(novus-sagasu-indexer PRIVATE include)
|
||||
|
||||
add_executable(novus-sagasu)
|
||||
|
|
|
@ -2,7 +2,13 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#include "hashdatabase.h"
|
||||
#include "physis.hpp"
|
||||
#include "settings.h"
|
||||
#include <QCommandLineParser>
|
||||
#include <QCoreApplication>
|
||||
#include <QHttpServer>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonParseError>
|
||||
|
||||
const std::array known_folders{"common",
|
||||
"common/font",
|
||||
|
@ -147,14 +153,95 @@ const std::array common_font{"common/VulgarWordsFilter.dic",
|
|||
"common/font/Jupiter_90_lobby.fdt",
|
||||
"common/font/Jupiter_45_lobby.fdt"};
|
||||
|
||||
static std::optional<QJsonObject> byteArrayToJsonObject(const QByteArray &arr)
|
||||
{
|
||||
QJsonParseError err;
|
||||
const auto json = QJsonDocument::fromJson(arr, &err);
|
||||
if (err.error || !json.isObject())
|
||||
return std::nullopt;
|
||||
return json.object();
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QCoreApplication app(argc, argv);
|
||||
|
||||
QCommandLineParser parser;
|
||||
|
||||
QCommandLineOption indexExcelOption(QStringLiteral("excel"), QStringLiteral("Enable the indexing of known Excel files, will take a very long time."));
|
||||
parser.addOption(indexExcelOption);
|
||||
|
||||
QCommandLineOption listenOption(QStringLiteral("listen"), QStringLiteral("Listen for incoming filename requests, for the SqPackIndexer Dalamud plugin."));
|
||||
parser.addOption(listenOption);
|
||||
|
||||
parser.process(app);
|
||||
|
||||
HashDatabase database;
|
||||
|
||||
if (parser.isSet(indexExcelOption)) {
|
||||
const QString gameDir{getGameDirectory()};
|
||||
const std::string gameDirStd{gameDir.toStdString()};
|
||||
auto data = physis_gamedata_initialize(gameDirStd.c_str());
|
||||
|
||||
auto sheetNames = physis_gamedata_get_all_sheet_names(data);
|
||||
|
||||
for (int i = 0; i < sheetNames.name_count; i++) {
|
||||
auto sheetName = sheetNames.names[i];
|
||||
auto nameLowercase = QString::fromStdString(sheetName).toLower().toStdString();
|
||||
|
||||
QString headerName = QStringLiteral("exd/") + QLatin1String(nameLowercase.c_str()) + QStringLiteral(".exh");
|
||||
|
||||
database.addFile(headerName);
|
||||
|
||||
std::string headerNameStd = headerName.toStdString();
|
||||
auto exh = physis_parse_excel_sheet_header(physis_gamedata_extract_file(data, headerNameStd.c_str()));
|
||||
for (int j = 0; j < exh->page_count; j++) {
|
||||
for (int z = 0; z < exh->language_count; z++) {
|
||||
std::string path = physis_gamedata_get_exd_filename(nameLowercase.c_str(), exh, exh->languages[z], j);
|
||||
|
||||
database.addFile(QStringLiteral("exd/") + QString::fromStdString(path));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (parser.isSet(listenOption)) {
|
||||
QHttpServer server;
|
||||
|
||||
server.route(QStringLiteral("/add_hash"), QHttpServerRequest::Method::Post, [&database](const QHttpServerRequest &request) {
|
||||
const auto json = byteArrayToJsonObject(request.body());
|
||||
if (!json)
|
||||
return QHttpServerResponse(QHttpServerResponder::StatusCode::BadRequest);
|
||||
|
||||
const QString filename = (*json)[QLatin1String("filename")].toString();
|
||||
int lastSlashIndex = filename.lastIndexOf(QStringLiteral("/"));
|
||||
QString folder = filename.left(lastSlashIndex);
|
||||
|
||||
qInfo() << "Adding hash for file" << filename;
|
||||
|
||||
qInfo() << "Adding hash for folder" << folder;
|
||||
|
||||
database.addFile(filename);
|
||||
database.addFolder(folder);
|
||||
|
||||
return QHttpServerResponse(QHttpServerResponder::StatusCode::Ok);
|
||||
});
|
||||
|
||||
server.listen(QHostAddress::Any, 3500);
|
||||
|
||||
qInfo() << "Now listening on port 3500.";
|
||||
|
||||
return QCoreApplication::exec();
|
||||
}
|
||||
|
||||
for (auto &folder : known_folders) {
|
||||
database.addFolder(QLatin1String(folder));
|
||||
}
|
||||
|
||||
qInfo() << "No special options set, adding all known static files.";
|
||||
|
||||
for (auto &file : common_font) {
|
||||
database.addFile(QLatin1String(file));
|
||||
}
|
||||
|
@ -170,29 +257,5 @@ int main(int argc, char *argv[])
|
|||
database.addFile(QStringLiteral("chara/xls/charamake/human.cmp"));
|
||||
database.addFile(QStringLiteral("chara/human/c0101/skeleton/base/b0001/skl_c0101b0001.sklb"));
|
||||
|
||||
/*const QString gameDir{getGameDirectory()};
|
||||
const std::string gameDirStd{gameDir.toStdString()};
|
||||
auto data = physis_gamedata_initialize(gameDirStd.c_str());
|
||||
|
||||
addPath(QStringLiteral("common/font/AXIS_12.fdt"));
|
||||
|
||||
addPath(QStringLiteral("exd/root.exl"));
|
||||
|
||||
auto sheetNames = physis_gamedata_get_all_sheet_names(data);
|
||||
|
||||
for(int i = 0; i < sheetNames.name_count; i++) {
|
||||
auto sheetName = sheetNames.names[i];
|
||||
auto nameLowercase = QString::fromStdString(sheetName).toLower().toStdString();
|
||||
|
||||
addPath(QStringLiteral("exd/") + QLatin1String(nameLowercase.c_str()) + QStringLiteral(".exh"));
|
||||
|
||||
auto exh = physis_gamedata_read_excel_sheet_header(data, sheetName);
|
||||
for (int j = 0; j < exh->page_count; j++) {
|
||||
for (int z = 0; z < exh->language_count; z++) {
|
||||
std::string path = physis_gamedata_get_exd_filename(nameLowercase.c_str(), exh, exh->languages[z], j);
|
||||
|
||||
addPath(QStringLiteral("exd/") + QString::fromStdString(path));
|
||||
}
|
||||
}
|
||||
}*/
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue