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,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
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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");
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user