mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-12 09:04:53 -07:00
bugfix, more deck list submission code
This commit is contained in:
parent
fdf921e718
commit
7a07a395f1
10 changed files with 118 additions and 113 deletions
|
|
@ -28,13 +28,12 @@ Servatrice::Servatrice(QObject *parent)
|
|||
: Server(parent)
|
||||
{
|
||||
ProtocolItem::initializeHash();
|
||||
settings = new QSettings("servatrice.ini", QSettings::IniFormat, this);
|
||||
|
||||
tcpServer = new QTcpServer(this);
|
||||
connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newConnection()));
|
||||
tcpServer->listen(QHostAddress::Any, 4747); // XXX make customizable
|
||||
tcpServer->listen(QHostAddress::Any, settings->value("server/port", 4747).toInt());
|
||||
|
||||
settings = new QSettings("servatrice.ini", QSettings::IniFormat, this);
|
||||
|
||||
QString dbType = settings->value("database/type").toString();
|
||||
if (dbType == "mysql")
|
||||
openDatabase();
|
||||
|
|
|
|||
|
|
@ -55,6 +55,16 @@ ServerSocketInterface::~ServerSocketInterface()
|
|||
delete socket;
|
||||
}
|
||||
|
||||
void ServerSocketInterface::itemFinishedReading()
|
||||
{
|
||||
Command *command = qobject_cast<Command *>(currentItem);
|
||||
if (qobject_cast<InvalidCommand *>(command))
|
||||
sendProtocolItem(new ProtocolResponse(command->getCmdId(), RespInvalidCommand));
|
||||
else
|
||||
processCommand(command);
|
||||
currentItem = 0;
|
||||
}
|
||||
|
||||
void ServerSocketInterface::readClient()
|
||||
{
|
||||
xmlReader->addData(socket->readAll());
|
||||
|
|
@ -62,7 +72,7 @@ void ServerSocketInterface::readClient()
|
|||
if (currentItem) {
|
||||
if (!currentItem->read(xmlReader))
|
||||
return;
|
||||
currentItem = 0;
|
||||
itemFinishedReading();
|
||||
}
|
||||
while (!xmlReader->atEnd()) {
|
||||
xmlReader->readNext();
|
||||
|
|
@ -77,14 +87,7 @@ void ServerSocketInterface::readClient()
|
|||
currentItem = new InvalidCommand;
|
||||
if (!currentItem->read(xmlReader))
|
||||
return;
|
||||
else {
|
||||
Command *command = qobject_cast<Command *>(currentItem);
|
||||
if (qobject_cast<InvalidCommand *>(command))
|
||||
sendProtocolItem(new ProtocolResponse(command->getCmdId(), RespInvalidCommand));
|
||||
else
|
||||
processCommand(command);
|
||||
currentItem = 0;
|
||||
}
|
||||
itemFinishedReading();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -127,6 +130,11 @@ int ServerSocketInterface::getDeckPathId(int basePathId, QStringList path)
|
|||
return getDeckPathId(id, path);
|
||||
}
|
||||
|
||||
int ServerSocketInterface::getDeckPathId(const QString &path)
|
||||
{
|
||||
return getDeckPathId(0, path.split("/"));
|
||||
}
|
||||
|
||||
void ServerSocketInterface::deckListHelper(Response_DeckList::Directory *folder)
|
||||
{
|
||||
QSqlQuery query;
|
||||
|
|
@ -140,6 +148,15 @@ void ServerSocketInterface::deckListHelper(Response_DeckList::Directory *folder)
|
|||
folder->append(newFolder);
|
||||
deckListHelper(newFolder);
|
||||
}
|
||||
|
||||
query.prepare("select id, name from decklist_files where id_folder = :id_folder");
|
||||
query.bindValue(":id_folder", folder->getId());
|
||||
servatrice->execSqlQuery(query);
|
||||
|
||||
while (query.next()) {
|
||||
Response_DeckList::File *newFile = new Response_DeckList::File(query.value(1).toString(), query.value(0).toInt());
|
||||
folder->append(newFile);
|
||||
}
|
||||
}
|
||||
|
||||
ResponseCode ServerSocketInterface::cmdDeckList(Command_DeckList *cmd)
|
||||
|
|
@ -157,8 +174,7 @@ ResponseCode ServerSocketInterface::cmdDeckList(Command_DeckList *cmd)
|
|||
|
||||
ResponseCode ServerSocketInterface::cmdDeckNewDir(Command_DeckNewDir *cmd)
|
||||
{
|
||||
int folderId = getDeckPathId(0, cmd->getPath().split("/"));
|
||||
qDebug() << "folderId" << folderId;
|
||||
int folderId = getDeckPathId(cmd->getPath());
|
||||
if (folderId == -1)
|
||||
return RespNameNotFound;
|
||||
|
||||
|
|
@ -172,12 +188,31 @@ ResponseCode ServerSocketInterface::cmdDeckNewDir(Command_DeckNewDir *cmd)
|
|||
return RespOk;
|
||||
}
|
||||
|
||||
ResponseCode ServerSocketInterface::cmdDeckDelDir(Command_DeckDelDir *cmd)
|
||||
void ServerSocketInterface::deckDelDirHelper(int basePathId)
|
||||
{
|
||||
QSqlQuery query;
|
||||
|
||||
query.prepare("select id from decklist_folders where id_parent = :id_parent");
|
||||
query.bindValue(":id_parent", basePathId);
|
||||
servatrice->execSqlQuery(query);
|
||||
while (query.next())
|
||||
deckDelDirHelper(query.value(0).toInt());
|
||||
|
||||
query.prepare("delete from decklist_files where id_folder = :id_folder");
|
||||
query.bindValue(":id_folder", basePathId);
|
||||
servatrice->execSqlQuery(query);
|
||||
|
||||
query.prepare("delete from decklist_folders where id = :id");
|
||||
query.bindValue(":id", basePathId);
|
||||
servatrice->execSqlQuery(query);
|
||||
}
|
||||
|
||||
ResponseCode ServerSocketInterface::cmdDeckNew(Command_DeckNew *cmd)
|
||||
ResponseCode ServerSocketInterface::cmdDeckDelDir(Command_DeckDelDir *cmd)
|
||||
{
|
||||
int basePathId = getDeckPathId(cmd->getPath());
|
||||
if (basePathId == -1)
|
||||
return RespNameNotFound;
|
||||
deckDelDirHelper(basePathId);
|
||||
}
|
||||
|
||||
ResponseCode ServerSocketInterface::cmdDeckDel(Command_DeckDel *cmd)
|
||||
|
|
|
|||
|
|
@ -42,14 +42,17 @@ private:
|
|||
ProtocolItem *currentItem;
|
||||
|
||||
int getDeckPathId(int basePathId, QStringList path);
|
||||
int getDeckPathId(const QString &path);
|
||||
void deckListHelper(Response_DeckList::Directory *folder);
|
||||
ResponseCode cmdDeckList(Command_DeckList *cmd);
|
||||
ResponseCode cmdDeckNewDir(Command_DeckNewDir *cmd);
|
||||
void deckDelDirHelper(int basePathId);
|
||||
ResponseCode cmdDeckDelDir(Command_DeckDelDir *cmd);
|
||||
ResponseCode cmdDeckNew(Command_DeckNew *cmd);
|
||||
ResponseCode cmdDeckDel(Command_DeckDel *cmd);
|
||||
ResponseCode cmdDeckUpload(Command_DeckUpload *cmd);
|
||||
ResponseCode cmdDeckDownload(Command_DeckDownload *cmd);
|
||||
|
||||
void itemFinishedReading();
|
||||
public:
|
||||
ServerSocketInterface(Servatrice *_server, QTcpSocket *_socket, QObject *parent = 0);
|
||||
~ServerSocketInterface();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue