// // C++ Implementation: filterlog // // Description: // // // Author: Ulrich Weigelt , (C) 2007 // // Copyright: See COPYING file that comes with this distribution // // #include "filterlog.h" FilterLog::FilterLog() { //get the application config object config = TDEApplication::kApplication()->config(); //load the setup loadSetup(); //load stored entries load(); } FilterLog::~FilterLog() { } void FilterLog::addDeletedMail(const TQDateTime & dateTime, const TQString & sender, const TQString & account, const TQString & subject) { if( logDeletedMails ) addEntry( FActDelete, dateTime, sender, account, subject, "" ); } void FilterLog::addMovedMail(const TQDateTime & dateTime, const TQString & sender, const TQString & account, const TQString & subject, const TQString & mailbox) { if( logMovedMails ) addEntry( FActMove, dateTime, sender, account, subject, mailbox ); } void FilterLog::addEntry(FilterAction_Type action, const TQDateTime & dateTime, const TQString & sender, const TQString & account, const TQString & subject, const TQString & mailbox) { //create entry FilterLogEntry entry = FilterLogEntry( action, dateTime, sender, account, subject, mailbox ); //add entry to the appropriate list switch( action ) { case FActDelete : listDeletedMails.append( entry ); break; case FActMove : listMovedMails.append( entry ); break; default : kdError( "FilterLog::addEntry: Could not relate the following mail:" ); entry.print(); break; } } void FilterLog::print() { kdDebug() << "Log state:" << endl; kdDebug() << "----------" << endl; //print all entries about deleted mails kdDebug() << "Deleted mails:" << endl; LogEntryList::iterator it; for ( it = listDeletedMails.begin(); it != listDeletedMails.end(); ++it ) (*it).print(); kdDebug() << endl; //print all entries about moved mails kdDebug() << "Moved mails:" << endl; for ( it = listMovedMails.begin(); it != listMovedMails.end(); ++it ) (*it).print(); } void FilterLog::clearDeletedMailsLog() { listDeletedMails.clear(); } void FilterLog::clearMovedMailsLog() { listMovedMails.clear(); } void FilterLog::save() { //maybe we have to remove old entries, calculate minimum date TQDateTime minTime = TQDateTime::currentDateTime(); minTime = minTime.addDays( daysStoreDeletedMails * -1 ); //we need a XML document TQDomDocument doc( LOG_DOCTYPE ); //and a root element TQDomElement rootElem = doc.createElement( LOG_ROOT_ELEMENT ); doc.appendChild( rootElem ); //store the entries of the deleted mails list into the document //if the user want it if( deletedMailsStorageMode != exit ) { LogEntryList::iterator it; for ( it = listDeletedMails.begin(); it != listDeletedMails.end(); ++it ) { if( (*it).getDate() >= minTime ) (*it).save( doc, rootElem ); } } //get the name of the file to save TQString filename = locateLocal( "appdata", LOG_FILE ); //and save TQFile file( filename ); if ( file.open( IO_WriteOnly ) ) //open file { TQTextStream stream( &file ); doc.save( stream, 2 ); file.close(); } else { KMessageBox::error( NULL, i18n( "Could not save the filter log." ) ); } } void FilterLog::load() { //maybe we have to remove old entries, calculate minimum date TQDateTime minTime = TQDateTime::currentDateTime(); minTime = minTime.addDays( daysStoreDeletedMails * -1 ); //we need a XML document TQDomDocument doc( LOG_DOCTYPE ); //get the name of the file TQString filename = locateLocal( "appdata", LOG_FILE ); //load the log from file into the DOM document TQFile file( filename ); if ( !file.open( IO_ReadOnly ) ) return; //return, if the file can't opened if ( !doc.setContent( &file ) ) { file.close(); //return, if the content of the file is invalid return; } //the content was loaded, close the file file.close(); //iterate over all DOM elements and generate the log entries TQDomElement docElem = doc.documentElement(); //get root element //return, if the root element is not LOG_ROOT_ELEMENT if( docElem.tagName() != LOG_ROOT_ELEMENT ) return; TQDomNode n = docElem.firstChild(); //get first child (this is the first log entry) while( !n.isNull() ) { TQDomElement e = n.toElement(); //try to convert the node to an element. if( !e.isNull() ) { if( e.tagName() == LOG_ENTRY_ELEMENT ) { //add the read entry to the list of deleted mails TQDateTime mailTime = TQDateTime::fromString( e.attribute( LOG_ENTRY_ATTRIBUTE_DATETIME ), TQt::ISODate ); if( mailTime >= minTime ) addDeletedMail( mailTime, e.attribute( LOG_ENTRY_ATTRIBUTE_SENDER ), e.attribute( LOG_ENTRY_ATTRIBUTE_ACCOUNT ), e.attribute( LOG_ENTRY_ATTRIBUTE_SUBJECT ) ); } } n = n.nextSibling(); //get next child } } LogEntryList FilterLog::getDeletedMails( ) { return listDeletedMails; } LogEntryList FilterLog::getMovedMails( ) { return listMovedMails; } void FilterLog::loadSetup( ) { config->setGroup( CONFIG_GROUP_LOG ); logDeletedMails = config->readBoolEntry( CONFIG_ENTRY_LOG_LOG_DELETED_MAILS, DEFAULT_LOG_LOG_DELETED_MAILS ); logMovedMails = config->readBoolEntry( CONFIG_ENTRY_LOG_LOG_MOVED_MAILS, DEFAULT_LOG_LOG_MOVED_MAILS ); if( logDeletedMails ) { TQString storageMode = config->readEntry(CONFIG_ENTRY_LOG_REMOVE_DELETED_MAILS, DEFAULT_LOG_REMOVE_DELETED_MAILS ); if( storageMode == CONFIG_VALUE_LOG_REMOVE_MAILS_AT_EXIT ) deletedMailsStorageMode = exit; else if( storageMode == CONFIG_VALUE_LOG_REMOVE_MAILS_AFTER_DAYS ) deletedMailsStorageMode = days; else deletedMailsStorageMode = days; if( deletedMailsStorageMode == days ) daysStoreDeletedMails = config->readNumEntry( CONFIG_ENTRY_LOG_HOLDDAYS_DELETED_MAILS, DEFAULT_LOG_HOLDDAYS_DELETED_MAILS ); else daysStoreDeletedMails = 7; } else { deletedMailsStorageMode = days; daysStoreDeletedMails = 7; } } int FilterLog::numberDeletedMails( ) { return listDeletedMails.count(); } int FilterLog::numberMovedMails( ) { return listMovedMails.count(); }