mirror of
https://github.com/YACReader/yacreader
synced 2026-02-25 16:33:10 -05:00
some bugs fixed in local server/client communication
This commit is contained in:
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -854,6 +854,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;
|
||||||
//set bookmarks
|
//set bookmarks
|
||||||
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -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;
|
||||||
|
|||||||
@ -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)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@ -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<63>n del fichero de config con el servidor
|
QSettings * settings = new QSettings(QCoreApplication::applicationDirPath()+"/YACReaderLibrary.ini",QSettings::IniFormat); //TODO unificar la creaci<63>n del fichero de config con el servidor
|
||||||
settings->beginGroup("libraryConfig");
|
settings->beginGroup("libraryConfig");
|
||||||
|
|||||||
@ -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"
|
||||||
@ -28,17 +29,15 @@ 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()));
|
worker->start();
|
||||||
worker->start();
|
//clientConnection->waitForBytesWritten();*/
|
||||||
//clientConnection->waitForBytesWritten();*/
|
//clientConnection->disconnectFromServer();
|
||||||
//clientConnection->disconnectFromServer();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool YACReaderLocalServer::isRunning()
|
bool YACReaderLocalServer::isRunning()
|
||||||
@ -57,78 +56,85 @@ 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;
|
||||||
|
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;
|
tries = 0;
|
||||||
while(clientConnection->bytesAvailable() < sizeof(quint16) && tries < 200)
|
while(clientConnection->bytesAvailable() < totalSize && tries < 200)
|
||||||
{
|
{
|
||||||
clientConnection->waitForReadyRead(10);
|
clientConnection->waitForReadyRead(10);
|
||||||
tries++;
|
tries++;
|
||||||
}
|
}
|
||||||
if(tries == 200)
|
if(tries == 200)
|
||||||
return;
|
return;
|
||||||
QDataStream sizeStream(clientConnection->read(sizeof(quint16)));
|
QDataStream dataStream(clientConnection->read(totalSize));
|
||||||
sizeStream.setVersion(QDataStream::Qt_4_8);
|
quint8 msgType;
|
||||||
quint16 totalSize = 0;
|
dataStream >> msgType;
|
||||||
sizeStream >> totalSize;
|
dataStream >> libraryId;
|
||||||
|
dataStream >> comic;
|
||||||
|
|
||||||
tries = 0;
|
switch (msgType)
|
||||||
while(clientConnection->bytesAvailable() < totalSize && tries < 200)
|
{
|
||||||
{
|
case YACReader::RequestComicInfo:
|
||||||
clientConnection->waitForReadyRead(10);
|
{
|
||||||
tries++;
|
QList<ComicDB> siblings;
|
||||||
}
|
getComicInfo(libraryId,comic,siblings);
|
||||||
if(tries == 200)
|
|
||||||
return;
|
|
||||||
QDataStream dataStream(clientConnection->read(totalSize));
|
|
||||||
quint8 msgType;
|
|
||||||
dataStream >> msgType;
|
|
||||||
dataStream >> libraryId;
|
|
||||||
dataStream >> comic;
|
|
||||||
|
|
||||||
switch (msgType)
|
QByteArray block;
|
||||||
{
|
QDataStream out(&block, QIODevice::WriteOnly);
|
||||||
case YACReader::RequestComicInfo:
|
out.setVersion(QDataStream::Qt_4_8);
|
||||||
{
|
out << (quint16)0;
|
||||||
QList<ComicDB> siblings;
|
out << comic;
|
||||||
getComicInfo(libraryId,comic,siblings);
|
out << siblings;
|
||||||
|
out.device()->seek(0);
|
||||||
|
out << (quint16)(block.size() - sizeof(quint16));
|
||||||
|
|
||||||
QByteArray block;
|
int written = 0;
|
||||||
QDataStream out(&block, QIODevice::WriteOnly);
|
tries = 0;
|
||||||
out.setVersion(QDataStream::Qt_4_8);
|
while(written != block.size() && tries < 200)
|
||||||
out << (quint16)0;
|
{
|
||||||
out << comic;
|
int ret = clientConnection->write(block);
|
||||||
out << siblings;
|
if(ret != -1)
|
||||||
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)
|
|
||||||
{
|
|
||||||
written += ret;
|
written += ret;
|
||||||
clientConnection->flush();
|
clientConnection->flush();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
tries++;
|
tries++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case YACReader::SendComicInfo:
|
case YACReader::SendComicInfo:
|
||||||
{
|
{
|
||||||
updateComic(libraryId,comic);
|
updateComic(libraryId,comic);
|
||||||
//clientConnection->disconnectFromServer();
|
//clientConnection->disconnectFromServer();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clientConnection->waitForDisconnected();
|
||||||
|
clientConnection->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
void YACReaderClientConnectionWorker::getComicInfo(quint64 libraryId, ComicDB & comic, QList<ComicDB> & siblings)
|
void YACReaderClientConnectionWorker::getComicInfo(quint64 libraryId, ComicDB & comic, QList<ComicDB> & siblings)
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user