⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maildirutils.cpp

📁 MIME解析的代码
💻 CPP
字号:
//// VMime library (http://www.vmime.org)// Copyright (C) 2002-2008 Vincent Richard <vincent@vincent-richard.net>//// 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.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU// General Public License for more details.//// You should have received a copy of the GNU General Public License along// with this program; if not, write to the Free Software Foundation, Inc.,// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.//// Linking this library statically or dynamically with other modules is making// a combined work based on this library.  Thus, the terms and conditions of// the GNU General Public License cover the whole combination.//#include "vmime/net/maildir/maildirUtils.hpp"#include "vmime/net/maildir/maildirStore.hpp"#include "vmime/utility/random.hpp"#include "vmime/exception.hpp"namespace vmime {namespace net {namespace maildir {bool maildirUtils::isMessageFile(const utility::file& file){	// Ignore files which name begins with '.'	if (file.isFile() &&	    file.getFullPath().getLastComponent().getBuffer().length() >= 1 &&	    file.getFullPath().getLastComponent().getBuffer()[0] != '.')	{		return (true);	}	return (false);}// NOTE ABOUT ID/FLAGS SEPARATOR// -----------------------------// In the maildir specification, the character ':' is used to separate// the unique identifier and the message flags.//// On Windows (and particularly FAT file systems), ':' is not allowed// in a filename, so we use a dash ('-') instead. This is the solution// used by Mutt/Win32, so we also use it here.//// To be compatible between implementations, we check for both// characters when reading file names.const utility::file::path::component maildirUtils::extractId	(const utility::file::path::component& filename){	string::size_type sep = filename.getBuffer().rfind(':');  // try colon	if (sep == string::npos)	{		sep = filename.getBuffer().rfind('-');  // try dash (Windows)		if (sep == string::npos) return (filename);	}	return (utility::path::component		(string(filename.getBuffer().begin(), filename.getBuffer().begin() + sep)));}int maildirUtils::extractFlags(const utility::file::path::component& comp){	string::size_type sep = comp.getBuffer().rfind(':');  // try colon	if (sep == string::npos)	{		sep = comp.getBuffer().rfind('-');  // try dash (Windows)		if (sep == string::npos) return 0;	}	const string flagsString(comp.getBuffer().begin() + sep + 1, comp.getBuffer().end());	const string::size_type count = flagsString.length();	int flags = 0;	for (string::size_type i = 0 ; i < count ; ++i)	{		switch (flagsString[i])		{		case 'R': case 'r': flags |= message::FLAG_REPLIED; break;		case 'S': case 's': flags |= message::FLAG_SEEN; break;		case 'T': case 't': flags |= message::FLAG_DELETED; break;		case 'F': case 'f': flags |= message::FLAG_MARKED; break;		case 'P': case 'p': flags |= message::FLAG_PASSED; break;		}	}	return (flags);}const utility::file::path::component maildirUtils::buildFlags(const int flags){	string str;	str.reserve(8);	str += "2,";	if (flags & message::FLAG_MARKED)  str += "F";	if (flags & message::FLAG_PASSED)  str += "P";	if (flags & message::FLAG_REPLIED) str += "R";	if (flags & message::FLAG_SEEN)    str += "S";	if (flags & message::FLAG_DELETED) str += "T";	return (utility::file::path::component(str));}const utility::file::path::component maildirUtils::buildFilename	(const utility::file::path::component& id, const int flags){	return (buildFilename(id, buildFlags(flags)));}const utility::file::path::component maildirUtils::buildFilename	(const utility::file::path::component& id, const utility::file::path::component& flags){#if VMIME_BUILTIN_PLATFORM_WINDOWS	return (utility::path::component(id.getBuffer() + "-" + flags.getBuffer()));  // use dash#else	return (utility::path::component(id.getBuffer() + ":" + flags.getBuffer()));  // use colon#endif}const utility::file::path::component maildirUtils::generateId(){	std::ostringstream oss;	oss.imbue(std::locale::classic());	oss << utility::random::getTime();	oss << ".";	oss << utility::random::getProcess();	oss << ".";	oss << utility::random::getString(6);	return (utility::file::path::component(oss.str()));}void maildirUtils::recursiveFSDelete(ref <utility::file> dir){	ref <utility::fileIterator> files = dir->getFiles();	// First, delete files and subdirectories in this directory	while (files->hasMoreElements())	{		ref <utility::file> file = files->nextElement();		if (file->isDirectory())		{			maildirUtils::recursiveFSDelete(file);		}		else		{			try			{				file->remove();			}			catch (exceptions::filesystem_exception&)			{				// Ignore			}		}	}	// Then, delete this (empty) directory	try	{		dir->remove();	}	catch (exceptions::filesystem_exception&)	{		// Ignore	}}//// messageIdComparator//maildirUtils::messageIdComparator::messageIdComparator	(const utility::file::path::component& comp)	: m_comp(maildirUtils::extractId(comp)){}bool maildirUtils::messageIdComparator::operator()	(const utility::file::path::component& other) const{	return (m_comp == maildirUtils::extractId(other));}} // maildir} // net} // vmime

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -