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)
{
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);
}

View File

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

View File

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

View File

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

View File

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

View File

@ -2,6 +2,7 @@
#include <QLocalServer>
#include <QLocalSocket>
#include <QPointer>
#include "yacreader_global.h"
#include "db_helper.h"
@ -29,10 +30,8 @@ bool YACReaderLocalServer::isListening()
void YACReaderLocalServer::sendResponse()
{
QLocalSocket *clientConnection = localServer->nextPendingConnection();
connect(clientConnection, SIGNAL(disconnected()),
clientConnection, SLOT(deleteLater()));
//connect(clientConnection, SIGNAL(disconnected()),clientConnection, SLOT(deleteLater()));
qRegisterMetaType<ComicDB>("ComicDB");
YACReaderClientConnectionWorker * worker = new YACReaderClientConnectionWorker(clientConnection);
connect(worker,SIGNAL(comicUpdated(quint64, ComicDB)),this,SIGNAL(comicUpdated(quint64, ComicDB)));
connect(worker,SIGNAL(finished()),worker,SLOT(deleteLater()));
@ -57,12 +56,16 @@ YACReaderClientConnectionWorker::YACReaderClientConnectionWorker( QLocalSocket *
}
YACReaderClientConnectionWorker::~YACReaderClientConnectionWorker()
{
}
void YACReaderClientConnectionWorker::run()
{
quint64 libraryId;
ComicDB comic;
int tries = 0;
//QByteArray data;
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)

View File

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