mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-10-10 00:36:40 +00:00
chore: run devtool in dev mode
This commit is contained in:
2
.gitmodules
vendored
2
.gitmodules
vendored
@@ -21,4 +21,4 @@
|
|||||||
url = https://github.com/lz4/lz4.git
|
url = https://github.com/lz4/lz4.git
|
||||||
[submodule "thirdparty/webview"]
|
[submodule "thirdparty/webview"]
|
||||||
path = thirdparty/webview
|
path = thirdparty/webview
|
||||||
url = https://github.com/webview/webview.git
|
url = https://github.com/Laupetin/webview.git
|
||||||
|
@@ -2,18 +2,113 @@
|
|||||||
#include "webview/webview.h"
|
#include "webview/webview.h"
|
||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
||||||
|
|
||||||
#include "Web/ViteAssets.h"
|
|
||||||
#include "Web/Edge/AssetHandlerEdge.h"
|
#include "Web/Edge/AssetHandlerEdge.h"
|
||||||
#include "Web/Gtk/AssetHandlerGtk.h"
|
#include "Web/Gtk/AssetHandlerGtk.h"
|
||||||
|
#include "Web/ViteAssets.h"
|
||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <format>
|
#include <format>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <optional>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
using namespace std::string_literals;
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
#ifdef _DEBUG
|
||||||
|
std::optional<webview::webview> devToolWindow;
|
||||||
|
|
||||||
|
void RunDevToolsWindow(webview::webview& parent)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
auto& newWindow = devToolWindow.emplace(false, nullptr);
|
||||||
|
newWindow.set_title("Devtools");
|
||||||
|
newWindow.set_size(640, 480, WEBVIEW_HINT_NONE);
|
||||||
|
newWindow.set_size(480, 320, WEBVIEW_HINT_MIN);
|
||||||
|
newWindow.navigate(std::format("http://localhost:{}/__devtools__/", VITE_DEV_SERVER_PORT));
|
||||||
|
}
|
||||||
|
catch (const webview::exception& e)
|
||||||
|
{
|
||||||
|
std::cerr << e.what() << '\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int RunMainWindow()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
webview::webview w(true, nullptr);
|
||||||
|
w.set_title("OpenAssetTools ModMan");
|
||||||
|
w.set_size(1280, 640, WEBVIEW_HINT_NONE);
|
||||||
|
w.set_size(480, 320, WEBVIEW_HINT_MIN);
|
||||||
|
|
||||||
|
// A binding that counts up or down and immediately returns the new value.
|
||||||
|
w.bind("greet",
|
||||||
|
[&](const std::string& req) -> std::string
|
||||||
|
{
|
||||||
|
const auto name = req.substr(2, req.size() - 4);
|
||||||
|
return std::format("\"Hello from C++ {}!\"", name);
|
||||||
|
});
|
||||||
|
|
||||||
|
// A binding that creates a new thread and returns the result at a later time.
|
||||||
|
w.bind(
|
||||||
|
"compute",
|
||||||
|
[&](const std::string& id, const std::string& req, void* /*arg*/)
|
||||||
|
{
|
||||||
|
// Create a thread and forget about it for the sake of simplicity.
|
||||||
|
std::thread(
|
||||||
|
[&, id, req]
|
||||||
|
{
|
||||||
|
// Simulate load.
|
||||||
|
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||||
|
// Imagine that req is properly parsed or use your own JSON parser.
|
||||||
|
const auto* result = "42";
|
||||||
|
w.resolve(id, 0, result);
|
||||||
|
})
|
||||||
|
.detach();
|
||||||
|
},
|
||||||
|
nullptr);
|
||||||
|
|
||||||
|
#if defined(WEBVIEW_PLATFORM_WINDOWS) && defined(WEBVIEW_EDGE)
|
||||||
|
edge::InstallCustomProtocolHandler(w);
|
||||||
|
constexpr auto urlPrefix = edge::URL_PREFIX;
|
||||||
|
#elif defined(WEBVIEW_PLATFORM_LINUX) && defined(WEBVIEW_GTK)
|
||||||
|
gtk::InstallCustomProtocolHandler(w);
|
||||||
|
constexpr auto urlPrefix = gtk::URL_PREFIX;
|
||||||
|
#else
|
||||||
|
#error Unsupported platform
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
w.navigate(VITE_DEV_SERVER ? std::format("http://localhost:{}", VITE_DEV_SERVER_PORT) : std::format("{}index.html", urlPrefix));
|
||||||
|
|
||||||
|
if (VITE_DEV_SERVER)
|
||||||
|
{
|
||||||
|
w.dispatch(
|
||||||
|
[&w]
|
||||||
|
{
|
||||||
|
RunDevToolsWindow(w);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
w.navigate(std::format("{}index.html", urlPrefix));
|
||||||
|
#endif
|
||||||
|
w.run();
|
||||||
|
}
|
||||||
|
catch (const webview::exception& e)
|
||||||
|
{
|
||||||
|
std::cerr << e.what() << '\n';
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
} // namespace
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
int WINAPI WinMain(HINSTANCE /*hInst*/, HINSTANCE /*hPrevInst*/, LPSTR /*lpCmdLine*/, int /*nCmdShow*/)
|
int WINAPI WinMain(HINSTANCE /*hInst*/, HINSTANCE /*hPrevInst*/, LPSTR /*lpCmdLine*/, int /*nCmdShow*/)
|
||||||
{
|
{
|
||||||
@@ -22,63 +117,7 @@ int main()
|
|||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
try
|
const auto result = RunMainWindow();
|
||||||
{
|
|
||||||
long count = 0;
|
|
||||||
webview::webview w(true, nullptr);
|
|
||||||
w.set_title("OpenAssetTools ModMan");
|
|
||||||
w.set_size(480, 320, WEBVIEW_HINT_NONE);
|
|
||||||
w.set_size(480, 320, WEBVIEW_HINT_MIN);
|
|
||||||
|
|
||||||
// A binding that counts up or down and immediately returns the new value.
|
return result;
|
||||||
w.bind("greet",
|
|
||||||
[&](const std::string& req) -> std::string
|
|
||||||
{
|
|
||||||
const auto name = req.substr(2, req.size() - 4);
|
|
||||||
return std::format("\"Hello from C++ {}!\"", name);
|
|
||||||
});
|
|
||||||
|
|
||||||
// A binding that creates a new thread and returns the result at a later time.
|
|
||||||
w.bind(
|
|
||||||
"compute",
|
|
||||||
[&](const std::string& id, const std::string& req, void* /*arg*/)
|
|
||||||
{
|
|
||||||
// Create a thread and forget about it for the sake of simplicity.
|
|
||||||
std::thread(
|
|
||||||
[&, id, req]
|
|
||||||
{
|
|
||||||
// Simulate load.
|
|
||||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
|
||||||
// Imagine that req is properly parsed or use your own JSON parser.
|
|
||||||
const auto* result = "42";
|
|
||||||
w.resolve(id, 0, result);
|
|
||||||
})
|
|
||||||
.detach();
|
|
||||||
},
|
|
||||||
nullptr);
|
|
||||||
|
|
||||||
#if defined(WEBVIEW_PLATFORM_WINDOWS) && defined(WEBVIEW_EDGE)
|
|
||||||
edge::InstallCustomProtocolHandler(w);
|
|
||||||
constexpr auto urlPrefix = edge::URL_PREFIX;
|
|
||||||
#elif defined(WEBVIEW_PLATFORM_LINUX) && defined(WEBVIEW_GTK)
|
|
||||||
gtk::InstallCustomProtocolHandler(w);
|
|
||||||
constexpr auto urlPrefix = gtk::URL_PREFIX;
|
|
||||||
#else
|
|
||||||
#error Unsupported platform
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
|
||||||
w.navigate(VITE_DEV_SERVER ? std::format("http://localhost:{}", VITE_DEV_SERVER_PORT) : std::format("{}index.html", urlPrefix));
|
|
||||||
#else
|
|
||||||
w.navigate(std::format("{}index.html", urlPrefix));
|
|
||||||
#endif
|
|
||||||
w.run();
|
|
||||||
}
|
|
||||||
catch (const webview::exception& e)
|
|
||||||
{
|
|
||||||
std::cerr << e.what() << '\n';
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
2
thirdparty/webview
vendored
2
thirdparty/webview
vendored
Submodule thirdparty/webview updated: 55b438dc11...1dfdba9f2b
Reference in New Issue
Block a user