aboutsummaryrefslogtreecommitdiffstats
path: root/src/vmime/utility/encoder
diff options
context:
space:
mode:
Diffstat (limited to 'src/vmime/utility/encoder')
-rw-r--r--src/vmime/utility/encoder/encoderFactory.cpp24
-rw-r--r--src/vmime/utility/encoder/encoderFactory.hpp15
2 files changed, 38 insertions, 1 deletions
diff --git a/src/vmime/utility/encoder/encoderFactory.cpp b/src/vmime/utility/encoder/encoderFactory.cpp
index 3e0351f3..cda8168d 100644
--- a/src/vmime/utility/encoder/encoderFactory.cpp
+++ b/src/vmime/utility/encoder/encoderFactory.cpp
@@ -71,7 +71,17 @@ shared_ptr <encoderFactory> encoderFactory::getInstance()
shared_ptr <encoder> encoderFactory::create(const string& name)
{
- return (getEncoderByName(name)->create());
+ try
+ {
+ return (getEncoderByName(name)->create());
+ }
+ catch (exceptions::no_encoder_available &) {
+
+ if (m_defaultEncoder)
+ return m_defaultEncoder;
+
+ throw;
+ }
}
@@ -116,6 +126,18 @@ const std::vector <shared_ptr <const encoderFactory::registeredEncoder> > encode
}
+void encoderFactory::setDefaultEncoder(const shared_ptr <encoder>& enc)
+{
+ m_defaultEncoder = enc;
+}
+
+
+shared_ptr <encoder> encoderFactory::getDefaultEncoder() const
+{
+ return m_defaultEncoder;
+}
+
+
} // encoder
} // utility
} // vmime
diff --git a/src/vmime/utility/encoder/encoderFactory.hpp b/src/vmime/utility/encoder/encoderFactory.hpp
index 763cbd5c..91121ad5 100644
--- a/src/vmime/utility/encoder/encoderFactory.hpp
+++ b/src/vmime/utility/encoder/encoderFactory.hpp
@@ -88,6 +88,7 @@ private:
std::vector <shared_ptr <registeredEncoder> > m_encoders;
+ shared_ptr <encoder> m_defaultEncoder;
public:
@@ -137,6 +138,20 @@ public:
* @return list of registered encoders
*/
const std::vector <shared_ptr <const registeredEncoder> > getEncoderList() const;
+
+ /** Set the default encoder to use when no other encoder
+ * is registered for an encoding (fallback).
+ *
+ * @param enc default encoder
+ */
+ void setDefaultEncoder(const shared_ptr <encoder>& enc);
+
+ /** Return the default encoder to use when no other encoder
+ * is registered for an encoding (fallback).
+ *
+ * @return default encoder
+ */
+ shared_ptr <encoder> getDefaultEncoder() const;
};