aboutsummaryrefslogtreecommitdiffstats
path: root/src/misc/importanceHelper.cpp
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2005-03-31 18:36:35 +0000
committerVincent Richard <[email protected]>2005-03-31 18:36:35 +0000
commit3639b96ea888337f4d26a2b514e37e298b5afcd3 (patch)
treee15f3c8ce6d512c881e896618115816dbd9b0ee5 /src/misc/importanceHelper.cpp
parentModified isValidPathComponent() to accept drives as first component. (diff)
downloadvmime-3639b96ea888337f4d26a2b514e37e298b5afcd3.tar.gz
vmime-3639b96ea888337f4d26a2b514e37e298b5afcd3.zip
Support for message importance.
Diffstat (limited to 'src/misc/importanceHelper.cpp')
-rw-r--r--src/misc/importanceHelper.cpp143
1 files changed, 143 insertions, 0 deletions
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