|
Rex Dieter |
adf30a |
From 1ce732668b2b3e4d735665bd60e1a18f139b1de2 Mon Sep 17 00:00:00 2001
|
|
Rex Dieter |
adf30a |
From: =?UTF-8?q?Dan=20Vr=C3=A1til?= <dvratil@redhat.com>
|
|
Rex Dieter |
adf30a |
Date: Fri, 5 Dec 2014 18:49:15 +0100
|
|
Rex Dieter |
adf30a |
Subject: [PATCH 23/30] Always create a new PartType when it does not exist
|
|
Rex Dieter |
adf30a |
|
|
Rex Dieter |
adf30a |
Fixes a regression introduced in previous commit that caused Part operations
|
|
Rex Dieter |
adf30a |
to fail when specified PartType did not exist in Akonadi storage yet.
|
|
Rex Dieter |
adf30a |
---
|
|
Rex Dieter |
adf30a |
server/src/handler/append.cpp | 4 ++--
|
|
Rex Dieter |
adf30a |
server/src/storage/datastore.cpp | 2 +-
|
|
Rex Dieter |
adf30a |
server/src/storage/parttypehelper.cpp | 16 +++++++++++++++-
|
|
Rex Dieter |
adf30a |
server/src/storage/parttypehelper.h | 8 ++++++++
|
|
Rex Dieter |
adf30a |
4 files changed, 26 insertions(+), 4 deletions(-)
|
|
Rex Dieter |
adf30a |
|
|
Rex Dieter |
adf30a |
diff --git a/server/src/handler/append.cpp b/server/src/handler/append.cpp
|
|
Rex Dieter |
adf30a |
index b594e27..15fb9ea 100644
|
|
Rex Dieter |
adf30a |
--- a/server/src/handler/append.cpp
|
|
Rex Dieter |
adf30a |
+++ b/server/src/handler/append.cpp
|
|
Rex Dieter |
adf30a |
@@ -134,7 +134,7 @@ bool Append::commit()
|
|
Rex Dieter |
adf30a |
|
|
Rex Dieter |
adf30a |
// wrap data into a part
|
|
Rex Dieter |
adf30a |
Part part;
|
|
Rex Dieter |
adf30a |
- part.setPartType( PartType::retrieveByFQName( QLatin1String("PLD"), QLatin1String("RFC822") ) );
|
|
Rex Dieter |
adf30a |
+ part.setPartType( PartTypeHelper::fromFqName( QLatin1String("PLD"), QLatin1String("RFC822") ) );
|
|
Rex Dieter |
adf30a |
part.setData( m_data );
|
|
Rex Dieter |
adf30a |
part.setPimItemId( item.id() );
|
|
Rex Dieter |
adf30a |
part.setDatasize( dataSize );
|
|
Rex Dieter |
adf30a |
@@ -148,7 +148,7 @@ bool Append::commit()
|
|
Rex Dieter |
adf30a |
//akDebug() << "Append handler: doPreprocessing is" << doPreprocessing;
|
|
Rex Dieter |
adf30a |
if ( doPreprocessing ) {
|
|
Rex Dieter |
adf30a |
Part hiddenAttribute;
|
|
Rex Dieter |
adf30a |
- hiddenAttribute.setPartType( PartType::retrieveByFQName( QLatin1String("ATR"), QLatin1String("HIDDEN") ) );
|
|
Rex Dieter |
adf30a |
+ hiddenAttribute.setPartType( PartTypeHelper::fromFqName( QLatin1String("ATR"), QLatin1String("HIDDEN") ) );
|
|
Rex Dieter |
adf30a |
hiddenAttribute.setData( QByteArray() );
|
|
Rex Dieter |
adf30a |
hiddenAttribute.setPimItemId( item.id() );
|
|
Rex Dieter |
adf30a |
hiddenAttribute.setDatasize( 0 );
|
|
Rex Dieter |
adf30a |
diff --git a/server/src/storage/datastore.cpp b/server/src/storage/datastore.cpp
|
|
Rex Dieter |
adf30a |
index 0983d84..c9fa0c3 100644
|
|
Rex Dieter |
adf30a |
--- a/server/src/storage/datastore.cpp
|
|
Rex Dieter |
adf30a |
+++ b/server/src/storage/datastore.cpp
|
|
Rex Dieter |
adf30a |
@@ -1027,7 +1027,7 @@ bool DataStore::unhideAllPimItems()
|
|
Rex Dieter |
adf30a |
|
|
Rex Dieter |
adf30a |
try {
|
|
Rex Dieter |
adf30a |
return PartHelper::remove( Part::partTypeIdFullColumnName(),
|
|
Rex Dieter |
adf30a |
- PartType::retrieveByFQName( QLatin1String("ATR"), QLatin1String("HIDDEN") ).id() );
|
|
Rex Dieter |
adf30a |
+ PartTypeHelper::fromFqName( QLatin1String("ATR"), QLatin1String("HIDDEN") ).id() );
|
|
Rex Dieter |
adf30a |
} catch ( ... ) {} // we can live with this failing
|
|
Rex Dieter |
adf30a |
|
|
Rex Dieter |
adf30a |
return false;
|
|
Rex Dieter |
adf30a |
diff --git a/server/src/storage/parttypehelper.cpp b/server/src/storage/parttypehelper.cpp
|
|
Rex Dieter |
adf30a |
index 7654108..bcff9c6 100644
|
|
Rex Dieter |
adf30a |
--- a/server/src/storage/parttypehelper.cpp
|
|
Rex Dieter |
adf30a |
+++ b/server/src/storage/parttypehelper.cpp
|
|
Rex Dieter |
adf30a |
@@ -37,7 +37,8 @@ QPair< QString, QString > PartTypeHelper::parseFqName(const QString& fqName)
|
|
Rex Dieter |
adf30a |
PartType PartTypeHelper::fromFqName(const QString& fqName)
|
|
Rex Dieter |
adf30a |
{
|
|
Rex Dieter |
adf30a |
const QPair<QString, QString> p = parseFqName( fqName );
|
|
Rex Dieter |
adf30a |
- return PartType::retrieveByFQName(p.first, p.second);
|
|
Rex Dieter |
adf30a |
+ return fromFqName(p.first, p.second);
|
|
Rex Dieter |
adf30a |
+
|
|
Rex Dieter |
adf30a |
}
|
|
Rex Dieter |
adf30a |
|
|
Rex Dieter |
adf30a |
PartType PartTypeHelper::fromFqName(const QByteArray& fqName)
|
|
Rex Dieter |
adf30a |
@@ -45,6 +46,19 @@ PartType PartTypeHelper::fromFqName(const QByteArray& fqName)
|
|
Rex Dieter |
adf30a |
return fromFqName( QLatin1String(fqName) );
|
|
Rex Dieter |
adf30a |
}
|
|
Rex Dieter |
adf30a |
|
|
Rex Dieter |
adf30a |
+PartType PartTypeHelper::fromFqName(const QString& ns, const QString& name)
|
|
Rex Dieter |
adf30a |
+{
|
|
Rex Dieter |
adf30a |
+ PartType partType = PartType::retrieveByFQName(ns, name);
|
|
Rex Dieter |
adf30a |
+ if (!partType.isValid()) {
|
|
Rex Dieter |
adf30a |
+ PartType pt(name, ns);
|
|
Rex Dieter |
adf30a |
+ if (!pt.insert()) {
|
|
Rex Dieter |
adf30a |
+ throw PartTypeException( "Failed to append part type" );
|
|
Rex Dieter |
adf30a |
+ }
|
|
Rex Dieter |
adf30a |
+ partType = pt;
|
|
Rex Dieter |
adf30a |
+ }
|
|
Rex Dieter |
adf30a |
+ return partType;
|
|
Rex Dieter |
adf30a |
+}
|
|
Rex Dieter |
adf30a |
+
|
|
Rex Dieter |
adf30a |
Query::Condition PartTypeHelper::conditionFromFqName(const QString& fqName)
|
|
Rex Dieter |
adf30a |
{
|
|
Rex Dieter |
adf30a |
const QPair<QString, QString> p = parseFqName( fqName );
|
|
Rex Dieter |
adf30a |
diff --git a/server/src/storage/parttypehelper.h b/server/src/storage/parttypehelper.h
|
|
Rex Dieter |
adf30a |
index 4c4f42f..6d3cf74 100644
|
|
Rex Dieter |
adf30a |
--- a/server/src/storage/parttypehelper.h
|
|
Rex Dieter |
adf30a |
+++ b/server/src/storage/parttypehelper.h
|
|
Rex Dieter |
adf30a |
@@ -48,6 +48,14 @@ namespace PartTypeHelper
|
|
Rex Dieter |
adf30a |
PartType fromFqName( const QByteArray &fqName );
|
|
Rex Dieter |
adf30a |
|
|
Rex Dieter |
adf30a |
/**
|
|
Rex Dieter |
adf30a |
+ * Retrieve (or create) PartType for the given namespace and name
|
|
Rex Dieter |
adf30a |
+ * @param ns Namespace
|
|
Rex Dieter |
adf30a |
+ * @param name Name
|
|
Rex Dieter |
adf30a |
+ * @throws PartTypeException
|
|
Rex Dieter |
adf30a |
+ */
|
|
Rex Dieter |
adf30a |
+ PartType fromFqName( const QString &ns, const QString &name );
|
|
Rex Dieter |
adf30a |
+
|
|
Rex Dieter |
adf30a |
+ /**
|
|
Rex Dieter |
adf30a |
* Returns a query condition that matches the given part.
|
|
Rex Dieter |
adf30a |
* @param fqName fully-qualified part type name
|
|
Rex Dieter |
adf30a |
* @throws PartTypeException
|
|
Rex Dieter |
adf30a |
--
|
|
Rex Dieter |
adf30a |
2.1.0
|
|
Rex Dieter |
adf30a |
|