mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
Enable JSON conversion for RsGxsImage via MemBlockProxy
This commit is contained in:
parent
afeb408f7a
commit
afb92999d8
@ -213,10 +213,13 @@ public:
|
||||
virtual bool getFileData( const RsFileHash& hash, uint64_t offset,
|
||||
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
|
||||
* @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;
|
||||
|
||||
/**
|
||||
|
@ -56,7 +56,7 @@ struct RsGxsChannelGroup : RsSerializable
|
||||
{
|
||||
RS_SERIAL_PROCESS(mMeta);
|
||||
RS_SERIAL_PROCESS(mDescription);
|
||||
//RS_SERIAL_PROCESS(mImage);
|
||||
RS_SERIAL_PROCESS(mImage);
|
||||
RS_SERIAL_PROCESS(mAutoDownload);
|
||||
}
|
||||
};
|
||||
@ -90,7 +90,7 @@ struct RsGxsChannelPost : RsSerializable
|
||||
RS_SERIAL_PROCESS(mFiles);
|
||||
RS_SERIAL_PROCESS(mCount);
|
||||
RS_SERIAL_PROCESS(mSize);
|
||||
//RS_SERIAL_PROCESS(mThumbnail);
|
||||
RS_SERIAL_PROCESS(mThumbnail);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -50,7 +50,7 @@ struct RsGxsFile : RsSerializable
|
||||
}
|
||||
};
|
||||
|
||||
struct RsGxsImage
|
||||
struct RsGxsImage : RsSerializable
|
||||
{
|
||||
RsGxsImage();
|
||||
~RsGxsImage();
|
||||
@ -70,8 +70,16 @@ struct RsGxsImage
|
||||
void clear(); // Frees.
|
||||
void shallowClear(); // Clears Pointer.
|
||||
|
||||
uint8_t *mData;
|
||||
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");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include "serialiser/rsbaseserial.h"
|
||||
#include "serialiser/rstlvkeys.h"
|
||||
#include "serialiser/rsserializable.h"
|
||||
|
||||
#include "util/radix64.h"
|
||||
#include "util/rsprint.h"
|
||||
|
||||
#include <iomanip>
|
||||
@ -646,9 +646,12 @@ bool RsTypeSerializer::to_JSON(
|
||||
rapidjson::Value key;
|
||||
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;
|
||||
const char* tName = typeid(member).name();
|
||||
value.SetString(tName, allocator);
|
||||
value.SetString(encodedValue.data(), allocator);
|
||||
|
||||
jDoc.AddMember(key, value, allocator);
|
||||
|
||||
@ -656,7 +659,27 @@ bool RsTypeSerializer::to_JSON(
|
||||
}
|
||||
|
||||
template<> /*static*/
|
||||
bool RsTypeSerializer::from_JSON( const std::string& /*memberName*/,
|
||||
RsTypeSerializer::TlvMemBlock_proxy&,
|
||||
RsJson& /*jDoc*/)
|
||||
{ return true; }
|
||||
bool RsTypeSerializer::from_JSON( const std::string& memberName,
|
||||
RsTypeSerializer::TlvMemBlock_proxy& member,
|
||||
RsJson& jDoc)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user