Vergelijk commits
4 Commits
v0.9
...
02a371b81e
Auteur | SHA1 | Datum | |
---|---|---|---|
02a371b81e | |||
d960570171 | |||
c5713f5839 | |||
8550506517 |
@ -24,7 +24,9 @@ QString DefaultTextProcessor::processText(const QByteArray &data) const
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<PageData> DefaultTextProcessor::process(const QByteArray &data) const
|
DocumentProcessResult DefaultTextProcessor::process(const QByteArray &data) const
|
||||||
{
|
{
|
||||||
return {{0, processText(data)}};
|
DocumentProcessResult result;
|
||||||
|
result.pages.append({0, processText(data)});
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ class DefaultTextProcessor : public Processor
|
|||||||
public:
|
public:
|
||||||
DefaultTextProcessor();
|
DefaultTextProcessor();
|
||||||
QString processText(const QByteArray &data) const;
|
QString processText(const QByteArray &data) const;
|
||||||
QVector<PageData> process(const QByteArray &data) const override;
|
DocumentProcessResult process(const QByteArray &data) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DEFAULTTEXTPROCESSOR_H
|
#endif // DEFAULTTEXTPROCESSOR_H
|
||||||
|
31
shared/documentoutlineentry.cpp
Normal file
31
shared/documentoutlineentry.cpp
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#include "documentoutlineentry.h"
|
||||||
|
|
||||||
|
DocumentOutlineEntry::DocumentOutlineEntry()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QDataStream &operator<<(QDataStream &out, const DocumentOutlineEntry &pd)
|
||||||
|
{
|
||||||
|
out << pd.text << pd.type << pd.destinationPage;
|
||||||
|
out << pd.children.size();
|
||||||
|
for(const DocumentOutlineEntry &entry : pd.children)
|
||||||
|
{
|
||||||
|
out << entry;
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDataStream &operator>>(QDataStream &in, DocumentOutlineEntry &pd)
|
||||||
|
{
|
||||||
|
in >> pd.text >> pd.type >> pd.destinationPage;
|
||||||
|
|
||||||
|
int numChildren;
|
||||||
|
in >> numChildren;
|
||||||
|
for(int i = 0; i < numChildren; i++)
|
||||||
|
{
|
||||||
|
DocumentOutlineEntry entry;
|
||||||
|
in >> entry;
|
||||||
|
pd.children.append(entry);
|
||||||
|
}
|
||||||
|
return in;
|
||||||
|
}
|
29
shared/documentoutlineentry.h
Normal file
29
shared/documentoutlineentry.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#ifndef DOCUMENTOUTLINEENTRY_H
|
||||||
|
#define DOCUMENTOUTLINEENTRY_H
|
||||||
|
#include <QMetaType>
|
||||||
|
#include <QDataStream>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
enum OutlineDestinationType
|
||||||
|
{
|
||||||
|
OUTLINE_DESTINATION_TYPE_NONE,
|
||||||
|
OUTLINE_DESTINATION_TYPE_PAGE
|
||||||
|
/* In the future, links, or #anchors are possible */
|
||||||
|
};
|
||||||
|
|
||||||
|
class DocumentOutlineEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DocumentOutlineEntry();
|
||||||
|
QVector<DocumentOutlineEntry> children;
|
||||||
|
OutlineDestinationType type;
|
||||||
|
QString text;
|
||||||
|
unsigned int destinationPage;
|
||||||
|
};
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(DocumentOutlineEntry);
|
||||||
|
|
||||||
|
QDataStream &operator<<(QDataStream &out, const DocumentOutlineEntry &pd);
|
||||||
|
QDataStream &operator>>(QDataStream &in, DocumentOutlineEntry &pd);
|
||||||
|
|
||||||
|
#endif // DOCUMENTOUTLINEENTRY_H
|
39
shared/documentprocessresult.cpp
Normal file
39
shared/documentprocessresult.cpp
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#include "documentprocessresult.h"
|
||||||
|
|
||||||
|
QDataStream &operator<<(QDataStream &out, const DocumentProcessResult &pd)
|
||||||
|
{
|
||||||
|
out << pd.pages.size();
|
||||||
|
out << pd.outlines.size();
|
||||||
|
for(const PageData &pd : pd.pages)
|
||||||
|
{
|
||||||
|
out << pd;
|
||||||
|
}
|
||||||
|
for(const DocumentOutlineEntry &outline : pd.outlines)
|
||||||
|
{
|
||||||
|
out << outline;
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDataStream &operator>>(QDataStream &in, DocumentProcessResult &pd)
|
||||||
|
{
|
||||||
|
int numPages, numOutlines;
|
||||||
|
in >> numPages;
|
||||||
|
in >> numOutlines;
|
||||||
|
|
||||||
|
for(int i = 0; i < numPages; i++)
|
||||||
|
{
|
||||||
|
PageData data;
|
||||||
|
in >> data;
|
||||||
|
pd.pages.append(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < numOutlines; i++)
|
||||||
|
{
|
||||||
|
DocumentOutlineEntry outline;
|
||||||
|
in >> outline;
|
||||||
|
pd.outlines.append(outline);
|
||||||
|
}
|
||||||
|
|
||||||
|
return in;
|
||||||
|
}
|
17
shared/documentprocessresult.h
Normal file
17
shared/documentprocessresult.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#ifndef DOCUMENTPROCESSRESULT_H
|
||||||
|
#define DOCUMENTPROCESSRESULT_H
|
||||||
|
#include <pagedata.h>
|
||||||
|
#include <documentoutlineentry.h>
|
||||||
|
|
||||||
|
class DocumentProcessResult
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
QVector<PageData> pages;
|
||||||
|
QVector<DocumentOutlineEntry> outlines;
|
||||||
|
};
|
||||||
|
Q_DECLARE_METATYPE(DocumentProcessResult);
|
||||||
|
|
||||||
|
QDataStream &operator<<(QDataStream &out, const DocumentProcessResult &pd);
|
||||||
|
QDataStream &operator>>(QDataStream &in, DocumentProcessResult &pd);
|
||||||
|
|
||||||
|
#endif // DOCUMENTPROCESSRESULT_H
|
2
shared/migrations/6.sql
Normal file
2
shared/migrations/6.sql
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
CREATE TABLE outline(id INTEGER PRIMARY KEY, fileid INTEGER REFERENCES file (id) ON DELETE CASCADE, text varchar(1024), page integer);
|
||||||
|
CREATE INDEX outline_fileid ON outline (fileid);
|
@ -5,5 +5,6 @@
|
|||||||
<file>3.sql</file>
|
<file>3.sql</file>
|
||||||
<file>4.sql</file>
|
<file>4.sql</file>
|
||||||
<file>5.sql</file>
|
<file>5.sql</file>
|
||||||
|
<file>6.sql</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
@ -3,12 +3,12 @@
|
|||||||
#include "odtprocessor.h"
|
#include "odtprocessor.h"
|
||||||
#include "tagstripperprocessor.h"
|
#include "tagstripperprocessor.h"
|
||||||
|
|
||||||
QVector<PageData> OdtProcessor::process(const QByteArray & /*data*/) const
|
DocumentProcessResult OdtProcessor::process(const QByteArray & /*data*/) const
|
||||||
{
|
{
|
||||||
throw LooqsGeneralException("Not implemented yet");
|
throw LooqsGeneralException("Not implemented yet");
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<PageData> OdtProcessor::process(QString path) const
|
DocumentProcessResult OdtProcessor::process(QString path) const
|
||||||
{
|
{
|
||||||
QuaZipFile zipFile(path);
|
QuaZipFile zipFile(path);
|
||||||
zipFile.setFileName("content.xml");
|
zipFile.setFileName("content.xml");
|
||||||
|
@ -8,9 +8,9 @@ class OdtProcessor : public Processor
|
|||||||
{
|
{
|
||||||
this->PREFERED_DATA_SOURCE = FILEPATH;
|
this->PREFERED_DATA_SOURCE = FILEPATH;
|
||||||
}
|
}
|
||||||
QVector<PageData> process(const QByteArray &data) const override;
|
DocumentProcessResult process(const QByteArray &data) const override;
|
||||||
|
|
||||||
QVector<PageData> process(QString path) const override;
|
DocumentProcessResult process(QString path) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ODTPROCESSOR_H
|
#endif // ODTPROCESSOR_H
|
||||||
|
@ -65,18 +65,12 @@ void SandboxedProcessor::enableSandbox(QString readablePath)
|
|||||||
exile_free_policy(policy);
|
exile_free_policy(policy);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SandboxedProcessor::printResults(const QVector<PageData> &pageData)
|
void SandboxedProcessor::printResults(const DocumentProcessResult &result)
|
||||||
{
|
{
|
||||||
QFile fsstdout;
|
QFile fsstdout;
|
||||||
fsstdout.open(stdout, QIODevice::WriteOnly);
|
fsstdout.open(stdout, QIODevice::WriteOnly);
|
||||||
QDataStream stream(&fsstdout);
|
QDataStream stream(&fsstdout);
|
||||||
|
stream << result;
|
||||||
for(const PageData &data : pageData)
|
|
||||||
{
|
|
||||||
stream << data;
|
|
||||||
// fsstdout.flush();
|
|
||||||
}
|
|
||||||
|
|
||||||
fsstdout.close();
|
fsstdout.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,7 +96,7 @@ SaveFileResult SandboxedProcessor::process()
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<PageData> pageData;
|
DocumentProcessResult processResult;
|
||||||
QString absPath = fileInfo.absoluteFilePath();
|
QString absPath = fileInfo.absoluteFilePath();
|
||||||
|
|
||||||
try
|
try
|
||||||
@ -111,13 +105,13 @@ SaveFileResult SandboxedProcessor::process()
|
|||||||
{
|
{
|
||||||
/* Read access to FS needed... doh..*/
|
/* Read access to FS needed... doh..*/
|
||||||
enableSandbox(absPath);
|
enableSandbox(absPath);
|
||||||
pageData = processor->process(absPath);
|
processResult = processor->process(absPath);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
QByteArray data = Utils::readFile(absPath);
|
QByteArray data = Utils::readFile(absPath);
|
||||||
enableSandbox();
|
enableSandbox();
|
||||||
pageData = processor->process(data);
|
processResult = processor->process(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(LooqsGeneralException &e)
|
catch(LooqsGeneralException &e)
|
||||||
@ -126,6 +120,6 @@ SaveFileResult SandboxedProcessor::process()
|
|||||||
return PROCESSFAIL;
|
return PROCESSFAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
printResults(pageData);
|
printResults(processResult);
|
||||||
return pageData.isEmpty() ? OK_WASEMPTY : OK;
|
return processResult.pages.isEmpty() ? OK_WASEMPTY : OK;
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#define SANDBOXEDPROCESSOR_H
|
#define SANDBOXEDPROCESSOR_H
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QMimeDatabase>
|
#include <QMimeDatabase>
|
||||||
#include "pagedata.h"
|
#include "documentprocessresult.h"
|
||||||
#include "savefileresult.h"
|
#include "savefileresult.h"
|
||||||
|
|
||||||
class SandboxedProcessor
|
class SandboxedProcessor
|
||||||
@ -12,7 +12,7 @@ class SandboxedProcessor
|
|||||||
QMimeDatabase mimeDatabase;
|
QMimeDatabase mimeDatabase;
|
||||||
|
|
||||||
void enableSandbox(QString readablePath = "");
|
void enableSandbox(QString readablePath = "");
|
||||||
void printResults(const QVector<PageData> &pageData);
|
void printResults(const DocumentProcessResult &pageData);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SandboxedProcessor(QString filepath)
|
SandboxedProcessor(QString filepath)
|
||||||
|
@ -4,11 +4,11 @@ TagStripperProcessor::TagStripperProcessor()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<PageData> TagStripperProcessor::process(const QByteArray &data) const
|
DocumentProcessResult TagStripperProcessor::process(const QByteArray &data) const
|
||||||
{
|
{
|
||||||
auto result = DefaultTextProcessor::process(data);
|
auto result = DefaultTextProcessor::process(data);
|
||||||
// TODO: does not work properly with <br> and does not deal with entities...
|
// TODO: does not work properly with <br> and does not deal with entities...
|
||||||
|
Q_ASSERT(result.pages.size() > 0);
|
||||||
result[0].content.remove(QRegExp("<[^>]*>"));
|
result.pages[0].content.remove(QRegExp("<[^>]*>"));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ class TagStripperProcessor : public DefaultTextProcessor
|
|||||||
TagStripperProcessor();
|
TagStripperProcessor();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QVector<PageData> process(const QByteArray &data) const override;
|
DocumentProcessResult process(const QByteArray &data) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // XMLSTRIPPERPROCESSOR_H
|
#endif // XMLSTRIPPERPROCESSOR_H
|
||||||
|
Verwijs in nieuw issue
Block a user