added deckstats.net interface in deck editor, fixing issue #39
This commit is contained in:
parent
3ba3952604
commit
44d688b1d5
7 changed files with 99 additions and 1 deletions
|
@ -62,6 +62,7 @@ SET(cockatrice_SOURCES
|
||||||
src/tab_userlists.cpp
|
src/tab_userlists.cpp
|
||||||
src/tab_deck_editor.cpp
|
src/tab_deck_editor.cpp
|
||||||
src/replay_timeline_widget.cpp
|
src/replay_timeline_widget.cpp
|
||||||
|
src/deckstats_interface.cpp
|
||||||
src/chatview.cpp
|
src/chatview.cpp
|
||||||
src/userlist.cpp
|
src/userlist.cpp
|
||||||
src/userinfobox.cpp
|
src/userinfobox.cpp
|
||||||
|
@ -137,6 +138,7 @@ SET(cockatrice_HEADERS
|
||||||
src/tab_userlists.h
|
src/tab_userlists.h
|
||||||
src/tab_deck_editor.h
|
src/tab_deck_editor.h
|
||||||
src/replay_timeline_widget.h
|
src/replay_timeline_widget.h
|
||||||
|
src/deckstats_interface.h
|
||||||
src/chatview.h
|
src/chatview.h
|
||||||
src/userlist.h
|
src/userlist.h
|
||||||
src/userinfobox.h
|
src/userinfobox.h
|
||||||
|
|
53
cockatrice/src/deckstats_interface.cpp
Normal file
53
cockatrice/src/deckstats_interface.cpp
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
#include "deckstats_interface.h"
|
||||||
|
#include "decklist.h"
|
||||||
|
#include <QNetworkAccessManager>
|
||||||
|
#include <QNetworkRequest>
|
||||||
|
#include <QNetworkReply>
|
||||||
|
#include <QRegExp>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QDesktopServices>
|
||||||
|
|
||||||
|
DeckStatsInterface::DeckStatsInterface(QObject *parent)
|
||||||
|
: QObject(parent)
|
||||||
|
{
|
||||||
|
manager = new QNetworkAccessManager(this);
|
||||||
|
connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(queryFinished(QNetworkReply *)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeckStatsInterface::queryFinished(QNetworkReply *reply)
|
||||||
|
{
|
||||||
|
if (reply->error() != QNetworkReply::NoError) {
|
||||||
|
QMessageBox::critical(0, tr("Error"), reply->errorString());
|
||||||
|
reply->deleteLater();
|
||||||
|
deleteLater();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString data(reply->readAll());
|
||||||
|
reply->deleteLater();
|
||||||
|
|
||||||
|
QRegExp rx("id=\"deckstats_deck_url\" value=\"([^\"]+)\"");
|
||||||
|
if (!rx.indexIn(data)) {
|
||||||
|
QMessageBox::critical(0, tr("Error"), tr("The reply from the server could not be parsed."));
|
||||||
|
deleteLater();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString deckUrl = rx.cap(1);
|
||||||
|
QDesktopServices::openUrl(deckUrl);
|
||||||
|
|
||||||
|
deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeckStatsInterface::analyzeDeck(DeckList *deck)
|
||||||
|
{
|
||||||
|
QUrl params;
|
||||||
|
params.addQueryItem("deck", deck->writeToString_Plain());
|
||||||
|
QByteArray data;
|
||||||
|
data.append(params.encodedQuery());
|
||||||
|
|
||||||
|
QNetworkRequest request(QUrl("http://deckstats.net/index.php"));
|
||||||
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
|
||||||
|
|
||||||
|
manager->post(request, data);
|
||||||
|
}
|
21
cockatrice/src/deckstats_interface.h
Normal file
21
cockatrice/src/deckstats_interface.h
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
#ifndef DECKSTATS_INTERFACE_H
|
||||||
|
#define DECKSTATS_INTERFACE_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class QNetworkAccessManager;
|
||||||
|
class QNetworkReply;
|
||||||
|
class DeckList;
|
||||||
|
|
||||||
|
class DeckStatsInterface : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
private:
|
||||||
|
QNetworkAccessManager *manager;
|
||||||
|
private slots:
|
||||||
|
void queryFinished(QNetworkReply *reply);
|
||||||
|
public:
|
||||||
|
DeckStatsInterface(QObject *parent = 0);
|
||||||
|
void analyzeDeck(DeckList *deck);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -29,6 +29,7 @@
|
||||||
#include "settingscache.h"
|
#include "settingscache.h"
|
||||||
#include "priceupdater.h"
|
#include "priceupdater.h"
|
||||||
#include "tab_supervisor.h"
|
#include "tab_supervisor.h"
|
||||||
|
#include "deckstats_interface.h"
|
||||||
#include "abstractclient.h"
|
#include "abstractclient.h"
|
||||||
#include "pending_command.h"
|
#include "pending_command.h"
|
||||||
#include "pb/response.pb.h"
|
#include "pb/response.pb.h"
|
||||||
|
@ -183,6 +184,8 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
|
||||||
aPrintDeck = new QAction(QString(), this);
|
aPrintDeck = new QAction(QString(), this);
|
||||||
aPrintDeck->setShortcuts(QKeySequence::Print);
|
aPrintDeck->setShortcuts(QKeySequence::Print);
|
||||||
connect(aPrintDeck, SIGNAL(triggered()), this, SLOT(actPrintDeck()));
|
connect(aPrintDeck, SIGNAL(triggered()), this, SLOT(actPrintDeck()));
|
||||||
|
aAnalyzeDeck = new QAction(QString(), this);
|
||||||
|
connect(aAnalyzeDeck, SIGNAL(triggered()), this, SLOT(actAnalyzeDeck()));
|
||||||
aClose = new QAction(QString(), this);
|
aClose = new QAction(QString(), this);
|
||||||
connect(aClose, SIGNAL(triggered()), this, SLOT(closeRequest()));
|
connect(aClose, SIGNAL(triggered()), this, SLOT(closeRequest()));
|
||||||
|
|
||||||
|
@ -202,6 +205,8 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
|
||||||
deckMenu->addSeparator();
|
deckMenu->addSeparator();
|
||||||
deckMenu->addAction(aPrintDeck);
|
deckMenu->addAction(aPrintDeck);
|
||||||
deckMenu->addSeparator();
|
deckMenu->addSeparator();
|
||||||
|
deckMenu->addAction(aAnalyzeDeck);
|
||||||
|
deckMenu->addSeparator();
|
||||||
deckMenu->addAction(aClose);
|
deckMenu->addAction(aClose);
|
||||||
addTabMenu(deckMenu);
|
addTabMenu(deckMenu);
|
||||||
|
|
||||||
|
@ -268,6 +273,7 @@ void TabDeckEditor::retranslateUi()
|
||||||
aLoadDeckFromClipboard->setText(tr("Load deck from cl&ipboard..."));
|
aLoadDeckFromClipboard->setText(tr("Load deck from cl&ipboard..."));
|
||||||
aSaveDeckToClipboard->setText(tr("Save deck to clip&board"));
|
aSaveDeckToClipboard->setText(tr("Save deck to clip&board"));
|
||||||
aPrintDeck->setText(tr("&Print deck..."));
|
aPrintDeck->setText(tr("&Print deck..."));
|
||||||
|
aAnalyzeDeck->setText(tr("&Analyze deck on deckstats.net"));
|
||||||
aClose->setText(tr("&Close"));
|
aClose->setText(tr("&Close"));
|
||||||
aClose->setShortcut(tr("Ctrl+Q"));
|
aClose->setShortcut(tr("Ctrl+Q"));
|
||||||
|
|
||||||
|
@ -471,6 +477,12 @@ void TabDeckEditor::actPrintDeck()
|
||||||
dlg->exec();
|
dlg->exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TabDeckEditor::actAnalyzeDeck()
|
||||||
|
{
|
||||||
|
DeckStatsInterface *interface = new DeckStatsInterface(this); // it deletes itself when done
|
||||||
|
interface->analyzeDeck(deckModel->getDeckList());
|
||||||
|
}
|
||||||
|
|
||||||
void TabDeckEditor::actEditSets()
|
void TabDeckEditor::actEditSets()
|
||||||
{
|
{
|
||||||
WndSets *w = new WndSets;
|
WndSets *w = new WndSets;
|
||||||
|
|
|
@ -44,6 +44,7 @@ private slots:
|
||||||
void actLoadDeckFromClipboard();
|
void actLoadDeckFromClipboard();
|
||||||
void actSaveDeckToClipboard();
|
void actSaveDeckToClipboard();
|
||||||
void actPrintDeck();
|
void actPrintDeck();
|
||||||
|
void actAnalyzeDeck();
|
||||||
|
|
||||||
void actEditSets();
|
void actEditSets();
|
||||||
void actEditTokens();
|
void actEditTokens();
|
||||||
|
@ -82,7 +83,7 @@ private:
|
||||||
DlgCardSearch *dlgCardSearch;
|
DlgCardSearch *dlgCardSearch;
|
||||||
|
|
||||||
QMenu *deckMenu, *dbMenu;
|
QMenu *deckMenu, *dbMenu;
|
||||||
QAction *aNewDeck, *aLoadDeck, *aSaveDeck, *aSaveDeckAs, *aLoadDeckFromClipboard, *aSaveDeckToClipboard, *aPrintDeck, *aClose;
|
QAction *aNewDeck, *aLoadDeck, *aSaveDeck, *aSaveDeckAs, *aLoadDeckFromClipboard, *aSaveDeckToClipboard, *aPrintDeck, *aAnalyzeDeck, *aClose;
|
||||||
QAction *aEditSets, *aEditTokens, *aSearch, *aClearSearch;
|
QAction *aEditSets, *aEditTokens, *aSearch, *aClearSearch;
|
||||||
QAction *aAddCard, *aAddCardToSideboard, *aRemoveCard, *aIncrement, *aDecrement, *aUpdatePrices;
|
QAction *aAddCard, *aAddCardToSideboard, *aRemoveCard, *aIncrement, *aDecrement, *aUpdatePrices;
|
||||||
|
|
||||||
|
|
|
@ -480,6 +480,14 @@ bool DeckList::saveToFile_Plain(QIODevice *device)
|
||||||
return saveToStream_Plain(out);
|
return saveToStream_Plain(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString DeckList::writeToString_Plain()
|
||||||
|
{
|
||||||
|
QString result;
|
||||||
|
QTextStream out(&result);
|
||||||
|
saveToStream_Plain(out);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void DeckList::cleanList()
|
void DeckList::cleanList()
|
||||||
{
|
{
|
||||||
root->clearTree();
|
root->clearTree();
|
||||||
|
|
|
@ -144,6 +144,7 @@ public:
|
||||||
bool loadFromFile_Plain(QIODevice *device);
|
bool loadFromFile_Plain(QIODevice *device);
|
||||||
bool saveToStream_Plain(QTextStream &stream);
|
bool saveToStream_Plain(QTextStream &stream);
|
||||||
bool saveToFile_Plain(QIODevice *device);
|
bool saveToFile_Plain(QIODevice *device);
|
||||||
|
QString writeToString_Plain();
|
||||||
|
|
||||||
void cleanList();
|
void cleanList();
|
||||||
bool isEmpty() const { return root->isEmpty() && name.isEmpty() && comments.isEmpty() && sideboardPlans.isEmpty(); }
|
bool isEmpty() const { return root->isEmpty() && name.isEmpty() && comments.isEmpty() && sideboardPlans.isEmpty(); }
|
||||||
|
|
Loading…
Reference in a new issue