[Marble-commits] KDE/kdeedu/marble/src/lib

Thibaut Gridel tgridel at free.fr
Fri Sep 11 22:39:29 CEST 2009


SVN commit 1022480 by tgridel:

FileManager: generic file naming and cache save

 M  +50 -13    FileLoader.cpp  
 M  +1 -1      FileLoader.h  
 M  +6 -4      FileManager.cpp  


--- trunk/KDE/kdeedu/marble/src/lib/FileLoader.cpp #1022479:1022480
@@ -56,31 +56,30 @@
     if( m_contents.isEmpty() ) {
         QString defaultcachename;
         QString defaultsrcname;
-        QString defaulthomecache;
 
-        if( m_filepath.endsWith(".kml") ) {
-            m_filepath.remove(QRegExp("\\.kml$"));
-        }
         qDebug() << "starting parser for" << m_filepath;
 
         QFileInfo fileinfo(m_filepath);
+        QString path = fileinfo.path();
+        if (path == ".") path.clear();
+        QString name = fileinfo.completeBaseName();
+        QString suffix = fileinfo.suffix();
+
         if ( fileinfo.isAbsolute() ) {
             // We got an _absolute_ path now: e.g. "/patrick.kml"
-            defaultcachename = m_filepath + ".cache";
-            defaultsrcname   = m_filepath + ".kml";
+            defaultcachename = path + name + ".cache";
+            defaultsrcname   = path + '/' + name + '.' + suffix;
         }
         else {
             if ( m_filepath.contains( '/' ) ) {
                 // _relative_ path: "maps/mars/viking/patrick.kml"
-                defaultcachename = MarbleDirs::path( m_filepath + ".cache" );
-                defaultsrcname   = MarbleDirs::path( m_filepath + ".kml");
-                defaulthomecache = MarbleDirs::localPath() + m_filepath + ".cache";
+                defaultcachename = MarbleDirs::path( path + name + ".cache" );
+                defaultsrcname   = MarbleDirs::path( path + '/' + name + '.' + suffix);
             }
             else {
                 // _standard_ shared placemarks: "placemarks/patrick.kml"
-                defaultcachename = MarbleDirs::path( "placemarks/" + m_filepath + ".cache" );
-                defaultsrcname   = MarbleDirs::path( "placemarks/" + m_filepath + ".kml");
-                defaulthomecache = MarbleDirs::localPath() + "/placemarks/" + m_filepath + ".cache";
+                defaultcachename = MarbleDirs::path( "placemarks/" + path + name + ".cache" );
+                defaultsrcname   = MarbleDirs::path( "placemarks/" + path + name + '.' + suffix );
             }
         }
 
@@ -120,10 +119,11 @@
             {
                 // Read the KML file.
                 importKml( defaultsrcname );
+                saveFile( defaultcachename );
             }
             else
             {
-                qDebug() << "No Default Placemark Source File for " << m_filepath;
+                qDebug() << "No Default Placemark Source File for " << defaultsrcname;
             }
         }
     } else {
@@ -258,5 +258,42 @@
     return true;
 }
 
+void FileLoader::saveFile( const QString& filename )
+{
+    if ( !QDir( MarbleDirs::localPath() + "/placemarks/" ).exists() )
+        ( QDir::root() ).mkpath( MarbleDirs::localPath() + "/placemarks/" );
+
+    QFile file( filename );
+    file.open( QIODevice::WriteOnly );
+    QDataStream out( &file );
+
+    // Write a header with a "magic number" and a version
+    // out << (quint32)0xA0B0C0D0;
+    out << (quint32)MarbleMagicNumber;
+    out << (qint32)014;
+
+    out.setVersion( QDataStream::Qt_4_2 );
+
+    qreal lon;
+    qreal lat;
+    qreal alt;
+
+    QVector<Marble::GeoDataPlacemark>::const_iterator it = m_document->placemarks().constBegin();
+    QVector<Marble::GeoDataPlacemark>::const_iterator const end = m_document->placemarks().constEnd();
+    for (; it != end; ++it )
+    {
+        out << (*it).name();
+        (it)->coordinate( lon, lat, alt );
+
+        // Use double to provide a single cache file format across architectures
+        out << (double)(lon) << (double)(lat) << (double)(alt);
+        out << QString( (*it).role() );
+        out << QString( (*it).description() );
+        out << QString( (*it).countryCode() );
+        out << (double)(*it).area();
+        out << (qint64)(*it).population();
+    }
+}
+
 #include "FileLoader.moc"
 } // namespace Marble
--- trunk/KDE/kdeedu/marble/src/lib/FileLoader.h #1022479:1022480
@@ -36,7 +36,7 @@
         void importKml( const QString& filename );
         void importKmlFromData();
         bool loadFile(const QString &filename );
-        void saveFile();
+        void saveFile(const QString& filename );
 
         QString m_filepath;
         QString m_contents;
--- trunk/KDE/kdeedu/marble/src/lib/FileManager.cpp #1022479:1022480
@@ -88,16 +88,18 @@
 
 QString FileManager::toRegularName( QString name )
 {
-    return name.remove(".kml").remove(".cache");
+    QFileInfo fileinfo(name);
+    return fileinfo.completeBaseName();
 }
 
 void FileManager::addFile( const QString& filepath )
 {
-    if( ! containers().contains( toRegularName( filepath ) ) ) {
-        qDebug() << "adding container:" << toRegularName( filepath );
+    QString regularName = toRegularName( filepath );
+    if( ! containers().contains( regularName ) ) {
+        qDebug() << "adding container:" << regularName;
         FileLoader* loader = new FileLoader( this, filepath );
         appendLoader( loader );
-        d->m_pathList.append( toRegularName( filepath ) );
+        d->m_pathList.append( filepath );
     }
 }
 


More information about the Marble-commits mailing list