diff --git a/src/message.cc b/src/message.cc index 2654672..058f5ed 100644 --- a/src/message.cc +++ b/src/message.cc @@ -106,6 +106,19 @@ namespace pEp { return PyBuffer_FillInfo(view, self, bl->value, bl->size, 0, flags); } + string Message::Blob::decode(string encoding) + { + if (encoding == "") { + if (string(_bl->mime_type) == "application/pEp") + encoding = "sync"; + else + encoding = "ascii"; + } + object codecs = import("codecs"); + object _decode = codecs.attr("decode"); + return call< string >(_decode.ptr(), this, encoding); + } + PyBufferProcs Message::Blob::bp = { getbuffer, NULL }; Message::Message(PEP_msg_direction dir, Identity *from) diff --git a/src/message.hh b/src/message.hh index 2a9d9ea..92fe1e2 100644 --- a/src/message.hh +++ b/src/message.hh @@ -41,6 +41,8 @@ namespace pEp { void filename(string value) { str_attr(_bl->filename, value); } size_t size() { return _bl->size; } + string decode(string encoding); + string decode() { return decode(""); } static PyBufferProcs bp; diff --git a/src/pEpmodule.cc b/src/pEpmodule.cc index 60d54cc..802ca01 100644 --- a/src/pEpmodule.cc +++ b/src/pEpmodule.cc @@ -106,6 +106,8 @@ BOOST_PYTHON_MODULE(pEp) .def(init()) .def("__repr__", &Message::Blob::_repr) .def("__len__", &Message::Blob::size, "size of Blob data in bytes") + .def("decode", (string(Message::Blob::*)(string)) &Message::Blob::decode, "decode Blob data into string") + .def("decode", (string(Message::Blob::*)()) &Message::Blob::decode, "decode Blob data into string") .add_property("mime_type", (string(Message::Blob::*)()) &Message::Blob::mime_type, (void(Message::Blob::*)(string)) &Message::Blob::mime_type, "MIME type of object in Blob")