From b684b580ed0b2750bfa5c986f954a4a953a84647 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Sat, 24 Aug 2013 20:13:38 +0200 Subject: [PATCH] some bugs fixed in local server/client communication --- YACReader/main_window_viewer.cpp | 5 +- YACReader/viewer.cpp | 3 + YACReader/yacreader_local_client.cpp | 12 +- YACReaderLibrary/db_helper.cpp | 1 + YACReaderLibrary/main.cpp | 2 + YACReaderLibrary/yacreader_local_server.cpp | 152 ++++++++++---------- YACReaderLibrary/yacreader_local_server.h | 1 + 7 files changed, 95 insertions(+), 81 deletions(-) diff --git a/YACReader/main_window_viewer.cpp b/YACReader/main_window_viewer.cpp index 52caa782..a1158184 100644 --- a/YACReader/main_window_viewer.cpp +++ b/YACReader/main_window_viewer.cpp @@ -204,7 +204,7 @@ void MainWindowViewer::openFromArgv() } else if(QCoreApplication::argc() == 4) { - isClient = true; + QString pathFile = QCoreApplication::arguments().at(1); currentDirectory = pathFile; quint64 comicId = QCoreApplication::arguments().at(2).toULongLong(); @@ -217,10 +217,11 @@ void MainWindowViewer::openFromArgv() if(client.requestComicInfo(libraryId,currentComicDB,siblingComics)) { + isClient = true; open(pathFile+currentComicDB.path,currentComicDB,siblingComics); } else - {/*error*/} + {isClient = false;/*error*/} optionsDialog->setFilters(currentComicDB.info.brightness, currentComicDB.info.contrast, currentComicDB.info.gamma); } diff --git a/YACReader/viewer.cpp b/YACReader/viewer.cpp index dbc86c2a..02fe3121 100644 --- a/YACReader/viewer.cpp +++ b/YACReader/viewer.cpp @@ -854,6 +854,8 @@ int Viewer::getCurrentPageNumber() void Viewer::updateComic(ComicDB & comic) { + if(render->hasLoadedComic()) + { //set currentPage comic.info.currentPage = render->getIndex()+1; //set bookmarks @@ -879,6 +881,7 @@ void Viewer::updateComic(ComicDB & comic) comic.info.contrast = contrast; if(gamma != 100 || comic.info.gamma!=-1) comic.info.gamma = gamma; + } } \ No newline at end of file diff --git a/YACReader/yacreader_local_client.cpp b/YACReader/yacreader_local_client.cpp index 731849d9..2c6164ab 100644 --- a/YACReader/yacreader_local_client.cpp +++ b/YACReader/yacreader_local_client.cpp @@ -51,12 +51,12 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic, //QByteArray data; tries = 0; - while(localSocket->bytesAvailable() < sizeof(quint16) && tries < 200) + while(localSocket->bytesAvailable() < sizeof(quint16) && tries < 10) { - localSocket->waitForReadyRead(10); + localSocket->waitForReadyRead(100); tries++; } - if(tries == 200) + if(tries == 20) return false; QDataStream sizeStream(localSocket->read(sizeof(quint16))); sizeStream.setVersion(QDataStream::Qt_4_8); @@ -64,12 +64,12 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic, sizeStream >> totalSize; tries = 0; - while(localSocket->bytesAvailable() < totalSize && tries < 200 ) + while(localSocket->bytesAvailable() < totalSize && tries < 10 ) { - localSocket->waitForReadyRead(10); + localSocket->waitForReadyRead(100); tries++; } - if(tries == 200) + if(tries == 20) return false; QDataStream dataStream(localSocket->read(totalSize)); dataStream >> comic; diff --git a/YACReaderLibrary/db_helper.cpp b/YACReaderLibrary/db_helper.cpp index 315dc857..f5bd003f 100644 --- a/YACReaderLibrary/db_helper.cpp +++ b/YACReaderLibrary/db_helper.cpp @@ -398,6 +398,7 @@ QList DBHelper::getFoldersFromParent(qulonglong parentId, QSqlDat return list; } +//TODO sort using natural sorting and issue number QList DBHelper::getSortedComicsFromParent(qulonglong parentId, QSqlDatabase & db) { diff --git a/YACReaderLibrary/main.cpp b/YACReaderLibrary/main.cpp index 64776aca..962b3afd 100644 --- a/YACReaderLibrary/main.cpp +++ b/YACReaderLibrary/main.cpp @@ -29,6 +29,8 @@ int main( int argc, char ** argv ) app.installTranslator(&viewerTranslator); app.setApplicationName("YACReaderLibrary"); + qRegisterMetaType("ComicDB"); + #ifdef SERVER_RELEASE QSettings * settings = new QSettings(QCoreApplication::applicationDirPath()+"/YACReaderLibrary.ini",QSettings::IniFormat); //TODO unificar la creación del fichero de config con el servidor settings->beginGroup("libraryConfig"); diff --git a/YACReaderLibrary/yacreader_local_server.cpp b/YACReaderLibrary/yacreader_local_server.cpp index 82789fa7..db42e115 100644 --- a/YACReaderLibrary/yacreader_local_server.cpp +++ b/YACReaderLibrary/yacreader_local_server.cpp @@ -2,6 +2,7 @@ #include #include +#include #include "yacreader_global.h" #include "db_helper.h" @@ -28,17 +29,15 @@ bool YACReaderLocalServer::isListening() void YACReaderLocalServer::sendResponse() { - QLocalSocket *clientConnection = localServer->nextPendingConnection(); - connect(clientConnection, SIGNAL(disconnected()), - clientConnection, SLOT(deleteLater())); + QLocalSocket *clientConnection = localServer->nextPendingConnection(); + //connect(clientConnection, SIGNAL(disconnected()),clientConnection, SLOT(deleteLater())); - qRegisterMetaType("ComicDB"); - YACReaderClientConnectionWorker * worker = new YACReaderClientConnectionWorker(clientConnection); - connect(worker,SIGNAL(comicUpdated(quint64, ComicDB)),this,SIGNAL(comicUpdated(quint64, ComicDB))); - connect(worker,SIGNAL(finished()),worker,SLOT(deleteLater())); - worker->start(); - //clientConnection->waitForBytesWritten();*/ - //clientConnection->disconnectFromServer(); + YACReaderClientConnectionWorker * worker = new YACReaderClientConnectionWorker(clientConnection); + connect(worker,SIGNAL(comicUpdated(quint64, ComicDB)),this,SIGNAL(comicUpdated(quint64, ComicDB))); + connect(worker,SIGNAL(finished()),worker,SLOT(deleteLater())); + worker->start(); + //clientConnection->waitForBytesWritten();*/ + //clientConnection->disconnectFromServer(); } bool YACReaderLocalServer::isRunning() @@ -57,78 +56,85 @@ YACReaderClientConnectionWorker::YACReaderClientConnectionWorker( QLocalSocket * } +YACReaderClientConnectionWorker::~YACReaderClientConnectionWorker() +{ + +} + void YACReaderClientConnectionWorker::run() { - quint64 libraryId; - ComicDB comic; - int tries = 0; + quint64 libraryId; + ComicDB comic; + int tries = 0; + //QByteArray data; + while(clientConnection->bytesAvailable() < sizeof(quint16) && tries < 200) + { + clientConnection->waitForReadyRead(10); + tries++; + } + if(tries == 200) + return; + QDataStream sizeStream(clientConnection->read(sizeof(quint16))); + sizeStream.setVersion(QDataStream::Qt_4_8); + quint16 totalSize = 0; + sizeStream >> totalSize; - //QByteArray data; - while(clientConnection->bytesAvailable() < sizeof(quint16) && tries < 200) - { - clientConnection->waitForReadyRead(10); - tries++; - } - if(tries == 200) - return; - QDataStream sizeStream(clientConnection->read(sizeof(quint16))); - sizeStream.setVersion(QDataStream::Qt_4_8); - quint16 totalSize = 0; - sizeStream >> totalSize; + tries = 0; + while(clientConnection->bytesAvailable() < totalSize && tries < 200) + { + clientConnection->waitForReadyRead(10); + tries++; + } + if(tries == 200) + return; + QDataStream dataStream(clientConnection->read(totalSize)); + quint8 msgType; + dataStream >> msgType; + dataStream >> libraryId; + dataStream >> comic; - tries = 0; - while(clientConnection->bytesAvailable() < totalSize && tries < 200) - { - clientConnection->waitForReadyRead(10); - tries++; - } - if(tries == 200) - return; - QDataStream dataStream(clientConnection->read(totalSize)); - quint8 msgType; - dataStream >> msgType; - dataStream >> libraryId; - dataStream >> comic; + switch (msgType) + { + case YACReader::RequestComicInfo: + { + QList siblings; + getComicInfo(libraryId,comic,siblings); - switch (msgType) - { - case YACReader::RequestComicInfo: - { - QList siblings; - getComicInfo(libraryId,comic,siblings); + QByteArray block; + QDataStream out(&block, QIODevice::WriteOnly); + out.setVersion(QDataStream::Qt_4_8); + out << (quint16)0; + out << comic; + out << siblings; + out.device()->seek(0); + out << (quint16)(block.size() - sizeof(quint16)); - QByteArray block; - QDataStream out(&block, QIODevice::WriteOnly); - out.setVersion(QDataStream::Qt_4_8); - out << (quint16)0; - out << comic; - out << siblings; - out.device()->seek(0); - out << (quint16)(block.size() - sizeof(quint16)); - - int written = 0; - tries = 0; - while(written != block.size() && tries < 200) - { - int ret = clientConnection->write(block); - if(ret != -1) - { + int written = 0; + tries = 0; + while(written != block.size() && tries < 200) + { + int ret = clientConnection->write(block); + if(ret != -1) + { written += ret; clientConnection->flush(); - } - else - tries++; - } - break; - } - case YACReader::SendComicInfo: - { - updateComic(libraryId,comic); - //clientConnection->disconnectFromServer(); - break; - } + } + else + tries++; + } + break; + } + case YACReader::SendComicInfo: + { + updateComic(libraryId,comic); + //clientConnection->disconnectFromServer(); + break; + } - } + } + + clientConnection->waitForDisconnected(); + clientConnection->deleteLater(); } void YACReaderClientConnectionWorker::getComicInfo(quint64 libraryId, ComicDB & comic, QList & siblings) diff --git a/YACReaderLibrary/yacreader_local_server.h b/YACReaderLibrary/yacreader_local_server.h index 8c1f418d..ad53015e 100644 --- a/YACReaderLibrary/yacreader_local_server.h +++ b/YACReaderLibrary/yacreader_local_server.h @@ -30,6 +30,7 @@ class YACReaderClientConnectionWorker : public QThread Q_OBJECT public: YACReaderClientConnectionWorker( QLocalSocket *clientConnection); + ~YACReaderClientConnectionWorker(); signals: void comicUpdated(quint64 libraryId, const ComicDB & comic); private: