This commit is contained in:
Arnaud 2026-01-22 17:11:17 +04:00
parent e0dc9344ea
commit 4b6eccbd37
No known key found for this signature in database
GPG Key ID: 20E40A5D3110766F
3 changed files with 46 additions and 70 deletions

View File

@ -1,18 +1,17 @@
#include "mainwindow.h"
#include <QApplication>
#include <QDir>
#include <QDebug>
#include <QDir>
#include <iostream>
#include <memory>
// Replace CoreManager with direct C API functions
extern "C" {
void logos_core_set_plugins_dir(const char* plugins_dir);
void logos_core_start();
void logos_core_cleanup();
char** logos_core_get_loaded_plugins();
int logos_core_load_plugin(const char* plugin_name);
void logos_core_set_plugins_dir(const char* plugins_dir);
void logos_core_start();
void logos_core_cleanup();
char** logos_core_get_loaded_plugins();
int logos_core_load_plugin(const char* plugin_name);
}
// Helper function to convert C-style array to QStringList
@ -26,8 +25,7 @@ QStringList convertPluginsToStringList(char** plugins) {
return result;
}
int main(int argc, char *argv[])
{
int main(int argc, char* argv[]) {
// Create QApplication first
QApplication app(argc, argv);
@ -42,30 +40,30 @@ int main(int argc, char *argv[])
// Explicitly load plugins in specified order
std::cout << "Loading plugins in specified order..." << std::endl;
// Load capability_module plugin first
if (logos_core_load_plugin("capability_module")) {
std::cout << "Successfully loaded capability_module plugin" << std::endl;
} else {
std::cerr << "Failed to load capability_module plugin" << std::endl;
}
// Load storage_module plugin second
if (logos_core_load_plugin("storage_module")) {
std::cout << "Successfully loaded storage_module plugin" << std::endl;
} else {
std::cerr << "Failed to load storage_module plugin" << std::endl;
}
// Print all loaded plugins
char** loadedPlugins = logos_core_get_loaded_plugins();
QStringList plugins = convertPluginsToStringList(loadedPlugins);
if (plugins.isEmpty()) {
qInfo() << "No plugins loaded.";
} else {
qInfo() << "Currently loaded plugins:";
for (const QString &plugin : plugins) {
for (const QString& plugin : plugins) {
qInfo() << " -" << plugin;
}
qInfo() << "Total plugins:" << plugins.size();
@ -75,7 +73,7 @@ int main(int argc, char *argv[])
MainWindow window;
window.show();
// Run the application
int result = app.exec();
@ -85,6 +83,7 @@ int main(int argc, char *argv[])
// Cleanup core before exit
logos_core_cleanup();
return result;
}
}

View File

@ -1,43 +1,30 @@
#include "mainwindow.h"
#include <QApplication>
#include <QCoreApplication>
#include <QPluginLoader>
#include <QDebug>
#include <QLabel>
#include <QPluginLoader>
#include <QVBoxLayout>
#include <QDir>
#include <QCloseEvent>
extern "C" {
void logos_core_cleanup();
void logos_core_cleanup();
}
void MainWindow::cleanup()
{
void MainWindow::cleanup() {
qDebug() << "MainWindow: Cleaning up before exit...";
if (storageWidget) {
bool running = false;
if (storageWidget) {
QMetaObject::invokeMethod(storageWidget, "isStorageRunning",
Qt::DirectConnection,
Q_RETURN_ARG(bool, running));
}
if (storageWidget) {
qDebug() << "MainWindow: Stopping Storage before destroying...";
if (running) {
qDebug() << "MainWindow: Stopping Storage before destroying...";
QEventLoop loop;
QObject::connect(storageWidget, SIGNAL(storageStop()), &loop, SLOT(quit()));
QMetaObject::invokeMethod(storageWidget, "stopStorage", Qt::QueuedConnection);
loop.exec();
QEventLoop loop;
QObject::connect(storageWidget, SIGNAL(storageStop()), &loop, SLOT(quit()));
QMetaObject::invokeMethod(storageWidget, "stopStorage", Qt::QueuedConnection);
loop.exec();
qDebug() << "MainWindow: Storage stopped.";
}
qDebug() << "MainWindow: Storage stopped.";
qDebug() << "MainWindow: Destroying Storage...";
QEventLoop loop;
QObject::connect(storageWidget, SIGNAL(storageCleanup()), &loop, SLOT(quit()));
QMetaObject::invokeMethod(storageWidget, "destroy", Qt::QueuedConnection);
loop.exec();
@ -46,27 +33,20 @@ void MainWindow::cleanup()
}
}
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setupUi();
}
MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) { setupUi(); }
MainWindow::~MainWindow()
{
}
MainWindow::~MainWindow() {}
void MainWindow::setupUi()
{
void MainWindow::setupUi() {
// Determine the appropriate plugin extension based on the platform
QString pluginExtension;
#if defined(Q_OS_WIN)
pluginExtension = ".dll";
#elif defined(Q_OS_MAC)
pluginExtension = ".dylib";
#else // Linux and other Unix-like systems
pluginExtension = ".so";
#endif
#if defined(Q_OS_WIN)
pluginExtension = ".dll";
#elif defined(Q_OS_MAC)
pluginExtension = ".dylib";
#else // Linux and other Unix-like systems
pluginExtension = ".so";
#endif
// Load the storage_ui plugin with the appropriate extension
QString pluginPath = QCoreApplication::applicationDirPath() + "/../storage_ui" + pluginExtension;
@ -78,9 +58,7 @@ void MainWindow::setupUi()
QObject* plugin = loader.instance();
if (plugin) {
// Try to create the storage widget using the plugin's createWidget method
QMetaObject::invokeMethod(plugin, "createWidget",
Qt::DirectConnection,
Q_RETURN_ARG(QWidget*, widget));
QMetaObject::invokeMethod(plugin, "createWidget", Qt::DirectConnection, Q_RETURN_ARG(QWidget*, widget));
}
}
@ -92,7 +70,7 @@ void MainWindow::setupUi()
qWarning() << "Failed to load storage UI plugin from:" << pluginPath;
qWarning() << "Error:" << loader.errorString();
qWarning() << "================================================";
// Fallback: show a message when plugin is not found
QWidget* fallbackWidget = new QWidget(this);
QVBoxLayout* layout = new QVBoxLayout(fallbackWidget);
@ -108,6 +86,6 @@ void MainWindow::setupUi()
}
// Set window title and size
setWindowTitle("Logos Storage UI App");
// resize(800, 600);
setWindowTitle("Logos Storage UI App !");
resize(800, 600);
}

View File

@ -5,20 +5,19 @@
class QCloseEvent;
class MainWindow : public QMainWindow
{
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
public:
MainWindow(QWidget* parent = nullptr);
~MainWindow();
void cleanup();
private:
private:
void setupUi();
void setupMenu();
private:
QWidget *storageWidget = nullptr;
QWidget* storageWidget = nullptr;
};
#endif // MAINWINDOW_H