forked from soutade/libgourou
Add support for PDF (needs uPDFParser library)
This commit is contained in:
@@ -5,7 +5,7 @@ CXXFLAGS=-Wall `pkg-config --cflags Qt5Core Qt5Network` -fPIC -I$(ROOT)/include
|
||||
ifneq ($(STATIC_UTILS),)
|
||||
LDFLAGS=`pkg-config --libs Qt5Core Qt5Network` -L$(ROOT) $(ROOT)/libgourou.a -lcrypto -lzip
|
||||
else
|
||||
LDFLAGS=`pkg-config --libs Qt5Core Qt5Network` -L$(ROOT) -lgourou -lcrypto -lzip
|
||||
LDFLAGS=`pkg-config --libs Qt5Core Qt5Network` -L$(ROOT) -lgourou -lcrypto -lzip -lz
|
||||
endif
|
||||
|
||||
ifneq ($(DEBUG),)
|
||||
|
@@ -79,9 +79,7 @@ public:
|
||||
{
|
||||
filename = item->getMetadata("title");
|
||||
if (filename == "")
|
||||
filename = "output.epub";
|
||||
else
|
||||
filename += ".epub";
|
||||
filename = "output";
|
||||
}
|
||||
else
|
||||
filename = outputFile;
|
||||
@@ -95,7 +93,19 @@ public:
|
||||
filename = std::string(outputDir) + "/" + filename;
|
||||
}
|
||||
|
||||
processor.download(item, filename);
|
||||
gourou::DRMProcessor::ITEM_TYPE type = processor.download(item, filename);
|
||||
|
||||
if (!outputFile)
|
||||
{
|
||||
std::string finalName = filename;
|
||||
if (type == gourou::DRMProcessor::ITEM_TYPE::PDF)
|
||||
finalName += ".pdf";
|
||||
else
|
||||
finalName += ".epub";
|
||||
QDir dir;
|
||||
dir.rename(filename.c_str(), finalName.c_str());
|
||||
filename = finalName;
|
||||
}
|
||||
std::cout << "Created " << filename << std::endl;
|
||||
} catch(std::exception& e)
|
||||
{
|
||||
|
@@ -38,6 +38,7 @@
|
||||
#include <QFile>
|
||||
|
||||
#include <zip.h>
|
||||
#include <zlib.h>
|
||||
|
||||
#include <libgourou_common.h>
|
||||
#include <libgourou_log.h>
|
||||
@@ -82,7 +83,7 @@ void DRMProcessorClientImpl::randBytes(unsigned char* bytesOut, unsigned int len
|
||||
}
|
||||
|
||||
/* HTTP interface */
|
||||
std::string DRMProcessorClientImpl::sendHTTPRequest(const std::string& URL, const std::string& POSTData, const std::string& contentType)
|
||||
std::string DRMProcessorClientImpl::sendHTTPRequest(const std::string& URL, const std::string& POSTData, const std::string& contentType, std::map<std::string, std::string>* responseHeaders)
|
||||
{
|
||||
QNetworkRequest request(QUrl(URL.c_str()));
|
||||
QNetworkAccessManager networkManager;
|
||||
@@ -121,12 +122,12 @@ std::string DRMProcessorClientImpl::sendHTTPRequest(const std::string& URL, cons
|
||||
if (reply->error() != QNetworkReply::NoError)
|
||||
EXCEPTION(gourou::CLIENT_NETWORK_ERROR, "Error " << reply->errorString().toStdString());
|
||||
|
||||
if (gourou::logLevel >= gourou::DEBUG)
|
||||
{
|
||||
QList<QByteArray> headers = reply->rawHeaderList();
|
||||
for (int i = 0; i < headers.size(); ++i) {
|
||||
QList<QByteArray> headers = reply->rawHeaderList();
|
||||
for (int i = 0; i < headers.size(); ++i) {
|
||||
if (gourou::logLevel >= gourou::DEBUG)
|
||||
std::cout << headers[i].constData() << " : " << reply->rawHeader(headers[i]).constData() << std::endl;
|
||||
}
|
||||
if (responseHeaders)
|
||||
(*responseHeaders)[headers[i].constData()] = reply->rawHeader(headers[i]).constData();
|
||||
}
|
||||
|
||||
replyData = reply->readAll();
|
||||
@@ -420,3 +421,78 @@ void DRMProcessorClientImpl::zipClose(void* handler)
|
||||
{
|
||||
zip_close((zip_t*)handler);
|
||||
}
|
||||
|
||||
void DRMProcessorClientImpl::inflate(std::string data, gourou::ByteArray& result,
|
||||
int wbits)
|
||||
{
|
||||
unsigned int dataSize = data.size()*2;
|
||||
unsigned char* buffer = new unsigned char[dataSize];
|
||||
|
||||
z_stream infstream;
|
||||
|
||||
infstream.zalloc = Z_NULL;
|
||||
infstream.zfree = Z_NULL;
|
||||
infstream.opaque = Z_NULL;
|
||||
|
||||
infstream.avail_in = (uInt)data.size();
|
||||
infstream.next_in = (Bytef *)data.c_str(); // input char array
|
||||
infstream.avail_out = (uInt)dataSize; // size of output
|
||||
infstream.next_out = (Bytef *)buffer; // output char array
|
||||
|
||||
int ret = inflateInit2(&infstream, wbits);
|
||||
|
||||
ret = ::inflate(&infstream, Z_SYNC_FLUSH);
|
||||
while (ret == Z_OK || ret == Z_STREAM_END)
|
||||
{
|
||||
result.append(buffer, dataSize-infstream.avail_out);
|
||||
if (ret == Z_STREAM_END) break;
|
||||
infstream.avail_out = (uInt)dataSize; // size of output
|
||||
infstream.next_out = (Bytef *)buffer; // output char array
|
||||
ret = ::inflate(&infstream, Z_SYNC_FLUSH);
|
||||
}
|
||||
|
||||
inflateEnd(&infstream);
|
||||
|
||||
delete[] buffer;
|
||||
|
||||
if (ret != Z_OK && ret != Z_STREAM_END && ret != Z_BUF_ERROR)
|
||||
EXCEPTION(gourou::CLIENT_ZIP_ERROR, zError(ret));
|
||||
}
|
||||
|
||||
void DRMProcessorClientImpl::deflate(std::string data, gourou::ByteArray& result,
|
||||
int wbits, int compressionLevel)
|
||||
{
|
||||
unsigned int dataSize = data.size();
|
||||
unsigned char* buffer = new unsigned char[dataSize];
|
||||
|
||||
z_stream defstream;
|
||||
|
||||
defstream.zalloc = Z_NULL;
|
||||
defstream.zfree = Z_NULL;
|
||||
defstream.opaque = Z_NULL;
|
||||
|
||||
defstream.avail_in = (uInt)data.size();
|
||||
defstream.next_in = (Bytef *)data.c_str(); // input char array
|
||||
defstream.avail_out = (uInt)dataSize; // size of output
|
||||
defstream.next_out = (Bytef *)buffer; // output char array
|
||||
|
||||
int ret = deflateInit2(&defstream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, wbits,
|
||||
compressionLevel, Z_DEFAULT_STRATEGY);
|
||||
|
||||
ret = ::deflate(&defstream, Z_SYNC_FLUSH);
|
||||
while (ret == Z_OK || ret == Z_STREAM_END)
|
||||
{
|
||||
result.append(buffer, dataSize-defstream.avail_out);
|
||||
if (ret == Z_STREAM_END) break;
|
||||
defstream.avail_out = (uInt)dataSize; // size of output
|
||||
defstream.next_out = (Bytef *)buffer; // output char array
|
||||
ret = ::deflate(&defstream, Z_SYNC_FLUSH);
|
||||
}
|
||||
|
||||
deflateEnd(&defstream);
|
||||
|
||||
delete[] buffer;
|
||||
|
||||
if (ret != Z_OK && ret != Z_STREAM_END && ret != Z_BUF_ERROR)
|
||||
EXCEPTION(gourou::CLIENT_ZIP_ERROR, zError(ret));
|
||||
}
|
||||
|
@@ -46,7 +46,7 @@ class DRMProcessorClientImpl : public gourou::DRMProcessorClient
|
||||
virtual void randBytes(unsigned char* bytesOut, unsigned int length);
|
||||
|
||||
/* HTTP interface */
|
||||
virtual std::string sendHTTPRequest(const std::string& URL, const std::string& POSTData=std::string(""), const std::string& contentType=std::string(""));
|
||||
virtual std::string sendHTTPRequest(const std::string& URL, const std::string& POSTData=std::string(""), const std::string& contentType=std::string(""), std::map<std::string, std::string>* responseHeaders=0);
|
||||
|
||||
virtual void RSAPrivateEncrypt(const unsigned char* RSAKey, unsigned int RSAKeyLength,
|
||||
const RSA_KEY_TYPE keyType, const std::string& password,
|
||||
@@ -108,6 +108,10 @@ class DRMProcessorClientImpl : public gourou::DRMProcessorClient
|
||||
|
||||
virtual void zipClose(void* handler);
|
||||
|
||||
virtual void inflate(std::string data, gourou::ByteArray& result, int wbits=-15);
|
||||
|
||||
virtual void deflate(std::string data, gourou::ByteArray& result,
|
||||
int wbits=-15, int compressionLevel=8);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user