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

List:       kde-commits
Subject:    [kdepim-runtime/KDE/4.14] resources/dav/common: Generate a unique ID for file names
From:       Grégory_Oestreicher <greg () kamago ! net>
Date:       2014-08-31 21:42:55
Message-ID: E1XOCtj-00049O-Kk () scm ! kde ! org
[Download RAW message or body]

Git commit 509c99171995c78b7aae39ef73cf9d4209d704fd by Grégory Oestreicher.
Committed on 31/08/2014 at 21:41.
Pushed by goestreicher into branch 'KDE/4.14'.

Generate a unique ID for file names

Based on a review submitted by Dan Vratil.

BUG: 327623
FIXED-IN: 4.14.1

M  +11   -12   resources/dav/common/davutils.cpp
M  +5    -0    resources/dav/common/davutils.h

http://commits.kde.org/kdepim-runtime/509c99171995c78b7aae39ef73cf9d4209d704fd

diff --git a/resources/dav/common/davutils.cpp b/resources/dav/common/davutils.cpp
index 06eb77c..560a076 100644
--- a/resources/dav/common/davutils.cpp
+++ b/resources/dav/common/davutils.cpp
@@ -223,6 +223,15 @@ DavUtils::Protocol DavUtils::protocolByTranslatedName( const QString &name )
   return protocol;
 }
 
+QString DavUtils::createUniqueId()
+{
+  qint64 time = QDateTime::currentMSecsSinceEpoch() / 1000;
+  int r = qrand() % 1000;
+  QString id = QLatin1String( "R" ) + QString::number( r );
+  QString uid = QString::number( time ) + QLatin1String( "." ) + id;
+  return uid;
+}
+
 DavItem DavUtils::createDavItem( const Akonadi::Item &item, const Akonadi::Collection &collection )
 {
   QByteArray rawData;
@@ -233,12 +242,7 @@ DavItem DavUtils::createDavItem( const Akonadi::Item &item, const Akonadi::Colle
 
   if ( item.hasPayload<KABC::Addressee>() ) {
     const KABC::Addressee contact = item.payload<KABC::Addressee>();
-
-    const QString fileName = contact.uid();
-    if ( fileName.isEmpty() ) {
-      kError() << "Invalid contact uid";
-      return davItem;
-    }
+    const QString fileName = createUniqueId();
 
     url = KUrl( basePath + fileName + QLatin1String(".vcf") );
 
@@ -256,12 +260,7 @@ DavItem DavUtils::createDavItem( const Akonadi::Item &item, const Akonadi::Colle
     rawData = converter.exportVCard( contact, KABC::VCardConverter::v3_0 );
   } else if ( item.hasPayload<IncidencePtr>() ) {
     const IncidencePtr ptr = item.payload<IncidencePtr>();
-
-    const QString fileName = ptr->instanceIdentifier();
-    if ( fileName.isEmpty() ) {
-      kError() << "Invalid incidence uid";
-      return davItem;
-    }
+    const QString fileName = createUniqueId();
 
     url = KUrl( basePath + fileName + QLatin1String(".ics") );
     mimeType = QLatin1String("text/calendar");
diff --git a/resources/dav/common/davutils.h b/resources/dav/common/davutils.h
index cdf9751..ce4c25f 100644
--- a/resources/dav/common/davutils.h
+++ b/resources/dav/common/davutils.h
@@ -156,6 +156,11 @@ namespace DavUtils
   Privileges parsePrivilege( const QDomElement &element );
 
   /**
+   * Creates a unique identifier that can be used as a file name to upload the dav item
+   */
+  QString createUniqueId();
+
+  /**
    * Creates a new DavItem from the Akonadi::Item @p item.
    *
    * The returned item will have no payload (DavItem::data() will return an empty
[prev in list] [next in list] [prev in thread] [next in thread] 

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