mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-03 03:53:56 -07:00
Refactor CardDatabase *db global variable to singleton CardDatabaseManager. (#5159)
* Refactor CardDatabase *db global variable to singleton CardDatabaseManager. This commit refactors the global variable CardDatabase *db into a singleton encapsulated by the DatabaseManager class, accessible via DatabaseManager::getInstance(). This change centralizes access to the database instance, improving code modularity and encapsulation, resolving dependencies on main.h for code that requires access to the database instance. - Added DatabaseManager class with getInstance() method returning a pointer to the singleton CardDatabase. - Removed global db variable and updated references across the codebase. - Thread-safe static initialization for the singleton. Impact: This refactor should have no functional impact on the application, as it maintains the same interface for accessing the CardDatabase instance. However, the codebase now benefits from improved encapsulation, lifetime management, and thread-safety. * Refactor CardDatabase *db global variable to singleton CardDatabaseManager. This commit refactors the global variable CardDatabase *db into a singleton encapsulated by the DatabaseManager class, accessible via DatabaseManager::getInstance(). This change centralizes access to the database instance, improving code modularity and encapsulation, resolving dependencies on main.h for code that requires access to the database instance. - Added DatabaseManager class with getInstance() method returning a pointer to the singleton CardDatabase. - Removed global db variable and updated references across the codebase. - Thread-safe static initialization for the singleton. Impact: This refactor should have no functional impact on the application, as it maintains the same interface for accessing the CardDatabase instance. However, the codebase now benefits from improved encapsulation, lifetime management, and thread-safety. --------- Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
parent
e43a21866c
commit
5f4ad87a47
23 changed files with 100 additions and 55 deletions
|
|
@ -13,6 +13,7 @@ set(cockatrice_SOURCES
|
||||||
src/game/board/arrow_item.cpp
|
src/game/board/arrow_item.cpp
|
||||||
src/game/board/arrow_target.cpp
|
src/game/board/arrow_target.cpp
|
||||||
src/game/cards/card_database.cpp
|
src/game/cards/card_database.cpp
|
||||||
|
src/game/cards/card_database_manager.cpp
|
||||||
src/game/cards/card_database_model.cpp
|
src/game/cards/card_database_model.cpp
|
||||||
src/game/cards/card_database_parser/card_database_parser.cpp
|
src/game/cards/card_database_parser/card_database_parser.cpp
|
||||||
src/game/cards/card_database_parser/cockatrice_xml_3.cpp
|
src/game/cards/card_database_parser/cockatrice_xml_3.cpp
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#include "spoiler_background_updater.h"
|
#include "spoiler_background_updater.h"
|
||||||
|
|
||||||
#include "../../game/cards/card_database.h"
|
#include "../../game/cards/card_database.h"
|
||||||
|
#include "../../game/cards/card_database_manager.h"
|
||||||
#include "../../main.h"
|
#include "../../main.h"
|
||||||
#include "../../settings/cache_settings.h"
|
#include "../../settings/cache_settings.h"
|
||||||
#include "../ui/window_main.h"
|
#include "../ui/window_main.h"
|
||||||
|
|
@ -159,7 +160,7 @@ bool SpoilerBackgroundUpdater::saveDownloadedFile(QByteArray data)
|
||||||
|
|
||||||
// Data written, so reload the card database
|
// Data written, so reload the card database
|
||||||
qDebug() << "Spoiler Service Data Written";
|
qDebug() << "Spoiler Service Data Written";
|
||||||
const auto reloadOk = QtConcurrent::run([] { db->loadCardDatabases(); });
|
const auto reloadOk = QtConcurrent::run([] { CardDatabaseManager::getInstance()->loadCardDatabases(); });
|
||||||
|
|
||||||
// If the user has notifications enabled, let them know
|
// If the user has notifications enabled, let them know
|
||||||
// when the database was last updated
|
// when the database was last updated
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
#include "../../deck/deck_list_model.h"
|
#include "../../deck/deck_list_model.h"
|
||||||
#include "../../deck/deck_stats_interface.h"
|
#include "../../deck/deck_stats_interface.h"
|
||||||
#include "../../dialogs/dlg_load_deck_from_clipboard.h"
|
#include "../../dialogs/dlg_load_deck_from_clipboard.h"
|
||||||
|
#include "../../game/cards/card_database_manager.h"
|
||||||
#include "../../game/cards/card_database_model.h"
|
#include "../../game/cards/card_database_model.h"
|
||||||
#include "../../game/cards/card_frame.h"
|
#include "../../game/cards/card_frame.h"
|
||||||
#include "../../game/filters/filter_builder.h"
|
#include "../../game/filters/filter_builder.h"
|
||||||
|
|
@ -406,7 +407,7 @@ void TabDeckEditor::createCentralFrame()
|
||||||
connect(&searchKeySignals, SIGNAL(onCtrlC()), this, SLOT(copyDatabaseCellContents()));
|
connect(&searchKeySignals, SIGNAL(onCtrlC()), this, SLOT(copyDatabaseCellContents()));
|
||||||
connect(help, &QAction::triggered, this, &TabDeckEditor::showSearchSyntaxHelp);
|
connect(help, &QAction::triggered, this, &TabDeckEditor::showSearchSyntaxHelp);
|
||||||
|
|
||||||
databaseModel = new CardDatabaseModel(db, true, this);
|
databaseModel = new CardDatabaseModel(CardDatabaseManager::getInstance(), true, this);
|
||||||
databaseModel->setObjectName("databaseModel");
|
databaseModel->setObjectName("databaseModel");
|
||||||
databaseDisplayModel = new CardDatabaseDisplayModel(this);
|
databaseDisplayModel = new CardDatabaseDisplayModel(this);
|
||||||
databaseDisplayModel->setSourceModel(databaseModel);
|
databaseDisplayModel->setSourceModel(databaseModel);
|
||||||
|
|
@ -975,7 +976,7 @@ CardInfoPtr TabDeckEditor::currentCardInfo() const
|
||||||
|
|
||||||
const QString cardName = currentIndex.sibling(currentIndex.row(), 0).data().toString();
|
const QString cardName = currentIndex.sibling(currentIndex.row(), 0).data().toString();
|
||||||
|
|
||||||
return db->getCard(cardName);
|
return CardDatabaseManager::getInstance()->getCard(cardName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabDeckEditor::addCardHelper(QString zoneName)
|
void TabDeckEditor::addCardHelper(QString zoneName)
|
||||||
|
|
@ -1112,7 +1113,8 @@ void TabDeckEditor::setDeck(DeckLoader *_deck)
|
||||||
deckView->expandAll();
|
deckView->expandAll();
|
||||||
setModified(false);
|
setModified(false);
|
||||||
|
|
||||||
PictureLoader::cacheCardPixmaps(db->getCards(deckModel->getDeckList()->getCardList()));
|
PictureLoader::cacheCardPixmaps(
|
||||||
|
CardDatabaseManager::getInstance()->getCards(deckModel->getDeckList()->getCardList()));
|
||||||
deckView->expandAll();
|
deckView->expandAll();
|
||||||
setModified(false);
|
setModified(false);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
#include "../../dialogs/dlg_manage_sets.h"
|
#include "../../dialogs/dlg_manage_sets.h"
|
||||||
#include "../../game/board/arrow_item.h"
|
#include "../../game/board/arrow_item.h"
|
||||||
#include "../../game/cards/card_database.h"
|
#include "../../game/cards/card_database.h"
|
||||||
|
#include "../../game/cards/card_database_manager.h"
|
||||||
#include "../../game/cards/card_frame.h"
|
#include "../../game/cards/card_frame.h"
|
||||||
#include "../../game/cards/card_item.h"
|
#include "../../game/cards/card_item.h"
|
||||||
#include "../../game/game_scene.h"
|
#include "../../game/game_scene.h"
|
||||||
|
|
@ -325,7 +326,7 @@ void DeckViewContainer::deckSelectFinished(const Response &r)
|
||||||
{
|
{
|
||||||
const Response_DeckDownload &resp = r.GetExtension(Response_DeckDownload::ext);
|
const Response_DeckDownload &resp = r.GetExtension(Response_DeckDownload::ext);
|
||||||
DeckLoader newDeck(QString::fromStdString(resp.deck()));
|
DeckLoader newDeck(QString::fromStdString(resp.deck()));
|
||||||
PictureLoader::cacheCardPixmaps(db->getCards(newDeck.getCardList()));
|
PictureLoader::cacheCardPixmaps(CardDatabaseManager::getInstance()->getCards(newDeck.getCardList()));
|
||||||
setDeck(newDeck);
|
setDeck(newDeck);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1109,7 +1110,8 @@ void TabGame::eventGameStateChanged(const Event_GameStateChanged &event,
|
||||||
DeckViewContainer *deckViewContainer = deckViewContainers.value(playerId);
|
DeckViewContainer *deckViewContainer = deckViewContainers.value(playerId);
|
||||||
if (playerInfo.has_deck_list()) {
|
if (playerInfo.has_deck_list()) {
|
||||||
DeckLoader newDeck(QString::fromStdString(playerInfo.deck_list()));
|
DeckLoader newDeck(QString::fromStdString(playerInfo.deck_list()));
|
||||||
PictureLoader::cacheCardPixmaps(db->getCards(newDeck.getCardList()));
|
PictureLoader::cacheCardPixmaps(
|
||||||
|
CardDatabaseManager::getInstance()->getCards(newDeck.getCardList()));
|
||||||
deckViewContainer->setDeck(newDeck);
|
deckViewContainer->setDeck(newDeck);
|
||||||
player->setDeck(newDeck);
|
player->setDeck(newDeck);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#include "picture_loader.h"
|
#include "picture_loader.h"
|
||||||
|
|
||||||
#include "../../game/cards/card_database.h"
|
#include "../../game/cards/card_database.h"
|
||||||
#include "../../main.h"
|
#include "../../game/cards/card_database_manager.h"
|
||||||
#include "../../settings/cache_settings.h"
|
#include "../../settings/cache_settings.h"
|
||||||
#include "theme_manager.h"
|
#include "theme_manager.h"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@
|
||||||
#include "../../dialogs/dlg_update.h"
|
#include "../../dialogs/dlg_update.h"
|
||||||
#include "../../dialogs/dlg_view_log.h"
|
#include "../../dialogs/dlg_view_log.h"
|
||||||
#include "../../game/cards/card_database.h"
|
#include "../../game/cards/card_database.h"
|
||||||
|
#include "../../game/cards/card_database_manager.h"
|
||||||
#include "../../main.h"
|
#include "../../main.h"
|
||||||
#include "../../server/local_client.h"
|
#include "../../server/local_client.h"
|
||||||
#include "../../server/local_server.h"
|
#include "../../server/local_server.h"
|
||||||
|
|
@ -858,11 +859,12 @@ MainWindow::MainWindow(QWidget *parent)
|
||||||
|
|
||||||
connect(&SettingsCache::instance().shortcuts(), SIGNAL(shortCutChanged()), this, SLOT(refreshShortcuts()));
|
connect(&SettingsCache::instance().shortcuts(), SIGNAL(shortCutChanged()), this, SLOT(refreshShortcuts()));
|
||||||
refreshShortcuts();
|
refreshShortcuts();
|
||||||
|
connect(CardDatabaseManager::getInstance(), SIGNAL(cardDatabaseLoadingFailed()), this,
|
||||||
connect(db, SIGNAL(cardDatabaseLoadingFailed()), this, SLOT(cardDatabaseLoadingFailed()));
|
SLOT(cardDatabaseLoadingFailed()));
|
||||||
connect(db, SIGNAL(cardDatabaseNewSetsFound(int, QStringList)), this,
|
connect(CardDatabaseManager::getInstance(), SIGNAL(cardDatabaseNewSetsFound(int, QStringList)), this,
|
||||||
SLOT(cardDatabaseNewSetsFound(int, QStringList)));
|
SLOT(cardDatabaseNewSetsFound(int, QStringList)));
|
||||||
connect(db, SIGNAL(cardDatabaseAllNewSetsEnabled()), this, SLOT(cardDatabaseAllNewSetsEnabled()));
|
connect(CardDatabaseManager::getInstance(), SIGNAL(cardDatabaseAllNewSetsEnabled()), this,
|
||||||
|
SLOT(cardDatabaseAllNewSetsEnabled()));
|
||||||
|
|
||||||
tip = new DlgTipOfTheDay();
|
tip = new DlgTipOfTheDay();
|
||||||
|
|
||||||
|
|
@ -884,13 +886,13 @@ void MainWindow::startupConfigCheck()
|
||||||
if (SettingsCache::instance().getNotifyAboutNewVersion()) {
|
if (SettingsCache::instance().getNotifyAboutNewVersion()) {
|
||||||
alertForcedOracleRun(VERSION_STRING, true);
|
alertForcedOracleRun(VERSION_STRING, true);
|
||||||
} else {
|
} else {
|
||||||
const auto reloadOk0 = QtConcurrent::run([] { db->loadCardDatabases(); });
|
const auto reloadOk0 = QtConcurrent::run([] { CardDatabaseManager::getInstance()->loadCardDatabases(); });
|
||||||
}
|
}
|
||||||
SettingsCache::instance().setClientVersion(VERSION_STRING);
|
SettingsCache::instance().setClientVersion(VERSION_STRING);
|
||||||
} else {
|
} else {
|
||||||
// previous config from this version found
|
// previous config from this version found
|
||||||
qDebug() << "Startup: found config with current version";
|
qDebug() << "Startup: found config with current version";
|
||||||
const auto reloadOk1 = QtConcurrent::run([] { db->loadCardDatabases(); });
|
const auto reloadOk1 = QtConcurrent::run([] { CardDatabaseManager::getInstance()->loadCardDatabases(); });
|
||||||
|
|
||||||
// Run the tips dialog only on subsequent startups.
|
// Run the tips dialog only on subsequent startups.
|
||||||
// On the first run after an install/update the startup is already crowded enough
|
// On the first run after an install/update the startup is already crowded enough
|
||||||
|
|
@ -1075,12 +1077,12 @@ void MainWindow::cardDatabaseNewSetsFound(int numUnknownSets, QStringList unknow
|
||||||
msgBox.exec();
|
msgBox.exec();
|
||||||
|
|
||||||
if (msgBox.clickedButton() == yesButton) {
|
if (msgBox.clickedButton() == yesButton) {
|
||||||
db->enableAllUnknownSets();
|
CardDatabaseManager::getInstance()->enableAllUnknownSets();
|
||||||
const auto reloadOk1 = QtConcurrent::run([] { db->loadCardDatabases(); });
|
const auto reloadOk1 = QtConcurrent::run([] { CardDatabaseManager::getInstance()->loadCardDatabases(); });
|
||||||
} else if (msgBox.clickedButton() == noButton) {
|
} else if (msgBox.clickedButton() == noButton) {
|
||||||
db->markAllSetsAsKnown();
|
CardDatabaseManager::getInstance()->markAllSetsAsKnown();
|
||||||
} else if (msgBox.clickedButton() == settingsButton) {
|
} else if (msgBox.clickedButton() == settingsButton) {
|
||||||
db->markAllSetsAsKnown();
|
CardDatabaseManager::getInstance()->markAllSetsAsKnown();
|
||||||
actManageSets();
|
actManageSets();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1167,7 +1169,7 @@ void MainWindow::exitCardDatabaseUpdate()
|
||||||
cardUpdateProcess->deleteLater();
|
cardUpdateProcess->deleteLater();
|
||||||
cardUpdateProcess = nullptr;
|
cardUpdateProcess = nullptr;
|
||||||
|
|
||||||
const auto reloadOk1 = QtConcurrent::run([] { db->loadCardDatabases(); });
|
const auto reloadOk1 = QtConcurrent::run([] { CardDatabaseManager::getInstance()->loadCardDatabases(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::cardUpdateError(QProcess::ProcessError err)
|
void MainWindow::cardUpdateError(QProcess::ProcessError err)
|
||||||
|
|
@ -1297,7 +1299,7 @@ void MainWindow::actAddCustomSet()
|
||||||
QMessageBox::information(
|
QMessageBox::information(
|
||||||
this, tr("Load sets/cards"),
|
this, tr("Load sets/cards"),
|
||||||
tr("The new sets/cards have been added successfully.\nCockatrice will now reload the card database."));
|
tr("The new sets/cards have been added successfully.\nCockatrice will now reload the card database."));
|
||||||
const auto reloadOk1 = QtConcurrent::run([] { db->loadCardDatabases(); });
|
const auto reloadOk1 = QtConcurrent::run([] { CardDatabaseManager::getInstance()->loadCardDatabases(); });
|
||||||
} else {
|
} else {
|
||||||
QMessageBox::warning(this, tr("Load sets/cards"), tr("Sets/cards failed to import."));
|
QMessageBox::warning(this, tr("Load sets/cards"), tr("Sets/cards failed to import."));
|
||||||
}
|
}
|
||||||
|
|
@ -1328,7 +1330,7 @@ void MainWindow::actEditTokens()
|
||||||
{
|
{
|
||||||
DlgEditTokens dlg(this);
|
DlgEditTokens dlg(this);
|
||||||
dlg.exec();
|
dlg.exec();
|
||||||
db->saveCustomTokensToFile();
|
CardDatabaseManager::getInstance()->saveCustomTokensToFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::actForgotPasswordRequest()
|
void MainWindow::actForgotPasswordRequest()
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#include "deck_list_model.h"
|
#include "deck_list_model.h"
|
||||||
|
|
||||||
#include "../game/cards/card_database.h"
|
#include "../game/cards/card_database.h"
|
||||||
|
#include "../game/cards/card_database_manager.h"
|
||||||
#include "../main.h"
|
#include "../main.h"
|
||||||
#include "../settings/cache_settings.h"
|
#include "../settings/cache_settings.h"
|
||||||
#include "deck_loader.h"
|
#include "deck_loader.h"
|
||||||
|
|
@ -49,7 +50,7 @@ void DeckListModel::rebuildTree()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
CardInfoPtr info = db->getCard(currentCard->getName());
|
CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(currentCard->getName());
|
||||||
QString cardType = info ? info->getMainCardType() : "unknown";
|
QString cardType = info ? info->getMainCardType() : "unknown";
|
||||||
|
|
||||||
auto *cardTypeNode = dynamic_cast<InnerDecklistNode *>(node->findChild(cardType));
|
auto *cardTypeNode = dynamic_cast<InnerDecklistNode *>(node->findChild(cardType));
|
||||||
|
|
@ -289,7 +290,7 @@ DecklistModelCardNode *DeckListModel::findCardNode(const QString &cardName, cons
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
info = db->getCard(cardName);
|
info = CardDatabaseManager::getInstance()->getCard(cardName);
|
||||||
if (!info) {
|
if (!info) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
@ -317,7 +318,7 @@ QModelIndex DeckListModel::findCard(const QString &cardName, const QString &zone
|
||||||
|
|
||||||
QModelIndex DeckListModel::addCard(const QString &cardName, const QString &zoneName, bool abAddAnyway)
|
QModelIndex DeckListModel::addCard(const QString &cardName, const QString &zoneName, bool abAddAnyway)
|
||||||
{
|
{
|
||||||
CardInfoPtr info = db->getCard(cardName);
|
CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(cardName);
|
||||||
if (info == nullptr) {
|
if (info == nullptr) {
|
||||||
if (abAddAnyway) {
|
if (abAddAnyway) {
|
||||||
// We need to keep this card added no matter what
|
// We need to keep this card added no matter what
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#include "deck_loader.h"
|
#include "deck_loader.h"
|
||||||
|
|
||||||
#include "../game/cards/card_database.h"
|
#include "../game/cards/card_database.h"
|
||||||
|
#include "../game/cards/card_database_manager.h"
|
||||||
#include "../main.h"
|
#include "../main.h"
|
||||||
#include "decklist.h"
|
#include "decklist.h"
|
||||||
|
|
||||||
|
|
@ -124,7 +125,7 @@ struct FormatDeckListForExport
|
||||||
void operator()(const InnerDecklistNode *node, const DecklistCardNode *card) const
|
void operator()(const InnerDecklistNode *node, const DecklistCardNode *card) const
|
||||||
{
|
{
|
||||||
// Get the card name
|
// Get the card name
|
||||||
CardInfoPtr dbCard = db->getCard(card->getName());
|
CardInfoPtr dbCard = CardDatabaseManager::getInstance()->getCard(card->getName());
|
||||||
if (!dbCard || dbCard->getIsToken()) {
|
if (!dbCard || dbCard->getIsToken()) {
|
||||||
// If it's a token, we don't care about the card.
|
// If it's a token, we don't care about the card.
|
||||||
return;
|
return;
|
||||||
|
|
@ -227,7 +228,7 @@ void DeckLoader::saveToStream_DeckZone(QTextStream &out, const InnerDecklistNode
|
||||||
for (int j = 0; j < zoneNode->size(); j++) {
|
for (int j = 0; j < zoneNode->size(); j++) {
|
||||||
auto *card = dynamic_cast<DecklistCardNode *>(zoneNode->at(j));
|
auto *card = dynamic_cast<DecklistCardNode *>(zoneNode->at(j));
|
||||||
|
|
||||||
CardInfoPtr info = db->getCard(card->getName());
|
CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(card->getName());
|
||||||
QString cardType = info ? info->getMainCardType() : "unknown";
|
QString cardType = info ? info->getMainCardType() : "unknown";
|
||||||
|
|
||||||
cardsByType.insert(cardType, card);
|
cardsByType.insert(cardType, card);
|
||||||
|
|
@ -280,7 +281,7 @@ void DeckLoader::saveToStream_DeckZoneCards(QTextStream &out,
|
||||||
|
|
||||||
QString DeckLoader::getCardZoneFromName(QString cardName, QString currentZoneName)
|
QString DeckLoader::getCardZoneFromName(QString cardName, QString currentZoneName)
|
||||||
{
|
{
|
||||||
CardInfoPtr card = db->getCard(cardName);
|
CardInfoPtr card = CardDatabaseManager::getInstance()->getCard(cardName);
|
||||||
|
|
||||||
if (card && card->getIsToken()) {
|
if (card && card->getIsToken()) {
|
||||||
return DECK_ZONE_TOKENS;
|
return DECK_ZONE_TOKENS;
|
||||||
|
|
@ -291,8 +292,8 @@ QString DeckLoader::getCardZoneFromName(QString cardName, QString currentZoneNam
|
||||||
|
|
||||||
QString DeckLoader::getCompleteCardName(const QString &cardName) const
|
QString DeckLoader::getCompleteCardName(const QString &cardName) const
|
||||||
{
|
{
|
||||||
if (db) {
|
if (CardDatabaseManager::getInstance()) {
|
||||||
CardInfoPtr temp = db->guessCard(cardName);
|
CardInfoPtr temp = CardDatabaseManager::getInstance()->guessCard(cardName);
|
||||||
if (temp) {
|
if (temp) {
|
||||||
return temp->getName();
|
return temp->getName();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
#include "dlg_create_token.h"
|
#include "dlg_create_token.h"
|
||||||
|
|
||||||
|
#include "../game/cards/card_database_manager.h"
|
||||||
#include "../game/cards/card_database_model.h"
|
#include "../game/cards/card_database_model.h"
|
||||||
#include "../game/cards/card_info_picture.h"
|
#include "../game/cards/card_info_picture.h"
|
||||||
#include "../main.h"
|
#include "../main.h"
|
||||||
|
|
@ -72,7 +73,7 @@ DlgCreateToken::DlgCreateToken(const QStringList &_predefinedTokens, QWidget *pa
|
||||||
QGroupBox *tokenDataGroupBox = new QGroupBox(tr("Token data"));
|
QGroupBox *tokenDataGroupBox = new QGroupBox(tr("Token data"));
|
||||||
tokenDataGroupBox->setLayout(grid);
|
tokenDataGroupBox->setLayout(grid);
|
||||||
|
|
||||||
cardDatabaseModel = new CardDatabaseModel(db, false, this);
|
cardDatabaseModel = new CardDatabaseModel(CardDatabaseManager::getInstance(), false, this);
|
||||||
cardDatabaseDisplayModel = new TokenDisplayModel(this);
|
cardDatabaseDisplayModel = new TokenDisplayModel(this);
|
||||||
cardDatabaseDisplayModel->setSourceModel(cardDatabaseModel);
|
cardDatabaseDisplayModel->setSourceModel(cardDatabaseModel);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "../client/get_text_with_max.h"
|
#include "../client/get_text_with_max.h"
|
||||||
#include "../game/cards/card_database.h"
|
#include "../game/cards/card_database.h"
|
||||||
|
#include "../game/cards/card_database_manager.h"
|
||||||
#include "../game/cards/card_database_model.h"
|
#include "../game/cards/card_database_model.h"
|
||||||
#include "../main.h"
|
#include "../main.h"
|
||||||
#include "trice_limits.h"
|
#include "trice_limits.h"
|
||||||
|
|
@ -66,7 +67,7 @@ DlgEditTokens::DlgEditTokens(QWidget *parent) : QDialog(parent), currentCard(nul
|
||||||
QGroupBox *tokenDataGroupBox = new QGroupBox(tr("Token data"));
|
QGroupBox *tokenDataGroupBox = new QGroupBox(tr("Token data"));
|
||||||
tokenDataGroupBox->setLayout(grid);
|
tokenDataGroupBox->setLayout(grid);
|
||||||
|
|
||||||
databaseModel = new CardDatabaseModel(db, false, this);
|
databaseModel = new CardDatabaseModel(CardDatabaseManager::getInstance(), false, this);
|
||||||
databaseModel->setObjectName("databaseModel");
|
databaseModel->setObjectName("databaseModel");
|
||||||
cardDatabaseDisplayModel = new TokenEditModel(this);
|
cardDatabaseDisplayModel = new TokenEditModel(this);
|
||||||
cardDatabaseDisplayModel->setSourceModel(databaseModel);
|
cardDatabaseDisplayModel->setSourceModel(databaseModel);
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
#include "../client/network/sets_model.h"
|
#include "../client/network/sets_model.h"
|
||||||
#include "../client/ui/picture_loader.h"
|
#include "../client/ui/picture_loader.h"
|
||||||
#include "../deck/custom_line_edit.h"
|
#include "../deck/custom_line_edit.h"
|
||||||
|
#include "../game/cards/card_database_manager.h"
|
||||||
#include "../main.h"
|
#include "../main.h"
|
||||||
#include "../settings/cache_settings.h"
|
#include "../settings/cache_settings.h"
|
||||||
|
|
||||||
|
|
@ -79,7 +80,7 @@ WndSets::WndSets(QWidget *parent) : QMainWindow(parent)
|
||||||
filterBox->addWidget(defaultSortButton);
|
filterBox->addWidget(defaultSortButton);
|
||||||
|
|
||||||
// view
|
// view
|
||||||
model = new SetsModel(db, this);
|
model = new SetsModel(CardDatabaseManager::getInstance(), this);
|
||||||
displayModel = new SetsDisplayModel(this);
|
displayModel = new SetsDisplayModel(this);
|
||||||
displayModel->setSourceModel(model);
|
displayModel->setSourceModel(model);
|
||||||
displayModel->setDynamicSortFilter(false);
|
displayModel->setDynamicSortFilter(false);
|
||||||
|
|
@ -239,14 +240,14 @@ void WndSets::rebuildMainLayout(int actionToTake)
|
||||||
|
|
||||||
void WndSets::actSave()
|
void WndSets::actSave()
|
||||||
{
|
{
|
||||||
model->save(db);
|
model->save(CardDatabaseManager::getInstance());
|
||||||
PictureLoader::clearPixmapCache();
|
PictureLoader::clearPixmapCache();
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WndSets::actRestore()
|
void WndSets::actRestore()
|
||||||
{
|
{
|
||||||
model->restore(db);
|
model->restore(CardDatabaseManager::getInstance());
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
#include "../client/ui/picture_loader.h"
|
#include "../client/ui/picture_loader.h"
|
||||||
#include "../client/ui/theme_manager.h"
|
#include "../client/ui/theme_manager.h"
|
||||||
#include "../game/cards/card_database.h"
|
#include "../game/cards/card_database.h"
|
||||||
|
#include "../game/cards/card_database_manager.h"
|
||||||
#include "../main.h"
|
#include "../main.h"
|
||||||
#include "../settings/cache_settings.h"
|
#include "../settings/cache_settings.h"
|
||||||
#include "../utility/sequence_edit.h"
|
#include "../utility/sequence_edit.h"
|
||||||
|
|
@ -1429,7 +1430,7 @@ void DlgSettings::closeEvent(QCloseEvent *event)
|
||||||
{
|
{
|
||||||
bool showLoadError = true;
|
bool showLoadError = true;
|
||||||
QString loadErrorMessage = tr("Unknown Error loading card database");
|
QString loadErrorMessage = tr("Unknown Error loading card database");
|
||||||
LoadStatus loadStatus = db->getLoadStatus();
|
LoadStatus loadStatus = CardDatabaseManager::getInstance()->getLoadStatus();
|
||||||
qDebug() << "Card Database load status: " << loadStatus;
|
qDebug() << "Card Database load status: " << loadStatus;
|
||||||
switch (loadStatus) {
|
switch (loadStatus) {
|
||||||
case Ok:
|
case Ok:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
#include "../../settings/cache_settings.h"
|
#include "../../settings/cache_settings.h"
|
||||||
#include "../game_scene.h"
|
#include "../game_scene.h"
|
||||||
#include "card_database.h"
|
#include "card_database.h"
|
||||||
|
#include "card_database_manager.h"
|
||||||
|
|
||||||
#include <QCursor>
|
#include <QCursor>
|
||||||
#include <QGraphicsScene>
|
#include <QGraphicsScene>
|
||||||
|
|
@ -49,7 +50,7 @@ void AbstractCardItem::pixmapUpdated()
|
||||||
|
|
||||||
void AbstractCardItem::cardInfoUpdated()
|
void AbstractCardItem::cardInfoUpdated()
|
||||||
{
|
{
|
||||||
info = db->getCard(name);
|
info = CardDatabaseManager::getInstance()->getCard(name);
|
||||||
|
|
||||||
if (!info && !name.isEmpty()) {
|
if (!info && !name.isEmpty()) {
|
||||||
QVariantHash properties = QVariantHash();
|
QVariantHash properties = QVariantHash();
|
||||||
|
|
|
||||||
7
cockatrice/src/game/cards/card_database_manager.cpp
Normal file
7
cockatrice/src/game/cards/card_database_manager.cpp
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
#include "card_database_manager.h"
|
||||||
|
|
||||||
|
CardDatabase *CardDatabaseManager::getInstance()
|
||||||
|
{
|
||||||
|
static CardDatabase instance; // Created only once, on first access
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
23
cockatrice/src/game/cards/card_database_manager.h
Normal file
23
cockatrice/src/game/cards/card_database_manager.h
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
|
||||||
|
#ifndef CARD_DATABASE_ACCESSOR_H
|
||||||
|
#define CARD_DATABASE_ACCESSOR_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "card_database.h"
|
||||||
|
|
||||||
|
class CardDatabaseManager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Delete copy constructor and assignment operator to enforce singleton
|
||||||
|
CardDatabaseManager(const CardDatabaseManager &) = delete;
|
||||||
|
CardDatabaseManager &operator=(const CardDatabaseManager &) = delete;
|
||||||
|
|
||||||
|
// Static method to access the singleton instance
|
||||||
|
static CardDatabase *getInstance();
|
||||||
|
|
||||||
|
private:
|
||||||
|
CardDatabaseManager() = default; // Private constructor
|
||||||
|
~CardDatabaseManager() = default;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CARD_DATABASE_ACCESSOR_H
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "../../main.h"
|
#include "../../main.h"
|
||||||
#include "../../settings/cache_settings.h"
|
#include "../../settings/cache_settings.h"
|
||||||
|
#include "card_database_manager.h"
|
||||||
#include "card_info_picture.h"
|
#include "card_info_picture.h"
|
||||||
#include "card_info_text.h"
|
#include "card_info_text.h"
|
||||||
#include "card_item.h"
|
#include "card_item.h"
|
||||||
|
|
@ -57,7 +58,7 @@ CardFrame::CardFrame(const QString &cardName, QWidget *parent) : QTabWidget(pare
|
||||||
|
|
||||||
setViewMode(SettingsCache::instance().getCardInfoViewMode());
|
setViewMode(SettingsCache::instance().getCardInfoViewMode());
|
||||||
|
|
||||||
setCard(db->getCard(cardName));
|
setCard(CardDatabaseManager::getInstance()->getCard(cardName));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CardFrame::retranslateUi()
|
void CardFrame::retranslateUi()
|
||||||
|
|
@ -107,7 +108,7 @@ void CardFrame::setCard(CardInfoPtr card)
|
||||||
|
|
||||||
void CardFrame::setCard(const QString &cardName)
|
void CardFrame::setCard(const QString &cardName)
|
||||||
{
|
{
|
||||||
setCard(db->guessCard(cardName));
|
setCard(CardDatabaseManager::getInstance()->guessCard(cardName));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CardFrame::setCard(AbstractCardItem *card)
|
void CardFrame::setCard(AbstractCardItem *card)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#include "card_info_widget.h"
|
#include "card_info_widget.h"
|
||||||
|
|
||||||
#include "../../main.h"
|
#include "../../main.h"
|
||||||
|
#include "card_database_manager.h"
|
||||||
#include "card_info_picture.h"
|
#include "card_info_picture.h"
|
||||||
#include "card_info_text.h"
|
#include "card_info_text.h"
|
||||||
#include "card_item.h"
|
#include "card_item.h"
|
||||||
|
|
@ -56,7 +57,7 @@ void CardInfoWidget::setCard(CardInfoPtr card)
|
||||||
|
|
||||||
void CardInfoWidget::setCard(const QString &cardName)
|
void CardInfoWidget::setCard(const QString &cardName)
|
||||||
{
|
{
|
||||||
setCard(db->guessCard(cardName));
|
setCard(CardDatabaseManager::getInstance()->guessCard(cardName));
|
||||||
if (info == nullptr) {
|
if (info == nullptr) {
|
||||||
text->setInvalidCardName(cardName);
|
text->setInvalidCardName(cardName);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@
|
||||||
#include "../board/arrow_item.h"
|
#include "../board/arrow_item.h"
|
||||||
#include "../board/counter_general.h"
|
#include "../board/counter_general.h"
|
||||||
#include "../cards/card_database.h"
|
#include "../cards/card_database.h"
|
||||||
|
#include "../cards/card_database_manager.h"
|
||||||
#include "../cards/card_item.h"
|
#include "../cards/card_item.h"
|
||||||
#include "../cards/card_list.h"
|
#include "../cards/card_list.h"
|
||||||
#include "../game_scene.h"
|
#include "../game_scene.h"
|
||||||
|
|
@ -1642,7 +1643,7 @@ void Player::actCreateToken()
|
||||||
|
|
||||||
lastTokenName = dlg.getName();
|
lastTokenName = dlg.getName();
|
||||||
lastTokenPT = dlg.getPT();
|
lastTokenPT = dlg.getPT();
|
||||||
CardInfoPtr correctedCard = db->guessCard(lastTokenName);
|
CardInfoPtr correctedCard = CardDatabaseManager::getInstance()->guessCard(lastTokenName);
|
||||||
if (correctedCard) {
|
if (correctedCard) {
|
||||||
lastTokenName = correctedCard->getName();
|
lastTokenName = correctedCard->getName();
|
||||||
lastTokenTableRow = TableZone::clampValidTableRow(2 - correctedCard->getTableRow());
|
lastTokenTableRow = TableZone::clampValidTableRow(2 - correctedCard->getTableRow());
|
||||||
|
|
@ -1680,7 +1681,7 @@ void Player::actCreateAnotherToken()
|
||||||
void Player::actCreatePredefinedToken()
|
void Player::actCreatePredefinedToken()
|
||||||
{
|
{
|
||||||
auto *action = static_cast<QAction *>(sender());
|
auto *action = static_cast<QAction *>(sender());
|
||||||
CardInfoPtr cardInfo = db->getCard(action->text());
|
CardInfoPtr cardInfo = CardDatabaseManager::getInstance()->getCard(action->text());
|
||||||
if (!cardInfo) {
|
if (!cardInfo) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -1706,7 +1707,7 @@ void Player::actCreateRelatedCard()
|
||||||
* then let's allow it to be created via "create another token"
|
* then let's allow it to be created via "create another token"
|
||||||
*/
|
*/
|
||||||
if (createRelatedFromRelation(sourceCard, cardRelation) && cardRelation->getCanCreateAnother()) {
|
if (createRelatedFromRelation(sourceCard, cardRelation) && cardRelation->getCanCreateAnother()) {
|
||||||
CardInfoPtr cardInfo = db->getCard(cardRelation->getName());
|
CardInfoPtr cardInfo = CardDatabaseManager::getInstance()->getCard(cardRelation->getName());
|
||||||
setLastToken(cardInfo);
|
setLastToken(cardInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1786,7 +1787,7 @@ void Player::actCreateAllRelatedCards()
|
||||||
* then assign the first to the "Create another" shortcut.
|
* then assign the first to the "Create another" shortcut.
|
||||||
*/
|
*/
|
||||||
if (cardRelation != nullptr && cardRelation->getCanCreateAnother()) {
|
if (cardRelation != nullptr && cardRelation->getCanCreateAnother()) {
|
||||||
CardInfoPtr cardInfo = db->getCard(cardRelation->getName());
|
CardInfoPtr cardInfo = CardDatabaseManager::getInstance()->getCard(cardRelation->getName());
|
||||||
setLastToken(cardInfo);
|
setLastToken(cardInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1825,7 +1826,7 @@ void Player::createCard(const CardItem *sourceCard,
|
||||||
CardRelation::AttachType attachType,
|
CardRelation::AttachType attachType,
|
||||||
bool persistent)
|
bool persistent)
|
||||||
{
|
{
|
||||||
CardInfoPtr cardInfo = db->getCard(dbCardName);
|
CardInfoPtr cardInfo = CardDatabaseManager::getInstance()->getCard(dbCardName);
|
||||||
|
|
||||||
if (cardInfo == nullptr || sourceCard == nullptr) {
|
if (cardInfo == nullptr || sourceCard == nullptr) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -3632,7 +3633,7 @@ void Player::addRelatedCardView(const CardItem *card, QMenu *cardMenu)
|
||||||
bool atLeastOneGoodRelationFound = false;
|
bool atLeastOneGoodRelationFound = false;
|
||||||
QList<CardRelation *> relatedCards = cardInfo->getAllRelatedCards();
|
QList<CardRelation *> relatedCards = cardInfo->getAllRelatedCards();
|
||||||
for (const CardRelation *cardRelation : relatedCards) {
|
for (const CardRelation *cardRelation : relatedCards) {
|
||||||
CardInfoPtr relatedCard = db->getCard(cardRelation->getName());
|
CardInfoPtr relatedCard = CardDatabaseManager::getInstance()->getCard(cardRelation->getName());
|
||||||
if (relatedCard != nullptr) {
|
if (relatedCard != nullptr) {
|
||||||
atLeastOneGoodRelationFound = true;
|
atLeastOneGoodRelationFound = true;
|
||||||
break;
|
break;
|
||||||
|
|
@ -3672,7 +3673,7 @@ void Player::addRelatedCardActions(const CardItem *card, QMenu *cardMenu)
|
||||||
int index = 0;
|
int index = 0;
|
||||||
QAction *createRelatedCards = nullptr;
|
QAction *createRelatedCards = nullptr;
|
||||||
for (const CardRelation *cardRelation : relatedCards) {
|
for (const CardRelation *cardRelation : relatedCards) {
|
||||||
CardInfoPtr relatedCard = db->getCard(cardRelation->getName());
|
CardInfoPtr relatedCard = CardDatabaseManager::getInstance()->getCard(cardRelation->getName());
|
||||||
if (relatedCard == nullptr)
|
if (relatedCard == nullptr)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,6 @@
|
||||||
#include <QTranslator>
|
#include <QTranslator>
|
||||||
#include <QtPlugin>
|
#include <QtPlugin>
|
||||||
|
|
||||||
CardDatabase *db;
|
|
||||||
QTranslator *translator, *qtTranslator;
|
QTranslator *translator, *qtTranslator;
|
||||||
RNG_Abstract *rng;
|
RNG_Abstract *rng;
|
||||||
SoundEngine *soundEngine;
|
SoundEngine *soundEngine;
|
||||||
|
|
@ -151,7 +150,6 @@ int main(int argc, char *argv[])
|
||||||
rng = new RNG_SFMT;
|
rng = new RNG_SFMT;
|
||||||
themeManager = new ThemeManager;
|
themeManager = new ThemeManager;
|
||||||
soundEngine = new SoundEngine;
|
soundEngine = new SoundEngine;
|
||||||
db = new CardDatabase;
|
|
||||||
|
|
||||||
qtTranslator = new QTranslator;
|
qtTranslator = new QTranslator;
|
||||||
translator = new QTranslator;
|
translator = new QTranslator;
|
||||||
|
|
@ -188,7 +186,6 @@ int main(int argc, char *argv[])
|
||||||
app.exec();
|
app.exec();
|
||||||
|
|
||||||
qDebug("Event loop finished, terminating...");
|
qDebug("Event loop finished, terminating...");
|
||||||
delete db;
|
|
||||||
delete rng;
|
delete rng;
|
||||||
PingPixmapGenerator::clear();
|
PingPixmapGenerator::clear();
|
||||||
CountryPixmapGenerator::clear();
|
CountryPixmapGenerator::clear();
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
#ifndef MAIN_H
|
#ifndef MAIN_H
|
||||||
#define MAIN_H
|
#define MAIN_H
|
||||||
|
|
||||||
#include "../cockatrice/src/game/cards/card_database.h"
|
#include "../../cockatrice/src/game/cards/card_database.h"
|
||||||
#include "../cockatrice/src/game/cards/card_database_parser/cockatrice_xml_4.h"
|
#include "../../cockatrice/src/game/cards/card_database_parser/cockatrice_xml_4.h"
|
||||||
|
|
||||||
class CardDatabaseConverter : public CardDatabase
|
class CardDatabaseConverter : public CardDatabase
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ set(oracle_SOURCES
|
||||||
src/pagetemplates.cpp
|
src/pagetemplates.cpp
|
||||||
src/qt-json/json.cpp
|
src/qt-json/json.cpp
|
||||||
../cockatrice/src/game/cards/card_database.cpp
|
../cockatrice/src/game/cards/card_database.cpp
|
||||||
|
../cockatrice/src/game/cards/card_database_manager.cpp
|
||||||
../cockatrice/src/client/ui/picture_loader.cpp
|
../cockatrice/src/client/ui/picture_loader.cpp
|
||||||
../cockatrice/src/game/cards/card_database_parser/card_database_parser.cpp
|
../cockatrice/src/game/cards/card_database_parser/card_database_parser.cpp
|
||||||
../cockatrice/src/game/cards/card_database_parser/cockatrice_xml_3.cpp
|
../cockatrice/src/game/cards/card_database_parser/cockatrice_xml_3.cpp
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ add_executable(
|
||||||
${MOCKS_SOURCES}
|
${MOCKS_SOURCES}
|
||||||
${VERSION_STRING_CPP}
|
${VERSION_STRING_CPP}
|
||||||
../../cockatrice/src/game/cards/card_database.cpp
|
../../cockatrice/src/game/cards/card_database.cpp
|
||||||
|
../../cockatrice/src/game/cards/card_database_manager.cpp
|
||||||
../../cockatrice/src/game/cards/card_database_parser/card_database_parser.cpp
|
../../cockatrice/src/game/cards/card_database_parser/card_database_parser.cpp
|
||||||
../../cockatrice/src/game/cards/card_database_parser/cockatrice_xml_3.cpp
|
../../cockatrice/src/game/cards/card_database_parser/cockatrice_xml_3.cpp
|
||||||
../../cockatrice/src/game/cards/card_database_parser/cockatrice_xml_4.cpp
|
../../cockatrice/src/game/cards/card_database_parser/cockatrice_xml_4.cpp
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,9 @@
|
||||||
|
#include "../../cockatrice/src/game/cards/card_database_manager.h"
|
||||||
#include "../../cockatrice/src/game/filters/filter_string.h"
|
#include "../../cockatrice/src/game/filters/filter_string.h"
|
||||||
#include "mocks.h"
|
#include "mocks.h"
|
||||||
|
|
||||||
#include "gtest/gtest.h"
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
CardDatabase *db;
|
|
||||||
|
|
||||||
#define QUERY(name, card, query, match) \
|
#define QUERY(name, card, query, match) \
|
||||||
TEST_F(CardQuery, name) \
|
TEST_F(CardQuery, name) \
|
||||||
{ \
|
{ \
|
||||||
|
|
@ -19,7 +18,7 @@ class CardQuery : public ::testing::Test
|
||||||
protected:
|
protected:
|
||||||
void SetUp() override
|
void SetUp() override
|
||||||
{
|
{
|
||||||
cat = db->getCardBySimpleName("Cat");
|
cat = CardDatabaseManager::getInstance()->getCardBySimpleName("Cat");
|
||||||
}
|
}
|
||||||
|
|
||||||
// void TearDown() override {}
|
// void TearDown() override {}
|
||||||
|
|
@ -59,8 +58,7 @@ QUERY(Color4, cat, "c!gw", false)
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
settingsCache = new SettingsCache;
|
settingsCache = new SettingsCache;
|
||||||
db = new CardDatabase;
|
CardDatabaseManager::getInstance()->loadCardDatabases();
|
||||||
db->loadCardDatabases();
|
|
||||||
|
|
||||||
::testing::InitGoogleTest(&argc, argv);
|
::testing::InitGoogleTest(&argc, argv);
|
||||||
return RUN_ALL_TESTS();
|
return RUN_ALL_TESTS();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue