| 29 | #include <QMessageBox> |
| 30 | |
| 31 | bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB &comic, QList<ComicDB> &siblings, OpenComicSource source) |
| 32 | { |
| 33 | localSocket->connectToServer(YACREADERLIBRARY_GUID); |
| 34 | if (localSocket->isOpen()) { |
| 35 | QByteArray block; |
| 36 | QDataStream out(&block, QIODevice::WriteOnly); |
| 37 | out.setVersion(QDataStream::Qt_4_8); |
| 38 | out << (quint32)0; |
| 39 | out << (quint8)YACReader::RequestComicInfo; |
| 40 | out << libraryId; |
| 41 | out << source; |
| 42 | out << comic; |
| 43 | out.device()->seek(0); |
| 44 | out << (quint32)(block.size() - sizeof(quint32)); |
| 45 | |
| 46 | int written = 0; |
| 47 | int previousWritten = 0; |
| 48 | quint16 tries = 0; |
| 49 | while (written != block.size() && tries < 200) { |
| 50 | written += localSocket->write(block); |
| 51 | localSocket->flush(); |
| 52 | if (written == previousWritten) // no bytes were written |
| 53 | tries++; |
| 54 | previousWritten = written; |
| 55 | } |
| 56 | if (tries == 200) { |
| 57 | localSocket->close(); |
| 58 | QLOG_ERROR() << "Requesting Comic Info : unable to send request"; |
| 59 | return false; |
| 60 | } |
| 61 | |
| 62 | localSocket->waitForBytesWritten(2000); |
| 63 | |
| 64 | // QByteArray data; |
| 65 | tries = 0; |
| 66 | int dataAvailable = 0; |
| 67 | QByteArray packageSize; |
| 68 | localSocket->waitForReadyRead(1000); |
| 69 | while (packageSize.size() < (int)sizeof(quint32) && tries < 20) { |
| 70 | packageSize.append(localSocket->read(sizeof(quint32) - packageSize.size())); |
| 71 | localSocket->waitForReadyRead(100); |
| 72 | if (dataAvailable == packageSize.size()) { |
| 73 | tries++; // TODO apply 'tries' fix |
| 74 | } |
| 75 | dataAvailable = packageSize.size(); |
| 76 | } |
| 77 | if (tries == 20) { |
| 78 | localSocket->close(); |
| 79 | QLOG_ERROR() << "Requesting Comic Info : unable to read package size"; |
| 80 | return false; |
| 81 | } |
| 82 | QDataStream sizeStream(packageSize); // localSocket->read(sizeof(quint32))); |
| 83 | sizeStream.setVersion(QDataStream::Qt_4_8); |
| 84 | quint32 totalSize = 0; |
| 85 | sizeStream >> totalSize; |
| 86 | |
| 87 | QByteArray data; |
| 88 | |