Enable JSON conversion for RsGxsImage via MemBlockProxy

This commit is contained in:
Gioacchino Mazzurco 2018-08-24 00:31:25 +02:00
parent afeb408f7a
commit afb92999d8
No known key found for this signature in database
GPG Key ID: A1FBCA3872E87051
4 changed files with 50 additions and 16 deletions

View File

@ -213,11 +213,14 @@ public:
virtual bool getFileData( const RsFileHash& hash, uint64_t offset, virtual bool getFileData( const RsFileHash& hash, uint64_t offset,
uint32_t& requested_size, uint8_t* data ) = 0; uint32_t& requested_size, uint8_t* data ) = 0;
/*** /**
* Control of Downloads. * @brief Check if we already have a file
***/ * @jsonapi{development}
* @param[in] hash file identifier
virtual bool alreadyHaveFile(const RsFileHash& hash, FileInfo &info) = 0; * @param[out] info storage for the possibly found file information
* @return true if the file is already present, false otherwise
*/
virtual bool alreadyHaveFile(const RsFileHash& hash, FileInfo &info) = 0;
/** /**
* @brief Initiate downloading of a file * @brief Initiate downloading of a file

View File

@ -56,7 +56,7 @@ struct RsGxsChannelGroup : RsSerializable
{ {
RS_SERIAL_PROCESS(mMeta); RS_SERIAL_PROCESS(mMeta);
RS_SERIAL_PROCESS(mDescription); RS_SERIAL_PROCESS(mDescription);
//RS_SERIAL_PROCESS(mImage); RS_SERIAL_PROCESS(mImage);
RS_SERIAL_PROCESS(mAutoDownload); RS_SERIAL_PROCESS(mAutoDownload);
} }
}; };
@ -90,7 +90,7 @@ struct RsGxsChannelPost : RsSerializable
RS_SERIAL_PROCESS(mFiles); RS_SERIAL_PROCESS(mFiles);
RS_SERIAL_PROCESS(mCount); RS_SERIAL_PROCESS(mCount);
RS_SERIAL_PROCESS(mSize); RS_SERIAL_PROCESS(mSize);
//RS_SERIAL_PROCESS(mThumbnail); RS_SERIAL_PROCESS(mThumbnail);
} }
}; };

View File

@ -50,7 +50,7 @@ struct RsGxsFile : RsSerializable
} }
}; };
struct RsGxsImage struct RsGxsImage : RsSerializable
{ {
RsGxsImage(); RsGxsImage();
~RsGxsImage(); ~RsGxsImage();
@ -70,8 +70,16 @@ struct RsGxsImage
void clear(); // Frees. void clear(); // Frees.
void shallowClear(); // Clears Pointer. void shallowClear(); // Clears Pointer.
uint8_t *mData;
uint32_t mSize; uint32_t mSize;
uint8_t* mData;
/// @see RsSerializable
virtual void serial_process( RsGenericSerializer::SerializeJob j,
RsGenericSerializer::SerializeContext& ctx )
{
RsTypeSerializer::TlvMemBlock_proxy b(mData, mSize);
RsTypeSerializer::serial_process(j, ctx, b, "mData");
}
}; };

View File

@ -25,7 +25,7 @@
#include "serialiser/rsbaseserial.h" #include "serialiser/rsbaseserial.h"
#include "serialiser/rstlvkeys.h" #include "serialiser/rstlvkeys.h"
#include "serialiser/rsserializable.h" #include "serialiser/rsserializable.h"
#include "util/radix64.h"
#include "util/rsprint.h" #include "util/rsprint.h"
#include <iomanip> #include <iomanip>
@ -646,9 +646,12 @@ bool RsTypeSerializer::to_JSON(
rapidjson::Value key; rapidjson::Value key;
key.SetString(memberName.c_str(), memberName.length(), allocator); key.SetString(memberName.c_str(), memberName.length(), allocator);
std::string encodedValue;
Radix64::encode( reinterpret_cast<uint8_t*>(member.first),
member.second, encodedValue );
rapidjson::Value value; rapidjson::Value value;
const char* tName = typeid(member).name(); value.SetString(encodedValue.data(), allocator);
value.SetString(tName, allocator);
jDoc.AddMember(key, value, allocator); jDoc.AddMember(key, value, allocator);
@ -656,7 +659,27 @@ bool RsTypeSerializer::to_JSON(
} }
template<> /*static*/ template<> /*static*/
bool RsTypeSerializer::from_JSON( const std::string& /*memberName*/, bool RsTypeSerializer::from_JSON( const std::string& memberName,
RsTypeSerializer::TlvMemBlock_proxy&, RsTypeSerializer::TlvMemBlock_proxy& member,
RsJson& /*jDoc*/) RsJson& jDoc)
{ return true; } {
SAFE_GET_JSON_V();
ret = ret && v.IsString();
if(ret)
{
std::string encodedValue = v.GetString();
std::vector<uint8_t> decodedValue = Radix64::decode(encodedValue);
member.second = decodedValue.size();
if(member.second == 0)
{
member.first = nullptr;
return ret;
}
member.first = rs_malloc(member.second);
ret = ret && member.first &&
memcpy(member.first, decodedValue.data(), member.second);
}
return ret;
}