Make YACReader send info for the next comic.

Now we can set the next comic as reading.
This commit is contained in:
Luis Ángel San Martín 2018-05-20 17:43:28 +02:00
parent 50c9238376
commit 5c876e6785
5 changed files with 128 additions and 42 deletions

View File

@ -1681,12 +1681,26 @@ void MainWindowViewer::decreasePageZoomLevel()
void MainWindowViewer::sendComic() void MainWindowViewer::sendComic()
{ {
YACReaderLocalClient * client = new YACReaderLocalClient; YACReaderLocalClient * client = new YACReaderLocalClient;
currentComicDB.info.lastTimeOpened = QDateTime::currentSecsSinceEpoch(); currentComicDB.info.lastTimeOpened = QDateTime::currentSecsSinceEpoch();
viewer->updateComic(currentComicDB); viewer->updateComic(currentComicDB);
int retries = 1;
while(!client->sendComicInfo(libraryId,currentComicDB) && retries!=0) if (currentComicDB.info.currentPage == currentComicDB.info.numPages) {
retries--; int currentIndex = siblingComics.indexOf(currentComicDB);
connect(client,SIGNAL(finished()),client,SLOT(deleteLater())); if(currentIndex+1 > 0 && currentIndex+1 < siblingComics.count())
//delete client; {
ComicDB & nextComic = siblingComics[currentIndex+1];
nextComic.info.hasBeenOpened = true;
int retries = 1;
while(!client->sendComicInfo(libraryId,currentComicDB,nextComic.id) && retries!=0)
retries--;
connect(client,SIGNAL(finished()),client,SLOT(deleteLater()));
}
} else {
int retries = 1;
while(!client->sendComicInfo(libraryId,currentComicDB) && retries!=0)
retries--;
connect(client,SIGNAL(finished()),client,SLOT(deleteLater()));
}
//delete client;
} }

View File

@ -125,47 +125,92 @@ bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic,
} }
} }
bool YACReaderLocalClient::sendComicInfo(quint64 libraryId, ComicDB & comic) bool YACReaderLocalClient::sendComicInfo(quint64 libraryId, ComicDB & comic)
{ {
localSocket->connectToServer(YACREADERLIBRARY_GUID); localSocket->connectToServer(YACREADERLIBRARY_GUID);
if(localSocket->isOpen()) if(localSocket->isOpen())
{ {
//QLOG_INFO() << "Connection opened for sending ComicInfo"; //QLOG_INFO() << "Connection opened for sending ComicInfo";
QByteArray block; QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly); QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_8); out.setVersion(QDataStream::Qt_4_8);
out << (quint32)0; out << (quint32)0;
out << (quint8)YACReader::SendComicInfo; out << (quint8)YACReader::SendComicInfo;
out << libraryId; out << libraryId;
out << comic; out << comic;
out.device()->seek(0); out.device()->seek(0);
out << (quint32)(block.size() - sizeof(quint32)); out << (quint32)(block.size() - sizeof(quint32));
int written, previousWritten; int written, previousWritten;
written = previousWritten = 0; written = previousWritten = 0;
int tries = 0; int tries = 0;
while(written != block.size() && tries < 100) while(written != block.size() && tries < 100)
{ {
written += localSocket->write(block); written += localSocket->write(block);
if(written == previousWritten) if(written == previousWritten)
tries++; tries++;
previousWritten = written; previousWritten = written;
} }
localSocket->waitForBytesWritten(2000); localSocket->waitForBytesWritten(2000);
localSocket->close(); localSocket->close();
//QLOG_INFO() << QString("Sending Comic Info : writen data (%1,%2)").arg(written).arg(block.size()); //QLOG_INFO() << QString("Sending Comic Info : writen data (%1,%2)").arg(written).arg(block.size());
if(tries == 100 && written != block.size()) if(tries == 100 && written != block.size())
{ {
emit finished(); emit finished();
QLOG_ERROR() << QString("Sending Comic Info : unable to write data (%1,%2)").arg(written).arg(block.size()); QLOG_ERROR() << QString("Sending Comic Info : unable to write data (%1,%2)").arg(written).arg(block.size());
return false; return false;
} }
emit finished(); emit finished();
return true; return true;
} }
emit finished();
QLOG_ERROR() << "Sending Comic Info : unable to connect to the server";
return false;
emit finished();
QLOG_ERROR() << "Sending Comic Info : unable to connect to the server";
return false;
}
bool YACReaderLocalClient::sendComicInfo(quint64 libraryId, ComicDB & comic, qulonglong nextComicId)
{
localSocket->connectToServer(YACREADERLIBRARY_GUID);
if(localSocket->isOpen())
{
//QLOG_INFO() << "Connection opened for sending ComicInfo";
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_8);
out << (quint32)0;
out << (quint8)YACReader::SendComicInfo;
out << libraryId;
out << comic;
out << nextComicId;
out.device()->seek(0);
out << (quint32)(block.size() - sizeof(quint32));
int written, previousWritten;
written = previousWritten = 0;
int tries = 0;
while(written != block.size() && tries < 100)
{
written += localSocket->write(block);
if(written == previousWritten)
tries++;
previousWritten = written;
}
localSocket->waitForBytesWritten(2000);
localSocket->close();
//QLOG_INFO() << QString("Sending Comic Info : writen data (%1,%2)").arg(written).arg(block.size());
if(tries == 100 && written != block.size())
{
emit finished();
QLOG_ERROR() << QString("Sending Comic Info : unable to write data (%1,%2)").arg(written).arg(block.size());
return false;
}
emit finished();
return true;
}
emit finished();
QLOG_ERROR() << "Sending Comic Info : unable to connect to the server";
return false;
} }

View File

@ -18,6 +18,8 @@ public slots:
void readMessage(); void readMessage();
bool requestComicInfo(quint64 libraryId, ComicDB & comic,QList<ComicDB> & siblings); bool requestComicInfo(quint64 libraryId, ComicDB & comic,QList<ComicDB> & siblings);
bool sendComicInfo(quint64 libraryId, ComicDB & comic); bool sendComicInfo(quint64 libraryId, ComicDB & comic);
bool sendComicInfo(quint64 libraryId, ComicDB & comic, qulonglong nextComicId);
private: private:
QLocalSocket * localSocket; QLocalSocket * localSocket;

View File

@ -99,6 +99,7 @@ void YACReaderClientConnectionWorker::run()
quint64 libraryId; quint64 libraryId;
ComicDB comic; ComicDB comic;
qulonglong nextComicId;
int tries = 0; int tries = 0;
int dataAvailable = 0; int dataAvailable = 0;
QByteArray packageSize; QByteArray packageSize;
@ -147,6 +148,15 @@ void YACReaderClientConnectionWorker::run()
dataStream >> libraryId; dataStream >> libraryId;
dataStream >> comic; dataStream >> comic;
bool nextComicInfoAvailable;
if(dataStream.atEnd()) {
nextComicInfoAvailable = false;
} else {
nextComicInfoAvailable = true;
dataStream >> nextComicId;
}
switch (msgType) switch (msgType)
{ {
case YACReader::RequestComicInfo: case YACReader::RequestComicInfo:
@ -183,11 +193,13 @@ void YACReaderClientConnectionWorker::run()
} }
case YACReader::SendComicInfo: case YACReader::SendComicInfo:
{ {
if (nextComicInfoAvailable) {
updateComic(libraryId,comic,nextComicId);
} else {
updateComic(libraryId,comic); updateComic(libraryId,comic);
//clientConnection->disconnectFromServer(); }
break; break;
} }
} }
clientConnection->waitForDisconnected(); clientConnection->waitForDisconnected();
@ -216,3 +228,14 @@ void YACReaderClientConnectionWorker::updateComic(quint64 libraryId, ComicDB & c
DBHelper::update(libraryId, comic.info); DBHelper::update(libraryId, comic.info);
emit comicUpdated(libraryId, comic); emit comicUpdated(libraryId, comic);
} }
void YACReaderClientConnectionWorker::updateComic(quint64 libraryId, ComicDB & comic, qulonglong nextComicId)
{
QMutexLocker locker(&dbMutex);
DBHelper::update(libraryId, comic.info);
ComicInfo nextcomicinfo;
nextcomicinfo.id = nextComicId;
DBHelper::setComicAsReading(libraryId, nextcomicinfo);
emit comicUpdated(libraryId, comic);
}

View File

@ -43,6 +43,8 @@ private:
void getComicInfo(quint64 libraryId, ComicDB & comic, QList<ComicDB> & sibling); void getComicInfo(quint64 libraryId, ComicDB & comic, QList<ComicDB> & sibling);
void updateComic(quint64 libraryId, ComicDB & comic); void updateComic(quint64 libraryId, ComicDB & comic);
void updateComic(quint64 libraryId, ComicDB & comic, qulonglong nextComicId);
QLocalSocket *clientConnection; QLocalSocket *clientConnection;
}; };