Skip to content

Commit

Permalink
Repository system: OK.
Browse files Browse the repository at this point in the history
  • Loading branch information
Unarelith committed May 6, 2020
1 parent 4cb8607 commit 19577c2
Show file tree
Hide file tree
Showing 12 changed files with 73 additions and 63 deletions.
1 change: 1 addition & 0 deletions source/ContentData.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ class ContentData : public QObject {
ContentMod *getMod(unsigned int id) { return getItem(id, m_modList); }
ContentModVersion *getModVersion(unsigned int id) { return getItem(id, m_modVersionList); }
ContentRepository *getRepository(unsigned int id) { return getItem(id, m_repositoryList); }
ContentRepository *getRepositoryFromUuid(const QUuid &uuid) { for (auto &it : m_repositoryList) if (it.second.uuid() == uuid) return &it.second; return nullptr; }

void setUser(unsigned int id, const ContentUser &user) { setItem(id, user, m_userList); }
void setInstance(unsigned int id, const ContentInstance &instance) { setItem(id, instance, m_instanceList); }
Expand Down
1 change: 1 addition & 0 deletions source/ContentItem.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#define CONTENTITEM_HPP_

#include <QSqlQuery>
#include <QUuid>
#include <QVariant>

class ContentItem {
Expand Down
41 changes: 22 additions & 19 deletions source/DatabaseLoader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,25 +31,28 @@ using namespace std::placeholders;
void DatabaseLoader::update() const {
emit updateStarted();

updateModel<ContentUser>("/api/user",
std::bind(&ContentData::getUser, &m_data, _1),
std::bind(&ContentData::setUser, &m_data, _1, _2));

updateModel<ContentNewsArticle>("/api/news",
std::bind(&ContentData::getNewsArticle, &m_data, _1),
std::bind(&ContentData::setNewsArticle, &m_data, _1, _2));

updateModel<ContentEngineVersion>("/api/version",
std::bind(&ContentData::getEngineVersion, &m_data, _1),
std::bind(&ContentData::setEngineVersion, &m_data, _1, _2));

updateModel<ContentMod>("/api/mod",
std::bind(&ContentData::getMod, &m_data, _1),
std::bind(&ContentData::setMod, &m_data, _1, _2));

updateModel<ContentModVersion>("/api/mod/version",
std::bind(&ContentData::getModVersion, &m_data, _1),
std::bind(&ContentData::setModVersion, &m_data, _1, _2));
const auto &repositoryList = m_data.repositoryList();
for (auto &it : repositoryList) {
updateModel<ContentUser>(it.second, "/api/user",
std::bind(&ContentData::getUser, &m_data, _1),
std::bind(&ContentData::setUser, &m_data, _1, _2));

updateModel<ContentNewsArticle>(it.second, "/api/news",
std::bind(&ContentData::getNewsArticle, &m_data, _1),
std::bind(&ContentData::setNewsArticle, &m_data, _1, _2));

updateModel<ContentEngineVersion>(it.second, "/api/version",
std::bind(&ContentData::getEngineVersion, &m_data, _1),
std::bind(&ContentData::setEngineVersion, &m_data, _1, _2));

updateModel<ContentMod>(it.second, "/api/mod",
std::bind(&ContentData::getMod, &m_data, _1),
std::bind(&ContentData::setMod, &m_data, _1, _2));

updateModel<ContentModVersion>(it.second, "/api/mod/version",
std::bind(&ContentData::getModVersion, &m_data, _1),
std::bind(&ContentData::setModVersion, &m_data, _1, _2));
}

emit updateFinished();
}
Expand Down
7 changes: 5 additions & 2 deletions source/DatabaseLoader.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#include <QThread>

#include "Session.hpp"
#include "ContentRepository.hpp"

class ContentData;

Expand All @@ -53,12 +54,12 @@ class DatabaseLoader : public QObject {
ContentData &m_data;

template<typename T, typename F1, typename F2>
void updateModel(const QString &apiEndpoint, const F1 &getModel, const F2 &setModel) const {
void updateModel(const ContentRepository &repository, const QString &apiEndpoint, const F1 &getModel, const F2 &setModel) const {
if (QThread::currentThread()->isInterruptionRequested())
return;

Session session;
QJsonDocument json = session.get(apiEndpoint);
QJsonDocument json = session.get(repository.url().toString() + apiEndpoint);
QJsonArray array = json.array();
if (array.isEmpty())
return;
Expand All @@ -74,11 +75,13 @@ class DatabaseLoader : public QObject {

if (model) {
model->loadFromJson(jsonObject, m_data);
model->set("repository_uuid", repository.uuid());
model->updateDatabaseTable();
model->writeToDatabase();
}
else {
T model{jsonObject, m_data};
model.set("repository_uuid", repository.uuid());
model.updateDatabaseTable();
model.writeToDatabase();

Expand Down
11 changes: 9 additions & 2 deletions source/EngineVersionTabWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
#include "EngineVersionTabWidget.hpp"

EngineVersionTabWidget::EngineVersionTabWidget(ContentData &data, QWidget *parent) : QWidget(parent), m_data(data) {
m_versionListWidget.setHeaderLabels({"", tr("ID"), tr("Name"), tr("Creation date")});
m_versionListWidget.setHeaderLabels({"", tr("ID"), tr("Name"), tr("Repository"), tr("Creation date")});
m_versionListWidget.setRootIsDecorated(false);
m_versionListWidget.setSortingEnabled(true);
m_versionListWidget.setContextMenuPolicy(Qt::CustomContextMenu);
Expand Down Expand Up @@ -63,7 +63,14 @@ void EngineVersionTabWidget::update() {

item->setText(1, QString::number(it.second.id()));
item->setText(2, it.second.name());
item->setText(3, it.second.date().toString());
item->setText(4, it.second.date().toString());

QUuid repositoryUuid = it.second.get("repository_uuid").toUuid();
ContentRepository *repository = m_data.getRepositoryFromUuid(repositoryUuid);
if (repository)
item->setText(3, repository->name());
else
item->setText(3, "N/A");
}
}

Expand Down
5 changes: 1 addition & 4 deletions source/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,11 @@
#include "MainWindow.hpp"
#include "RepositoryWindow.hpp"

MainWindow::MainWindow(const QString &apiSource) : QMainWindow(nullptr, Qt::Dialog) {
MainWindow::MainWindow() : QMainWindow(nullptr, Qt::Dialog) {
setWindowTitle("OpenMiner Launcher");
setFocusPolicy(Qt::ClickFocus);
resize(1280, 720);

if (!apiSource.isEmpty())
Session::baseUrl = apiSource;

openDatabase();

setupStatusBar();
Expand Down
2 changes: 1 addition & 1 deletion source/MainWindow.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class MainWindow : public QMainWindow {
Q_OBJECT

public:
MainWindow(const QString &apiSource);
MainWindow();

void closeEvent(QCloseEvent *event) override;
void keyPressEvent(QKeyEvent *event) override;
Expand Down
17 changes: 12 additions & 5 deletions source/ModTabWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
#include "ModTabWidget.hpp"

ModTabWidget::ModTabWidget(ContentData &data, QWidget *parent) : QWidget(parent), m_data(data) {
m_modListWidget.setHeaderLabels({"", tr("ID"), tr("Name"), tr("Author"), tr("Latest installed"), tr("Latest version"), tr("Creation date"), tr("Updated")});
m_modListWidget.setHeaderLabels({"", tr("ID"), tr("Name"), tr("Author"), tr("Latest installed"), tr("Latest version"), tr("Repository"), tr("Creation date"), tr("Updated")});
// m_modListWidget.setRootIsDecorated(false);
m_modListWidget.setSortingEnabled(true);
m_modListWidget.setContextMenuPolicy(Qt::CustomContextMenu);
Expand All @@ -59,8 +59,15 @@ void ModTabWidget::update() {
// item->setText(0, " 0");
item->setText(1, QString::number(it.second.id()));
item->setText(2, it.second.name());
item->setText(6, it.second.date().toString());
item->setText(7, it.second.hasBeenUpdated() ? "true" : "false");
item->setText(7, it.second.date().toString());
item->setText(8, it.second.hasBeenUpdated() ? "true" : "false");

QUuid repositoryUuid = it.second.get("repository_uuid").toUuid();
ContentRepository *repository = m_data.getRepositoryFromUuid(repositoryUuid);
if (repository)
item->setText(6, repository->name());
else
item->setText(6, "N/A");

ContentUser *user = m_data.getUser(it.second.user());
if (user)
Expand All @@ -79,8 +86,8 @@ void ModTabWidget::update() {

child->setText(1, " " + QString::number(version->id()));
child->setText(2, " " + version->name());
child->setText(6, " " + version->date().toString());
child->setText(7, " " + QString(version->hasBeenUpdated() ? "true" : "false"));
child->setText(7, " " + version->date().toString());
child->setText(8, " " + QString(version->hasBeenUpdated() ? "true" : "false"));

if (!latestVersion || latestVersion->id() < version->id())
latestVersion = version;
Expand Down
2 changes: 1 addition & 1 deletion source/RepositoryEditWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ void RepositoryEditWindow::saveRepository() {
m_cancelButton->setEnabled(false);

Session session;
QJsonDocument doc = session.get(url, "api/");
QJsonDocument doc = session.get(url + "api/");
QUuid uuid = doc.object().value("uuid").toString();

if (uuid.isNull()) {
Expand Down
16 changes: 5 additions & 11 deletions source/Session.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,22 +32,16 @@

#include "Session.hpp"

QString Session::baseUrl = "https://openminer.app/";

Session::Session() {
m_network = new QNetworkAccessManager{this};
}

QJsonDocument Session::get(const QString &apiEndpoint, const ParameterList &parameters) const {
return get(baseUrl, apiEndpoint, parameters);
}

QJsonDocument Session::get(const QString &baseUrl, const QString &apiEndpoint, const ParameterList &parameters) const {
QString url = baseUrl + apiEndpoint;
QJsonDocument Session::get(const QString &url, const ParameterList &parameters) const {
QString parameterString{""};
for (auto &parameter : parameters)
url += "&" + parameter.first + "=" + parameter.second;
parameterString += "&" + parameter.first + "=" + parameter.second;

// qDebug() << "GET" << url;
// qDebug() << "GET" << url + parameterString;

emit stateChanged("Downloading...");

Expand All @@ -56,7 +50,7 @@ QJsonDocument Session::get(const QString &baseUrl, const QString &apiEndpoint, c
QEventLoop waitReply;
connect(m_network, &QNetworkAccessManager::finished, &waitReply, &QEventLoop::quit);

QNetworkReply *reply = m_network->get(QNetworkRequest(QUrl(url)));
QNetworkReply *reply = m_network->get(QNetworkRequest(QUrl(url + parameterString)));

waitReply.exec();

Expand Down
5 changes: 1 addition & 4 deletions source/Session.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,12 @@ class Session : public QObject {
Session();

using ParameterList = std::map<QString, QString>;
QJsonDocument get(const QString &apiEndpoint, const ParameterList &parameters = {}) const;
QJsonDocument get(const QString &baseUrl, const QString &apiEndpoint, const ParameterList &parameters = {}) const;
QJsonDocument get(const QString &url, const ParameterList &parameters = {}) const;

bool download(const QUrl &url, const QString &path) const;

bool isLoggedIn() const { return m_isLoggedIn; }

static QString baseUrl;

signals:
void httpError(int errorCode) const;
void userLoginRequired() const;
Expand Down
28 changes: 14 additions & 14 deletions source/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,20 +39,20 @@ int main(int argc, char **argv) {
style.open(QIODevice::OpenModeFlag::ReadOnly);
app.setStyleSheet(style.readAll());

QCommandLineParser parser;
parser.addHelpOption();
parser.addVersionOption();
parser.addOptions({
{{"a", "api-source"},
QCoreApplication::translate("main", "Use <source> as the server for the API."),
QCoreApplication::translate("main", "source")},
});

parser.process(app);

QString apiSource = parser.value("a");

MainWindow win(apiSource);
// QCommandLineParser parser;
// parser.addHelpOption();
// parser.addVersionOption();
// parser.addOptions({
// {{"a", "api-source"},
// QCoreApplication::translate("main", "Use <source> as the server for the API."),
// QCoreApplication::translate("main", "source")},
// });
//
// parser.process(app);
//
// QString apiSource = parser.value("a");

MainWindow win;
app.exec();
}

0 comments on commit 19577c2

Please sign in to comment.