// // VMime library (http://www.vmime.org) // Copyright (C) 2002-2005 Vincent Richard // // 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(ref msg) { resetImportance(msg->getHeader()); } void importanceHelper::resetImportance(ref
hdr) { try { ref fld = hdr->findField("X-Priority"); hdr->removeField(fld); } catch (exceptions::no_such_field) { // Ignore } try { ref fld = hdr->findField("Importance"); hdr->removeField(fld); } catch (exceptions::no_such_field) { // Ignore } } const importanceHelper::Importance importanceHelper::getImportance(const ref msg) { return getImportance(msg->getHeader()); } const importanceHelper::Importance importanceHelper::getImportance(const ref hdr) { // Try "X-Priority" field try { const ref fld = hdr->findField("X-Priority").dynamicCast (); 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) { // Try "Importance" field try { const ref fld = hdr->findField("Importance").dynamicCast (); 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); } catch (exceptions::no_such_field) { // Default return (IMPORTANCE_NORMAL); } } // Should not go here... return (IMPORTANCE_NORMAL); } void importanceHelper::setImportance(ref msg, const Importance i) { setImportance(msg->getHeader(), i); } void importanceHelper::setImportance(ref
hdr, const Importance i) { // "X-Priority:" Field ref fld = hdr->getField("X-Priority").dynamicCast (); 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 = hdr->getField("Importance").dynamicCast (); 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