• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

mailcommon

  • sources
  • kde-4.12
  • kdepim
  • mailcommon
  • folder
foldercollection.cpp
Go to the documentation of this file.
1 /* -*- mode: C++; c-file-style: "gnu" -*-
2 
3  Copyright (c) 2009,2010,2011 Montel Laurent <montel@kde.org>
4 
5  This program is free software; you can redistribute it and/or modify it
6  under the terms of the GNU General Public License, version 2, as
7  published by the Free Software Foundation.
8 
9  This program is distributed in the hope that it will be useful, but
10  WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License along
15  with this program; if not, write to the Free Software Foundation, Inc.,
16  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18 
19 #include "foldercollection.h"
20 #include "kernel/mailkernel.h"
21 #include "util/mailutil.h"
22 #include "imapresourcesettings.h"
23 #include "pimcommon/util/pimutil.h"
24 #include "mailcommon/collectionpage/newmailnotifierattribute.h"
25 
26 #include <Akonadi/ItemFetchJob>
27 #include <Akonadi/ItemFetchScope>
28 #include <Akonadi/CollectionModifyJob>
29 
30 using namespace Akonadi;
31 
32 #include <KPIMIdentities/IdentityManager>
33 #include <KPIMIdentities/Identity>
34 
35 #include <KDebug>
36 
37 #include <QMutex>
38 #include <QMutexLocker>
39 #include <QSharedPointer>
40 
41 namespace MailCommon {
42 
43 static QMutex mapMutex;
44 static QMap<Collection::Id,QSharedPointer<FolderCollection> > fcMap;
45 
46 QSharedPointer<FolderCollection> FolderCollection::forCollection(
47  const Akonadi::Collection &coll, bool writeConfig )
48 {
49  QMutexLocker lock( &mapMutex );
50 
51  QSharedPointer<FolderCollection> sptr = fcMap.value( coll.id() );
52 
53  if ( !sptr ) {
54  sptr = QSharedPointer<FolderCollection>( new FolderCollection( coll, writeConfig ) );
55  fcMap.insert( coll.id(), sptr );
56  } else {
57  sptr->setCollection( coll );
58  if ( !sptr->isWriteConfig() && writeConfig ) {
59  sptr->setWriteConfig( true );
60  }
61  }
62 
63  return sptr;
64 }
65 
66 FolderCollection::FolderCollection( const Akonadi::Collection & col, bool writeconfig )
67  : mCollection( col ),
68  mPutRepliesInSameFolder( false ),
69  mHideInSelectionDialog( false ),
70  mWriteConfig( writeconfig )
71 {
72  Q_ASSERT( col.isValid() );
73  mIdentity = KernelIf->identityManager()->defaultIdentity().uoid();
74 
75  readConfig();
76  connect( KernelIf->identityManager(), SIGNAL(changed()),
77  this, SLOT(slotIdentitiesChanged()) );
78 }
79 
80 FolderCollection::~FolderCollection()
81 {
82  //kDebug()<<" FolderCollection::~FolderCollection"<<this;
83  if ( mWriteConfig ) {
84  writeConfig();
85  }
86 }
87 
88 void FolderCollection::clearCache()
89 {
90  QMutexLocker lock( &mapMutex );
91  fcMap.clear();
92 }
93 
94 bool FolderCollection::isWriteConfig() const
95 {
96  return mWriteConfig;
97 }
98 
99 void FolderCollection::setWriteConfig( bool writeConfig )
100 {
101  mWriteConfig = writeConfig;
102 }
103 
104 QString FolderCollection::name() const
105 {
106  return mCollection.name();
107 }
108 
109 bool FolderCollection::isSystemFolder() const
110 {
111  return Kernel::self()->isSystemFolderCollection( mCollection );
112 }
113 
114 bool FolderCollection::isStructural() const
115 {
116  return mCollection.contentMimeTypes().isEmpty();
117 }
118 
119 bool FolderCollection::isReadOnly() const
120 {
121  return mCollection.rights() & Akonadi::Collection::ReadOnly;
122 }
123 
124 bool FolderCollection::canDeleteMessages() const
125 {
126  return mCollection.rights() & Akonadi::Collection::CanDeleteItem;
127 }
128 
129 bool FolderCollection::canCreateMessages() const
130 {
131  return mCollection.rights() & Akonadi::Collection::CanCreateItem;
132 }
133 
134 qint64 FolderCollection::count() const
135 {
136  return mCollection.statistics().count();
137 }
138 
139 Akonadi::Collection::Rights FolderCollection::rights() const
140 {
141  return mCollection.rights();
142 }
143 
144 Akonadi::CollectionStatistics FolderCollection::statistics() const
145 {
146  return mCollection.statistics();
147 }
148 
149 Akonadi::Collection FolderCollection::collection() const
150 {
151  return mCollection;
152 }
153 
154 void FolderCollection::setCollection( const Akonadi::Collection &collection )
155 {
156  mCollection = collection;
157 }
158 
159 void FolderCollection::slotIdentitiesChanged()
160 {
161  uint defaultIdentity = KernelIf->identityManager()->defaultIdentity().uoid();
162  // The default identity may have changed, therefore set it again if necessary
163  if ( mUseDefaultIdentity ) {
164  mIdentity = defaultIdentity;
165  }
166 
167  // Fall back to the default identity if the one used currently is invalid
168  if ( KernelIf->identityManager()->identityForUoid( mIdentity ).isNull() ) {
169  mIdentity = defaultIdentity;
170  mUseDefaultIdentity = true;
171  }
172 }
173 
174 QString FolderCollection::configGroupName( const Akonadi::Collection &col )
175 {
176  return QString::fromLatin1( "Folder-%1" ).arg( QString::number( col.id() ) );
177 }
178 
179 void FolderCollection::readConfig()
180 {
181  KConfigGroup configGroup( KernelIf->config(), configGroupName( mCollection ) );
182  mMailingListEnabled = configGroup.readEntry( "MailingListEnabled", false );
183  mMailingList.readConfig( configGroup );
184 
185  mUseDefaultIdentity = configGroup.readEntry( "UseDefaultIdentity", true );
186  uint defaultIdentity = KernelIf->identityManager()->defaultIdentity().uoid();
187  mIdentity = configGroup.readEntry( "Identity", defaultIdentity );
188  slotIdentitiesChanged();
189 
190  mPutRepliesInSameFolder = configGroup.readEntry( "PutRepliesInSameFolder", false );
191  mHideInSelectionDialog = configGroup.readEntry( "HideInSelectionDialog", false );
192 
193  if (configGroup.hasKey(QLatin1String("IgnoreNewMail"))) {
194  if ( configGroup.readEntry( QLatin1String("IgnoreNewMail"), false ) ) {
195  //migrate config.
196  MailCommon::NewMailNotifierAttribute *newMailNotifierAttr = mCollection.attribute<MailCommon::NewMailNotifierAttribute>( Akonadi::Entity::AddIfMissing );
197  newMailNotifierAttr->setIgnoreNewMail(true);
198  new Akonadi::CollectionModifyJob( mCollection, this );
199  //TODO verify if it works;
200  }
201  configGroup.deleteEntry("IgnoreNewMail");
202  }
203 
204  const QString shortcut( configGroup.readEntry( "Shortcut" ) );
205  if ( !shortcut.isEmpty() ) {
206  KShortcut sc( shortcut );
207  setShortcut( sc );
208  }
209 }
210 
211 bool FolderCollection::isValid() const
212 {
213  return mCollection.isValid();
214 }
215 
216 void FolderCollection::writeConfig() const
217 {
218  KConfigGroup configGroup( KernelIf->config(), configGroupName( mCollection ) );
219 
220  configGroup.writeEntry( "MailingListEnabled", mMailingListEnabled );
221  mMailingList.writeConfig( configGroup );
222 
223  configGroup.writeEntry( "UseDefaultIdentity", mUseDefaultIdentity );
224 
225  if ( !mUseDefaultIdentity ) {
226  uint defaultIdentityId = -1;
227 
228  if ( mCollection.resource().contains( IMAP_RESOURCE_IDENTIFIER ) ) {
229  OrgKdeAkonadiImapSettingsInterface *imapSettingsInterface =
230  PimCommon::Util::createImapSettingsInterface( mCollection.resource() );
231 
232  if ( imapSettingsInterface->isValid() ) {
233  QDBusReply<int> reply = imapSettingsInterface->accountIdentity();
234  if ( reply.isValid() ) {
235  defaultIdentityId = static_cast<uint>( reply );
236  }
237  }
238  delete imapSettingsInterface;
239  } else {
240  defaultIdentityId = KernelIf->identityManager()->defaultIdentity().uoid();
241  }
242 
243  if ( mIdentity != defaultIdentityId ) {
244  configGroup.writeEntry( "Identity", mIdentity );
245  } else {
246  configGroup.deleteEntry( "Identity" );
247  }
248  } else {
249  configGroup.deleteEntry( "Identity" );
250  }
251 
252  configGroup.writeEntry( "PutRepliesInSameFolder", mPutRepliesInSameFolder );
253  if (mHideInSelectionDialog)
254  configGroup.writeEntry( "HideInSelectionDialog", mHideInSelectionDialog );
255  else
256  configGroup.deleteEntry("HideInSelectionDialog");
257 
258  if ( !mShortcut.isEmpty() ) {
259  configGroup.writeEntry( "Shortcut", mShortcut.toString() );
260  } else {
261  configGroup.deleteEntry( "Shortcut" );
262  }
263 }
264 
265 void FolderCollection::setShortcut( const KShortcut &sc )
266 {
267  if ( mShortcut != sc ) {
268  mShortcut = sc;
269  }
270 }
271 
272 void FolderCollection::setUseDefaultIdentity( bool useDefaultIdentity )
273 {
274  if ( mUseDefaultIdentity != useDefaultIdentity ) {
275  mUseDefaultIdentity = useDefaultIdentity;
276  if ( mUseDefaultIdentity ) {
277  mIdentity = KernelIf->identityManager()->defaultIdentity().uoid();
278  }
279  KernelIf->syncConfig();
280  }
281 }
282 
283 void FolderCollection::setIdentity( uint identity )
284 {
285  if ( mIdentity != identity ) {
286  mIdentity = identity;
287  KernelIf->syncConfig();
288  }
289 }
290 
291 uint FolderCollection::identity() const
292 {
293  if ( mUseDefaultIdentity ) {
294  int identityId = -1;
295  OrgKdeAkonadiImapSettingsInterface *imapSettingsInterface =
296  PimCommon::Util::createImapSettingsInterface( mCollection.resource() );
297 
298  if ( imapSettingsInterface->isValid() ) {
299  QDBusReply<bool> useDefault = imapSettingsInterface->useDefaultIdentity();
300  if ( useDefault.isValid() && useDefault.value() ) {
301  delete imapSettingsInterface;
302  return mIdentity;
303  }
304 
305  QDBusReply<int> remoteAccountIdent = imapSettingsInterface->accountIdentity();
306  if ( remoteAccountIdent.isValid() && remoteAccountIdent.value() > 0 ) {
307  identityId = remoteAccountIdent;
308  }
309  }
310  delete imapSettingsInterface;
311  if ( identityId != -1 &&
312  !KernelIf->identityManager()->identityForUoid( identityId ).isNull() ) {
313  return identityId;
314  }
315  }
316  return mIdentity;
317 }
318 
319 QString FolderCollection::mailingListPostAddress() const
320 {
321  if ( mMailingList.features() & MailingList::Post ) {
322  KUrl::List post = mMailingList.postUrls();
323  KUrl::List::const_iterator end( post.constEnd() );
324  for ( KUrl::List::const_iterator it = post.constBegin(); it != end; ++it ) {
325  // We check for isEmpty because before 3.3 postAddress was just an
326  // email@kde.org and that leaves protocol() field in the kurl class
327  const QString protocol = (*it).protocol();
328  if ( protocol == QLatin1String( "mailto" ) || protocol.isEmpty() ) {
329  return (*it).path();
330  }
331  }
332  }
333  return QString();
334 }
335 
336 void FolderCollection::setMailingListEnabled( bool enabled )
337 {
338  if ( mMailingListEnabled != enabled ) {
339  mMailingListEnabled = enabled;
340  writeConfig();
341  }
342 }
343 
344 void FolderCollection::setMailingList( const MailingList &mlist )
345 {
346  if ( mMailingList == mlist ) {
347  return;
348  }
349 
350  mMailingList = mlist;
351  writeConfig();
352 }
353 
354 }
355 
356 #include "foldercollection.moc"
MailCommon::FolderCollection::isValid
bool isValid() const
Definition: foldercollection.cpp:211
foldercollection.h
QSharedPointer
Definition: collectiongeneralpage.h:30
KernelIf
#define KernelIf
Definition: mailkernel.h:186
MailCommon::FolderCollection::name
QString name() const
Definition: foldercollection.cpp:104
MailCommon::FolderCollection::canCreateMessages
bool canCreateMessages() const
Definition: foldercollection.cpp:129
MailCommon::FolderCollection::useDefaultIdentity
bool useDefaultIdentity() const
Definition: foldercollection.h:88
MailCommon::FolderCollection::setMailingListEnabled
void setMailingListEnabled(bool enabled)
Returns true if this folder is associated with a mailing-list.
Definition: foldercollection.cpp:336
MailCommon::FolderCollection::setWriteConfig
void setWriteConfig(bool writeConfig)
Definition: foldercollection.cpp:99
MailCommon::FolderCollection::readConfig
void readConfig()
Definition: foldercollection.cpp:179
newmailnotifierattribute.h
MailCommon::FolderCollection::isStructural
bool isStructural() const
Definition: foldercollection.cpp:114
MailCommon::fcMap
static QMap< Collection::Id, QSharedPointer< FolderCollection > > fcMap
Definition: foldercollection.cpp:44
MailCommon::FolderCollection::isSystemFolder
bool isSystemFolder() const
Definition: foldercollection.cpp:109
MailCommon::FolderCollection::collection
Akonadi::Collection collection() const
Definition: foldercollection.cpp:149
MailCommon::FolderCollection::isReadOnly
bool isReadOnly() const
Definition: foldercollection.cpp:119
MailCommon::FolderCollection::slotIdentitiesChanged
void slotIdentitiesChanged()
Definition: foldercollection.cpp:159
MailCommon::FolderCollection::configGroupName
static QString configGroupName(const Akonadi::Collection &col)
Definition: foldercollection.cpp:174
MailCommon::FolderCollection::identity
uint identity() const
Definition: foldercollection.cpp:291
MailCommon::FolderCollection::setCollection
void setCollection(const Akonadi::Collection &collection)
Definition: foldercollection.cpp:154
MailCommon::NewMailNotifierAttribute
Definition: newmailnotifierattribute.h:27
MailCommon::FolderCollection::isWriteConfig
bool isWriteConfig() const
Definition: foldercollection.cpp:94
MailCommon::FolderCollection::setIdentity
void setIdentity(uint identity)
Definition: foldercollection.cpp:283
MailCommon::FolderCollection::shortcut
const KShortcut & shortcut() const
Definition: foldercollection.h:78
mailkernel.h
MailCommon::FolderCollection::setUseDefaultIdentity
void setUseDefaultIdentity(bool useDefaultIdentity)
Get / set whether the default identity should be used instead of the identity specified by setIdentit...
Definition: foldercollection.cpp:272
MailCommon::FolderCollection::setMailingList
void setMailingList(const MailingList &mlist)
Definition: foldercollection.cpp:344
MailCommon::FolderCollection::setShortcut
void setShortcut(const KShortcut &)
Definition: foldercollection.cpp:265
MailCommon::Kernel::isSystemFolderCollection
bool isSystemFolderCollection(const Akonadi::Collection &col)
Definition: mailkernel.cpp:127
MailCommon::FolderCollection::statistics
Akonadi::CollectionStatistics statistics() const
Definition: foldercollection.cpp:144
MailCommon::FolderCollection
Definition: foldercollection.h:35
MailCommon::mapMutex
static QMutex mapMutex
Definition: foldercollection.cpp:43
MailCommon::FolderCollection::canDeleteMessages
bool canDeleteMessages() const
Definition: foldercollection.cpp:124
MailCommon::NewMailNotifierAttribute::setIgnoreNewMail
void setIgnoreNewMail(bool b)
Definition: newmailnotifierattribute.cpp:79
MailCommon::FolderCollection::writeConfig
void writeConfig() const
Definition: foldercollection.cpp:216
MailCommon::FolderCollection::clearCache
static void clearCache()
Definition: foldercollection.cpp:88
MailCommon::FolderCollection::rights
Akonadi::Collection::Rights rights() const
Definition: foldercollection.cpp:139
MailCommon::Kernel::self
static Kernel * self()
Definition: mailkernel.cpp:71
mailutil.h
MailCommon::FolderCollection::~FolderCollection
~FolderCollection()
Definition: foldercollection.cpp:80
MailCommon::FolderCollection::count
qint64 count() const
Definition: foldercollection.cpp:134
MailCommon::FolderCollection::mailingListPostAddress
QString mailingListPostAddress() const
Definition: foldercollection.cpp:319
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:55:14 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

mailcommon

Skip menu "mailcommon"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal