2018-11-15 21:49:12 +01:00
/*******************************************************************************
* retroshare - gui / src / gui / gxschannels / GxsChannelGroupDialog . cpp *
* *
* Copyright 2013 by Robert Fernie < retroshare . project @ gmail . com > *
* *
* This program is free software : you can redistribute it and / or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation , either version 3 of the *
* License , or ( at your option ) any later version . *
* *
* This program is distributed in the hope that it will be useful , *
* but WITHOUT ANY WARRANTY ; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the *
* GNU Affero General Public License for more details . *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program . If not , see < https : //www.gnu.org/licenses/>. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2013-03-11 20:53:15 +00:00
2014-07-26 22:29:53 +00:00
# include <QBuffer>
2019-06-03 23:52:29 +02:00
# include "gui/gxs/GxsIdDetails.h"
2013-03-11 20:53:15 +00:00
# include "GxsChannelGroupDialog.h"
# include <retroshare/rsgxschannels.h>
# include <iostream>
// To start with we only have open forums - with distribution controls.
2013-07-19 09:48:51 +00:00
2014-01-28 07:57:58 +00:00
const uint32_t ChannelCreateEnabledFlags = (
GXS_GROUP_FLAGS_NAME |
GXS_GROUP_FLAGS_ICON |
2013-03-11 20:53:15 +00:00
GXS_GROUP_FLAGS_DESCRIPTION |
GXS_GROUP_FLAGS_DISTRIBUTION |
// GXS_GROUP_FLAGS_PUBLISHSIGN |
2018-08-09 21:18:37 +02:00
// GXS_GROUP_FLAGS_SHAREKEYS | // disabled because the UI doesn't handle it, so no need to show the disabled button. The user can do it in a second step from the channel menu.
2013-03-11 20:53:15 +00:00
// GXS_GROUP_FLAGS_PERSONALSIGN |
GXS_GROUP_FLAGS_COMMENTS |
0 ) ;
const uint32_t ChannelCreateDefaultsFlags = ( GXS_GROUP_DEFAULTS_DISTRIB_PUBLIC |
//GXS_GROUP_DEFAULTS_DISTRIB_GROUP |
//GXS_GROUP_DEFAULTS_DISTRIB_LOCAL |
2013-07-19 09:48:51 +00:00
2013-03-11 20:53:15 +00:00
GXS_GROUP_DEFAULTS_PUBLISH_OPEN |
//GXS_GROUP_DEFAULTS_PUBLISH_THREADS |
//GXS_GROUP_DEFAULTS_PUBLISH_REQUIRED |
//GXS_GROUP_DEFAULTS_PUBLISH_ENCRYPTED |
2013-07-19 09:48:51 +00:00
2013-03-11 20:53:15 +00:00
//GXS_GROUP_DEFAULTS_PERSONAL_GPG |
GXS_GROUP_DEFAULTS_PERSONAL_REQUIRED |
//GXS_GROUP_DEFAULTS_PERSONAL_IFNOPUB |
2013-07-19 09:48:51 +00:00
2013-03-11 20:53:15 +00:00
GXS_GROUP_DEFAULTS_COMMENTS_YES |
//GXS_GROUP_DEFAULTS_COMMENTS_NO |
0 ) ;
2014-01-28 07:57:58 +00:00
const uint32_t ChannelEditEnabledFlags = ChannelCreateEnabledFlags ;
const uint32_t ChannelEditDefaultsFlags = ChannelCreateDefaultsFlags ;
2013-03-11 20:53:15 +00:00
GxsChannelGroupDialog : : GxsChannelGroupDialog ( TokenQueue * tokenQueue , QWidget * parent )
2014-07-24 23:26:04 +00:00
: GxsGroupDialog ( tokenQueue , ChannelCreateEnabledFlags , ChannelCreateDefaultsFlags , parent )
2013-03-11 20:53:15 +00:00
{
2019-03-30 22:53:14 +01:00
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.
2013-03-11 20:53:15 +00:00
}
2014-02-09 10:43:59 +00:00
GxsChannelGroupDialog : : GxsChannelGroupDialog ( TokenQueue * tokenExternalQueue , RsTokenService * tokenService , Mode mode , RsGxsGroupId groupId , QWidget * parent )
2014-07-24 23:26:04 +00:00
: GxsGroupDialog ( tokenExternalQueue , tokenService , mode , groupId , ChannelEditEnabledFlags , ChannelEditDefaultsFlags , parent )
2013-03-11 20:53:15 +00:00
{
2019-03-30 22:53:14 +01:00
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.
2013-03-11 20:53:15 +00:00
}
void GxsChannelGroupDialog : : initUi ( )
{
switch ( mode ( ) )
{
case MODE_CREATE :
setUiText ( UITYPE_SERVICE_HEADER , tr ( " Create New Channel " ) ) ;
2018-08-09 21:18:37 +02:00
setUiText ( UITYPE_BUTTONBOX_OK , tr ( " Create " ) ) ;
2013-03-11 20:53:15 +00:00
break ;
case MODE_SHOW :
setUiText ( UITYPE_SERVICE_HEADER , tr ( " Channel " ) ) ;
break ;
case MODE_EDIT :
setUiText ( UITYPE_SERVICE_HEADER , tr ( " Edit Channel " ) ) ;
2018-08-09 21:18:37 +02:00
setUiText ( UITYPE_BUTTONBOX_OK , tr ( " Update Channel " ) ) ;
2013-03-11 20:53:15 +00:00
break ;
}
2013-08-30 16:30:23 +00:00
setUiText ( UITYPE_KEY_SHARE_CHECKBOX , tr ( " Add Channel Admins " ) ) ;
2018-08-09 21:18:37 +02:00
setUiText ( UITYPE_CONTACTS_DOCK , tr ( " Select Channel Admins " ) ) ;
2013-03-11 20:53:15 +00:00
}
QPixmap GxsChannelGroupDialog : : serviceImage ( )
{
2014-05-06 17:41:38 +00:00
switch ( mode ( ) )
{
case MODE_CREATE :
2016-08-24 03:28:57 +02:00
return QPixmap ( " :/icons/png/channels.png " ) ;
2014-07-26 22:29:53 +00:00
case MODE_SHOW :
2016-08-24 03:28:57 +02:00
return QPixmap ( " :/icons/png/channels.png " ) ;
2014-05-06 17:41:38 +00:00
case MODE_EDIT :
2016-08-24 03:28:57 +02:00
return QPixmap ( " :/icons/png/channels.png " ) ;
2014-05-06 17:41:38 +00:00
}
2014-07-24 23:26:04 +00:00
return QPixmap ( ) ;
2013-03-11 20:53:15 +00:00
}
2014-07-26 22:29:53 +00:00
void GxsChannelGroupDialog : : prepareChannelGroup ( RsGxsChannelGroup & group , const RsGroupMetaData & meta )
{
group . mMeta = meta ;
group . mDescription = getDescription ( ) . toUtf8 ( ) . constData ( ) ;
QPixmap pixmap = getLogo ( ) ;
if ( ! pixmap . isNull ( ) ) {
QByteArray ba ;
QBuffer buffer ( & ba ) ;
buffer . open ( QIODevice : : WriteOnly ) ;
pixmap . save ( & buffer , " PNG " ) ; // writes image into ba in PNG format
group . mImage . copy ( ( uint8_t * ) ba . data ( ) , ba . size ( ) ) ;
} else {
group . mImage . clear ( ) ;
}
}
2013-03-11 20:53:15 +00:00
bool GxsChannelGroupDialog : : service_CreateGroup ( uint32_t & token , const RsGroupMetaData & meta )
{
// Specific Function.
RsGxsChannelGroup grp ;
2014-07-26 22:29:53 +00:00
prepareChannelGroup ( grp , meta ) ;
2013-03-11 20:53:15 +00:00
rsGxsChannels - > createGroup ( token , grp ) ;
return true ;
}
2014-01-28 07:57:58 +00:00
2014-04-14 22:36:10 +00:00
bool GxsChannelGroupDialog : : service_EditGroup ( uint32_t & token , RsGroupMetaData & editedMeta )
2014-01-28 07:57:58 +00:00
{
2014-02-09 10:43:59 +00:00
RsGxsChannelGroup grp ;
2014-07-26 22:29:53 +00:00
prepareChannelGroup ( grp , editedMeta ) ;
2014-02-09 10:43:59 +00:00
std : : cerr < < " GxsChannelGroupDialog::service_EditGroup() submitting changes " ;
2014-01-28 07:57:58 +00:00
std : : cerr < < std : : endl ;
2014-02-19 11:11:06 +00:00
rsGxsChannels - > updateGroup ( token , grp ) ;
2014-02-09 10:43:59 +00:00
return true ;
}
2014-04-14 22:36:10 +00:00
bool GxsChannelGroupDialog : : service_loadGroup ( uint32_t token , Mode /*mode*/ , RsGroupMetaData & groupMetaData , QString & description )
2014-02-09 10:43:59 +00:00
{
2014-04-14 22:36:10 +00:00
std : : cerr < < " GxsChannelGroupDialog::service_loadGroup( " < < token < < " ) " ;
std : : cerr < < std : : endl ;
std : : vector < RsGxsChannelGroup > groups ;
if ( ! rsGxsChannels - > getGroupData ( token , groups ) )
{
std : : cerr < < " GxsChannelGroupDialog::service_loadGroup() Error getting GroupData " ;
std : : cerr < < std : : endl ;
return false ;
}
if ( groups . size ( ) ! = 1 )
{
std : : cerr < < " GxsChannelGroupDialog::service_loadGroup() Error Group.size() != 1 " ;
std : : cerr < < std : : endl ;
return false ;
}
std : : cerr < < " GxsChannelsGroupDialog::service_loadGroup() Unfinished Loading " ;
std : : cerr < < std : : endl ;
2014-02-09 10:43:59 +00:00
2014-07-26 22:29:53 +00:00
const RsGxsChannelGroup & group = groups [ 0 ] ;
groupMetaData = group . mMeta ;
description = QString : : fromUtf8 ( group . mDescription . c_str ( ) ) ;
if ( group . mImage . mData ) {
QPixmap pixmap ;
2019-06-03 23:52:29 +02:00
2019-06-04 13:41:51 +02:00
if ( GxsIdDetails : : loadPixmapFromData ( group . mImage . mData , group . mImage . mSize , pixmap , GxsIdDetails : : ORIGINAL ) ) {
2014-07-26 22:29:53 +00:00
setLogo ( pixmap ) ;
}
}
2014-04-14 22:36:10 +00:00
2014-02-09 10:43:59 +00:00
return true ;
2014-01-28 07:57:58 +00:00
}