mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-12-27 00:19:25 -05:00
added new method to create a channel with more explicit parameters and JSon API for it
This commit is contained in:
parent
ef1755d97f
commit
e0af46eb85
@ -107,6 +107,28 @@ public:
|
||||
*/
|
||||
virtual bool createChannel(RsGxsChannelGroup& channel) = 0;
|
||||
|
||||
/**
|
||||
* @brief Create channel. Blocking API.
|
||||
* @jsonapi{development}
|
||||
* @param[in] name Name of the channel
|
||||
* @param[in] description Description of the channel
|
||||
* @param[in] image Thumbnail that is shown to advertise the channel. Possibly empty.
|
||||
* @param[in] author_id GxsId of the contact author. For an anonymous channel, leave this to RsGxsId()="00000....0000"
|
||||
* @param[in] circle_type Type of visibility restriction, among { GXS_CIRCLE_TYPE_PUBLIC, GXS_CIRCLE_TYPE_EXTERNAL, GXS_CIRCLE_TYPE_YOUR_FRIENDS_ONLY, GXS_CIRCLE_TYPE_YOUR_EYES_ONLY }
|
||||
* @param[in] circle_id Id of the circle (should be an external circle or GXS_CIRCLE_TYPE_EXTERNAL, a local friend group for GXS_CIRCLE_TYPE_YOUR_FRIENDS_ONLY, GxsCircleId()="000....000" otherwise
|
||||
* @param[out] channel_group_id Group id of the created channel, if command succeeds.
|
||||
* @param[out] error_message Error messsage supplied when the channel creation fails.
|
||||
* @return False on error, true otherwise.
|
||||
*/
|
||||
virtual bool createChannel(const std::string& name,
|
||||
const std::string& description,
|
||||
const RsGxsImage& image,
|
||||
const RsGxsId& author_id,
|
||||
uint32_t circle_type,
|
||||
RsGxsCircleId& circle_id,
|
||||
RsGxsGroupId& channel_group_id,
|
||||
std::string& error_message)=0;
|
||||
|
||||
/**
|
||||
* @brief Add a comment on a post or on another comment
|
||||
* @jsonapi{development}
|
||||
|
@ -52,14 +52,15 @@ namespace GXS_SERV {
|
||||
static const uint32_t FLAG_AUTHOR_AUTHENTICATION_MASK = 0x0000ff00;
|
||||
static const uint32_t FLAG_AUTHOR_AUTHENTICATION_NONE = 0x00000000;
|
||||
static const uint32_t FLAG_AUTHOR_AUTHENTICATION_GPG = 0x00000100; // Anti-spam feature. Allows to ask higher reputation to anonymous IDs
|
||||
static const uint32_t FLAG_AUTHOR_AUTHENTICATION_REQUIRED = 0x00000200;
|
||||
static const uint32_t FLAG_AUTHOR_AUTHENTICATION_IFNOPUBSIGN = 0x00000400;
|
||||
static const uint32_t FLAG_AUTHOR_AUTHENTICATION_REQUIRED = 0x00000200; // unused
|
||||
static const uint32_t FLAG_AUTHOR_AUTHENTICATION_IFNOPUBSIGN = 0x00000400; // ???
|
||||
static const uint32_t FLAG_AUTHOR_AUTHENTICATION_TRACK_MESSAGES = 0x00000800; // not used anymore
|
||||
static const uint32_t FLAG_AUTHOR_AUTHENTICATION_GPG_KNOWN = 0x00001000; // Anti-spam feature. Allows to ask higher reputation to unknown IDs and anonymous IDs
|
||||
|
||||
// These are *not used*
|
||||
static const uint32_t FLAG_GROUP_SIGN_PUBLISH_MASK = 0x000000ff;
|
||||
static const uint32_t FLAG_GROUP_SIGN_PUBLISH_ENCRYPTED = 0x00000001;
|
||||
static const uint32_t FLAG_GROUP_SIGN_PUBLISH_ALLSIGNED = 0x00000002;
|
||||
static const uint32_t FLAG_GROUP_SIGN_PUBLISH_ALLSIGNED = 0x00000002; // unused
|
||||
static const uint32_t FLAG_GROUP_SIGN_PUBLISH_THREADHEAD = 0x00000004;
|
||||
static const uint32_t FLAG_GROUP_SIGN_PUBLISH_NONEREQ = 0x00000008;
|
||||
|
||||
|
@ -31,6 +31,7 @@
|
||||
|
||||
#include "retroshare/rsgxsflags.h"
|
||||
#include "retroshare/rsfiles.h"
|
||||
#include "retroshare/rspeers.h"
|
||||
|
||||
#include "rsserver/p3face.h"
|
||||
#include "retroshare/rsnotify.h"
|
||||
@ -1055,6 +1056,116 @@ bool p3GxsChannels::getChannelContent( const RsGxsGroupId& channelId,
|
||||
return getPostData(token, posts, comments);
|
||||
}
|
||||
|
||||
bool p3GxsChannels::createChannel(const std::string& name,
|
||||
const std::string& description,
|
||||
const RsGxsImage& image,
|
||||
const RsGxsId& author_id,
|
||||
uint32_t circle_type,
|
||||
RsGxsCircleId& circle_id,
|
||||
RsGxsGroupId& channel_group_id,
|
||||
std::string& error_message)
|
||||
{
|
||||
// do some checks
|
||||
|
||||
if( circle_type != GXS_CIRCLE_TYPE_PUBLIC
|
||||
&& circle_type != GXS_CIRCLE_TYPE_EXTERNAL
|
||||
&& circle_type != GXS_CIRCLE_TYPE_YOUR_FRIENDS_ONLY
|
||||
&& circle_type != GXS_CIRCLE_TYPE_LOCAL
|
||||
&& circle_type != GXS_CIRCLE_TYPE_YOUR_EYES_ONLY )
|
||||
{
|
||||
error_message = std::string("circle_type has a non allowed value") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
switch(circle_type)
|
||||
{
|
||||
case GXS_CIRCLE_TYPE_EXTERNAL:
|
||||
if(circle_id.isNull())
|
||||
{
|
||||
error_message = std::string("circle_type is GXS_CIRCLE_TYPE_EXTERNAL but circle_id is null");
|
||||
return false ;
|
||||
}
|
||||
break;
|
||||
|
||||
case GXS_CIRCLE_TYPE_YOUR_FRIENDS_ONLY:
|
||||
{
|
||||
RsGroupInfo ginfo;
|
||||
|
||||
if(!rsPeers->getGroupInfo(RsNodeGroupId(circle_id),ginfo))
|
||||
{
|
||||
error_message = std::string("circle_type is GXS_CIRCLE_TYPE_YOUR_FRIENDS_ONLY but circle_id is not set or does not correspond to a actual group of friends");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!circle_id.isNull())
|
||||
{
|
||||
error_message = std::string("circle_type requires a null circle id, but a non null circle id (" + circle_id.toStdString() + ") was supplied");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Create a consistent channel group meta from the information supplied
|
||||
|
||||
RsGxsChannelGroup channel ;
|
||||
|
||||
channel.mMeta.mGroupName = name ;
|
||||
channel.mMeta.mAuthorId = author_id ;
|
||||
channel.mMeta.mCircleType = circle_type ;
|
||||
|
||||
channel.mMeta.mSignFlags = GXS_SERV::FLAG_GROUP_SIGN_PUBLISH_NONEREQ
|
||||
| GXS_SERV::FLAG_AUTHOR_AUTHENTICATION_REQUIRED;
|
||||
|
||||
channel.mMeta.mGroupFlags = GXS_SERV::FLAG_PRIVACY_PUBLIC;
|
||||
|
||||
channel.mMeta.mCircleId.clear();
|
||||
channel.mMeta.mInternalCircle.clear();
|
||||
|
||||
if(circle_type == GXS_CIRCLE_TYPE_YOUR_FRIENDS_ONLY)
|
||||
channel.mMeta.mInternalCircle = circle_id;
|
||||
else if(circle_type == GXS_CIRCLE_TYPE_EXTERNAL)
|
||||
channel.mMeta.mCircleId = circle_id;
|
||||
|
||||
// Create the channel
|
||||
|
||||
channel.mDescription = description ;
|
||||
channel.mImage = image ;
|
||||
|
||||
uint32_t token;
|
||||
if(!createGroup(token, channel))
|
||||
{
|
||||
std::cerr << __PRETTY_FUNCTION__ << "Error! Failed creating group."
|
||||
<< std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
// wait for the group creation to complete.
|
||||
|
||||
if(waitToken(token) != RsTokenService::COMPLETE)
|
||||
{
|
||||
std::cerr << __PRETTY_FUNCTION__ << "Error! GXS operation failed."
|
||||
<< std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!RsGenExchange::getPublishedGroupMeta(token, channel.mMeta))
|
||||
{
|
||||
std::cerr << __PRETTY_FUNCTION__ << "Error! Failure getting updated "
|
||||
<< " group data." << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
channel_group_id = channel.mMeta.mGroupId;
|
||||
|
||||
#ifdef RS_DEEP_SEARCH
|
||||
DeepSearch::indexChannelGroup(channel);
|
||||
#endif // RS_DEEP_SEARCH
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool p3GxsChannels::createChannel(RsGxsChannelGroup& channel)
|
||||
{
|
||||
uint32_t token;
|
||||
|
@ -197,6 +197,16 @@ virtual bool ExtraFileRemove(const RsFileHash &hash);
|
||||
/// Implementation of @see RsGxsChannels::createChannel
|
||||
virtual bool createChannel(RsGxsChannelGroup& channel);
|
||||
|
||||
/// Implementation of @see RsGxsChannels::createChannel
|
||||
virtual bool createChannel(const std::string& name,
|
||||
const std::string& description,
|
||||
const RsGxsImage& image,
|
||||
const RsGxsId& author_id,
|
||||
uint32_t circle_type,
|
||||
RsGxsCircleId& circle_id,
|
||||
RsGxsGroupId& channel_group_id,
|
||||
std::string& error_message);
|
||||
|
||||
/// Implementation of @see RsGxsChannels::createComment
|
||||
virtual bool createComment(RsGxsComment& comment);
|
||||
|
||||
|
@ -755,12 +755,12 @@ void GxsGroupDialog::setGroupSignFlags(uint32_t signFlags)
|
||||
// (cyril) very weird piece of code. Need to clear this up.
|
||||
|
||||
ui.comments_allowed->setChecked(true);
|
||||
ui.commentsValueLabel->setText("Allowed") ;
|
||||
ui.commentsValueLabel->setText("Allowed") ;
|
||||
}
|
||||
else
|
||||
{
|
||||
ui.comments_no->setChecked(true);
|
||||
ui.commentsValueLabel->setText("Allowed") ;
|
||||
ui.commentsValueLabel->setText("Forbidden") ;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -61,11 +61,15 @@ const uint32_t ChannelEditDefaultsFlags = ChannelCreateDefaultsFlags;
|
||||
GxsChannelGroupDialog::GxsChannelGroupDialog(TokenQueue *tokenQueue, QWidget *parent)
|
||||
: GxsGroupDialog(tokenQueue, ChannelCreateEnabledFlags, ChannelCreateDefaultsFlags, parent)
|
||||
{
|
||||
ui.commentGroupBox->setEnabled(false); // These are here because comments_allowed are actually not used yet, so the group will not be changed by the setting and when
|
||||
ui.comments_allowed->setChecked(true); // the group info is displayed it will therefore be set to "disabled" in all cases although it is enabled.
|
||||
}
|
||||
|
||||
GxsChannelGroupDialog::GxsChannelGroupDialog(TokenQueue *tokenExternalQueue, RsTokenService *tokenService, Mode mode, RsGxsGroupId groupId, QWidget *parent)
|
||||
: GxsGroupDialog(tokenExternalQueue, tokenService, mode, groupId, ChannelEditEnabledFlags, ChannelEditDefaultsFlags, parent)
|
||||
{
|
||||
ui.commentGroupBox->setEnabled(false); // These are here because comments_allowed are actually not used yet, so the group will not be changed by the setting and when
|
||||
ui.comments_allowed->setChecked(true); // the group info is displayed it will therefore be set to "disabled" in all cases although it is enabled.
|
||||
}
|
||||
|
||||
void GxsChannelGroupDialog::initUi()
|
||||
|
Loading…
Reference in New Issue
Block a user