Hello community,

here is the log from the commit of package akonadi-runtime for openSUSE:Factory
checked in at Sat Oct 8 11:40:50 CEST 2011.



--------
--- openSUSE:Factory/akonadi-runtime/akonadi-runtime.changes    2011-09-23 
01:51:34.000000000 +0200
+++ akonadi-runtime/akonadi-runtime.changes     2011-10-08 00:30:32.000000000 
+0200
@@ -1,0 +2,15 @@
+Fri Oct  7 22:07:50 UTC 2011 - [email protected]
+
+- Update to 1.6.2
+  - Do not update item revision if only the RID or RREV changed.
+  - Fix usage of wrong ids for part filenames.
+  - Only set item dirty flag if the payload changed.
+  - Only drop content mimetype for unsubscribed collections in LIST/LSUB.
+- 1.6.1 changes:
+  - Fix crash on agent launcher exit.
+  - Fix valgrind-ing agents running in the agent launcher.
+  - Fix restarting of agents in broken state.
+  - Fix pipe naming on multi-user Windows systems.
+  - Raise MySQL timeout.
+
+-------------------------------------------------------------------

calling whatdependson for head-i586


Old:
----
  akonadi-1.6.0.tar.bz2

New:
----
  akonadi-1.6.2.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ akonadi-runtime.spec ++++++
--- /var/tmp/diff_new_pack.erzFEH/_old  2011-10-08 11:40:31.000000000 +0200
+++ /var/tmp/diff_new_pack.erzFEH/_new  2011-10-08 11:40:31.000000000 +0200
@@ -18,8 +18,8 @@
 
 
 Name:           akonadi-runtime
-Version:        1.6.0
-Release:        5
+Version:        1.6.2
+Release:        1
 %define rversion %{version}
 License:        LGPLv2.1+
 Summary:        PIM Storage Service

++++++ akonadi-1.6.0.tar.bz2 -> akonadi-1.6.2.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.6.0/CMakeLists.txt 
new/akonadi-1.6.2/CMakeLists.txt
--- old/akonadi-1.6.0/CMakeLists.txt    2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/CMakeLists.txt    2011-10-03 12:02:01.000000000 +0200
@@ -10,9 +10,10 @@
 include(CTest)
 include(CTestConfig.cmake)
 option(AKONADI_BUILD_TESTS "Build the Akonadi unit tests." TRUE)
+option(AKONADI_BUILD_QSQLITE "Build the Sqlite backend." TRUE)
+option(AKONADI_USE_STRIGI_SEARCH "Build Akonadi with strigi as search engine." 
FALSE)
 option(INSTALL_QSQLITE_IN_QT_PREFIX "Install the QSQLite plugin in 
QT_PLUGIN_DIR" FALSE)
 option(STATIC_LIBRARY "Build Akonadi as a static library." FALSE)
-option(AKONADI_USE_STRIGI_SEARCH "Build Akonadi with strigi as search engine." 
FALSE)
 
 if (NOT DEFINED DATABASE_BACKEND)
   set(DATABASE_BACKEND "MYSQL" CACHE STRING "The default database backend to 
use for Akonadi. Can be either MYSQL, POSTGRES or SQLITE")
@@ -55,7 +56,7 @@
 
 set(AKONADI_VERSION_MAJOR "1")
 set(AKONADI_VERSION_MINOR "6")
-set(AKONADI_VERSION_PATCH "0")
+set(AKONADI_VERSION_PATCH "2")
 set(AKONADI_VERSION 
"${AKONADI_VERSION_MAJOR}.${AKONADI_VERSION_MINOR}.${AKONADI_VERSION_PATCH}")
 set(AKONADI_VERSION_STRING "${AKONADI_VERSION}")
 
@@ -88,6 +89,7 @@
     set ( _backend ${ARGV0} )
     if ( "${_backend}" STREQUAL "SQLITE" )
         set(AKONADI_DATABASE_BACKEND QSQLITE3)
+        set(AKONADI_BUILD_QSQLITE TRUE)
     else()
         if ( "${_backend}" STREQUAL "POSTGRES" )
           set(AKONADI_DATABASE_BACKEND QPSQL)
@@ -184,9 +186,11 @@
   set (SQLITE_REQUIRED "FALSE")
 endif()
 
-set(SQLITE_MIN_VERSION 3.6.23)
-find_package(Sqlite)
-macro_log_feature(SQLITE_FOUND "Sqlite" "Sqlite database library" 
"http://www.sqlite.org"; ${SQLITE_REQUIRED} "${SQLITE_MIN_VERSION}" "")
+if(AKONADI_BUILD_QSQLITE)
+  set(SQLITE_MIN_VERSION 3.6.23)
+  find_package(Sqlite)
+  macro_log_feature(SQLITE_FOUND "Sqlite" "Sqlite database library" 
"http://www.sqlite.org"; ${SQLITE_REQUIRED} "${SQLITE_MIN_VERSION}" "")
+endif()
 
 ############### Compilers flags ###############
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.6.0/Mainpage.dox 
new/akonadi-1.6.2/Mainpage.dox
--- old/akonadi-1.6.0/Mainpage.dox      2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/Mainpage.dox      2011-10-03 12:02:01.000000000 +0200
@@ -315,6 +315,6 @@
 
 // DOXYGEN_EXCLUDE = sqlplugin server/control server/akonadictl server/tests
 // DOXYGEN_PROJECTNAME=Akonadi
-// DOXYGEN_PROJECTVERSION=1.6.0
+// DOXYGEN_PROJECTVERSION=1.6.2
 
 // vim:ts=4:sw=4:expandtab:filetype=doxygen
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.6.0/NEWS new/akonadi-1.6.2/NEWS
--- old/akonadi-1.6.0/NEWS      2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/NEWS      2011-10-03 12:02:01.000000000 +0200
@@ -1,3 +1,18 @@
+1.6.2                         03-October-2011
+---------------------------------------------
+- Do not update item revision if only the RID or RREV changed.
+- Fix usage of wrong ids for part filenames.
+- Only set item dirty flag if the payload changed.
+- Only drop content mimetype for unsubscribed collections in LIST/LSUB.
+
+1.6.1                       15-September-2011
+---------------------------------------------
+- Fix crash on agent launcher exit.
+- Fix valgrind-ing agents running in the agent launcher.
+- Fix restarting of agents in broken state.
+- Fix pipe naming on multi-user Windows systems.
+- Raise MySQL timeout.
+
 1.6.0                            10-July-2011
 ---------------------------------------------
 - Enable external payload storage unconditionally.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.6.0/agentserver/agentpluginloader.cpp 
new/akonadi-1.6.2/agentserver/agentpluginloader.cpp
--- old/akonadi-1.6.0/agentserver/agentpluginloader.cpp 2011-07-10 
14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/agentserver/agentpluginloader.cpp 2011-10-03 
12:02:01.000000000 +0200
@@ -25,13 +25,8 @@
 
 AgentPluginLoader::~AgentPluginLoader()
 {
-  QHash<QString, QPluginLoader*>::iterator it = m_pluginLoaders.begin();
-  while ( it != m_pluginLoaders.end() ) {
-    it.value()->unload();
-    ++it;
-  }
-
   qDeleteAll( m_pluginLoaders );
+  m_pluginLoaders.clear();
 }
 
 QPluginLoader *AgentPluginLoader::load( const QString &pluginName )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.6.0/agentserver/agentpluginloader.h 
new/akonadi-1.6.2/agentserver/agentpluginloader.h
--- old/akonadi-1.6.0/agentserver/agentpluginloader.h   2011-07-10 
14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/agentserver/agentpluginloader.h   2011-10-03 
12:02:01.000000000 +0200
@@ -26,7 +26,7 @@
 {
   public:
     /**
-      Unloads and deletes all instantiated QPluginLoaders.
+      Deletes all instantiated QPluginLoaders.
      */
     ~AgentPluginLoader();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/akonadi-1.6.0/server/control/agentprocessinstance.cpp 
new/akonadi-1.6.2/server/control/agentprocessinstance.cpp
--- old/akonadi-1.6.0/server/control/agentprocessinstance.cpp   2011-07-10 
14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/control/agentprocessinstance.cpp   2011-10-03 
12:02:01.000000000 +0200
@@ -82,7 +82,7 @@
 void AgentProcessInstance::restartWhenIdle()
 {
   if ( mController->isRunning() ) {
-    if ( status() == 0 ) {
+    if ( status() != 1 ) {
       mController->restartOnceWhenFinished();
       quit();
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.6.0/server/control/agentthreadinstance.cpp 
new/akonadi-1.6.2/server/control/agentthreadinstance.cpp
--- old/akonadi-1.6.0/server/control/agentthreadinstance.cpp    2011-07-10 
14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/control/agentthreadinstance.cpp    2011-10-03 
12:02:01.000000000 +0200
@@ -68,7 +68,7 @@
 
 void AgentThreadInstance::restartWhenIdle()
 {
-  if ( status() == 0 && !identifier().isEmpty() ) {
+  if ( status() != 1 && !identifier().isEmpty() ) {
     org::freedesktop::Akonadi::AgentServer agentServer( 
QLatin1String("org.freedesktop.Akonadi.AgentServer"),
                                                         
QLatin1String("/AgentServer"), QDBusConnection::sessionBus() );
     agentServer.stopAgent( identifier() );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.6.0/server/control/processcontrol.cpp 
new/akonadi-1.6.2/server/control/processcontrol.cpp
--- old/akonadi-1.6.0/server/control/processcontrol.cpp 2011-07-10 
14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/control/processcontrol.cpp 2011-10-03 
12:02:01.000000000 +0200
@@ -165,11 +165,20 @@
   }
 }
 
+static bool listContains( const QStringList &list, const QString &pattern )
+{
+  foreach ( const QString &s, list ) {
+    if ( s.contains( pattern ) )
+      return true;
+  }
+  return false;
+}
+
 void ProcessControl::start()
 {
 #ifdef Q_OS_UNIX
   QString agentValgrind = getEnv( "AKONADI_VALGRIND" );
-  if ( !agentValgrind.isEmpty() && mApplication.contains( agentValgrind ) ) {
+  if ( !agentValgrind.isEmpty() && (mApplication.contains( agentValgrind ) || 
listContains( mArguments, agentValgrind )) ) {
 
     mArguments.prepend( mApplication );
     const QString originalArguments = mArguments.join( QString::fromLocal8Bit( 
" " ) );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.6.0/server/src/akonadi.cpp 
new/akonadi-1.6.2/server/src/akonadi.cpp
--- old/akonadi-1.6.0/server/src/akonadi.cpp    2011-07-10 14:19:34.000000000 
+0200
+++ new/akonadi-1.6.2/server/src/akonadi.cpp    2011-10-03 12:02:01.000000000 
+0200
@@ -54,6 +54,11 @@
 #endif
 #include <stdlib.h>
 
+#ifdef Q_WS_WIN
+#include <windows.h>
+#include <Sddl.h>
+#endif
+
 using namespace Akonadi;
 
 static AkonadiServer *s_instance = 0;
@@ -88,7 +93,42 @@
     QSettings connectionSettings( connectionSettingsFile, QSettings::IniFormat 
);
 
 #ifdef Q_OS_WIN
-    QString namedPipe = settings.value( QLatin1String( "Connection/NamedPipe" 
), QLatin1String( "Akonadi" ) ).toString();
+    HANDLE hToken = NULL;
+    PSID sid;
+    QString userID;
+
+    OpenProcessToken(GetCurrentProcess(), TOKEN_READ, &hToken);
+    if(hToken)
+    {
+        DWORD size;
+        PTOKEN_USER userStruct;
+
+        GetTokenInformation(hToken, TokenUser, NULL, 0, &size);
+        if( ERROR_INSUFFICIENT_BUFFER == GetLastError() )
+        {
+            userStruct = reinterpret_cast<PTOKEN_USER>( new BYTE[size] );
+            GetTokenInformation(hToken, TokenUser, userStruct, size, &size);
+
+            int sidLength = GetLengthSid(userStruct->User.Sid);
+            sid = (PSID) malloc(sidLength);
+            CopySid(sidLength, sid, userStruct->User.Sid);
+            CloseHandle(hToken);
+            delete [] userStruct;
+        }
+
+        LPWSTR s;
+        if (!ConvertSidToStringSidW(sid, &s)) {
+            akError() << "Could not determine user id for current process.";
+            userID = QString();
+        } else {
+            userID = QString::fromUtf16(reinterpret_cast<ushort*>(s));
+            LocalFree(s);
+        }
+        free(sid);
+    }
+    QString defaultPipe = QLatin1String( "Akonadi-" ) + userID;
+
+    QString namedPipe = settings.value( QLatin1String( "Connection/NamedPipe" 
), defaultPipe ).toString();
 #ifdef Q_OS_WINCE
     if ( !listen( QHostAddress::LocalHost, 31414 ) )
 #else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.6.0/server/src/handler/list.cpp 
new/akonadi-1.6.2/server/src/handler/list.cpp
--- old/akonadi-1.6.0/server/src/handler/list.cpp       2011-07-10 
14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/src/handler/list.cpp       2011-10-03 
12:02:01.000000000 +0200
@@ -82,9 +82,11 @@
     }
   }
 
+  const bool isUnsubscribed = mOnlySubscribed && !root.subscribed();
+
   // filter if this node isn't needed by it's children
-  bool hidden = (mResource.isValid() && root.resourceId() != mResource.id())
-      || (mOnlySubscribed && !root.subscribed())
+  const bool hidden = (mResource.isValid() && root.resourceId() != 
mResource.id())
+      || isUnsubscribed
       || (!mMimeTypes.isEmpty() && !intersect( mMimeTypes, root.mimeTypes()) );
 
   if ( !childrenFound && hidden )
@@ -94,7 +96,7 @@
   Collection dummy = root;
   DataStore *db = connection()->storageBackend();
   db->activeCachePolicy( dummy );
-  const QByteArray b = HandlerHelper::collectionToByteArray( dummy, hidden, 
mIncludeStatistics, mAncestorDepth, ancestors );
+  const QByteArray b = HandlerHelper::collectionToByteArray( dummy, 
isUnsubscribed, mIncludeStatistics, mAncestorDepth, ancestors );
 
   Response response;
   response.setUntagged();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.6.0/server/src/handler/store.cpp 
new/akonadi-1.6.2/server/src/handler/store.cpp
--- old/akonadi-1.6.0/server/src/handler/store.cpp      2011-07-10 
14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/src/handler/store.cpp      2011-10-03 
12:02:01.000000000 +0200
@@ -45,6 +45,15 @@
 
 using namespace Akonadi;
 
+static bool payloadChanged( const QSet<QByteArray> &changes )
+{
+  foreach ( const QByteArray &change, changes ) {
+    if ( change.startsWith( "PLD:" ) )
+      return true;
+  }
+  return false;
+}
+
 Store::Store( Scope::SelectionScope scope )
   : Handler()
   , mScope( scope )
@@ -135,12 +144,12 @@
       if ( pimItems.at( i ).rev() != (int)mPreviousRevision )
         throw HandlerException( "[LLCONFLICT] Item was modified elsewhere, 
aborting STORE." );
     }
-    pimItems[ i ].setRev( pimItems[ i ].rev() + 1 );
   }
 
   QSet<QByteArray> changes;
   qint64 partSizes = 0;
   bool invalidateCache = false;
+  bool undirty = false;
   bool silent = false;
 
   // apply modifications
@@ -218,6 +227,7 @@
     else if ( command == AKONADI_PARAM_UNDIRTY ) {
       m_streamParser->readString(); // read the 'false' string
       item.setDirty( false );
+      undirty = true;
     }
 
     else if ( command == AKONADI_PARAM_INVALIDATECACHE ) {
@@ -334,17 +344,31 @@
   }
 
   QString datetime;
-  if ( !changes.isEmpty() ) {
+  if ( !changes.isEmpty() || invalidateCache || undirty ) {
+
     // update item size
     if ( pimItems.size() == 1 && (mSize > 0 || partSizes > 0) )
       pimItems.first().setSize( qMax( mSize, partSizes ) );
 
+    const bool onlyRemoteIdChanged = (changes.size() == 1 && changes.contains( 
AKONADI_PARAM_REMOTEID ));
+    const bool onlyRemoteRevisionChanged = (changes.size() == 1 && 
changes.contains( AKONADI_PARAM_REMOTEREVISION ));
+    const bool onlyRemoteIdAndRevisionChanged = (changes.size() == 2 && 
changes.contains( AKONADI_PARAM_REMOTEID )
+                                                                     && 
changes.contains( AKONADI_PARAM_REMOTEREVISION ));
+
+    // If only the remote id and/or the remote revision changed, we don't have 
to increase the REV,
+    // because these updates do not change the payload and can only be done by 
the owning resource -> no conflicts possible
+    const bool revisionNeedsUpdate = (!changes.isEmpty() && 
!onlyRemoteIdChanged && !onlyRemoteRevisionChanged && 
!onlyRemoteIdAndRevisionChanged);
+
     // run update query and prepare change notifications
     for ( int i = 0; i < pimItems.count(); ++i ) {
+
+      if ( revisionNeedsUpdate )
+        pimItems[ i ].setRev( pimItems[ i ].rev() + 1 );
+
       PimItem &item = pimItems[ i ];
       item.setDatetime( modificationtime );
       item.setAtime( modificationtime );
-      if ( !connection()->isOwnerResource( item ) )
+      if ( !connection()->isOwnerResource( item ) && payloadChanged( changes ) 
)
         item.setDirty( true );
       if ( !item.update() )
         throw HandlerException( "Unable to write item changes into the 
database" );
@@ -355,7 +379,8 @@
         }
       }
 
-      store->notificationCollector()->itemChanged( item, changes );
+      if ( !changes.isEmpty() )
+        store->notificationCollector()->itemChanged( item, changes );
       if ( !silent )
         sendPimItemResponse( item );
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/akonadi-1.6.0/server/src/storage/mysql-global-mobile.conf 
new/akonadi-1.6.2/server/src/storage/mysql-global-mobile.conf
--- old/akonadi-1.6.0/server/src/storage/mysql-global-mobile.conf       
2011-07-10 14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/src/storage/mysql-global-mobile.conf       
2011-10-03 12:02:01.000000000 +0200
@@ -53,7 +53,7 @@
 innodb_flush_log_at_trx_commit=2
 
 # Do not drop the connection to the DB after 8 hours of inactivity
-wait_timeout=1296000
+wait_timeout=31536000
 
 [client]
 default-character-set=utf8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.6.0/server/src/storage/mysql-global.conf 
new/akonadi-1.6.2/server/src/storage/mysql-global.conf
--- old/akonadi-1.6.0/server/src/storage/mysql-global.conf      2011-07-10 
14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/src/storage/mysql-global.conf      2011-10-03 
12:02:01.000000000 +0200
@@ -53,7 +53,7 @@
 innodb_flush_log_at_trx_commit=2
 
 # Do not drop the connection to the DB after 8 hours of inactivity
-wait_timeout=1296000
+wait_timeout=31536000
 
 [client]
 default-character-set=utf8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.6.0/server/src/storage/parthelper.cpp 
new/akonadi-1.6.2/server/src/storage/parthelper.cpp
--- old/akonadi-1.6.0/server/src/storage/parthelper.cpp 2011-07-10 
14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/src/storage/parthelper.cpp 2011-10-03 
12:02:01.000000000 +0200
@@ -32,6 +32,14 @@
 
 using namespace Akonadi;
 
+static QString fileNameForPart( Part *part )
+{
+  Q_ASSERT( part->id() >= 0 );
+  const QString dataDir = XdgBaseDirs::saveDir( "data", QLatin1String( 
"akonadi/file_db_data" ) ) + QDir::separator();
+  Q_ASSERT( dataDir != QDir::separator() );
+  return dataDir + QString::number( part->id() );
+}
+
 void PartHelper::update( Part *part, const QByteArray &data, qint64 dataSize )
 {
   if (!part)
@@ -47,7 +55,7 @@
   if ( storeExternal ) {
     QString fileName = origFileName;
     if ( fileName.isEmpty() )
-      fileName = fileNameForId( part->pimItemId() );
+      fileName = fileNameForPart( part );
     QString rev = QString::fromAscii("_r0");
     if ( fileName.contains( QString::fromAscii("_r") ) ) {
       int revIndex = fileName.indexOf(QString::fromAscii("_r"));
@@ -110,7 +118,7 @@
 
   if ( storeInFile && result )
   {
-    QString fileName = PartHelper::fileNameForId( part->id() );
+    QString fileName = fileNameForPart( part );
     fileName +=  QString::fromUtf8("_r0");
 
     QFile file( fileName );
@@ -193,14 +201,6 @@
   return translateData( part.data(), part.external() );
 }
 
-QString PartHelper::fileNameForId( qint64 id )
-{
-  Q_ASSERT( id >= 0 );
-  const QString dataDir = XdgBaseDirs::saveDir( "data", QLatin1String( 
"akonadi/file_db_data" ) ) + QDir::separator();
-  Q_ASSERT( dataDir != QDir::separator() );
-  return dataDir + QString::number(id);
-}
-
 bool Akonadi::PartHelper::truncate(Part& part)
 {
   if ( part.external() ) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.6.0/server/src/storage/parthelper.h 
new/akonadi-1.6.2/server/src/storage/parthelper.h
--- old/akonadi-1.6.0/server/src/storage/parthelper.h   2011-07-10 
14:19:34.000000000 +0200
+++ new/akonadi-1.6.2/server/src/storage/parthelper.h   2011-10-03 
12:02:01.000000000 +0200
@@ -69,8 +69,6 @@
    *  This is more efficient than using update since it does not require the 
data to be loaded.
    */
   bool truncate( Part &part );
-
-  QString fileNameForId( qint64 id );
 }
 
 }

continue with "q"...



Remember to have fun...

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to