aboutsummaryrefslogtreecommitdiffstats
path: root/src/messaging
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2004-12-21 10:04:19 +0100
committerVincent Richard <[email protected]>2004-12-21 10:04:19 +0100
commit706c270073daeb2b303ab34b7c5c9862da62b1ae (patch)
treecc081dd5ac849d27ea825b6ddc958c76818ab24a /src/messaging
parentAdded component::getChildComponents() function. (diff)
downloadvmime-706c270073daeb2b303ab34b7c5c9862da62b1ae.tar.gz
vmime-706c270073daeb2b303ab34b7c5c9862da62b1ae.zip
Fixed ',2' in filename/flags + fixed file renaming when moving from 'new' to 'cur' + new functions random::getString() and maildirUtils::generateId().
Diffstat (limited to 'src/messaging')
-rw-r--r--src/messaging/maildirFolder.cpp7
-rw-r--r--src/messaging/maildirUtils.cpp20
-rw-r--r--src/messaging/maildirUtils.hpp6
3 files changed, 30 insertions, 3 deletions
diff --git a/src/messaging/maildirFolder.cpp b/src/messaging/maildirFolder.cpp
index 54d35989..21b97016 100644
--- a/src/messaging/maildirFolder.cpp
+++ b/src/messaging/maildirFolder.cpp
@@ -343,13 +343,16 @@ void maildirFolder::scanFolder()
for (std::vector <utility::file::path::component>::const_iterator
it = newMessageFilenames.begin() ; it != newMessageFilenames.end() ; ++it)
{
+ const utility::file::path::component newFilename =
+ maildirUtils::buildFilename(maildirUtils::extractId(*it), 0);
+
// Move messages from 'new' to 'cur'
utility::auto_ptr <utility::file> file = fsf->create(newDirPath / *it);
- file->rename(curDirPath / *it);
+ file->rename(curDirPath / newFilename);
// Append to message list
messageInfos msgInfos;
- msgInfos.path = *it;
+ msgInfos.path = newFilename;
msgInfos.type = messageInfos::TYPE_CUR;
m_messageInfos.push_back(msgInfos);
diff --git a/src/messaging/maildirUtils.cpp b/src/messaging/maildirUtils.cpp
index e620ce0a..aba91372 100644
--- a/src/messaging/maildirUtils.cpp
+++ b/src/messaging/maildirUtils.cpp
@@ -20,6 +20,8 @@
#include "maildirUtils.hpp"
#include "maildirStore.hpp"
+#include "../utility/random.hpp"
+
namespace vmime {
namespace messaging {
@@ -125,7 +127,9 @@ const int maildirUtils::extractFlags(const utility::file::path::component& comp)
const utility::file::path::component maildirUtils::buildFlags(const int flags)
{
string str;
- str.reserve(6);
+ str.reserve(8);
+
+ str += "2,";
if (flags & message::FLAG_MARKED) str += "F";
if (flags & message::FLAG_PASSED) str += "P";
@@ -151,6 +155,20 @@ const utility::file::path::component maildirUtils::buildFilename
}
+const utility::file::path::component maildirUtils::generateId()
+{
+ std::ostringstream oss;
+
+ oss << utility::random::getTime();
+ oss << ".";
+ oss << utility::random::getProcess();
+ oss << ".";
+ oss << utility::random::getString(6);
+
+ return (utility::file::path::component(oss.str()));
+}
+
+
//
// messageIdComparator
diff --git a/src/messaging/maildirUtils.hpp b/src/messaging/maildirUtils.hpp
index d65e5d3e..6d5f0628 100644
--- a/src/messaging/maildirUtils.hpp
+++ b/src/messaging/maildirUtils.hpp
@@ -128,6 +128,12 @@ public:
*/
static const utility::file::path::component buildFilename(const utility::file::path::component& id, const int flags);
+ /** Generate a new unique message identifier.
+ *
+ * @return unique message id
+ */
+ static const utility::file::path::component generateId();
+
private:
static const vmime::word TMP_DIR;