some bugs fixed in local server/client communication

This commit is contained in:
Luis Ángel San Martín 2013-08-24 20:13:38 +02:00
parent 8ae63e562a
commit b684b580ed
7 changed files with 95 additions and 81 deletions

View File

@ -204,7 +204,7 @@ void MainWindowViewer::openFromArgv()
} }
else if(QCoreApplication::argc() == 4) else if(QCoreApplication::argc() == 4)
{ {
isClient = true;
QString pathFile = QCoreApplication::arguments().at(1); QString pathFile = QCoreApplication::arguments().at(1);
currentDirectory = pathFile; currentDirectory = pathFile;
quint64 comicId = QCoreApplication::arguments().at(2).toULongLong(); quint64 comicId = QCoreApplication::arguments().at(2).toULongLong();
@ -217,10 +217,11 @@ void MainWindowViewer::openFromArgv()
if(client.requestComicInfo(libraryId,currentComicDB,siblingComics)) if(client.requestComicInfo(libraryId,currentComicDB,siblingComics))
{ {
isClient = true;
open(pathFile+currentComicDB.path,currentComicDB,siblingComics); open(pathFile+currentComicDB.path,currentComicDB,siblingComics);
} }
else else
{/*error*/} {isClient = false;/*error*/}
optionsDialog->setFilters(currentComicDB.info.brightness, currentComicDB.info.contrast, currentComicDB.info.gamma); optionsDialog->setFilters(currentComicDB.info.brightness, currentComicDB.info.contrast, currentComicDB.info.gamma);
} }

View File

@ -853,6 +853,8 @@ int Viewer::getCurrentPageNumber()
} }
void Viewer::updateComic(ComicDB & comic) void Viewer::updateComic(ComicDB & comic)
{
if(render->hasLoadedComic())
{ {
//set currentPage //set currentPage
comic.info.currentPage = render->getIndex()+1; comic.info.currentPage = render->getIndex()+1;
@ -879,6 +881,7 @@ void Viewer::updateComic(ComicDB & comic)
comic.info.contrast = contrast; comic.info.contrast = contrast;
if(gamma != 100 || comic.info.gamma!=-1) if(gamma != 100 || comic.info.gamma!=-1)
comic.info.gamma = gamma; comic.info.gamma = gamma;
}
} }

View File

@ -51,12 +51,12 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic,
//QByteArray data; //QByteArray data;
tries = 0; tries = 0;
while(localSocket->bytesAvailable() < sizeof(quint16) && tries < 200) while(localSocket->bytesAvailable() < sizeof(quint16) && tries < 10)
{ {
localSocket->waitForReadyRead(10); localSocket->waitForReadyRead(100);
tries++; tries++;
} }
if(tries == 200) if(tries == 20)
return false; return false;
QDataStream sizeStream(localSocket->read(sizeof(quint16))); QDataStream sizeStream(localSocket->read(sizeof(quint16)));
sizeStream.setVersion(QDataStream::Qt_4_8); sizeStream.setVersion(QDataStream::Qt_4_8);
@ -64,12 +64,12 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic,
sizeStream >> totalSize; sizeStream >> totalSize;
tries = 0; tries = 0;
while(localSocket->bytesAvailable() < totalSize && tries < 200 ) while(localSocket->bytesAvailable() < totalSize && tries < 10 )
{ {
localSocket->waitForReadyRead(10); localSocket->waitForReadyRead(100);
tries++; tries++;
} }
if(tries == 200) if(tries == 20)
return false; return false;
QDataStream dataStream(localSocket->read(totalSize)); QDataStream dataStream(localSocket->read(totalSize));
dataStream >> comic; dataStream >> comic;

View File

@ -398,6 +398,7 @@ QList<LibraryItem *> DBHelper::getFoldersFromParent(qulonglong parentId, QSqlDat
return list; return list;
} }
//TODO sort using natural sorting and issue number
QList<ComicDB> DBHelper::getSortedComicsFromParent(qulonglong parentId, QSqlDatabase & db) QList<ComicDB> DBHelper::getSortedComicsFromParent(qulonglong parentId, QSqlDatabase & db)
{ {

View File

@ -29,6 +29,8 @@ int main( int argc, char ** argv )
app.installTranslator(&viewerTranslator); app.installTranslator(&viewerTranslator);
app.setApplicationName("YACReaderLibrary"); app.setApplicationName("YACReaderLibrary");
qRegisterMetaType<ComicDB>("ComicDB");
#ifdef SERVER_RELEASE #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 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"); settings->beginGroup("libraryConfig");

View File

@ -2,6 +2,7 @@
#include <QLocalServer> #include <QLocalServer>
#include <QLocalSocket> #include <QLocalSocket>
#include <QPointer>
#include "yacreader_global.h" #include "yacreader_global.h"
#include "db_helper.h" #include "db_helper.h"
@ -29,10 +30,8 @@ bool YACReaderLocalServer::isListening()
void YACReaderLocalServer::sendResponse() void YACReaderLocalServer::sendResponse()
{ {
QLocalSocket *clientConnection = localServer->nextPendingConnection(); QLocalSocket *clientConnection = localServer->nextPendingConnection();
connect(clientConnection, SIGNAL(disconnected()), //connect(clientConnection, SIGNAL(disconnected()),clientConnection, SLOT(deleteLater()));
clientConnection, SLOT(deleteLater()));
qRegisterMetaType<ComicDB>("ComicDB");
YACReaderClientConnectionWorker * worker = new YACReaderClientConnectionWorker(clientConnection); YACReaderClientConnectionWorker * worker = new YACReaderClientConnectionWorker(clientConnection);
connect(worker,SIGNAL(comicUpdated(quint64, ComicDB)),this,SIGNAL(comicUpdated(quint64, ComicDB))); connect(worker,SIGNAL(comicUpdated(quint64, ComicDB)),this,SIGNAL(comicUpdated(quint64, ComicDB)));
connect(worker,SIGNAL(finished()),worker,SLOT(deleteLater())); connect(worker,SIGNAL(finished()),worker,SLOT(deleteLater()));
@ -57,12 +56,16 @@ YACReaderClientConnectionWorker::YACReaderClientConnectionWorker( QLocalSocket *
} }
YACReaderClientConnectionWorker::~YACReaderClientConnectionWorker()
{
}
void YACReaderClientConnectionWorker::run() void YACReaderClientConnectionWorker::run()
{ {
quint64 libraryId; quint64 libraryId;
ComicDB comic; ComicDB comic;
int tries = 0; int tries = 0;
//QByteArray data; //QByteArray data;
while(clientConnection->bytesAvailable() < sizeof(quint16) && tries < 200) while(clientConnection->bytesAvailable() < sizeof(quint16) && tries < 200)
{ {
@ -129,6 +132,9 @@ void YACReaderClientConnectionWorker::run()
} }
} }
clientConnection->waitForDisconnected();
clientConnection->deleteLater();
} }
void YACReaderClientConnectionWorker::getComicInfo(quint64 libraryId, ComicDB & comic, QList<ComicDB> & siblings) void YACReaderClientConnectionWorker::getComicInfo(quint64 libraryId, ComicDB & comic, QList<ComicDB> & siblings)

View File

@ -30,6 +30,7 @@ class YACReaderClientConnectionWorker : public QThread
Q_OBJECT Q_OBJECT
public: public:
YACReaderClientConnectionWorker( QLocalSocket *clientConnection); YACReaderClientConnectionWorker( QLocalSocket *clientConnection);
~YACReaderClientConnectionWorker();
signals: signals:
void comicUpdated(quint64 libraryId, const ComicDB & comic); void comicUpdated(quint64 libraryId, const ComicDB & comic);
private: private: