1 /****************************************************************************
2 *   Copyright (C) 2013 by Jens Nissen jens-chessx@gmx.net                   *
3 *   Copyright (C) 2006 by Tobias Koenig                                     *
4 *   Copyright (C)      by pro                                               *
5 ****************************************************************************/
6 
7 #include "document.h"
8 #include "kzip.h"
9 
10 #include <QByteArray>
11 #include <QMap>
12 #include <QString>
13 #include <QImage>
14 #include <QDebug>
15 
16 #if defined(_MSC_VER) && defined(_DEBUG)
17 #define DEBUG_NEW new( _NORMAL_BLOCK, __FILE__, __LINE__ )
18 #define new DEBUG_NEW
19 #endif // _MSC_VER
20 
21 using namespace OOO;
22 
Document(const QString & fileName)23 Document::Document(const QString &fileName)
24 : mFileName(fileName) {
25     /// password protected file search ManifestEntry::ManifestEntry( const QString &fileName ) : on okular
26 }
27 
open()28 bool Document::open() {
29     mContent.clear();
30     mStyles.clear();
31     KZipStream *Kzip = new KZipStream(mFileName);
32     if (Kzip->canread()) {
33         const QStringList entries = Kzip->filelist();
34 
35         if (!entries.contains("META-INF")) {
36             setError("Invalid document structure (META-INF directory is missing)");
37 			delete Kzip;
38             return false;
39         }
40 
41         if (!entries.contains("content.xml")) {
42             setError("Invalid document structure (content.xml is missing)");
43 			delete Kzip;
44             return false;
45         }
46 
47         if (!entries.contains("styles.xml")) {
48             /// nokia qt odt export dont write
49             setError("Invalid document structure (styles.xml is missing)");
50             ////  return false;
51         }
52 
53         if (!entries.contains("meta.xml")) {
54             /// nokia qt odt export dont write
55             setError("Invalid document structure (meta.xml is missing)");
56             //// return false;
57         }
58 
59         /// fill files
60         //// QMap<QString,QByteArray> listData()
61         QMap<QString, QByteArray> allfiles = Kzip->listData();
62         QMapIterator<QString, QByteArray> i(allfiles);
63         while (i.hasNext()) {
64             i.next();
65             QByteArray xdata(i.value());
66             QImage pic; /// i.value() /// i.key();
67             const QString namex = QString(i.key());
68             pic.loadFromData(xdata);
69             if (!pic.isNull())
70             {
71                 mImages.insert(namex, xdata);
72             }
73             else
74             {
75                 if (namex == "styles.xml") {
76                     mStyles = xdata;
77                 }
78                 if (namex == "content.xml") {
79                     mContent = xdata;
80                 }
81                 if (namex == "META-INF/manifest.xml") {
82                     mMeta = xdata;
83                 }
84                 if (namex == "mimetype") {
85                     mMimetype = xdata;
86                 }
87                 if (namex == "settings.xml") {
88                     mSetting = xdata;
89                 }
90             }
91 
92         }
93         if (QByteArray("application/vnd.oasis.opendocument.text") != mMimetype)
94         {
95             setError(QString("Invalid MimeType found: %1!").arg(QString::fromUtf8(mMimetype)));
96 			delete Kzip;
97             return false;
98         }
99 
100 		delete Kzip;
101         return true;
102     }
103 
104 	delete Kzip;
105     return false;
106 }
107 
~Document()108 Document::~Document() {
109     /// delete mManifest;
110 }
111 
lastErrorString() const112 QString Document::lastErrorString() const {
113     return mErrorString;
114 }
115 
content() const116 QByteArray Document::content() const {
117     return mContent;
118 }
119 
meta() const120 QByteArray Document::meta() const {
121     return mMeta;
122 }
123 
styles() const124 QByteArray Document::styles() const {
125     return mStyles;
126 }
127 
images() const128 QMap<QString, QByteArray> Document::images() const {
129     return mImages;
130 }
131 
setError(const QString & error)132 void Document::setError(const QString &error)
133 {
134     qDebug() << error;
135     mErrorString = error;
136 }
137 
138