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)23Document::Document(const QString &fileName) 24 : mFileName(fileName) { 25 /// password protected file search ManifestEntry::ManifestEntry( const QString &fileName ) : on okular 26 } 27 open()28bool 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()108Document::~Document() { 109 /// delete mManifest; 110 } 111 lastErrorString() const112QString Document::lastErrorString() const { 113 return mErrorString; 114 } 115 content() const116QByteArray Document::content() const { 117 return mContent; 118 } 119 meta() const120QByteArray Document::meta() const { 121 return mMeta; 122 } 123 styles() const124QByteArray Document::styles() const { 125 return mStyles; 126 } 127 images() const128QMap<QString, QByteArray> Document::images() const { 129 return mImages; 130 } 131 setError(const QString & error)132void Document::setError(const QString &error) 133 { 134 qDebug() << error; 135 mErrorString = error; 136 } 137 138