aboutsummaryrefslogtreecommitdiffstats
path: root/vmime
diff options
context:
space:
mode:
Diffstat (limited to 'vmime')
-rw-r--r--vmime/contentHandler.hpp9
-rw-r--r--vmime/emptyContentHandler.hpp4
-rw-r--r--vmime/encoder.hpp9
-rw-r--r--vmime/encoderB64.hpp4
-rw-r--r--vmime/encoderDefault.hpp4
-rw-r--r--vmime/encoderQP.hpp4
-rw-r--r--vmime/encoderUUE.hpp4
-rw-r--r--vmime/streamContentHandler.hpp4
-rw-r--r--vmime/stringContentHandler.hpp4
-rw-r--r--vmime/utility/progressionListener.hpp29
-rw-r--r--vmime/utility/stringProxy.hpp3
11 files changed, 59 insertions, 19 deletions
diff --git a/vmime/contentHandler.hpp b/vmime/contentHandler.hpp
index bdc2fde0..e680fce3 100644
--- a/vmime/contentHandler.hpp
+++ b/vmime/contentHandler.hpp
@@ -26,6 +26,7 @@
#include "vmime/base.hpp"
#include "vmime/utility/stringProxy.hpp"
#include "vmime/utility/smartPtr.hpp"
+#include "vmime/utility/progressionListener.hpp"
#include "vmime/encoding.hpp"
@@ -66,16 +67,20 @@ public:
* @throw exceptions::no_encoder_available if the encoding is
* not supported
* @param os output stream
+ * @param progress progression listener, or NULL if you do not
+ * want to receive progression notifications
*/
- virtual void extract(utility::outputStream& os) const = 0;
+ virtual void extract(utility::outputStream& os, utility::progressionListener* progress = NULL) const = 0;
/** Extract the contents into the specified stream, without
* decoding it. It may be useful in case the encoding is not
* supported and you want to extract raw data.
*
* @param os output stream
+ * @param progress progression listener, or NULL if you do not
+ * want to receive progression notifications
*/
- virtual void extractRaw(utility::outputStream& os) const = 0;
+ virtual void extractRaw(utility::outputStream& os, utility::progressionListener* progress = NULL) const = 0;
/** Returns the actual length of data. WARNING: this can return 0 if no
* length was specified when setting data of this object.
diff --git a/vmime/emptyContentHandler.hpp b/vmime/emptyContentHandler.hpp
index 636bb691..00c1b97e 100644
--- a/vmime/emptyContentHandler.hpp
+++ b/vmime/emptyContentHandler.hpp
@@ -38,8 +38,8 @@ public:
void generate(utility::outputStream& os, const vmime::encoding& enc, const string::size_type maxLineLength = lineLengthLimits::infinite) const;
- void extract(utility::outputStream& os) const;
- void extractRaw(utility::outputStream& os) const;
+ void extract(utility::outputStream& os, utility::progressionListener* progress = NULL) const;
+ void extractRaw(utility::outputStream& os, utility::progressionListener* progress = NULL) const;
const string::size_type getLength() const;
diff --git a/vmime/encoder.hpp b/vmime/encoder.hpp
index a093b48d..689d1ce8 100644
--- a/vmime/encoder.hpp
+++ b/vmime/encoder.hpp
@@ -24,6 +24,7 @@
#include "vmime/base.hpp"
#include "vmime/propertySet.hpp"
#include "vmime/exception.hpp"
+#include "vmime/utility/progressionListener.hpp"
namespace vmime
@@ -44,17 +45,21 @@ public:
*
* @param in input data (decoded)
* @param out output stream for encoded data
+ * @param progress progression listener, or NULL if you do not
+ * want to receive progression notifications
* @return number of bytes written into output stream
*/
- virtual const utility::stream::size_type encode(utility::inputStream& in, utility::outputStream& out) = 0;
+ virtual const utility::stream::size_type encode(utility::inputStream& in, utility::outputStream& out, utility::progressionListener* progress = NULL) = 0;
/** Decode data.
*
* @param in input data (encoded)
* @param out output stream for decoded data
+ * @param progress progression listener, or NULL if you do not
+ * want to receive progression notifications
* @return number of bytes written into output stream
*/
- virtual const utility::stream::size_type decode(utility::inputStream& in, utility::outputStream& out) = 0;
+ virtual const utility::stream::size_type decode(utility::inputStream& in, utility::outputStream& out, utility::progressionListener* progress = NULL) = 0;
/** Return the properties of the encoder.
*
diff --git a/vmime/encoderB64.hpp b/vmime/encoderB64.hpp
index 5643b9c2..4ee45589 100644
--- a/vmime/encoderB64.hpp
+++ b/vmime/encoderB64.hpp
@@ -37,8 +37,8 @@ public:
encoderB64();
- const utility::stream::size_type encode(utility::inputStream& in, utility::outputStream& out);
- const utility::stream::size_type decode(utility::inputStream& in, utility::outputStream& out);
+ const utility::stream::size_type encode(utility::inputStream& in, utility::outputStream& out, utility::progressionListener* progress = NULL);
+ const utility::stream::size_type decode(utility::inputStream& in, utility::outputStream& out, utility::progressionListener* progress = NULL);
const std::vector <string> getAvailableProperties() const;
diff --git a/vmime/encoderDefault.hpp b/vmime/encoderDefault.hpp
index ae37eaf2..feb576da 100644
--- a/vmime/encoderDefault.hpp
+++ b/vmime/encoderDefault.hpp
@@ -37,8 +37,8 @@ public:
encoderDefault();
- const utility::stream::size_type encode(utility::inputStream& in, utility::outputStream& out);
- const utility::stream::size_type decode(utility::inputStream& in, utility::outputStream& out);
+ const utility::stream::size_type encode(utility::inputStream& in, utility::outputStream& out, utility::progressionListener* progress = NULL);
+ const utility::stream::size_type decode(utility::inputStream& in, utility::outputStream& out, utility::progressionListener* progress = NULL);
};
diff --git a/vmime/encoderQP.hpp b/vmime/encoderQP.hpp
index b1ce2327..1461c533 100644
--- a/vmime/encoderQP.hpp
+++ b/vmime/encoderQP.hpp
@@ -37,8 +37,8 @@ public:
encoderQP();
- const utility::stream::size_type encode(utility::inputStream& in, utility::outputStream& out);
- const utility::stream::size_type decode(utility::inputStream& in, utility::outputStream& out);
+ const utility::stream::size_type encode(utility::inputStream& in, utility::outputStream& out, utility::progressionListener* progress = NULL);
+ const utility::stream::size_type decode(utility::inputStream& in, utility::outputStream& out, utility::progressionListener* progress = NULL);
const std::vector <string> getAvailableProperties() const;
diff --git a/vmime/encoderUUE.hpp b/vmime/encoderUUE.hpp
index e54c1ce1..18747b7b 100644
--- a/vmime/encoderUUE.hpp
+++ b/vmime/encoderUUE.hpp
@@ -37,8 +37,8 @@ public:
encoderUUE();
- const utility::stream::size_type encode(utility::inputStream& in, utility::outputStream& out);
- const utility::stream::size_type decode(utility::inputStream& in, utility::outputStream& out);
+ const utility::stream::size_type encode(utility::inputStream& in, utility::outputStream& out, utility::progressionListener* progress = NULL);
+ const utility::stream::size_type decode(utility::inputStream& in, utility::outputStream& out, utility::progressionListener* progress = NULL);
const std::vector <string> getAvailableProperties() const;
};
diff --git a/vmime/streamContentHandler.hpp b/vmime/streamContentHandler.hpp
index 3e668703..d7e39076 100644
--- a/vmime/streamContentHandler.hpp
+++ b/vmime/streamContentHandler.hpp
@@ -47,8 +47,8 @@ public:
void generate(utility::outputStream& os, const vmime::encoding& enc, const string::size_type maxLineLength = lineLengthLimits::infinite) const;
- void extract(utility::outputStream& os) const;
- void extractRaw(utility::outputStream& os) const;
+ void extract(utility::outputStream& os, utility::progressionListener* progress = NULL) const;
+ void extractRaw(utility::outputStream& os, utility::progressionListener* progress = NULL) const;
const string::size_type getLength() const;
diff --git a/vmime/stringContentHandler.hpp b/vmime/stringContentHandler.hpp
index f66a4b41..c2b4a718 100644
--- a/vmime/stringContentHandler.hpp
+++ b/vmime/stringContentHandler.hpp
@@ -65,8 +65,8 @@ public:
void generate(utility::outputStream& os, const vmime::encoding& enc, const string::size_type maxLineLength = lineLengthLimits::infinite) const;
- void extract(utility::outputStream& os) const;
- void extractRaw(utility::outputStream& os) const;
+ void extract(utility::outputStream& os, utility::progressionListener* progress = NULL) const;
+ void extractRaw(utility::outputStream& os, utility::progressionListener* progress = NULL) const;
const string::size_type getLength() const;
diff --git a/vmime/utility/progressionListener.hpp b/vmime/utility/progressionListener.hpp
index 24c2f35c..f5b50469 100644
--- a/vmime/utility/progressionListener.hpp
+++ b/vmime/utility/progressionListener.hpp
@@ -68,6 +68,35 @@ public:
};
+
+/** A progression listener used when total size is known by the
+ * receiver, but not by the notifier.
+ */
+
+class progressionListenerSizeAdapter : public progressionListener
+{
+public:
+
+ /** Construct a new progressionListenerSizeAdapter object.
+ *
+ * @param list wrapped progression listener (can be NULL)
+ * @param total predicted total
+ */
+ progressionListenerSizeAdapter(progressionListener* list, const int total);
+
+ const bool cancel() const;
+
+ void start(const int predictedTotal);
+ void progress(const int current, const int currentTotal);
+ void stop(const int total);
+
+private:
+
+ progressionListener* m_wrapped;
+ int m_total;
+};
+
+
} // utility
} // vmime
diff --git a/vmime/utility/stringProxy.hpp b/vmime/utility/stringProxy.hpp
index 614468f1..8f334b31 100644
--- a/vmime/utility/stringProxy.hpp
+++ b/vmime/utility/stringProxy.hpp
@@ -25,6 +25,7 @@
#include "vmime/types.hpp"
#include "vmime/utility/stream.hpp"
+#include "vmime/utility/progressionListener.hpp"
namespace vmime {
@@ -58,7 +59,7 @@ public:
// Extract some portion (or whole) of the string
// and output it into a stream.
- void extract(outputStream& os, const size_type start = 0, const size_type end = std::numeric_limits <size_type>::max()) const;
+ void extract(outputStream& os, const size_type start = 0, const size_type end = std::numeric_limits <size_type>::max(), utility::progressionListener* progress = NULL) const;
// Return the "virtual" length of the string
const size_type length() const;