[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    koffice/libs
From:       Fredrik Edemar <f_edemar () linux ! se>
Date:       2006-06-28 18:16:09
Message-ID: 1151518569.959311.12908.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 555922 by fedemar:

save the versions


 M  +44 -0     kofficecore/KoDocument.cpp  
 M  +31 -1     store/KoStore.cpp  
 M  +7 -0      store/KoStore.h  


--- trunk/koffice/libs/kofficecore/KoDocument.cpp #555921:555922
@@ -1056,6 +1056,43 @@
             return false;
         }
 
+        if ( !d->m_versionInfo.isEmpty() )
+        {
+          if ( store->open( "VersionList.xml" ) )
+          {
+            KoStoreDevice dev( store );
+            KoXmlWriter* xmlWriter = KoDocument::createOasisXmlWriter( &dev,
+                "VL:version-list" );
+            for (int i = 0; i < d->m_versionInfo.size(); ++i)
+            {
+                KoVersionInfo *version = &d->m_versionInfo[i];
+                xmlWriter->startElement( "VL:version-entry" );
+                xmlWriter->addAttribute( "VL:title", version->title );
+                xmlWriter->addAttribute( "VL:comment", version->comment );
+                xmlWriter->addAttribute( "VL:creator", version->saved_by );
+                xmlWriter->addAttribute( "dc:date-time", \
version->date.toString(Qt::ISODate) ); +                xmlWriter->endElement();
+            }
+            xmlWriter->endElement(); // root element
+            xmlWriter->endDocument();
+            delete xmlWriter;
+            store->close();
+            manifestWriter->addManifestEntry( "VersionList.xml", "text/xml" );
+
+            for (int i = 0; i < d->m_versionInfo.size(); ++i)
+            {
+                KoVersionInfo *version = &d->m_versionInfo[i];
+                store->addDataToFile( version->data, "Versions/" + version->title );
+            }
+          }
+          else
+          {
+            d->lastErrorMessage = i18n( "Not able to write '%1'. Partition full?", \
QString("VersionList.xml") ); +            delete store;
+            return false;
+          }
+         }
+
         // Write out manifest file
         if ( !oasisStore.closeManifestWriter() )
         {
@@ -2163,6 +2200,13 @@
     KoXmlWriter* writer = new KoXmlWriter( dev );
     writer->startDocument( rootElementName );
     writer->startElement( rootElementName );
+
+    if ( qstrcmp( rootElementName, "VL:version-list" ) == 0 ) {
+        writer->addAttribute( "xmlns:VL", KoXmlNS::VL );
+        writer->addAttribute( "xmlns:dc", KoXmlNS::dc );
+        return writer;
+    }
+
     writer->addAttribute( "xmlns:office", KoXmlNS::office );
     writer->addAttribute( "xmlns:meta", KoXmlNS::meta );
 
--- trunk/koffice/libs/store/KoStore.cpp #555921:555922
@@ -456,6 +456,37 @@
   return true;
 }
 
+bool KoStore::addDataToFile( QByteArray &buffer, const QString &destName )
+{
+  QBuffer file( &buffer );
+  if ( !file.open( QIODevice::ReadOnly ))
+  {
+    return false;
+  }
+
+  if ( !open ( destName ) )
+  {
+    return false;
+  }
+
+  QByteArray data;
+  data.resize( 8 * 1024 );
+
+  uint total = 0;
+  for ( int block = 0; ( block = file.read( data.data(), data.size() ) ) > 0; total \
+= block ) +  {
+    data.resize(block);
+    if ( write( data ) != block )
+      return false;
+    data.resize(8*1024);
+  }
+
+  close();
+  file.close();
+
+  return true;
+}
+
 bool KoStore::extractFile ( const QString &srcName, const QString &fileName )
 {
   QFile file( fileName );
@@ -465,7 +496,6 @@
 
 bool KoStore::extractFile( const QString &srcName, QByteArray &data )
 {
-  kdDebug() << "hello" << endl;
   QBuffer buffer( &data );
   return extractFile( srcName, buffer );
 }
--- trunk/koffice/libs/store/KoStore.h #555921:555922
@@ -221,6 +221,13 @@
   bool addLocalFile( const QString &fileName, const QString &destName );
 
   /**
+   * Imports data into a store
+   * @param buffer data
+   * @param destName file in the store
+   */
+  bool addDataToFile( QByteArray &buffer, const QString &destName );
+
+  /**
    * Imports a local directory
    * @param dirPath path to the directory on a disk
    * @param dest path in the store where the directory should get saved


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic