From 4bd4ac21f11fdb5b76ffda985397398102a81e9b Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Tue, 15 Dec 2020 11:30:44 +0900 Subject: Renaming of files in preparation for code style tools. Signed-off-by: Michele Calgaro (cherry picked from commit 3a75bdfe83b71ef1dbc2fbf52f2d18b8174e22e5) --- kmailcvt/filter_evolution_v2.cpp | 231 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 kmailcvt/filter_evolution_v2.cpp (limited to 'kmailcvt/filter_evolution_v2.cpp') diff --git a/kmailcvt/filter_evolution_v2.cpp b/kmailcvt/filter_evolution_v2.cpp new file mode 100644 index 00000000..a4c6203c --- /dev/null +++ b/kmailcvt/filter_evolution_v2.cpp @@ -0,0 +1,231 @@ +/*************************************************************************** + filter_evolution_v2.cpp - Evolution 2.0.x mail import + ------------------- + begin : Januar 26 2005 + copyright : (C) 2005 by Danny Kukawka + (inspired and partly copied from filter_evolution) + email : danny.kukawka@web.de + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "filter_evolution_v2.h" + +#include +#include +#include +#include + + +/** Default constructor. */ +FilterEvolution_v2::FilterEvolution_v2(void) : + Filter(i18n("Import Evolution 2.x Local Mails and Folder Structure"), + "Danny Kukawka", + i18n("

Evolution 2.x import filter

" + "

Select the base directory of your local Evolution mailfolder (usually ~/.evolution/mail/local/).

" + "

Note: Never choose a Folder which does not contain mbox-files (for example " + "a maildir): if you do, you will get many new folders.

" + "

Since it is possible to recreate the folder structure, the folders " + "will be stored under: \"Evolution-Import\".

")) +{} + +/** Destructor. */ +FilterEvolution_v2::~FilterEvolution_v2(void) +{ +} + +/** Recursive import of Evolution's mboxes. */ +void FilterEvolution_v2::import(FilterInfo *info) +{ + /** + * We ask the user to choose Evolution's root directory. + * This should be usually ~/.evolution/mail/local/ + */ + TQString evolDir = TQDir::homeDirPath() + "/.evolution/mail/local"; + TQDir d( evolDir ); + if ( !d.exists() ) { + evolDir = TQDir::homeDirPath(); + } + + //TQString mailDir = KFileDialog::getExistingDirectory(TQDir::homeDirPath(), info->parent()); + KFileDialog *kfd; + kfd = new KFileDialog( evolDir, "", 0, "tdefiledialog", true ); + kfd->setMode(KFile::Directory | KFile::LocalOnly); + kfd->exec(); + mailDir = kfd->selectedFile(); + delete kfd; + + if (mailDir.isEmpty()) { + info->alert(i18n("No directory selected.")); + } + /** + * If the user only select homedir no import needed because + * there should be no files and we surely import wrong files. + */ + else if ( mailDir == TQDir::homeDirPath() || mailDir == (TQDir::homeDirPath() + "/")) { + info->addLog(i18n("No files found for import.")); + } else { + info->setOverall(0); + + /** Recursive import of the MailArchives */ + TQDir dir(mailDir); + TQStringList rootSubDirs = dir.entryList("[^\\.]*", TQDir::Dirs, TQDir::Name); // Removal of . and .. + int currentDir = 1, numSubDirs = rootSubDirs.size(); + for(TQStringList::Iterator dirname = rootSubDirs.begin() ; dirname != rootSubDirs.end() ; ++dirname, ++currentDir) { + if (info->shouldTerminate()) break; + importDirContents(info, false, dir.filePath(*dirname), *dirname, *dirname); + info->setOverall((int) ((float) currentDir / numSubDirs * 100)); + } + + /** import last but not least all archives from the root-dir */ + importDirContents(info, true, mailDir, TQString(), TQString()); + + info->addLog( i18n("Finished importing emails from %1").arg( mailDir )); + if(count_duplicates > 0) { + info->addLog( i18n("1 duplicate message not imported", "%n duplicate messages not imported", count_duplicates)); + } + if (info->shouldTerminate()) info->addLog( i18n("Finished import, canceled by user.")); + } + info->setCurrent(100); + info->setOverall(100); +} + +/** + * Import of a directory contents. + * @param info Information storage for the operation. + * @param root if this is the rootdir or not + * @param dirName The name of the directory to import. + * @param KMailRootDir The directory's root directory in KMail's folder structure. + * @param KMailSubDir The directory's direct ancestor in KMail's folder structure. + */ +void FilterEvolution_v2::importDirContents(FilterInfo *info, bool root, + const TQString& dirName, const TQString& KMailRootDir, const TQString& KMailSubDir) +{ + if (info->shouldTerminate()) return; + + /** Here Import all archives in the current dir */ + TQDir dir(dirName); + + TQDir importDir (dirName); + TQStringList files = importDir.entryList("[^\\.]*", TQDir::Files, TQDir::Name); + for ( TQStringList::Iterator mailFile = files.begin(); mailFile != files.end(); ++mailFile) { + if (info->shouldTerminate()) break; + TQString temp_mailfile = *mailFile; + if (temp_mailfile.endsWith(".cmeta") || temp_mailfile.endsWith(".ev-summary") || temp_mailfile.endsWith(".ev-summary-meta") || + temp_mailfile.endsWith(".ibex.index") || temp_mailfile.endsWith(".ibex.index.data") ) {} + else { + info->addLog( i18n("Start import file %1...").arg( temp_mailfile ) ); + if (!root) + importMBox(info, (dirName + "/" + temp_mailfile) , KMailRootDir, KMailSubDir); + else + importMBox(info, dirName + temp_mailfile , temp_mailfile, TQString()); + } + } + + if (!root) { + /** If there are subfolders, we import them one by one */ + TQDir subfolders(dirName); + TQStringList subDirs = subfolders.entryList("[^\\.]*", TQDir::Dirs, TQDir::Name); + for(TQStringList::Iterator filename = subDirs.begin() ; filename != subDirs.end() ; ++filename) { + TQString kSubDir; + if(!KMailSubDir.isNull()) { + kSubDir = KMailSubDir + "/" + *filename; + } else { + kSubDir = *filename; + } + importDirContents(info, false, subfolders.filePath(*filename), KMailRootDir, kSubDir); + } + } +} + +/** + * Import of a MBox file. + * @param info Information storage for the operation. + * @param dirName The MBox's name. + * @param KMailRootDir The directory's root directory in KMail's folder structure. + * @param KMailSubDir The directory's equivalent in KMail's folder structure. * + */ +void FilterEvolution_v2::importMBox(FilterInfo *info, const TQString& mboxName, const TQString& rootDir, const TQString& targetDir) +{ + TQFile mbox(mboxName); + bool first_msg = true; + if (!mbox.open(IO_ReadOnly)) { + info->alert(i18n("Unable to open %1, skipping").arg(mboxName)); + } else { + TQFileInfo filenameInfo(mboxName); + + info->setCurrent(0); + if( mboxName.length() > 20 ) { + TQString tmp_info = mboxName; + tmp_info = tmp_info.replace( mailDir, "../" ); + if (tmp_info.contains(".sbd")) + tmp_info.remove(".sbd"); + info->setFrom( tmp_info ); + } else + info->setFrom(mboxName); + if(targetDir.contains(".sbd")) { + TQString tmp_info = targetDir; + tmp_info.remove(".sbd"); + info->setTo(tmp_info); + } else + info->setTo(targetDir); + + TQByteArray input(MAX_LINE); + long l = 0; + + while (!mbox.atEnd()) { + KTempFile tmp; + /** @todo check if the file is really a mbox, maybe search for 'from' string at start */ + /* comment by Danny: + * Don't use TQTextStream to read from mbox, etter use TQDataStream. TQTextStream only + * support Unicode/Latin1/Locale. So you lost information from emails with + * charset!=Unicode/Latin1/Locale (e.g. KOI8-R) and Content-Transfer-Encoding != base64 + * (e.g. 8Bit). It also not help to convert the TQTextStream to Unicode. By this you + * get Unicode/UTF-email but KMail can't detect the correct charset. + */ + TQCString seperate; + + if(!first_msg) + tmp.file()->writeBlock( input, l ); + l = mbox.readLine( input.data(),MAX_LINE); // read the first line, prevent "From " + tmp.file()->writeBlock( input, l ); + + while ( ! mbox.atEnd() && (l = mbox.readLine(input.data(),MAX_LINE)) && ((seperate = input.data()).left(5) != "From ")) { + tmp.file()->writeBlock( input, l ); + } + tmp.close(); + first_msg = false; + + TQString destFolder; + TQString _targetDir = targetDir; + if(!targetDir.isNull()) { + if(_targetDir.contains(".sbd")) + _targetDir.remove(".sbd"); + destFolder += "Evolution-Import/" + _targetDir + "/" + filenameInfo.baseName(TRUE); // mboxName; + } else { + destFolder = "Evolution-Import/" + rootDir; + if(destFolder.contains(".sbd")) + destFolder.remove(".sbd"); + } + + + if(info->removeDupMsg) + addMessage( info, destFolder, tmp.name() ); + else + addMessage_fastImport( info, destFolder, tmp.name() ); + + tmp.unlink(); + int currentPercentage = (int) (((float) mbox.at() / filenameInfo.size()) * 100); + info->setCurrent(currentPercentage); + if (info->shouldTerminate()) break; + } + mbox.close(); + } +} -- cgit v1.2.3