00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "./mailviewmodel.h"
00019
00020 MailViewModel::MailViewModel( AccountList* accounts, QObject* parent ) : QAbstractItemModel( parent )
00021 {
00022 this->accounts = accounts;
00023
00024
00025 picNewMail = KIcon( KStandardDirs::locate( "data", "kshowmail/pics/mail-unread-new.png" ) );
00026 picSenderOnWhitelist = KIcon( KStandardDirs::locate( "data", "kshowmail/pics/senderOnWhitelist.png" ) );
00027
00028 }
00029
00030 MailViewModel::~MailViewModel(){}
00031
00032 QModelIndex MailViewModel::index( int row, int column, const QModelIndex& parent ) const
00033 {
00034
00035
00036 if( parent.isValid() ) return QModelIndex();
00037
00038 return createIndex( row, column );
00039 }
00040
00041 QModelIndex MailViewModel::parent( const QModelIndex& ) const
00042 {
00043 return QModelIndex();
00044 }
00045
00046 int MailViewModel::rowCount ( const QModelIndex & parent ) const
00047 {
00048
00049 if( parent.isValid() ) return 0;
00050
00051 return viewMailList.size();
00052 }
00053
00054 int MailViewModel::columnCount ( const QModelIndex& ) const
00055 {
00056 return NUMBER_MAILVIEW_COLUMNS;
00057 }
00058
00059 QVariant MailViewModel::data ( const QModelIndex & index, int role ) const
00060 {
00061
00062 if( !index.isValid() ) return QVariant();
00063
00064 if( index.row() >= rowCount() || index.column() > NUMBER_MAILVIEW_COLUMNS - 1 ) return QVariant();
00065
00066 if( index.row() > viewMailList.size() - 1 ) return QVariant();
00067
00068
00069 Mail mail = viewMailList.at( index.row() );
00070
00071
00072 switch( role )
00073 {
00074 case( Qt::DisplayRole ) :
00075
00076 switch( index.column() )
00077 {
00078 case 0 : return QVariant(); break;
00079 case 1 : return QVariant( (int)mail.getNumber() ); break;
00080 case 2 : return QVariant( mail.getAccountName() ); break;
00081 case 3 : return QVariant( mail.getFrom() ); break;
00082 case 4 : return QVariant( mail.getTo() ); break;
00083 case 5 : return QVariant( mail.getSubject() ); break;
00084 case 6 : return QVariant( mail.getDateTime().toString( KDateTime::LocalDate ) ); break;
00085 case 7 : return QVariant( mail.getSizeSuffix() ); break;
00086 case 8 : return QVariant( mail.getContent() ); break;
00087 default : return QVariant();
00088 }
00089 break;
00090
00091 case( Qt::DecorationRole ):
00092
00093 switch( index.column() )
00094 {
00095
00096 case 0 :
00097 if( mail.isNew() )
00098 {
00099 return QVariant( picNewMail );
00100 }
00101 else
00102 {
00103 return QVariant();
00104 }
00105 break;
00106
00107
00108
00109 case 3 : {
00110
00111 if( senderlist.isOnWhitelist( mail.getFrom() ) ) {
00112 return QVariant( picSenderOnWhitelist );
00113 } else {
00114 return QVariant();
00115 }
00116
00117 break;
00118 }
00119
00120 default : return QVariant();
00121 }
00122 break;
00123
00124
00125 case ( Qt::ToolTipRole ) :
00126
00127 QString filtername = mail.getFilterName();
00128 if( filtername.isEmpty() ) {
00129 return QVariant();
00130 } else {
00131 return QVariant( i18nc( "@info Shows the filter which has caught this mail", "Caught by filter: %1", mail.getFilterName() ) );
00132 }
00133
00134 }
00135
00136 return QVariant();
00137 }
00138
00139 bool MailViewModel::hasChildren ( const QModelIndex & parent ) const
00140 {
00141
00142 if( !parent.isValid() ) return true;
00143
00144
00145 return false;
00146 }
00147
00148 QVariant MailViewModel::headerData( int section, Qt::Orientation orientation, int role ) const
00149 {
00150
00151 if( role != Qt::DisplayRole || orientation != Qt::Horizontal )
00152 return QVariant();
00153
00154 switch( section )
00155 {
00156 case 0 : return QVariant( i18nc( "@title:column state of the mail", "State" ) ); break;
00157 case 1 : return QVariant( i18nc( "@title:column mail number on the server", "Number" ) ); break;
00158 case 2 : return QVariant( i18nc( "@title:column name of the account", "Account" ) ); break;
00159 case 3 : return QVariant( i18nc( "@title:column sender", "From" ) ); break;
00160 case 4 : return QVariant( i18nc( "@title:column addressee", "To" ) ); break;
00161 case 5 : return QVariant( i18nc( "@title:column mail subject", "Subject" ) ); break;
00162 case 6 : return QVariant( i18nc( "@title:column send date", "Date" ) ); break;
00163 case 7 : return QVariant( i18nc( "@title:column mail size", "Size" ) ); break;
00164 case 8 : return QVariant( i18nc( "@title:column content type", "Content" ) ); break;
00165 default : return QVariant();
00166 }
00167 }
00168
00169 Qt::ItemFlags MailViewModel::flags ( const QModelIndex& ) const
00170 {
00171 return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
00172 }
00173
00174 void MailViewModel::refresh()
00175 {
00176 viewMailList.clear();
00177 viewMailList.append( accounts->getAllMails() );
00178 sort();
00179 reset();
00180 }
00181
00182 void MailViewModel::sort( int column, Qt::SortOrder order ) {
00183
00184
00185 lastSortOrder = order;
00186 lastSortColumn = column;
00187
00188 if( viewMailList.empty() ) return;
00189
00190
00191 MailSort_Type prop;
00192 switch( column ) {
00193
00194 case 0 : prop = MailSortState; break;
00195 case 1 : prop = MailSortNumber; break;
00196 case 2 : prop = MailSortAccount; break;
00197 case 3 : prop = MailSortFrom; break;
00198 case 4 : prop = MailSortTo; break;
00199 case 5 : prop = MailSortSubject; break;
00200 case 6 : prop = MailSortDate; break;
00201 case 7 : prop = MailSortSize; break;
00202 case 8 : prop = MailSortContent; break;
00203 default : prop = MailSortAccount;
00204 }
00205
00206
00207 QList<Mail> sortedList;
00208
00209 QListIterator<Mail> itUnsort( viewMailList );
00210 while( itUnsort.hasNext() ) {
00211
00212
00213 Mail mailUnsorted = itUnsort.next();
00214
00215
00216 if( sortedList.size() == 0 ) {
00217
00218 sortedList.append( mailUnsorted );
00219
00220 } else {
00221
00222 int sizeSortedList = sortedList.size();
00223 int indexSort = 0;
00224 bool placed = false;
00225 while( indexSort < sizeSortedList && !placed ) {
00226
00227
00228 Mail mailSorted = sortedList.at( indexSort );
00229
00230
00231
00232 if( order == Qt::AscendingOrder ) {
00233
00234 if( mailUnsorted.compare( mailSorted, prop ) <= 0 ) {
00235
00236 sortedList.insert( indexSort, mailUnsorted );
00237 placed = true;
00238 }
00239
00240 } else {
00241
00242 if( mailUnsorted.compare( mailSorted, prop ) > 0 ) {
00243
00244 sortedList.insert( indexSort, mailUnsorted );
00245 placed = true;
00246 }
00247 }
00248
00249 indexSort++;
00250 }
00251
00252
00253 if( !placed )
00254 sortedList.append( mailUnsorted );
00255 }
00256 }
00257
00258
00259 viewMailList.clear();
00260 viewMailList.append( sortedList );
00261
00262 reset();
00263 }
00264
00265 void MailViewModel::sort()
00266 {
00267 sort( lastSortColumn, lastSortOrder );
00268 }
00269
00270 Mail MailViewModel::getMail(const QModelIndex index) const
00271 {
00272 return viewMailList.at( index.row() );
00273 }
00274
00275 QStringList MailViewModel::getSelectedSubjects( QItemSelectionModel* selectModel ) const
00276 {
00277 QStringList subjects;
00278
00279 if( !selectModel->hasSelection() ) return subjects;
00280
00281
00282 QModelIndexList indexList = selectModel->selectedRows();
00283
00284
00285 QListIterator<QModelIndex> it( indexList );
00286 while( it.hasNext() )
00287 {
00288
00289 QModelIndex index = it.next();
00290
00291
00292 Mail mail = getMail( index );
00293
00294
00295 subjects.append( mail.getSubject() );
00296 }
00297
00298 return subjects;
00299 }
00300
00301 QStringList MailViewModel::getSelectedSenders( QItemSelectionModel* selectModel ) const
00302 {
00303 QStringList senders;
00304
00305 if( !selectModel->hasSelection() ) return senders;
00306
00307
00308 QModelIndexList indexList = selectModel->selectedRows();
00309
00310
00311 QListIterator<QModelIndex> it( indexList );
00312 while( it.hasNext() )
00313 {
00314
00315 QModelIndex index = it.next();
00316
00317
00318 Mail mail = getMail( index );
00319
00320
00321 senders.append( mail.getFrom() );
00322 }
00323
00324 return senders;
00325 }
00326
00327 QList<Mail> MailViewModel::getSelectedMails( QItemSelectionModel* mailSelectModel ) const
00328 {
00329 QList<Mail> list;
00330
00331
00332 QModelIndexList indexList = mailSelectModel->selectedRows();
00333
00334
00335 QListIterator<QModelIndex> it( indexList );
00336 while( it.hasNext() )
00337 {
00338
00339 QModelIndex index = it.next();
00340
00341
00342 Mail mail = getMail( index );
00343
00344
00345 list.append( mail );
00346 }
00347
00348 return list;
00349 }
00350
00351 QModelIndexList MailViewModel::getMarkedMails() const
00352 {
00353 QModelIndexList indexList;
00354
00355 for( int i = 0; i < rowCount(); i++ ) {
00356
00357
00358 QModelIndex ix = index( i, 0 );
00359
00360
00361 Mail mail = getMail( ix );
00362
00363
00364 if( mail.isMarkedByFilter() ) {
00365
00366 indexList.append( ix );
00367 }
00368 }
00369
00370 return indexList;
00371 }
00372
00373 void MailViewModel::saveSetup()
00374 {
00375 KConfigGroup* conf = new KConfigGroup( KGlobal::config(), CONFIG_GROUP_VIEW );
00376
00377 conf->writeEntry( CONFIG_ENTRY_SORT_COLUMN_MESSAGE, lastSortColumn );
00378
00379 if( lastSortOrder == Qt::AscendingOrder ) {
00380
00381 conf->writeEntry( CONFIG_ENTRY_SORT_ORDER_MESSAGE, CONFIG_VALUE_SORT_ORDER_ASCENDING );
00382
00383 } else {
00384
00385 conf->writeEntry( CONFIG_ENTRY_SORT_ORDER_MESSAGE, CONFIG_VALUE_SORT_ORDER_DESCENDING );
00386 }
00387
00388 conf->sync();
00389 }
00390
00391 void MailViewModel::loadSetup()
00392 {
00393 senderlist.load();
00394 }
00395
00396