diff --git a/gui/previewresult.cpp b/gui/previewresult.cpp index e333e39..3ae1fa2 100644 --- a/gui/previewresult.cpp +++ b/gui/previewresult.cpp @@ -1,5 +1,4 @@ #include "previewresult.h" - PreviewResult::PreviewResult() { } @@ -33,3 +32,11 @@ unsigned int PreviewResult::getPage() const { return this->page; } + +QByteArray PreviewResult::serialize() const +{ + QByteArray result; + QDataStream stream{&result, QIODevice::WriteOnly}; + stream << 0 << this->documentPath << this->page; + return result; +} diff --git a/gui/previewresult.h b/gui/previewresult.h index 4ff9943..f35cbbc 100644 --- a/gui/previewresult.h +++ b/gui/previewresult.h @@ -2,6 +2,12 @@ #define PREVIEWRESULT_H #include "clicklabel.h" +enum PreviewResultType +{ + PDF = 1, + PlainText +}; + class PreviewResult { protected: @@ -17,6 +23,7 @@ class PreviewResult virtual bool hasPreview(); QString getDocumentPath() const; unsigned int getPage() const; + virtual QByteArray serialize() const; }; #endif // PREVIEWRESULT_H diff --git a/gui/previewresultpdf.cpp b/gui/previewresultpdf.cpp index 1d425ec..3775cea 100644 --- a/gui/previewresultpdf.cpp +++ b/gui/previewresultpdf.cpp @@ -1,5 +1,4 @@ #include "previewresultpdf.h" - PreviewResultPdf::PreviewResultPdf(const PreviewResult &o) { this->documentPath = o.getDocumentPath(); @@ -19,3 +18,27 @@ bool PreviewResultPdf::hasPreview() bool result = !this->previewImage.isNull(); return result; } + +QByteArray PreviewResultPdf::serialize() const +{ + QByteArray result; + QDataStream stream{&result, QIODevice::WriteOnly}; + PreviewResultType type = PreviewResultType::PDF; + stream << type << this->documentPath << this->page << this->previewImage; + return result; +} + +QSharedPointer PreviewResultPdf::deserialize(QByteArray &ba) +{ + PreviewResultPdf *result = new PreviewResultPdf(); + PreviewResultType type; + + QDataStream stream{&ba, QIODevice::ReadOnly}; + stream >> type; + if(type != PreviewResultType::PDF) + { + throw std::runtime_error("Invalid byte array: Not a pdf preview"); + } + stream >> result->documentPath >> result->page >> result->previewImage; + return QSharedPointer(result); +} diff --git a/gui/previewresultpdf.h b/gui/previewresultpdf.h index fd0f4c4..5f4cc2d 100644 --- a/gui/previewresultpdf.h +++ b/gui/previewresultpdf.h @@ -12,6 +12,10 @@ class PreviewResultPdf : public PreviewResult QWidget *createPreviewWidget() override; bool hasPreview() override; + + QByteArray serialize() const; + + static QSharedPointer deserialize(QByteArray &ba); }; #endif // PREVIEWRESULTPDF_H diff --git a/gui/previewresultplaintext.cpp b/gui/previewresultplaintext.cpp index 3e2a916..ad5527f 100644 --- a/gui/previewresultplaintext.cpp +++ b/gui/previewresultplaintext.cpp @@ -28,3 +28,27 @@ void PreviewResultPlainText::setText(QString text) { this->text = text; } + +QByteArray PreviewResultPlainText::serialize() const +{ + QByteArray result; + QDataStream stream{&result, QIODevice::WriteOnly}; + PreviewResultType type = PreviewResultType::PlainText; + stream << type << this->documentPath << this->page << this->text; + return result; +} + +QSharedPointer PreviewResultPlainText::deserialize(QByteArray &ba) +{ + PreviewResultPlainText *result = new PreviewResultPlainText(); + PreviewResultType type; + + QDataStream stream{&ba, QIODevice::ReadOnly}; + stream >> type; + if(type != PreviewResultType::PlainText) + { + throw std::runtime_error("Invalid byte array: Not a pdf preview"); + } + stream >> result->documentPath >> result->page >> result->text; + return QSharedPointer(result); +} diff --git a/gui/previewresultplaintext.h b/gui/previewresultplaintext.h index 786f201..a0ed5a7 100644 --- a/gui/previewresultplaintext.h +++ b/gui/previewresultplaintext.h @@ -15,6 +15,9 @@ class PreviewResultPlainText : public PreviewResult bool hasPreview() override; void setText(QString text); + + QByteArray serialize() const; + static QSharedPointer deserialize(QByteArray &ba); }; #endif // PREVIEWRESULTPLAINTEXT_H