• 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
  • collectionpage
collectionexpirypage.cpp
Go to the documentation of this file.
1 /* -*- mode: C++; c-file-style: "gnu" -*-
2  Copyright (c) 2009 Montel Laurent <montel@kde.org>
3  Copyright (c) 2013 Jonathan Marten <jjm@keelhaul.me.uk>
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 "collectionexpirypage.h"
20 
21 #include "expirecollectionattribute.h"
22 #include "folderrequester.h"
23 #include "foldercollection.h"
24 #include "util/mailutil.h"
25 #include "kernel/mailkernel.h"
26 
27 #include <Akonadi/CollectionModifyJob>
28 
29 #include <KDialog>
30 #include <KIntSpinBox>
31 #include <KLocale>
32 #include <KMessageBox>
33 
34 #include <QCheckBox>
35 #include <QGroupBox>
36 #include <QPushButton>
37 #include <QRadioButton>
38 #include <QVBoxLayout>
39 
40 using namespace Akonadi;
41 using namespace MailCommon;
42 
43 CollectionExpiryPage::CollectionExpiryPage( QWidget *parent )
44  : CollectionPropertiesPage( parent )
45 {
46  setObjectName( QLatin1String( "MailCommon::CollectionExpiryPage" ) );
47  setPageTitle( i18nc( "@title:tab Expiry settings for a folder.", "Expiry" ) );
48 }
49 
50 CollectionExpiryPage::~CollectionExpiryPage()
51 {
52 }
53 
54 bool CollectionExpiryPage::canHandle( const Akonadi::Collection &col ) const
55 {
56  QSharedPointer<FolderCollection> fd = FolderCollection::forCollection( col, false );
57  return ( fd->canDeleteMessages() && !fd->isStructural() );
58 }
59 
60 void CollectionExpiryPage::init()
61 {
62  QVBoxLayout *globalVBox = new QVBoxLayout( this );
63  globalVBox->setSpacing( KDialog::spacingHint() );
64 
65  QGridLayout *daysBox = new QGridLayout;
66 
67  expireReadMailCB = new QCheckBox;
68  expireReadMailCB->setText( i18n( "Expire read messages after" ) );
69  connect( expireReadMailCB, SIGNAL(toggled(bool)),
70  this, SLOT(slotUpdateControls()) );
71  daysBox->addWidget( expireReadMailCB, 0, 0, Qt::AlignLeft );
72 
73  expireReadMailSB = new KIntSpinBox;
74  expireReadMailSB->setMaximum( 999999 );
75  expireReadMailSB->setValue( 30 );
76  expireReadMailSB->setSuffix( ki18ncp("Expire messages after %1", " day", " days" ) );
77  daysBox->addWidget( expireReadMailSB, 0, 1 );
78  connect(expireReadMailSB,SIGNAL(valueChanged(int)),SLOT(slotChanged()));
79 
80  expireUnreadMailCB = new QCheckBox;
81  expireUnreadMailCB->setText( i18n( "Expire unread messages after" ) );
82  connect( expireUnreadMailCB, SIGNAL(toggled(bool)),
83  this, SLOT(slotUpdateControls()) );
84  daysBox->addWidget( expireUnreadMailCB, 1, 0, Qt::AlignLeft );
85 
86  expireUnreadMailSB = new KIntSpinBox;
87  expireUnreadMailSB->setMaximum( 99999 );
88  expireUnreadMailSB->setValue( 30 );
89  expireUnreadMailSB->setSuffix( ki18ncp("Expire messages after %1", " day", " days" ) );
90  daysBox->addWidget( expireUnreadMailSB, 1, 1 );
91  connect(expireUnreadMailSB,SIGNAL(valueChanged(int)),SLOT(slotChanged()));
92 
93  daysBox->setColumnStretch( 3, 1 );
94  globalVBox->addLayout( daysBox );
95 
96  globalVBox->addSpacing( 30 );
97 
98  QGroupBox *actionsGroup = new QGroupBox;
99  actionsGroup->hide(); // for mutual exclusion of the radio buttons
100 
101  QHBoxLayout *moveToHBox = new QHBoxLayout();
102  moveToHBox->setMargin( 0 );
103  moveToHBox->setSpacing( 6 );
104 
105  moveToRB = new QRadioButton( actionsGroup );
106  moveToRB->setText( i18n( "Move expired messages to:" ) );
107  connect( moveToRB, SIGNAL(toggled(bool)), this, SLOT(slotUpdateControls()) );
108  moveToHBox->addWidget( moveToRB );
109 
110  folderSelector = new FolderRequester( this );
111  folderSelector->setMustBeReadWrite( true );
112  folderSelector->setShowOutbox( false );
113  moveToHBox->addWidget( folderSelector );
114  globalVBox->addLayout( moveToHBox );
115  connect(folderSelector,SIGNAL(folderChanged(Akonadi::Collection)),SLOT(slotChanged()));
116 
117  deletePermanentlyRB = new QRadioButton( actionsGroup );
118  deletePermanentlyRB->setText( i18n( "Delete expired messages permanently" ) );
119  connect(deletePermanentlyRB, SIGNAL(toggled(bool)), this, SLOT(slotUpdateControls()) );
120 
121  globalVBox->addWidget( deletePermanentlyRB );
122 
123  globalVBox->addSpacing( 30 );
124 
125  expireNowPB = new QPushButton( i18n( "Save Settings and Expire Now" ), this );
126  connect(expireNowPB, SIGNAL(clicked()), SLOT(slotSaveAndExpire()));
127  globalVBox->addWidget( expireNowPB, 0, Qt::AlignRight );
128 
129  globalVBox->addStretch( 100 ); // eat all superfluous space
130 }
131 
132 void CollectionExpiryPage::load( const Akonadi::Collection &collection )
133 {
134  mCollection = collection;
135  init();
136 
137  bool mustDeleteExpirationAttribute = false;
138  MailCommon::ExpireCollectionAttribute *attr = MailCommon::ExpireCollectionAttribute::expirationCollectionAttribute( mCollection, mustDeleteExpirationAttribute );
139 
140  // Load the values from the folder
141  bool expiryGloballyOn = attr->isAutoExpire();
142  int daysToExpireRead, daysToExpireUnread;
143  attr->daysToExpire( daysToExpireUnread, daysToExpireRead);
144 
145  if ( expiryGloballyOn
146  && attr->readExpireUnits() != ExpireCollectionAttribute::ExpireNever
147  && daysToExpireRead >= 0 ) {
148  expireReadMailCB->setChecked( true );
149  expireReadMailSB->setValue( daysToExpireRead );
150  }
151  if ( expiryGloballyOn
152  && attr->unreadExpireUnits() != ExpireCollectionAttribute::ExpireNever
153  && daysToExpireUnread >= 0 ) {
154  expireUnreadMailCB->setChecked( true );
155  expireUnreadMailSB->setValue( daysToExpireUnread );
156  }
157 
158  if ( attr->expireAction() == ExpireCollectionAttribute::ExpireDelete )
159  deletePermanentlyRB->setChecked( true );
160  else
161  moveToRB->setChecked( true );
162 
163  Akonadi::Collection::Id destFolderID = attr->expireToFolderId();
164  if ( destFolderID > 0 ) {
165  Akonadi::Collection destFolder = Kernel::self()->collectionFromId( destFolderID );
166  if ( destFolder.isValid() )
167  folderSelector->setCollection( destFolder );
168  }
169 
170  if ( mustDeleteExpirationAttribute )
171  delete attr;
172  slotUpdateControls();
173  mChanged = false;
174 }
175 
176 void CollectionExpiryPage::save( Akonadi::Collection &collection )
177 {
178  if ( mChanged)
179  saveAndExpire( collection, false, true );
180 }
181 
182 void CollectionExpiryPage::saveAndExpire( Akonadi::Collection &collection, bool saveSettings, bool _expireNow )
183 {
184  bool expireNow = _expireNow;
185  bool enableGlobally = expireReadMailCB->isChecked() || expireUnreadMailCB->isChecked();
186  const Akonadi::Collection expireToFolder = folderSelector->collection();
187  if ( enableGlobally && moveToRB->isChecked() && !expireToFolder.isValid() ) {
188  KMessageBox::error( this, i18n("Please select a folder to expire messages into.\nIf this is not done, expired messages will be permanently deleted."),
189  i18n( "No Folder Selected" ) );
190  deletePermanentlyRB->setChecked( true );
191  expireNow = false; // settings are not valid
192  }
193 
194  MailCommon::ExpireCollectionAttribute *attribute = 0;
195  if ( expireToFolder.isValid() && moveToRB->isChecked() ) {
196  if ( expireToFolder.id() == collection.id() ) {
197  KMessageBox::error( this, i18n( "Please select a different folder than the current folder to expire messages into.\nIf this is not done, expired messages will be permanently deleted."),
198  i18n( "Wrong Folder Selected" ) );
199  deletePermanentlyRB->setChecked( true );
200  expireNow = false; // settings are not valid
201  }
202  else {
203  attribute = collection.attribute<MailCommon::ExpireCollectionAttribute>( Akonadi::Entity::AddIfMissing );
204  attribute->setExpireToFolderId( expireToFolder.id() );
205  }
206  }
207  if ( !attribute )
208  attribute = collection.attribute<MailCommon::ExpireCollectionAttribute>( Akonadi::Entity::AddIfMissing );
209 
210  attribute->setAutoExpire( enableGlobally );
211  // we always write out days now
212  attribute->setReadExpireAge( expireReadMailSB->value() );
213  attribute->setUnreadExpireAge( expireUnreadMailSB->value() );
214  attribute->setReadExpireUnits( expireReadMailCB->isChecked() ? MailCommon::ExpireCollectionAttribute::ExpireDays :
215  MailCommon::ExpireCollectionAttribute::ExpireNever );
216  attribute->setUnreadExpireUnits( expireUnreadMailCB->isChecked() ? MailCommon::ExpireCollectionAttribute::ExpireDays :
217  MailCommon::ExpireCollectionAttribute::ExpireNever );
218 
219  if ( deletePermanentlyRB->isChecked() )
220  attribute->setExpireAction( ExpireCollectionAttribute::ExpireDelete );
221  else
222  attribute->setExpireAction( ExpireCollectionAttribute::ExpireMove );
223  if (saveSettings) {
224  Akonadi::CollectionModifyJob *job = new Akonadi::CollectionModifyJob( collection, this );
225  job->setProperty( "expireNow", expireNow );
226  connect( job, SIGNAL(result(KJob*)), this, SLOT(slotCollectionModified(KJob*)) );
227  } else {
228  if (expireNow) {
229  MailCommon::Util::expireOldMessages( collection, true /*immediate*/);
230  }
231  }
232  mChanged = false;
233 }
234 
235 void CollectionExpiryPage::slotSaveAndExpire()
236 {
237  saveAndExpire( mCollection, true, true ); // save and start expire job
238 }
239 
240 void CollectionExpiryPage::slotCollectionModified(KJob* job)
241 {
242  if ( job->error() ) {
243  kDebug()<<" Error when we modified collection";
244  return;
245  }
246 
247  // trigger immediate expiry if there is something to do
248  if ( job->property( "expireNow" ).toBool() )
249  MailCommon::Util::expireOldMessages( mCollection, true /*immediate*/);
250 }
251 
252 void CollectionExpiryPage::slotUpdateControls()
253 {
254  const bool showExpiryActions = expireReadMailCB->isChecked() || expireUnreadMailCB->isChecked();
255  moveToRB->setEnabled( showExpiryActions );
256  folderSelector->setEnabled( showExpiryActions && moveToRB->isChecked() );
257  deletePermanentlyRB->setEnabled( showExpiryActions );
258 
259  expireReadMailSB->setEnabled( expireReadMailCB->isChecked() );
260  expireUnreadMailSB->setEnabled( expireUnreadMailCB->isChecked() );
261 
262  expireNowPB->setEnabled( showExpiryActions );
263 
264  mChanged = true;
265 }
266 
267 void CollectionExpiryPage::slotChanged()
268 {
269  mChanged = true;
270 }
271 
272 #include "collectionexpirypage.moc"
MailCommon::ExpireCollectionAttribute::readExpireUnits
ExpireUnits readExpireUnits() const
Units getReadExpireAge() is returned in.
Definition: expirecollectionattribute.cpp:154
expirecollectionattribute.h
folderrequester.h
foldercollection.h
QSharedPointer
Definition: collectiongeneralpage.h:30
MailCommon::CollectionExpiryPage::slotSaveAndExpire
void slotSaveAndExpire()
Definition: collectionexpirypage.cpp:235
MailCommon::ExpireCollectionAttribute::expirationCollectionAttribute
static ExpireCollectionAttribute * expirationCollectionAttribute(const Akonadi::Collection &collection, bool &mustDeleteExpirationAttribute)
Definition: expirecollectionattribute.cpp:182
MailCommon::CollectionExpiryPage::load
void load(const Akonadi::Collection &collection)
Definition: collectionexpirypage.cpp:132
MailCommon::CollectionExpiryPage::slotChanged
void slotChanged()
Definition: collectionexpirypage.cpp:267
MailCommon::ExpireCollectionAttribute::setUnreadExpireUnits
void setUnreadExpireUnits(ExpireUnits units)
Sets the units to use for expiry of unread messages.
Definition: expirecollectionattribute.cpp:103
MailCommon::CollectionExpiryPage::save
void save(Akonadi::Collection &collection)
Definition: collectionexpirypage.cpp:176
QWidget
MailCommon::ExpireCollectionAttribute::unreadExpireUnits
ExpireUnits unreadExpireUnits() const
Units getUnreadExpireAge() is returned in.
Definition: expirecollectionattribute.cpp:149
MailCommon::ExpireCollectionAttribute::setReadExpireUnits
void setReadExpireUnits(ExpireUnits units)
Sets the units to use for expiry of read messages.
Definition: expirecollectionattribute.cpp:122
MailCommon::ExpireCollectionAttribute
Definition: expirecollectionattribute.h:29
MailCommon::ExpireCollectionAttribute::ExpireMove
Definition: expirecollectionattribute.h:49
MailCommon::CollectionExpiryPage::~CollectionExpiryPage
~CollectionExpiryPage()
Definition: collectionexpirypage.cpp:50
MailCommon::ExpireCollectionAttribute::setAutoExpire
void setAutoExpire(bool enabled)
Sets whether this folder automatically expires messages.
Definition: expirecollectionattribute.cpp:81
MailCommon::CollectionExpiryPage::canHandle
bool canHandle(const Akonadi::Collection &col) const
Definition: collectionexpirypage.cpp:54
MailCommon::FolderRequester::collection
Akonadi::Collection collection() const
Returns the selected collection.
Definition: folderrequester.cpp:105
MailCommon::FolderRequester::setShowOutbox
void setShowOutbox(bool show)
Definition: folderrequester.cpp:185
MailCommon::ExpireCollectionAttribute::daysToExpire
static int daysToExpire(int number, ExpireCollectionAttribute::ExpireUnits units)
Definition: expirecollectionattribute.cpp:159
MailCommon::FolderRequester
A widget that contains a KLineEdit which shows the current folder and a button that fires a FolderSel...
Definition: folderrequester.h:59
MailCommon::ExpireCollectionAttribute::expireAction
ExpireAction expireAction() const
What should expiry do? Delete or move to another folder?
Definition: expirecollectionattribute.cpp:134
MailCommon::CollectionExpiryPage::slotCollectionModified
void slotCollectionModified(KJob *job)
Definition: collectionexpirypage.cpp:240
collectionexpirypage.h
QGroupBox
MailCommon::ExpireCollectionAttribute::isAutoExpire
bool isAutoExpire() const
Returns true if this folder automatically expires old messages.
Definition: expirecollectionattribute.cpp:86
MailCommon::FolderRequester::setMustBeReadWrite
void setMustBeReadWrite(bool readwrite)
Sets if readonly folders should be disabled.
Definition: folderrequester.cpp:180
MailCommon::CollectionExpiryPage::slotUpdateControls
void slotUpdateControls()
Definition: collectionexpirypage.cpp:252
MailCommon::Kernel::collectionFromId
Akonadi::Collection collectionFromId(const Akonadi::Collection::Id &id) const
Returns the collection associated with the given id, or an invalid collection if not found...
Definition: mailkernel.cpp:76
MailCommon::ExpireCollectionAttribute::ExpireNever
Definition: expirecollectionattribute.h:40
MailCommon::FolderCollection::forCollection
static QSharedPointer< FolderCollection > forCollection(const Akonadi::Collection &coll, bool writeConfig=true)
Definition: foldercollection.cpp:46
MailCommon::ExpireCollectionAttribute::ExpireDelete
Definition: expirecollectionattribute.h:48
mailkernel.h
MailCommon::ExpireCollectionAttribute::setReadExpireAge
void setReadExpireAge(int age)
Sets the maximum age for read messages in this folder.
Definition: expirecollectionattribute.cpp:110
MailCommon::ExpireCollectionAttribute::expireToFolderId
Akonadi::Collection::Id expireToFolderId() const
If expiry should move to folder, return the ID of that folder.
Definition: expirecollectionattribute.cpp:144
MailCommon::ExpireCollectionAttribute::setExpireToFolderId
void setExpireToFolderId(Akonadi::Collection::Id id)
Definition: expirecollectionattribute.cpp:139
MailCommon::ExpireCollectionAttribute::setExpireAction
void setExpireAction(ExpireAction a)
Definition: expirecollectionattribute.cpp:129
MailCommon::Util::expireOldMessages
MAILCOMMON_EXPORT void expireOldMessages(const Akonadi::Collection &collection, bool immediate)
Definition: mailutil.cpp:603
MailCommon::FolderRequester::setCollection
void setCollection(const Akonadi::Collection &collection, bool fetchCollection=true)
Presets the folder to the collection collection.
Definition: folderrequester.cpp:120
MailCommon::Kernel::self
static Kernel * self()
Definition: mailkernel.cpp:71
MailCommon::CollectionExpiryPage::init
void init()
Definition: collectionexpirypage.cpp:60
MailCommon::ExpireCollectionAttribute::setUnreadExpireAge
void setUnreadExpireAge(int age)
Sets the maximum age for unread messages in this folder.
Definition: expirecollectionattribute.cpp:91
mailutil.h
MailCommon::ExpireCollectionAttribute::ExpireDays
Definition: expirecollectionattribute.h:41
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