]>
Commit | Line | Data |
---|---|---|
8a8f9fb3 AM |
1 | From 1ce732668b2b3e4d735665bd60e1a18f139b1de2 Mon Sep 17 00:00:00 2001 |
2 | From: =?UTF-8?q?Dan=20Vr=C3=A1til?= <dvratil@redhat.com> | |
3 | Date: Fri, 5 Dec 2014 18:49:15 +0100 | |
4 | Subject: [PATCH 23/30] Always create a new PartType when it does not exist | |
5 | ||
6 | Fixes a regression introduced in previous commit that caused Part operations | |
7 | to fail when specified PartType did not exist in Akonadi storage yet. | |
8 | --- | |
9 | server/src/handler/append.cpp | 4 ++-- | |
10 | server/src/storage/datastore.cpp | 2 +- | |
11 | server/src/storage/parttypehelper.cpp | 16 +++++++++++++++- | |
12 | server/src/storage/parttypehelper.h | 8 ++++++++ | |
13 | 4 files changed, 26 insertions(+), 4 deletions(-) | |
14 | ||
15 | diff --git a/server/src/handler/append.cpp b/server/src/handler/append.cpp | |
16 | index b594e27..15fb9ea 100644 | |
17 | --- a/server/src/handler/append.cpp | |
18 | +++ b/server/src/handler/append.cpp | |
19 | @@ -134,7 +134,7 @@ bool Append::commit() | |
20 | ||
21 | // wrap data into a part | |
22 | Part part; | |
23 | - part.setPartType( PartType::retrieveByFQName( QLatin1String("PLD"), QLatin1String("RFC822") ) ); | |
24 | + part.setPartType( PartTypeHelper::fromFqName( QLatin1String("PLD"), QLatin1String("RFC822") ) ); | |
25 | part.setData( m_data ); | |
26 | part.setPimItemId( item.id() ); | |
27 | part.setDatasize( dataSize ); | |
28 | @@ -148,7 +148,7 @@ bool Append::commit() | |
29 | //akDebug() << "Append handler: doPreprocessing is" << doPreprocessing; | |
30 | if ( doPreprocessing ) { | |
31 | Part hiddenAttribute; | |
32 | - hiddenAttribute.setPartType( PartType::retrieveByFQName( QLatin1String("ATR"), QLatin1String("HIDDEN") ) ); | |
33 | + hiddenAttribute.setPartType( PartTypeHelper::fromFqName( QLatin1String("ATR"), QLatin1String("HIDDEN") ) ); | |
34 | hiddenAttribute.setData( QByteArray() ); | |
35 | hiddenAttribute.setPimItemId( item.id() ); | |
36 | hiddenAttribute.setDatasize( 0 ); | |
37 | diff --git a/server/src/storage/datastore.cpp b/server/src/storage/datastore.cpp | |
38 | index 0983d84..c9fa0c3 100644 | |
39 | --- a/server/src/storage/datastore.cpp | |
40 | +++ b/server/src/storage/datastore.cpp | |
41 | @@ -1027,7 +1027,7 @@ bool DataStore::unhideAllPimItems() | |
42 | ||
43 | try { | |
44 | return PartHelper::remove( Part::partTypeIdFullColumnName(), | |
45 | - PartType::retrieveByFQName( QLatin1String("ATR"), QLatin1String("HIDDEN") ).id() ); | |
46 | + PartTypeHelper::fromFqName( QLatin1String("ATR"), QLatin1String("HIDDEN") ).id() ); | |
47 | } catch ( ... ) {} // we can live with this failing | |
48 | ||
49 | return false; | |
50 | diff --git a/server/src/storage/parttypehelper.cpp b/server/src/storage/parttypehelper.cpp | |
51 | index 7654108..bcff9c6 100644 | |
52 | --- a/server/src/storage/parttypehelper.cpp | |
53 | +++ b/server/src/storage/parttypehelper.cpp | |
54 | @@ -37,7 +37,8 @@ QPair< QString, QString > PartTypeHelper::parseFqName(const QString& fqName) | |
55 | PartType PartTypeHelper::fromFqName(const QString& fqName) | |
56 | { | |
57 | const QPair<QString, QString> p = parseFqName( fqName ); | |
58 | - return PartType::retrieveByFQName(p.first, p.second); | |
59 | + return fromFqName(p.first, p.second); | |
60 | + | |
61 | } | |
62 | ||
63 | PartType PartTypeHelper::fromFqName(const QByteArray& fqName) | |
64 | @@ -45,6 +46,19 @@ PartType PartTypeHelper::fromFqName(const QByteArray& fqName) | |
65 | return fromFqName( QLatin1String(fqName) ); | |
66 | } | |
67 | ||
68 | +PartType PartTypeHelper::fromFqName(const QString& ns, const QString& name) | |
69 | +{ | |
70 | + PartType partType = PartType::retrieveByFQName(ns, name); | |
71 | + if (!partType.isValid()) { | |
72 | + PartType pt(name, ns); | |
73 | + if (!pt.insert()) { | |
74 | + throw PartTypeException( "Failed to append part type" ); | |
75 | + } | |
76 | + partType = pt; | |
77 | + } | |
78 | + return partType; | |
79 | +} | |
80 | + | |
81 | Query::Condition PartTypeHelper::conditionFromFqName(const QString& fqName) | |
82 | { | |
83 | const QPair<QString, QString> p = parseFqName( fqName ); | |
84 | diff --git a/server/src/storage/parttypehelper.h b/server/src/storage/parttypehelper.h | |
85 | index 4c4f42f..6d3cf74 100644 | |
86 | --- a/server/src/storage/parttypehelper.h | |
87 | +++ b/server/src/storage/parttypehelper.h | |
88 | @@ -48,6 +48,14 @@ namespace PartTypeHelper | |
89 | PartType fromFqName( const QByteArray &fqName ); | |
90 | ||
91 | /** | |
92 | + * Retrieve (or create) PartType for the given namespace and name | |
93 | + * @param ns Namespace | |
94 | + * @param name Name | |
95 | + * @throws PartTypeException | |
96 | + */ | |
97 | + PartType fromFqName( const QString &ns, const QString &name ); | |
98 | + | |
99 | + /** | |
100 | * Returns a query condition that matches the given part. | |
101 | * @param fqName fully-qualified part type name | |
102 | * @throws PartTypeException | |
103 | -- | |
104 | 2.1.0 | |
105 |