From 9de2bed6537e3a62cae03efede9750b8824236a3 Mon Sep 17 00:00:00 2001 From: Fanda Vacek Date: Sun, 27 Aug 2023 20:12:25 +0200 Subject: [PATCH] Invalid path for receipts #946 fixed --- .../src/framework/application.cpp | 1 - .../src/framework/application.h | 2 -- libqf/libqfqmlwidgets/src/framework/plugin.cpp | 18 ++++++++++++------ libqf/libqfqmlwidgets/src/framework/plugin.h | 8 +++++--- .../Core/src/widgets/reportssettingspage.cpp | 3 ++- .../Core/src/widgets/settingsdialog.cpp | 2 -- .../Event/src/services/oresultsclient.cpp | 1 + .../Receipts/src/receiptssettingspage.cpp | 6 ++---- .../quickevent/plugins/Runs/src/runswidget.cpp | 4 +++- 9 files changed, 25 insertions(+), 20 deletions(-) diff --git a/libqf/libqfqmlwidgets/src/framework/application.cpp b/libqf/libqfqmlwidgets/src/framework/application.cpp index 2149beb7e..feb3929e9 100644 --- a/libqf/libqfqmlwidgets/src/framework/application.cpp +++ b/libqf/libqfqmlwidgets/src/framework/application.cpp @@ -15,7 +15,6 @@ using namespace qf::qmlwidgets::framework; Application::Application(int &argc, char **argv) : Super(argc, argv) { - m_pluginDataDir = ":/quickevent"; } Application::~Application() diff --git a/libqf/libqfqmlwidgets/src/framework/application.h b/libqf/libqfqmlwidgets/src/framework/application.h index 2fb4294a2..30bb60396 100644 --- a/libqf/libqfqmlwidgets/src/framework/application.h +++ b/libqf/libqfqmlwidgets/src/framework/application.h @@ -26,7 +26,6 @@ class QFQMLWIDGETS_DECL_EXPORT Application : public QApplication ~Application() Q_DECL_OVERRIDE; public: static Application* instance(bool must_exist = true); - QString pluginDataDir() {return m_pluginDataDir;} MainWindow* frameWork(); void loadStyleSheet(const QString &file = QString()); @@ -37,7 +36,6 @@ public slots: protected: QJsonDocument profile(); protected: - QString m_pluginDataDir; QJsonDocument m_profile; bool m_profileLoaded = false; MainWindow* m_frameWork = nullptr; diff --git a/libqf/libqfqmlwidgets/src/framework/plugin.cpp b/libqf/libqfqmlwidgets/src/framework/plugin.cpp index 8849e4d5d..95a3da117 100644 --- a/libqf/libqfqmlwidgets/src/framework/plugin.cpp +++ b/libqf/libqfqmlwidgets/src/framework/plugin.cpp @@ -8,6 +8,7 @@ #include #include #include +#include using namespace qf::qmlwidgets::framework; @@ -24,6 +25,8 @@ Plugin::Plugin(QObject *parent) : QObject(parent) { qfLogFuncFrame(); + if(m_reportsDir.isEmpty()) + m_reportsDir = QCoreApplication::applicationDirPath() + "/reports"; } Plugin::~Plugin() @@ -31,12 +34,17 @@ Plugin::~Plugin() qfLogFuncFrame() << this; } +QString Plugin::pluginDataDir() +{ + static QString dir = ":/quickevent"; + return dir; +} + QString Plugin::findReportFile(const QString &report_file_path) const { QStringList search_paths; - if(!m_reportsDir.isEmpty()) - search_paths << m_reportsDir + '/' + m_featureId + "/qml/reports"; - search_paths << qmlReportsDir(); + search_paths << reportsDir() + '/' + m_featureId + "/qml/reports"; + //search_paths << qmlReportsDir(); for(const QString &dir : search_paths) { auto fn = dir + '/' + report_file_path; //qfInfo() << "dir:" << dir << "try:" << fn; @@ -54,9 +62,7 @@ QList Plugin::listReportFiles(const QString &report_dir) { QList report_files; QStringList search_paths; - if(!m_reportsDir.isEmpty()) - search_paths << m_reportsDir + '/' + m_featureId + "/qml/reports"; - search_paths << qmlReportsDir(); + search_paths << reportsDir() + '/' + m_featureId + "/qml/reports"; for(const QString &dir : search_paths) { QDirIterator it(dir + '/' + report_dir, QDirIterator::NoIteratorFlags); while (it.hasNext()) { diff --git a/libqf/libqfqmlwidgets/src/framework/plugin.h b/libqf/libqfqmlwidgets/src/framework/plugin.h index e9c067a93..9de6f0289 100644 --- a/libqf/libqfqmlwidgets/src/framework/plugin.h +++ b/libqf/libqfqmlwidgets/src/framework/plugin.h @@ -2,7 +2,6 @@ #define QF_QMLWIDGETS_FRAMEWORK_PLUGIN_H #include "../qmlwidgetsglobal.h" -#include "application.h" #include @@ -22,12 +21,14 @@ class QFQMLWIDGETS_DECL_EXPORT Plugin : public QObject explicit Plugin(QObject *parent = nullptr); ~Plugin() Q_DECL_OVERRIDE; + static QString pluginDataDir(); + static void setReportsDir(const QString &dir) { m_reportsDir = dir; } static QString reportsDir() { return m_reportsDir; } - QString homeDir() const { return qf::qmlwidgets::framework::Application::instance()->pluginDataDir() + '/' + featureId(); } + QString homeDir() const { return pluginDataDir() + '/' + featureId(); } QString qmlDir() const { return homeDir() + "/qml"; } - QString qmlReportsDir() const { return qmlDir() + "/reports"; } + //QString qmlReportsDir() const { return qmlDir() + "/reports"; } QString featureId() const { return m_featureId; } //QString settingsDir() const { return "plugin/" + featureId(); } QString findReportFile(const QString &report_file_path) const; @@ -45,6 +46,7 @@ class QFQMLWIDGETS_DECL_EXPORT Plugin : public QObject Q_SIGNAL void installed(); private: QString m_featureId; + static QString m_pluginDataDir; static QString m_reportsDir; }; diff --git a/quickevent/app/quickevent/plugins/Core/src/widgets/reportssettingspage.cpp b/quickevent/app/quickevent/plugins/Core/src/widgets/reportssettingspage.cpp index 5e2c0efb1..8363212df 100644 --- a/quickevent/app/quickevent/plugins/Core/src/widgets/reportssettingspage.cpp +++ b/quickevent/app/quickevent/plugins/Core/src/widgets/reportssettingspage.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -71,7 +72,7 @@ QString ReportsSettingsPage::reportsDirectory() const ReportsSettings settings; auto dir = settings.reportsDirectory(); if(dir.isEmpty()) - dir = QCoreApplication::applicationDirPath() + "/reports"; + dir = qf::qmlwidgets::framework::Plugin::reportsDir(); return dir; } diff --git a/quickevent/app/quickevent/plugins/Core/src/widgets/settingsdialog.cpp b/quickevent/app/quickevent/plugins/Core/src/widgets/settingsdialog.cpp index 68b8d43ef..be8ccb568 100644 --- a/quickevent/app/quickevent/plugins/Core/src/widgets/settingsdialog.cpp +++ b/quickevent/app/quickevent/plugins/Core/src/widgets/settingsdialog.cpp @@ -2,7 +2,6 @@ #include "ui_settingsdialog.h" #include "settingspage.h" -#include "reportssettingspage.h" #include #include @@ -13,7 +12,6 @@ #include #include #include -//#include namespace Core { diff --git a/quickevent/app/quickevent/plugins/Event/src/services/oresultsclient.cpp b/quickevent/app/quickevent/plugins/Event/src/services/oresultsclient.cpp index d15ad95db..08a4c56d7 100644 --- a/quickevent/app/quickevent/plugins/Event/src/services/oresultsclient.cpp +++ b/quickevent/app/quickevent/plugins/Event/src/services/oresultsclient.cpp @@ -13,6 +13,7 @@ #include #include +#include #include #include #include diff --git a/quickevent/app/quickevent/plugins/Receipts/src/receiptssettingspage.cpp b/quickevent/app/quickevent/plugins/Receipts/src/receiptssettingspage.cpp index 07c4cb781..60dd3fc8d 100644 --- a/quickevent/app/quickevent/plugins/Receipts/src/receiptssettingspage.cpp +++ b/quickevent/app/quickevent/plugins/Receipts/src/receiptssettingspage.cpp @@ -23,10 +23,6 @@ ReceiptsSettingsPage::ReceiptsSettingsPage(QWidget *parent) ui->cbxWhenRunnerNotFound->setCurrentIndex(0); connect(ui->btPrinterOptions, &QAbstractButton::clicked, this, &ReceiptsSettingsPage::onPrinterOptionsClicked); - - loadReceptList(); - - QTimer::singleShot(0, this, &ReceiptsSettingsPage::load); } ReceiptsSettingsPage::~ReceiptsSettingsPage() @@ -36,6 +32,7 @@ ReceiptsSettingsPage::~ReceiptsSettingsPage() void ReceiptsSettingsPage::load() { + loadReceptList(); ReceiptsSettings settings; ui->chkAutoPrint->setChecked(settings.isAutoPrint()); ui->chkThisReaderOnly->setChecked(settings.isThisReaderOnly()); @@ -81,6 +78,7 @@ void ReceiptsSettingsPage::save() void ReceiptsSettingsPage::loadReceptList() { + qfLogFuncFrame(); ui->cbxReceipt->clear(); auto *receipts_plugin = qf::qmlwidgets::framework::getPlugin(); for(const auto &i : receipts_plugin->listReportFiles("receipts")) { diff --git a/quickevent/app/quickevent/plugins/Runs/src/runswidget.cpp b/quickevent/app/quickevent/plugins/Runs/src/runswidget.cpp index bd1dcc962..7ab618c29 100644 --- a/quickevent/app/quickevent/plugins/Runs/src/runswidget.cpp +++ b/quickevent/app/quickevent/plugins/Runs/src/runswidget.cpp @@ -386,7 +386,9 @@ static bool list_length_greater_than(const QList &lst1, const QList &l static void shuffle(QList &lst) { - std::random_shuffle(lst.begin(), lst.end()); + std::random_device rd; + std::mt19937 g(rd()); + std::shuffle(lst.begin(), lst.end(), g); } QList< QList > RunsWidget::runnersByClubSortedByCount(int stage_id, int class_id, QMap &runner_id_to_club)