bugfix, more deck list submission code

This commit is contained in:
Max-Wilhelm Bruker 2009-11-17 18:36:30 +01:00
parent fdf921e718
commit 7a07a395f1
10 changed files with 118 additions and 113 deletions

View file

@ -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();

View file

@ -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)

View file

@ -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();