aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--SConstruct3
-rw-r--r--src/misc/importanceHelper.cpp143
-rw-r--r--vmime/misc/importanceHelper.hpp80
-rw-r--r--vmime/vmime.hpp3
5 files changed, 233 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 8463027d..29d6da1a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,11 @@
VERSION 0.6.4cvs
================
+2005-03-31 Vincent Richard <[email protected]>
+
+ * misc/importanceHelper.{cpp|hpp}: added support for message importance:
+ "X-Priority:" and "Importance:" fields.
+
2005-03-28 Vincent Richard <[email protected]>
* messaging/POP3Store.cpp: fixed POP3Store::sendPacket() to send "\r\n"
diff --git a/SConstruct b/SConstruct
index ad5c4b23..fdc23403 100644
--- a/SConstruct
+++ b/SConstruct
@@ -157,7 +157,8 @@ libvmime_sources = [
'mdn/MDNHelper.cpp', 'mdn/MDNHelper.hpp',
'mdn/MDNInfos.cpp', 'mdn/MDNInfos.hpp',
'mdn/receivedMDNInfos.cpp', 'mdn/receivedMDNInfos.hpp',
- 'mdn/sendableMDNInfos.cpp', 'mdn/sendableMDNInfos.hpp'
+ 'mdn/sendableMDNInfos.cpp', 'mdn/sendableMDNInfos.hpp',
+ 'misc/importanceHelper.cpp', 'misc/importanceHelper.hpp'
]
libvmime_examples_sources = [
diff --git a/src/misc/importanceHelper.cpp b/src/misc/importanceHelper.cpp
new file mode 100644
index 00000000..ac36538d
--- /dev/null
+++ b/src/misc/importanceHelper.cpp
@@ -0,0 +1,143 @@
+//
+// VMime library (http://www.vmime.org)
+// Copyright (C) 2002-2005 Vincent Richard <[email protected]>
+//
+// 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+
+#include "vmime/misc/importanceHelper.hpp"
+#include "vmime/exception.hpp"
+
+
+namespace vmime {
+namespace misc {
+
+
+void importanceHelper::resetImportance(message* msg)
+{
+ header* hdr = msg->getHeader();
+
+ try
+ {
+ headerField* fld = hdr->findField("X-Priority");
+ hdr->removeField(fld);
+ }
+ catch (exceptions::no_such_field)
+ {
+ // Ignore
+ }
+
+ try
+ {
+ headerField* fld = hdr->findField("Importance");
+ hdr->removeField(fld);
+ }
+ catch (exceptions::no_such_field)
+ {
+ // Ignore
+ }
+}
+
+
+const importanceHelper::Importance importanceHelper::getImportance(const message* msg)
+{
+ const header* hdr = msg->getHeader();
+
+ try
+ {
+ const defaultField* fld = dynamic_cast <const defaultField*>(hdr->findField("X-Priority"));
+ const string value = fld->getValue();
+
+ int n = IMPORTANCE_NORMAL;
+
+ std::istringstream iss(value);
+ iss >> n;
+
+ Importance i = IMPORTANCE_NORMAL;
+
+ switch (n)
+ {
+ case 1: i = IMPORTANCE_HIGHEST; break;
+ case 2: i = IMPORTANCE_HIGH; break;
+ case 3: i = IMPORTANCE_NORMAL; break;
+ case 4: i = IMPORTANCE_LOW; break;
+ case 5: i = IMPORTANCE_LOWEST; break;
+ }
+
+ return (i);
+ }
+ catch (exceptions::no_such_field)
+ {
+ const defaultField* fld = dynamic_cast <const defaultField*>(hdr->findField("Importance"));
+ const string value = utility::stringUtils::toLower(utility::stringUtils::trim(fld->getValue()));
+
+ if (value == "low")
+ return (IMPORTANCE_LOWEST);
+ else if (value == "high")
+ return (IMPORTANCE_HIGHEST);
+ else
+ return (IMPORTANCE_NORMAL);
+ }
+
+ // Should not go here...
+ return (IMPORTANCE_NORMAL);
+}
+
+
+void importanceHelper::setImportance(message* msg, const Importance i)
+{
+ header* hdr = msg->getHeader();
+
+ // "X-Priority:" Field
+ defaultField* fld = dynamic_cast <defaultField*>(hdr->getField("X-Priority"));
+
+ switch (i)
+ {
+ case IMPORTANCE_HIGHEST: fld->setValue("1 (Highest)"); break;
+ case IMPORTANCE_HIGH: fld->setValue("2 (High)"); break;
+ default:
+ case IMPORTANCE_NORMAL: fld->setValue("3 (Normal)"); break;
+ case IMPORTANCE_LOW: fld->setValue("4 (Low)"); break;
+ case IMPORTANCE_LOWEST: fld->setValue("5 (Lowest)"); break;
+ }
+
+ // "Importance:" Field
+ fld = dynamic_cast <defaultField*>(hdr->getField("Importance"));
+
+ switch (i)
+ {
+ case IMPORTANCE_HIGHEST:
+ case IMPORTANCE_HIGH:
+
+ fld->setValue("high");
+ break;
+
+ default:
+ case IMPORTANCE_NORMAL:
+
+ fld->setValue("normal");
+ break;
+
+ case IMPORTANCE_LOWEST:
+ case IMPORTANCE_LOW:
+
+ fld->setValue("low");
+ break;
+ }
+}
+
+
+} // misc
+} // vmime
diff --git a/vmime/misc/importanceHelper.hpp b/vmime/misc/importanceHelper.hpp
new file mode 100644
index 00000000..d450defb
--- /dev/null
+++ b/vmime/misc/importanceHelper.hpp
@@ -0,0 +1,80 @@
+//
+// VMime library (http://www.vmime.org)
+// Copyright (C) 2002-2005 Vincent Richard <[email protected]>
+//
+// 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+
+#ifndef VMIME_MISC_IMPORTANCEHELPER_HPP_INCLUDED
+#define VMIME_MISC_IMPORTANCEHELPER_HPP_INCLUDED
+
+
+#include "vmime/message.hpp"
+
+
+namespace vmime {
+namespace misc {
+
+
+/** Deals with setting and retrieving message importance (also
+ * known as priority).
+ *
+ * Basically, it wraps the use of the 'X-Priority' (non standard)
+ * and 'Importance' (RFC-1327, RFC-1911) fields.
+ */
+
+class importanceHelper
+{
+public:
+
+ /** Different levels of importance. */
+ enum Importance
+ {
+ IMPORTANCE_HIGHEST,
+ IMPORTANCE_HIGH,
+ IMPORTANCE_NORMAL,
+ IMPORTANCE_LOW,
+ IMPORTANCE_LOWEST
+ };
+
+
+ /** Reset the importance of the message to the default importance.
+ *
+ * @param msg message on which to reset importance
+ */
+ static void resetImportance(message* msg);
+
+ /** Return the importance of the specified message.
+ *
+ * @param msg message from which to retrieve importance
+ * @return importance of the message, or default importance is no
+ * information about importance is given in the message
+ */
+ static const Importance getImportance(const message* msg);
+
+ /** Set the importance of the specified message.
+ *
+ * @param msg message on which to set importance
+ * @param i new message importance
+ */
+ static void setImportance(message* msg, const Importance i);
+};
+
+
+} // misc
+} // vmime
+
+
+#endif // VMIME_MISC_IMPORTANCEHELPER_HPP_INCLUDED
diff --git a/vmime/vmime.hpp b/vmime/vmime.hpp
index 694a2ba7..c0e52d3b 100644
--- a/vmime/vmime.hpp
+++ b/vmime/vmime.hpp
@@ -76,6 +76,9 @@
// MDN
#include "vmime/mdn/MDNHelper.hpp"
+// Misc
+#include "vmime/misc/importanceHelper.hpp"
+
// Property set
#include "vmime/propertySet.hpp"