2014-05-04 18:59:06 -04:00
/****************************************************************
* RetroShare is distributed under the following license :
*
* Copyright ( C ) 2008 Robert Fernie
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* 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 General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor ,
* Boston , MA 02110 - 1301 , USA .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include <QMenu>
# include <QMessageBox>
# include <QToolButton>
# include "GxsGroupFrameDialog.h"
# include "ui_GxsGroupFrameDialog.h"
# include "GxsMessageFrameWidget.h"
# include "gui/settings/rsharesettings.h"
# include "gui/RetroShareLink.h"
2014-10-13 14:31:47 -04:00
# include "gui/gxs/GxsGroupShareKey.h"
2014-05-04 18:59:06 -04:00
# include "gui/common/RSTreeWidget.h"
# include "gui/notifyqt.h"
2014-05-07 17:04:54 -04:00
# include "gui/common/UIStateHelper.h"
2014-05-07 20:00:21 -04:00
# include "GxsCommentDialog.h"
2014-05-04 18:59:06 -04:00
//#define DEBUG_GROUPFRAMEDIALOG
/* Images for TreeWidget */
# define IMAGE_SUBSCRIBE ": / images / edit_add24.png"
# define IMAGE_UNSUBSCRIBE ": / images / cancel.png"
# define IMAGE_INFO ": / images / info16.png"
//#define IMAGE_GROUPAUTHD ":/images/konv_message2.png"
# define IMAGE_COPYLINK ": / images / copyrslink.png"
2014-05-06 13:15:20 -04:00
# define IMAGE_EDIT ": / images / edit_16.png"
2014-05-07 20:00:21 -04:00
# define IMAGE_SHARE ": / images / share-icon-16.png"
# define IMAGE_TABNEW ": / images / tab-new.png"
# define IMAGE_COMMENT ""
2014-05-04 18:59:06 -04:00
2014-05-07 17:04:54 -04:00
# define TOKEN_TYPE_GROUP_SUMMARY 1
2014-07-05 14:33:11 -04:00
//#define TOKEN_TYPE_SUBSCRIBE_CHANGE 2
2014-05-04 18:59:06 -04:00
//#define TOKEN_TYPE_CURRENTGROUP 3
2014-07-06 12:39:09 -04:00
# define TOKEN_TYPE_STATISTICS 4
2014-05-04 18:59:06 -04:00
2014-05-07 20:00:21 -04:00
# define MAX_COMMENT_TITLE 32
2014-05-04 18:59:06 -04:00
/*
* Transformation Notes :
* there are still a couple of things that the new groups differ from Old version .
* these will need to be addressed in the future .
* - > Child TS ( for sorting ) is not handled by GXS , this will probably have to be done in the GUI .
* - > Need to handle IDs properly .
* - > Much more to do .
*/
/** Constructor */
GxsGroupFrameDialog : : GxsGroupFrameDialog ( RsGxsIfaceHelper * ifaceImpl , QWidget * parent )
: RsGxsUpdateBroadcastPage ( ifaceImpl , parent )
{
/* Invoke the Qt Designer generated object setup routine */
ui = new Ui : : GxsGroupFrameDialog ( ) ;
ui - > setupUi ( this ) ;
mInitialized = false ;
2015-08-26 08:51:34 -04:00
mInFill = false ;
2014-09-24 19:57:47 -04:00
mCountChildMsgs = false ;
2014-05-04 18:59:06 -04:00
mYourGroups = NULL ;
mSubscribedGroups = NULL ;
mPopularGroups = NULL ;
mOtherGroups = NULL ;
mMessageWidget = NULL ;
/* Setup Queue */
mInterface = ifaceImpl ;
2014-07-20 15:35:33 -04:00
mTokenService = mInterface - > getTokenService ( ) ;
2014-05-04 18:59:06 -04:00
mTokenQueue = new TokenQueue ( mInterface - > getTokenService ( ) , this ) ;
/* Setup UI helper */
2014-05-07 17:04:54 -04:00
mStateHelper = new UIStateHelper ( this ) ;
mStateHelper - > addWidget ( TOKEN_TYPE_GROUP_SUMMARY , ui - > loadingLabel , UISTATE_LOADING_VISIBLE ) ;
2014-05-04 18:59:06 -04:00
connect ( ui - > groupTreeWidget , SIGNAL ( treeCustomContextMenuRequested ( QPoint ) ) , this , SLOT ( groupTreeCustomPopupMenu ( QPoint ) ) ) ;
2014-12-16 14:21:46 -05:00
connect ( ui - > groupTreeWidget , SIGNAL ( treeCurrentItemChanged ( QString ) ) , this , SLOT ( changedGroup ( QString ) ) ) ;
2014-05-04 18:59:06 -04:00
connect ( ui - > groupTreeWidget - > treeWidget ( ) , SIGNAL ( signalMouseMiddleButtonClicked ( QTreeWidgetItem * ) ) , this , SLOT ( groupTreeMiddleButtonClicked ( QTreeWidgetItem * ) ) ) ;
connect ( ui - > messageTabWidget , SIGNAL ( tabCloseRequested ( int ) ) , this , SLOT ( messageTabCloseRequested ( int ) ) ) ;
connect ( ui - > messageTabWidget , SIGNAL ( currentChanged ( int ) ) , this , SLOT ( messageTabChanged ( int ) ) ) ;
connect ( ui - > todoPushButton , SIGNAL ( clicked ( ) ) , this , SLOT ( todo ( ) ) ) ;
/* Set initial size the splitter */
2014-12-13 18:32:23 -05:00
ui - > splitter - > setStretchFactor ( 0 , 0 ) ;
ui - > splitter - > setStretchFactor ( 1 , 1 ) ;
2014-05-04 18:59:06 -04:00
QList < int > sizes ;
sizes < < 300 < < width ( ) ; // Qt calculates the right sizes
ui - > splitter - > setSizes ( sizes ) ;
2014-09-10 17:38:43 -04:00
# ifndef UNFINISHED
ui - > todoPushButton - > hide ( ) ;
# endif
2014-05-04 18:59:06 -04:00
}
GxsGroupFrameDialog : : ~ GxsGroupFrameDialog ( )
{
// save settings
processSettings ( false ) ;
delete ( mTokenQueue ) ;
delete ( ui ) ;
}
2017-10-21 15:23:40 -04:00
void GxsGroupFrameDialog : : getGroupList ( std : : list < RsGroupMetaData > & group_list )
{
group_list = mCachedGroupMetas ;
if ( group_list . empty ( ) )
requestGroupSummary ( ) ;
}
2014-05-04 18:59:06 -04:00
void GxsGroupFrameDialog : : initUi ( )
{
2017-02-25 17:52:57 -05:00
registerHelpButton ( ui - > helpButton , getHelpString ( ) , pageName ( ) ) ;
2014-09-10 17:38:43 -04:00
2014-05-04 18:59:06 -04:00
ui - > titleBarPixmap - > setPixmap ( QPixmap ( icon ( ICON_NAME ) ) ) ;
ui - > titleBarLabel - > setText ( text ( TEXT_NAME ) ) ;
/* Initialize group tree */
QToolButton * newGroupButton = new QToolButton ( this ) ;
newGroupButton - > setIcon ( QIcon ( icon ( ICON_NEW ) ) ) ;
newGroupButton - > setToolTip ( text ( TEXT_NEW ) ) ;
connect ( newGroupButton , SIGNAL ( clicked ( ) ) , this , SLOT ( newGroup ( ) ) ) ;
ui - > groupTreeWidget - > addToolButton ( newGroupButton ) ;
/* Create group tree */
mYourGroups = ui - > groupTreeWidget - > addCategoryItem ( text ( TEXT_YOUR_GROUP ) , QIcon ( icon ( ICON_YOUR_GROUP ) ) , true ) ;
mSubscribedGroups = ui - > groupTreeWidget - > addCategoryItem ( text ( TEXT_SUBSCRIBED_GROUP ) , QIcon ( icon ( ICON_SUBSCRIBED_GROUP ) ) , true ) ;
mPopularGroups = ui - > groupTreeWidget - > addCategoryItem ( text ( TEXT_POPULAR_GROUP ) , QIcon ( icon ( ICON_POPULAR_GROUP ) ) , false ) ;
mOtherGroups = ui - > groupTreeWidget - > addCategoryItem ( text ( TEXT_OTHER_GROUP ) , QIcon ( icon ( ICON_OTHER_GROUP ) ) , false ) ;
if ( text ( TEXT_TODO ) . isEmpty ( ) ) {
ui - > todoPushButton - > hide ( ) ;
}
// load settings
mSettingsName = settingsGroupName ( ) ;
processSettings ( true ) ;
2014-07-24 10:54:23 -04:00
if ( groupFrameSettingsType ( ) ! = GroupFrameSettings : : Nothing ) {
connect ( NotifyQt : : getInstance ( ) , SIGNAL ( settingsChanged ( ) ) , this , SLOT ( settingsChanged ( ) ) ) ;
settingsChanged ( ) ;
}
2014-05-04 18:59:06 -04:00
}
void GxsGroupFrameDialog : : showEvent ( QShowEvent * event )
{
if ( ! mInitialized ) {
/* Problem: virtual methods cannot be used in constructor */
mInitialized = true ;
initUi ( ) ;
}
RsGxsUpdateBroadcastPage : : showEvent ( event ) ;
}
void GxsGroupFrameDialog : : processSettings ( bool load )
{
if ( mSettingsName . isEmpty ( ) ) {
return ;
}
Settings - > beginGroup ( mSettingsName ) ;
if ( load ) {
// load settings
// state of splitter
ui - > splitter - > restoreState ( Settings - > value ( " Splitter " ) . toByteArray ( ) ) ;
} else {
// save settings
// state of splitter
Settings - > setValue ( " Splitter " , ui - > splitter - > saveState ( ) ) ;
}
2018-05-08 06:08:08 -04:00
ui - > groupTreeWidget - > processSettings ( load ) ;
2014-05-04 18:59:06 -04:00
Settings - > endGroup ( ) ;
}
2014-07-24 10:54:23 -04:00
void GxsGroupFrameDialog : : settingsChanged ( )
{
GroupFrameSettings groupFrameSettings ;
if ( Settings - > getGroupFrameSettings ( groupFrameSettingsType ( ) , groupFrameSettings ) ) {
setSingleTab ( ! groupFrameSettings . mOpenAllInNewTab ) ;
setHideTabBarWithOneTab ( groupFrameSettings . mHideTabBarWithOneTab ) ;
}
}
2014-05-04 18:59:06 -04:00
void GxsGroupFrameDialog : : setSingleTab ( bool singleTab )
{
if ( singleTab ) {
if ( ! mMessageWidget ) {
mMessageWidget = createMessageWidget ( RsGxsGroupId ( ) ) ;
// remove close button of the the first tab
ui - > messageTabWidget - > hideCloseButton ( ui - > messageTabWidget - > indexOf ( mMessageWidget ) ) ;
}
} else {
if ( mMessageWidget ) {
delete ( mMessageWidget ) ;
mMessageWidget = NULL ;
}
}
}
2014-07-14 17:29:51 -04:00
void GxsGroupFrameDialog : : setHideTabBarWithOneTab ( bool hideTabBarWithOneTab )
{
ui - > messageTabWidget - > setHideTabBarWithOneTab ( hideTabBarWithOneTab ) ;
}
2014-05-04 18:59:06 -04:00
void GxsGroupFrameDialog : : updateDisplay ( bool complete )
{
2014-07-05 14:33:11 -04:00
if ( complete | | ! getGrpIds ( ) . empty ( ) | | ! getGrpIdsMeta ( ) . empty ( ) ) {
2014-05-04 18:59:06 -04:00
/* Update group list */
requestGroupSummary ( ) ;
2014-07-06 12:39:09 -04:00
} else {
2014-07-20 15:35:33 -04:00
/* Update all groups of changed messages */
std : : map < RsGxsGroupId , std : : vector < RsGxsMessageId > > msgIds ;
getAllMsgIds ( msgIds ) ;
std : : map < RsGxsGroupId , std : : vector < RsGxsMessageId > > : : iterator msgIt ;
for ( msgIt = msgIds . begin ( ) ; msgIt ! = msgIds . end ( ) ; + + msgIt ) {
updateMessageSummaryList ( msgIt - > first ) ;
2014-07-06 12:39:09 -04:00
}
2014-05-04 18:59:06 -04:00
}
}
void GxsGroupFrameDialog : : todo ( )
{
QMessageBox : : information ( this , " Todo " , text ( TEXT_TODO ) ) ;
}
2014-05-25 17:43:05 -04:00
void GxsGroupFrameDialog : : groupTreeCustomPopupMenu ( QPoint point )
2014-05-04 18:59:06 -04:00
{
QMenu contextMnu ( this ) ;
2018-05-08 06:08:08 -04:00
QString id = ui - > groupTreeWidget - > itemIdAt ( point ) ;
if ( ! id . isEmpty ( ) )
{
2014-05-04 18:59:06 -04:00
2018-05-08 06:08:08 -04:00
mGroupId = RsGxsGroupId ( id . toStdString ( ) ) ;
int subscribeFlags = ui - > groupTreeWidget - > subscribeFlags ( QString : : fromStdString ( mGroupId . toStdString ( ) ) ) ;
2014-05-04 18:59:06 -04:00
2018-05-08 06:08:08 -04:00
bool isAdmin = IS_GROUP_ADMIN ( subscribeFlags ) ;
bool isPublisher = IS_GROUP_PUBLISHER ( subscribeFlags ) ;
bool isSubscribed = IS_GROUP_SUBSCRIBED ( subscribeFlags ) ;
2014-05-04 18:59:06 -04:00
2018-05-08 06:08:08 -04:00
QAction * action ;
2016-12-05 17:42:44 -05:00
2018-05-08 06:08:08 -04:00
if ( mMessageWidget ) {
action = contextMnu . addAction ( QIcon ( IMAGE_TABNEW ) , tr ( " Open in new tab " ) , this , SLOT ( openInNewTab ( ) ) ) ;
if ( mGroupId . isNull ( ) | | messageWidget ( mGroupId , true ) ) {
action - > setEnabled ( false ) ;
}
}
2016-12-05 17:42:44 -05:00
2018-05-08 06:08:08 -04:00
if ( isSubscribed ) {
action = contextMnu . addAction ( QIcon ( IMAGE_UNSUBSCRIBE ) , tr ( " Unsubscribe " ) , this , SLOT ( unsubscribeGroup ( ) ) ) ;
action - > setEnabled ( ! mGroupId . isNull ( ) & & IS_GROUP_SUBSCRIBED ( subscribeFlags ) ) ;
} else {
action = contextMnu . addAction ( QIcon ( IMAGE_SUBSCRIBE ) , tr ( " Subscribe " ) , this , SLOT ( subscribeGroup ( ) ) ) ;
action - > setDisabled ( mGroupId . isNull ( ) | | IS_GROUP_SUBSCRIBED ( subscribeFlags ) ) ;
}
2016-12-05 17:42:44 -05:00
2018-05-08 06:08:08 -04:00
contextMnu . addSeparator ( ) ;
2016-12-05 16:14:48 -05:00
2018-05-08 06:08:08 -04:00
contextMnu . addAction ( QIcon ( icon ( ICON_NEW ) ) , text ( TEXT_NEW ) , this , SLOT ( newGroup ( ) ) ) ;
action = contextMnu . addAction ( QIcon ( IMAGE_INFO ) , tr ( " Show Details " ) , this , SLOT ( showGroupDetails ( ) ) ) ;
action - > setEnabled ( ! mGroupId . isNull ( ) ) ;
action = contextMnu . addAction ( QIcon ( IMAGE_EDIT ) , tr ( " Edit Details " ) , this , SLOT ( editGroupDetails ( ) ) ) ;
action - > setEnabled ( ! mGroupId . isNull ( ) & & isAdmin ) ;
uint32_t current_store_time = mInterface - > getStoragePeriod ( mGroupId ) / 86400 ;
uint32_t current_sync_time = mInterface - > getSyncPeriod ( mGroupId ) / 86400 ;
std : : cerr < < " Got sync= " < < current_sync_time < < " . store= " < < current_store_time < < std : : endl ;
QAction * actnn = NULL ;
QMenu * ctxMenu2 = contextMnu . addMenu ( tr ( " Synchronise posts of last... " ) ) ;
actnn = ctxMenu2 - > addAction ( tr ( " 5 days " ) , this , SLOT ( setSyncPostsDelay ( ) ) ) ; actnn - > setData ( QVariant ( 5 ) ) ; if ( current_sync_time = = 5 ) { actnn - > setEnabled ( false ) ; actnn - > setIcon ( QIcon ( " :/images/start.png " ) ) ; }
actnn = ctxMenu2 - > addAction ( tr ( " 2 weeks " ) , this , SLOT ( setSyncPostsDelay ( ) ) ) ; actnn - > setData ( QVariant ( 15 ) ) ; if ( current_sync_time = = 15 ) { actnn - > setEnabled ( false ) ; actnn - > setIcon ( QIcon ( " :/images/start.png " ) ) ; }
actnn = ctxMenu2 - > addAction ( tr ( " 1 month " ) , this , SLOT ( setSyncPostsDelay ( ) ) ) ; actnn - > setData ( QVariant ( 30 ) ) ; if ( current_sync_time = = 30 ) { actnn - > setEnabled ( false ) ; actnn - > setIcon ( QIcon ( " :/images/start.png " ) ) ; }
actnn = ctxMenu2 - > addAction ( tr ( " 3 months " ) , this , SLOT ( setSyncPostsDelay ( ) ) ) ; actnn - > setData ( QVariant ( 90 ) ) ; if ( current_sync_time = = 90 ) { actnn - > setEnabled ( false ) ; actnn - > setIcon ( QIcon ( " :/images/start.png " ) ) ; }
actnn = ctxMenu2 - > addAction ( tr ( " 6 months " ) , this , SLOT ( setSyncPostsDelay ( ) ) ) ; actnn - > setData ( QVariant ( 180 ) ) ; if ( current_sync_time = = 180 ) { actnn - > setEnabled ( false ) ; actnn - > setIcon ( QIcon ( " :/images/start.png " ) ) ; }
actnn = ctxMenu2 - > addAction ( tr ( " 1 year " ) , this , SLOT ( setSyncPostsDelay ( ) ) ) ; actnn - > setData ( QVariant ( 372 ) ) ; if ( current_sync_time = = 372 ) { actnn - > setEnabled ( false ) ; actnn - > setIcon ( QIcon ( " :/images/start.png " ) ) ; }
actnn = ctxMenu2 - > addAction ( tr ( " Indefinitly " ) , this , SLOT ( setSyncPostsDelay ( ) ) ) ; actnn - > setData ( QVariant ( 0 ) ) ; if ( current_sync_time = = 0 ) { actnn - > setEnabled ( false ) ; actnn - > setIcon ( QIcon ( " :/images/start.png " ) ) ; }
ctxMenu2 = contextMnu . addMenu ( tr ( " Store posts for at most... " ) ) ;
actnn = ctxMenu2 - > addAction ( tr ( " 5 days " ) , this , SLOT ( setStorePostsDelay ( ) ) ) ; actnn - > setData ( QVariant ( 5 ) ) ; if ( current_store_time = = 5 ) { actnn - > setEnabled ( false ) ; actnn - > setIcon ( QIcon ( " :/images/start.png " ) ) ; }
actnn = ctxMenu2 - > addAction ( tr ( " 2 weeks " ) , this , SLOT ( setStorePostsDelay ( ) ) ) ; actnn - > setData ( QVariant ( 15 ) ) ; if ( current_store_time = = 15 ) { actnn - > setEnabled ( false ) ; actnn - > setIcon ( QIcon ( " :/images/start.png " ) ) ; }
actnn = ctxMenu2 - > addAction ( tr ( " 1 month " ) , this , SLOT ( setStorePostsDelay ( ) ) ) ; actnn - > setData ( QVariant ( 30 ) ) ; if ( current_store_time = = 30 ) { actnn - > setEnabled ( false ) ; actnn - > setIcon ( QIcon ( " :/images/start.png " ) ) ; }
actnn = ctxMenu2 - > addAction ( tr ( " 3 months " ) , this , SLOT ( setStorePostsDelay ( ) ) ) ; actnn - > setData ( QVariant ( 90 ) ) ; if ( current_store_time = = 90 ) { actnn - > setEnabled ( false ) ; actnn - > setIcon ( QIcon ( " :/images/start.png " ) ) ; }
actnn = ctxMenu2 - > addAction ( tr ( " 6 months " ) , this , SLOT ( setStorePostsDelay ( ) ) ) ; actnn - > setData ( QVariant ( 180 ) ) ; if ( current_store_time = = 180 ) { actnn - > setEnabled ( false ) ; actnn - > setIcon ( QIcon ( " :/images/start.png " ) ) ; }
actnn = ctxMenu2 - > addAction ( tr ( " 1 year " ) , this , SLOT ( setStorePostsDelay ( ) ) ) ; actnn - > setData ( QVariant ( 372 ) ) ; if ( current_store_time = = 372 ) { actnn - > setEnabled ( false ) ; actnn - > setIcon ( QIcon ( " :/images/start.png " ) ) ; }
actnn = ctxMenu2 - > addAction ( tr ( " Indefinitly " ) , this , SLOT ( setStorePostsDelay ( ) ) ) ; actnn - > setData ( QVariant ( 0 ) ) ; if ( current_store_time = = 0 ) { actnn - > setEnabled ( false ) ; actnn - > setIcon ( QIcon ( " :/images/start.png " ) ) ; }
if ( shareKeyType ( ) ) {
action = contextMnu . addAction ( QIcon ( IMAGE_SHARE ) , tr ( " Share publish permissions " ) , this , SLOT ( sharePublishKey ( ) ) ) ;
action - > setEnabled ( ! mGroupId . isNull ( ) & & isPublisher ) ;
}
2014-05-04 18:59:06 -04:00
2018-05-08 06:08:08 -04:00
if ( getLinkType ( ) ! = RetroShareLink : : TYPE_UNKNOWN ) {
action = contextMnu . addAction ( QIcon ( IMAGE_COPYLINK ) , tr ( " Copy RetroShare Link " ) , this , SLOT ( copyGroupLink ( ) ) ) ;
action - > setEnabled ( ! mGroupId . isNull ( ) ) ;
}
2014-05-04 18:59:06 -04:00
2018-05-08 06:08:08 -04:00
contextMnu . addSeparator ( ) ;
2014-05-04 18:59:06 -04:00
2018-05-08 06:08:08 -04:00
action = contextMnu . addAction ( QIcon ( " :/images/message-mail-read.png " ) , tr ( " Mark all as read " ) , this , SLOT ( markMsgAsRead ( ) ) ) ;
action - > setEnabled ( ! mGroupId . isNull ( ) & & isSubscribed ) ;
2014-05-04 18:59:06 -04:00
2018-05-08 06:08:08 -04:00
action = contextMnu . addAction ( QIcon ( " :/images/message-mail.png " ) , tr ( " Mark all as unread " ) , this , SLOT ( markMsgAsUnread ( ) ) ) ;
action - > setEnabled ( ! mGroupId . isNull ( ) & & isSubscribed ) ;
2014-05-04 18:59:06 -04:00
2018-05-08 06:08:08 -04:00
/* Add special actions */
QList < QAction * > actions ;
groupTreeCustomActions ( mGroupId , subscribeFlags , actions ) ;
if ( ! actions . isEmpty ( ) ) {
contextMnu . addSeparator ( ) ;
contextMnu . addActions ( actions ) ;
}
2014-05-04 18:59:06 -04:00
}
2018-05-08 06:08:08 -04:00
//Add Standard Menu
ui - > groupTreeWidget - > treeWidget ( ) - > createStandardContextMenu ( & contextMnu ) ;
2014-05-04 18:59:06 -04:00
contextMnu . exec ( QCursor : : pos ( ) ) ;
}
2016-12-05 16:14:48 -05:00
void GxsGroupFrameDialog : : setStorePostsDelay ( )
{
QAction * action = dynamic_cast < QAction * > ( sender ( ) ) ;
if ( ! action | | mGroupId . isNull ( ) )
{
std : : cerr < < " (EE) Cannot find action/group that called me! Group is " < < mGroupId < < " , action is " < < ( void * ) action < < " " < < __PRETTY_FUNCTION__ < < std : : endl ;
return ;
}
uint32_t duration = action - > data ( ) . toUInt ( ) ;
std : : cerr < < " Data is " < < duration < < std : : endl ;
2016-12-05 17:42:44 -05:00
mInterface - > setStoragePeriod ( mGroupId , duration * 86400 ) ;
2016-12-13 15:12:34 -05:00
// If the sync is larger, we reduce it. No need to sync more than we store. The machinery below also takes care of this.
//
uint32_t sync_period = mInterface - > getSyncPeriod ( mGroupId ) ;
if ( duration > 0 ) // the >0 test is to discard the indefinitly test. Basically, if we store for less than indefinitly, the sync is reduced accordingly.
{
if ( sync_period = = 0 | | sync_period > duration * 86400 )
{
mInterface - > setSyncPeriod ( mGroupId , duration * 86400 ) ;
std : : cerr < < " (II) auto adjusting sync period to " < < duration < < " days as well. " < < std : : endl ;
}
}
2016-12-05 16:14:48 -05:00
}
void GxsGroupFrameDialog : : setSyncPostsDelay ( )
{
QAction * action = dynamic_cast < QAction * > ( sender ( ) ) ;
if ( ! action | | mGroupId . isNull ( ) )
{
std : : cerr < < " (EE) Cannot find action/group that called me! Group is " < < mGroupId < < " , action is " < < ( void * ) action < < " " < < __PRETTY_FUNCTION__ < < std : : endl ;
return ;
}
uint32_t duration = action - > data ( ) . toUInt ( ) ;
std : : cerr < < " Data is " < < duration < < std : : endl ;
2016-12-05 17:42:44 -05:00
mInterface - > setSyncPeriod ( mGroupId , duration * 86400 ) ;
2016-12-13 15:12:34 -05:00
// If the store is smaller, we increase it accordingly. No need to sync more than we store. The machinery below also takes care of this.
//
uint32_t store_period = mInterface - > getStoragePeriod ( mGroupId ) ;
if ( duration = = 0 )
mInterface - > setStoragePeriod ( mGroupId , duration * 86400 ) ; // indefinite sync => indefinite storage
else
{
if ( store_period ! = 0 & & store_period < duration * 86400 )
{
mInterface - > setStoragePeriod ( mGroupId , duration * 86400 ) ; // indefinite sync => indefinite storage
std : : cerr < < " (II) auto adjusting storage period to " < < duration < < " days as well. " < < std : : endl ;
}
}
2016-12-05 16:14:48 -05:00
}
2014-05-04 18:59:06 -04:00
void GxsGroupFrameDialog : : restoreGroupKeys ( void )
{
QMessageBox : : warning ( this , " RetroShare " , " ToDo " ) ;
# ifdef TOGXS
mInterface - > groupRestoreKeys ( mGroupId ) ;
# endif
}
void GxsGroupFrameDialog : : newGroup ( )
{
GxsGroupDialog * dialog = createNewGroupDialog ( mTokenQueue ) ;
if ( ! dialog ) {
return ;
}
dialog - > exec ( ) ;
delete ( dialog ) ;
}
void GxsGroupFrameDialog : : subscribeGroup ( )
{
groupSubscribe ( true ) ;
}
void GxsGroupFrameDialog : : unsubscribeGroup ( )
{
groupSubscribe ( false ) ;
}
void GxsGroupFrameDialog : : groupSubscribe ( bool subscribe )
{
if ( mGroupId . isNull ( ) ) {
return ;
}
uint32_t token ;
mInterface - > subscribeToGroup ( token , mGroupId , subscribe ) ;
2014-07-05 14:33:11 -04:00
// Replaced by meta data changed
// mTokenQueue->queueRequest(token, 0, RS_TOKREQ_ANSTYPE_ACK, TOKEN_TYPE_SUBSCRIBE_CHANGE);
2014-05-04 18:59:06 -04:00
}
void GxsGroupFrameDialog : : showGroupDetails ( )
{
if ( mGroupId . isNull ( ) ) {
return ;
}
GxsGroupDialog * dialog = createGroupDialog ( mTokenQueue , mInterface - > getTokenService ( ) , GxsGroupDialog : : MODE_SHOW , mGroupId ) ;
if ( ! dialog ) {
return ;
}
dialog - > exec ( ) ;
delete ( dialog ) ;
}
void GxsGroupFrameDialog : : editGroupDetails ( )
{
if ( mGroupId . isNull ( ) ) {
return ;
}
GxsGroupDialog * dialog = createGroupDialog ( mTokenQueue , mInterface - > getTokenService ( ) , GxsGroupDialog : : MODE_EDIT , mGroupId ) ;
if ( ! dialog ) {
return ;
}
dialog - > exec ( ) ;
delete ( dialog ) ;
}
void GxsGroupFrameDialog : : copyGroupLink ( )
{
if ( mGroupId . isNull ( ) ) {
return ;
}
2014-07-26 19:52:45 -04:00
QString name ;
if ( ! getCurrentGroupName ( name ) ) return ;
2014-05-27 17:14:05 -04:00
2017-07-16 07:11:47 -04:00
RetroShareLink link = RetroShareLink : : createGxsGroupLink ( getLinkType ( ) , mGroupId , name ) ;
if ( link . valid ( ) ) {
2014-07-26 19:52:45 -04:00
QList < RetroShareLink > urls ;
urls . push_back ( link ) ;
RSLinkClipboard : : copyLinks ( urls ) ;
}
2014-05-27 17:14:05 -04:00
}
bool GxsGroupFrameDialog : : getCurrentGroupName ( QString & name )
{
2014-07-26 19:52:45 -04:00
return ui - > groupTreeWidget - > getGroupName ( QString : : fromStdString ( mGroupId . toStdString ( ) ) , name ) ;
2014-05-04 18:59:06 -04:00
}
void GxsGroupFrameDialog : : markMsgAsRead ( )
{
GxsMessageFrameWidget * msgWidget = messageWidget ( mGroupId , false ) ;
if ( msgWidget ) {
msgWidget - > setAllMessagesRead ( true ) ;
}
}
void GxsGroupFrameDialog : : markMsgAsUnread ( )
{
GxsMessageFrameWidget * msgWidget = messageWidget ( mGroupId , false ) ;
if ( msgWidget ) {
msgWidget - > setAllMessagesRead ( false ) ;
}
}
2016-06-16 22:23:27 -04:00
void GxsGroupFrameDialog : : sharePublishKey ( )
2014-05-04 18:59:06 -04:00
{
if ( mGroupId . isNull ( ) ) {
return ;
}
2014-10-05 15:14:05 -04:00
// QMessageBox::warning(this, "", "ToDo");
2014-07-26 17:18:03 -04:00
2014-10-13 14:31:47 -04:00
GroupShareKey shareUi ( this , mGroupId , shareKeyType ( ) ) ;
2014-10-05 15:14:05 -04:00
shareUi . exec ( ) ;
2014-05-04 18:59:06 -04:00
}
2017-05-18 16:31:52 -04:00
void GxsGroupFrameDialog : : loadComment ( const RsGxsGroupId & grpId , const QVector < RsGxsMessageId > & msg_versions , const RsGxsMessageId & most_recent_msgId , const QString & title )
2014-05-07 20:00:21 -04:00
{
RsGxsCommentService * commentService = getCommentService ( ) ;
if ( ! commentService ) {
/* No comment service available */
return ;
}
2017-05-18 16:31:52 -04:00
GxsCommentDialog * commentDialog = commentWidget ( most_recent_msgId ) ;
2014-05-07 20:00:21 -04:00
if ( ! commentDialog ) {
QString comments = title ;
if ( title . length ( ) > MAX_COMMENT_TITLE )
{
comments . truncate ( MAX_COMMENT_TITLE - 3 ) ;
comments + = " ... " ;
}
commentDialog = new GxsCommentDialog ( this , mInterface - > getTokenService ( ) , commentService ) ;
2017-05-18 16:31:52 -04:00
QWidget * commentHeader = createCommentHeaderWidget ( grpId , most_recent_msgId ) ;
2014-05-07 20:00:21 -04:00
if ( commentHeader ) {
commentDialog - > setCommentHeader ( commentHeader ) ;
}
2017-05-18 16:31:52 -04:00
std : : set < RsGxsMessageId > msgv ;
for ( int i = 0 ; i < msg_versions . size ( ) ; + + i )
msgv . insert ( msg_versions [ i ] ) ;
commentDialog - > commentLoad ( grpId , msgv , most_recent_msgId ) ;
2014-05-07 20:00:21 -04:00
int index = ui - > messageTabWidget - > addTab ( commentDialog , comments ) ;
ui - > messageTabWidget - > setTabIcon ( index , QIcon ( IMAGE_COMMENT ) ) ;
}
ui - > messageTabWidget - > setCurrentWidget ( commentDialog ) ;
}
2014-10-25 11:50:00 -04:00
bool GxsGroupFrameDialog : : navigate ( const RsGxsGroupId & groupId , const RsGxsMessageId & msgId )
2014-05-04 18:59:06 -04:00
{
if ( groupId . isNull ( ) ) {
return false ;
}
2014-10-25 11:50:00 -04:00
if ( mStateHelper - > isLoading ( TOKEN_TYPE_GROUP_SUMMARY ) ) {
mNavigatePendingGroupId = groupId ;
mNavigatePendingMsgId = msgId ;
/* No information if group is available */
return true ;
}
QString groupIdString = QString : : fromStdString ( groupId . toStdString ( ) ) ;
if ( ui - > groupTreeWidget - > activateId ( groupIdString , msgId . isNull ( ) ) = = NULL ) {
2014-05-04 18:59:06 -04:00
return false ;
2014-10-25 11:50:00 -04:00
}
changedGroup ( groupIdString ) ;
/* search exisiting tab */
GxsMessageFrameWidget * msgWidget = messageWidget ( mGroupId , false ) ;
if ( ! msgWidget ) {
return false ;
}
2014-05-04 18:59:06 -04:00
2014-10-25 11:50:00 -04:00
if ( msgId . isNull ( ) ) {
return true ;
}
2014-05-04 18:59:06 -04:00
2014-10-25 19:52:33 -04:00
return msgWidget - > navigate ( msgId ) ;
2014-05-04 18:59:06 -04:00
}
GxsMessageFrameWidget * GxsGroupFrameDialog : : messageWidget ( const RsGxsGroupId & groupId , bool ownTab )
{
int tabCount = ui - > messageTabWidget - > count ( ) ;
for ( int index = 0 ; index < tabCount ; + + index ) {
GxsMessageFrameWidget * childWidget = dynamic_cast < GxsMessageFrameWidget * > ( ui - > messageTabWidget - > widget ( index ) ) ;
if ( ownTab & & mMessageWidget & & childWidget = = mMessageWidget ) {
continue ;
}
if ( childWidget & & childWidget - > groupId ( ) = = groupId ) {
return childWidget ;
}
}
return NULL ;
}
GxsMessageFrameWidget * GxsGroupFrameDialog : : createMessageWidget ( const RsGxsGroupId & groupId )
{
GxsMessageFrameWidget * msgWidget = createMessageFrameWidget ( groupId ) ;
if ( ! msgWidget ) {
return NULL ;
}
int index = ui - > messageTabWidget - > addTab ( msgWidget , msgWidget - > groupName ( true ) ) ;
ui - > messageTabWidget - > setTabIcon ( index , msgWidget - > groupIcon ( ) ) ;
2014-05-07 20:00:21 -04:00
2014-05-04 18:59:06 -04:00
connect ( msgWidget , SIGNAL ( groupChanged ( QWidget * ) ) , this , SLOT ( messageTabInfoChanged ( QWidget * ) ) ) ;
2015-03-14 17:13:28 -04:00
connect ( msgWidget , SIGNAL ( waitingChanged ( QWidget * ) ) , this , SLOT ( messageTabWaitingChanged ( QWidget * ) ) ) ;
2017-05-18 16:31:52 -04:00
connect ( msgWidget , SIGNAL ( loadComment ( RsGxsGroupId , QVector < RsGxsMessageId > , RsGxsMessageId , QString ) ) , this , SLOT ( loadComment ( RsGxsGroupId , QVector < RsGxsMessageId > , RsGxsMessageId , QString ) ) ) ;
2014-05-04 18:59:06 -04:00
return msgWidget ;
}
2017-05-18 16:31:52 -04:00
GxsCommentDialog * GxsGroupFrameDialog : : commentWidget ( const RsGxsMessageId & msgId )
2014-05-07 20:00:21 -04:00
{
int tabCount = ui - > messageTabWidget - > count ( ) ;
for ( int index = 0 ; index < tabCount ; + + index ) {
GxsCommentDialog * childWidget = dynamic_cast < GxsCommentDialog * > ( ui - > messageTabWidget - > widget ( index ) ) ;
if ( childWidget & & childWidget - > messageId ( ) = = msgId ) {
return childWidget ;
}
}
return NULL ;
}
2014-05-04 18:59:06 -04:00
void GxsGroupFrameDialog : : changedGroup ( const QString & groupId )
{
2015-08-26 08:51:34 -04:00
if ( mInFill ) {
return ;
}
2018-02-18 17:12:59 -05:00
if ( groupId . isEmpty ( ) ) {
if ( mMessageWidget ) {
mMessageWidget - > setGroupId ( RsGxsGroupId ( ) ) ;
ui - > messageTabWidget - > setCurrentWidget ( mMessageWidget ) ;
}
return ;
}
2014-05-04 18:59:06 -04:00
mGroupId = RsGxsGroupId ( groupId . toStdString ( ) ) ;
if ( mGroupId . isNull ( ) ) {
return ;
}
/* search exisiting tab */
GxsMessageFrameWidget * msgWidget = messageWidget ( mGroupId , true ) ;
if ( ! msgWidget ) {
if ( mMessageWidget ) {
/* not found, use standard tab */
msgWidget = mMessageWidget ;
msgWidget - > setGroupId ( mGroupId ) ;
} else {
/* create new tab */
msgWidget = createMessageWidget ( mGroupId ) ;
}
}
ui - > messageTabWidget - > setCurrentWidget ( msgWidget ) ;
}
void GxsGroupFrameDialog : : groupTreeMiddleButtonClicked ( QTreeWidgetItem * item )
{
openGroupInNewTab ( RsGxsGroupId ( ui - > groupTreeWidget - > itemId ( item ) . toStdString ( ) ) ) ;
}
void GxsGroupFrameDialog : : openInNewTab ( )
{
openGroupInNewTab ( mGroupId ) ;
}
void GxsGroupFrameDialog : : openGroupInNewTab ( const RsGxsGroupId & groupId )
{
if ( groupId . isNull ( ) ) {
return ;
}
/* search exisiting tab */
GxsMessageFrameWidget * msgWidget = messageWidget ( groupId , true ) ;
if ( ! msgWidget ) {
/* not found, create new tab */
msgWidget = createMessageWidget ( groupId ) ;
}
ui - > messageTabWidget - > setCurrentWidget ( msgWidget ) ;
}
void GxsGroupFrameDialog : : messageTabCloseRequested ( int index )
{
2014-05-07 20:00:21 -04:00
QWidget * widget = ui - > messageTabWidget - > widget ( index ) ;
if ( ! widget ) {
2014-05-04 18:59:06 -04:00
return ;
}
2014-05-07 20:00:21 -04:00
GxsMessageFrameWidget * msgWidget = dynamic_cast < GxsMessageFrameWidget * > ( widget ) ;
if ( msgWidget & & msgWidget = = mMessageWidget ) {
/* Don't close single tab */
2014-05-04 18:59:06 -04:00
return ;
}
2014-05-07 20:00:21 -04:00
delete ( widget ) ;
2014-05-04 18:59:06 -04:00
}
void GxsGroupFrameDialog : : messageTabChanged ( int index )
{
GxsMessageFrameWidget * msgWidget = dynamic_cast < GxsMessageFrameWidget * > ( ui - > messageTabWidget - > widget ( index ) ) ;
if ( ! msgWidget ) {
return ;
}
ui - > groupTreeWidget - > activateId ( QString : : fromStdString ( msgWidget - > groupId ( ) . toStdString ( ) ) , false ) ;
}
void GxsGroupFrameDialog : : messageTabInfoChanged ( QWidget * widget )
{
int index = ui - > messageTabWidget - > indexOf ( widget ) ;
if ( index < 0 ) {
return ;
}
GxsMessageFrameWidget * msgWidget = dynamic_cast < GxsMessageFrameWidget * > ( ui - > messageTabWidget - > widget ( index ) ) ;
if ( ! msgWidget ) {
return ;
}
ui - > messageTabWidget - > setTabText ( index , msgWidget - > groupName ( true ) ) ;
ui - > messageTabWidget - > setTabIcon ( index , msgWidget - > groupIcon ( ) ) ;
}
2015-03-14 17:13:28 -04:00
void GxsGroupFrameDialog : : messageTabWaitingChanged ( QWidget * widget )
{
int index = ui - > messageTabWidget - > indexOf ( widget ) ;
if ( index < 0 ) {
return ;
}
GxsMessageFrameWidget * msgWidget = dynamic_cast < GxsMessageFrameWidget * > ( ui - > messageTabWidget - > widget ( index ) ) ;
if ( ! msgWidget ) {
return ;
}
ui - > groupTreeWidget - > setWaiting ( QString : : fromStdString ( msgWidget - > groupId ( ) . toStdString ( ) ) , msgWidget - > isWaiting ( ) ) ;
}
2014-05-04 18:59:06 -04:00
///***** INSERT GROUP LISTS *****/
2014-09-11 18:07:06 -04:00
void GxsGroupFrameDialog : : groupInfoToGroupItemInfo ( const RsGroupMetaData & groupInfo , GroupItemInfo & groupItemInfo , const RsUserdata */ * userdata */ )
2014-05-04 18:59:06 -04:00
{
groupItemInfo . id = QString : : fromStdString ( groupInfo . mGroupId . toStdString ( ) ) ;
groupItemInfo . name = QString : : fromUtf8 ( groupInfo . mGroupName . c_str ( ) ) ;
groupItemInfo . popularity = groupInfo . mPop ;
groupItemInfo . lastpost = QDateTime : : fromTime_t ( groupInfo . mLastPost ) ;
2014-12-27 17:13:29 -05:00
groupItemInfo . subscribeFlags = groupInfo . mSubscribeFlags ;
2016-06-16 22:23:27 -04:00
groupItemInfo . publishKey = IS_GROUP_PUBLISHER ( groupInfo . mSubscribeFlags ) ;
groupItemInfo . adminKey = IS_GROUP_ADMIN ( groupInfo . mSubscribeFlags ) ;
2014-12-27 17:13:29 -05:00
groupItemInfo . max_visible_posts = groupInfo . mVisibleMsgCount ;
2014-05-04 18:59:06 -04:00
# if TOGXS
if ( groupInfo . mGroupFlags & RS_DISTRIB_AUTHEN_REQ ) {
groupItemInfo . name + = " ( " + tr ( " AUTHD " ) + " ) " ;
groupItemInfo . icon = QIcon ( IMAGE_GROUPAUTHD ) ;
}
else
# endif
{
groupItemInfo . icon = QIcon ( icon ( ICON_DEFAULT ) ) ;
}
}
2014-09-11 18:07:06 -04:00
void GxsGroupFrameDialog : : insertGroupsData ( const std : : list < RsGroupMetaData > & groupList , const RsUserdata * userdata )
2014-05-04 18:59:06 -04:00
{
if ( ! mInitialized ) {
return ;
}
2015-08-26 08:51:34 -04:00
mInFill = true ;
2014-05-04 18:59:06 -04:00
std : : list < RsGroupMetaData > : : const_iterator it ;
QList < GroupItemInfo > adminList ;
QList < GroupItemInfo > subList ;
QList < GroupItemInfo > popList ;
QList < GroupItemInfo > otherList ;
std : : multimap < uint32_t , GroupItemInfo > popMap ;
2014-10-21 18:33:02 -04:00
for ( it = groupList . begin ( ) ; it ! = groupList . end ( ) ; + + it ) {
2014-05-04 18:59:06 -04:00
/* sort it into Publish (Own), Subscribed, Popular and Other */
uint32_t flags = it - > mSubscribeFlags ;
GroupItemInfo groupItemInfo ;
2014-09-11 18:07:06 -04:00
groupInfoToGroupItemInfo ( * it , groupItemInfo , userdata ) ;
2014-05-04 18:59:06 -04:00
if ( IS_GROUP_SUBSCRIBED ( flags ) )
{
if ( IS_GROUP_ADMIN ( flags ) )
{
adminList . push_back ( groupItemInfo ) ;
}
else
{
/* subscribed group */
subList . push_back ( groupItemInfo ) ;
}
}
else
{
2017-06-29 16:11:44 -04:00
//popMap.insert(std::make_pair(it->mPop, groupItemInfo)); /* rate the others by popularity */
popMap . insert ( std : : make_pair ( it - > mLastPost , groupItemInfo ) ) ; /* rate the others by time of last post */
2014-05-04 18:59:06 -04:00
}
}
/* iterate backwards through popMap - take the top 5 or 10% of list */
uint32_t popCount = 5 ;
if ( popCount < popMap . size ( ) / 10 )
{
popCount = popMap . size ( ) / 10 ;
}
uint32_t i = 0 ;
std : : multimap < uint32_t , GroupItemInfo > : : reverse_iterator rit ;
2017-07-15 07:32:04 -04:00
//uint32_t popLimit = 0;
2017-06-29 16:11:44 -04:00
//for(rit = popMap.rbegin(); ((rit != popMap.rend()) && (i < popCount)); ++rit, ++i) ;
//if (rit != popMap.rend()) {
// popLimit = rit->first;
//}
for ( rit = popMap . rbegin ( ) ; rit ! = popMap . rend ( ) ; + + rit , + + i ) {
//if (rit->second.popularity > (int) popLimit) {
if ( i < popCount )
2014-05-04 18:59:06 -04:00
popList . append ( rit - > second ) ;
2017-06-29 16:11:44 -04:00
else
otherList . append ( rit - > second ) ;
2014-05-04 18:59:06 -04:00
}
/* now we can add them in as a tree! */
ui - > groupTreeWidget - > fillGroupItems ( mYourGroups , adminList ) ;
ui - > groupTreeWidget - > fillGroupItems ( mSubscribedGroups , subList ) ;
2017-03-21 09:52:40 -04:00
mSubscribedGroups - > setText ( 2 , QString : : number ( mSubscribedGroups - > childCount ( ) ) ) ; // 1 COLUMN_UNREAD 2 COLUMN_POPULARITY
2014-05-04 18:59:06 -04:00
ui - > groupTreeWidget - > fillGroupItems ( mPopularGroups , popList ) ;
2017-03-21 09:52:40 -04:00
mPopularGroups - > setText ( 2 , QString : : number ( mPopularGroups - > childCount ( ) ) ) ;
2014-05-04 18:59:06 -04:00
ui - > groupTreeWidget - > fillGroupItems ( mOtherGroups , otherList ) ;
2017-03-21 09:52:40 -04:00
mOtherGroups - > setText ( 2 , QString : : number ( mOtherGroups - > childCount ( ) ) ) ;
2014-05-04 18:59:06 -04:00
2015-08-26 08:51:34 -04:00
mInFill = false ;
2014-07-05 14:33:11 -04:00
/* Re-fill group */
if ( ! ui - > groupTreeWidget - > activateId ( QString : : fromStdString ( mGroupId . toStdString ( ) ) , true ) ) {
mGroupId . clear ( ) ;
}
2014-05-04 18:59:06 -04:00
updateMessageSummaryList ( RsGxsGroupId ( ) ) ;
}
void GxsGroupFrameDialog : : updateMessageSummaryList ( RsGxsGroupId groupId )
{
if ( ! mInitialized ) {
return ;
}
2014-07-06 12:39:09 -04:00
if ( groupId . isNull ( ) ) {
QTreeWidgetItem * items [ 2 ] = { mYourGroups , mSubscribedGroups } ;
2014-10-21 18:33:02 -04:00
for ( int item = 0 ; item < 2 ; + + item ) {
2014-07-06 12:39:09 -04:00
int child ;
int childCount = items [ item ] - > childCount ( ) ;
2014-10-21 18:33:02 -04:00
for ( child = 0 ; child < childCount ; + + child ) {
2014-07-06 12:39:09 -04:00
QTreeWidgetItem * childItem = items [ item ] - > child ( child ) ;
QString childId = ui - > groupTreeWidget - > itemId ( childItem ) ;
if ( childId . isEmpty ( ) ) {
continue ;
2014-05-04 18:59:06 -04:00
}
2014-07-06 12:39:09 -04:00
2014-07-20 15:35:33 -04:00
requestGroupStatistics ( RsGxsGroupId ( childId . toLatin1 ( ) . constData ( ) ) ) ;
2014-05-04 18:59:06 -04:00
}
}
2014-07-06 12:39:09 -04:00
} else {
2014-07-20 15:35:33 -04:00
requestGroupStatistics ( groupId ) ;
2014-05-04 18:59:06 -04:00
}
}
/*********************** **** **** **** ***********************/
/** Request / Response of Data ********************************/
/*********************** **** **** **** ***********************/
void GxsGroupFrameDialog : : requestGroupSummary ( )
{
2014-05-07 17:04:54 -04:00
mStateHelper - > setLoading ( TOKEN_TYPE_GROUP_SUMMARY , true ) ;
2014-05-04 18:59:06 -04:00
# ifdef DEBUG_GROUPFRAMEDIALOG
std : : cerr < < " GxsGroupFrameDialog::requestGroupSummary() " ;
std : : cerr < < std : : endl ;
# endif
2014-05-07 17:04:54 -04:00
mTokenQueue - > cancelActiveRequestTokens ( TOKEN_TYPE_GROUP_SUMMARY ) ;
2014-05-04 18:59:06 -04:00
RsTokReqOptions opts ;
2014-09-11 18:07:06 -04:00
opts . mReqType = requestGroupSummaryType ( ) ;
2014-05-04 18:59:06 -04:00
uint32_t token ;
2014-05-07 17:04:54 -04:00
mTokenQueue - > requestGroupInfo ( token , RS_TOKREQ_ANSTYPE_SUMMARY , opts , TOKEN_TYPE_GROUP_SUMMARY ) ;
2014-05-04 18:59:06 -04:00
}
2014-09-11 18:07:06 -04:00
void GxsGroupFrameDialog : : loadGroupSummaryToken ( const uint32_t & token , std : : list < RsGroupMetaData > & groupInfo , RsUserdata * & /*userdata*/ )
{
/* Default implementation for request type GXS_REQUEST_TYPE_GROUP_META */
mInterface - > getGroupSummary ( token , groupInfo ) ;
}
2014-05-04 18:59:06 -04:00
void GxsGroupFrameDialog : : loadGroupSummary ( const uint32_t & token )
{
# ifdef DEBUG_GROUPFRAMEDIALOG
std : : cerr < < " GxsGroupFrameDialog::loadGroupSummary() " ;
std : : cerr < < std : : endl ;
# endif
std : : list < RsGroupMetaData > groupInfo ;
2014-09-11 18:07:06 -04:00
RsUserdata * userdata = NULL ;
loadGroupSummaryToken ( token , groupInfo , userdata ) ;
2014-05-04 18:59:06 -04:00
2017-10-21 15:23:40 -04:00
mCachedGroupMetas = groupInfo ;
2014-09-11 18:07:06 -04:00
insertGroupsData ( groupInfo , userdata ) ;
2014-05-04 18:59:06 -04:00
2014-09-11 18:07:06 -04:00
mStateHelper - > setLoading ( TOKEN_TYPE_GROUP_SUMMARY , false ) ;
2014-05-04 18:59:06 -04:00
2014-09-11 18:07:06 -04:00
if ( userdata ) {
delete ( userdata ) ;
2014-05-04 18:59:06 -04:00
}
2014-10-25 11:50:00 -04:00
if ( ! mNavigatePendingGroupId . isNull ( ) ) {
/* Navigate pending */
navigate ( mNavigatePendingGroupId , mNavigatePendingMsgId ) ;
mNavigatePendingGroupId . clear ( ) ;
mNavigatePendingMsgId . clear ( ) ;
}
2014-05-04 18:59:06 -04:00
}
/*********************** **** **** **** ***********************/
/*********************** **** **** **** ***********************/
2014-07-05 14:33:11 -04:00
//void GxsGroupFrameDialog::acknowledgeSubscribeChange(const uint32_t &token)
//{
//#ifdef DEBUG_GROUPFRAMEDIALOG
// std::cerr << "GxsGroupFrameDialog::acknowledgeSubscribeChange()";
// std::cerr << std::endl;
//#endif
2014-05-04 18:59:06 -04:00
2014-07-05 14:33:11 -04:00
// RsGxsGroupId groupId;
// mInterface->acknowledgeGrp(token, groupId);
2014-05-04 18:59:06 -04:00
2014-07-05 14:33:11 -04:00
// fillComplete();
//}
2014-05-04 18:59:06 -04:00
/*********************** **** **** **** ***********************/
/*********************** **** **** **** ***********************/
//void GxsGroupFrameDialog::requestGroupSummary_CurrentGroup(const RsGxsGroupId &groupId)
//{
// RsTokReqOptions opts;
// opts.mReqType = GXS_REQUEST_TYPE_GROUP_META;
// std::list<std::string> grpIds;
// grpIds.push_back(groupId);
// std::cerr << "GxsGroupFrameDialog::requestGroupSummary_CurrentGroup(" << groupId << ")";
// std::cerr << std::endl;
// uint32_t token;
// mInteface->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_SUMMARY, opts, grpIds, TOKEN_TYPE_CURRENTGROUP);
//}
//void GxsGroupFrameDialog::loadGroupSummary_CurrentGroup(const uint32_t &token)
//{
// std::cerr << "GxsGroupFrameDialog::loadGroupSummary_CurrentGroup()";
// std::cerr << std::endl;
// std::list<RsGroupMetaData> groupInfo;
// rsGxsForums->getGroupSummary(token, groupInfo);
// if (groupInfo.size() == 1)
// {
// RsGroupMetaData fi = groupInfo.front();
// mSubscribeFlags = fi.mSubscribeFlags;
// }
// else
// {
// resetData();
// std::cerr << "GxsGroupFrameDialog::loadGroupSummary_CurrentGroup() ERROR Invalid Number of Groups...";
// std::cerr << std::endl;
// }
// setValid(true);
//}
/*********************** **** **** **** ***********************/
/*********************** **** **** **** ***********************/
2014-07-20 15:35:33 -04:00
void GxsGroupFrameDialog : : requestGroupStatistics ( const RsGxsGroupId & groupId )
2014-07-06 12:39:09 -04:00
{
uint32_t token ;
2014-07-20 15:35:33 -04:00
mTokenService - > requestGroupStatistic ( token , groupId ) ;
mTokenQueue - > queueRequest ( token , 0 , RS_TOKREQ_ANSTYPE_ACK , TOKEN_TYPE_STATISTICS ) ;
2014-07-06 12:39:09 -04:00
}
void GxsGroupFrameDialog : : loadGroupStatistics ( const uint32_t & token )
{
2014-07-20 15:35:33 -04:00
GxsGroupStatistic stats ;
mInterface - > getGroupStatistic ( token , stats ) ;
2014-07-06 12:39:09 -04:00
2014-07-20 15:35:33 -04:00
QTreeWidgetItem * item = ui - > groupTreeWidget - > getItemFromId ( QString : : fromStdString ( stats . mGrpId . toStdString ( ) ) ) ;
if ( ! item ) {
return ;
2014-07-06 12:39:09 -04:00
}
2014-07-20 15:35:33 -04:00
2014-12-16 01:54:15 -05:00
ui - > groupTreeWidget - > setUnreadCount ( item , mCountChildMsgs ? ( stats . mNumThreadMsgsUnread + stats . mNumChildMsgsUnread ) : stats . mNumThreadMsgsUnread ) ;
2014-07-06 12:39:09 -04:00
}
/*********************** **** **** **** ***********************/
/*********************** **** **** **** ***********************/
2014-05-04 18:59:06 -04:00
void GxsGroupFrameDialog : : loadRequest ( const TokenQueue * queue , const TokenRequest & req )
{
# ifdef DEBUG_GROUPFRAMEDIALOG
std : : cerr < < " GxsGroupFrameDialog::loadRequest() UserType: " < < req . mUserType ;
std : : cerr < < std : : endl ;
# endif
if ( queue = = mTokenQueue )
{
/* now switch on req */
switch ( req . mUserType )
{
2014-05-07 17:04:54 -04:00
case TOKEN_TYPE_GROUP_SUMMARY :
2014-05-04 18:59:06 -04:00
loadGroupSummary ( req . mToken ) ;
break ;
2014-07-05 14:33:11 -04:00
// case TOKEN_TYPE_SUBSCRIBE_CHANGE:
// acknowledgeSubscribeChange(req.mToken);
// break;
2014-05-04 18:59:06 -04:00
// case TOKEN_TYPE_CURRENTGROUP:
// loadGroupSummary_CurrentGroup(req.mToken);
// break;
2014-07-06 12:39:09 -04:00
case TOKEN_TYPE_STATISTICS :
loadGroupStatistics ( req . mToken ) ;
break ;
2014-05-04 18:59:06 -04:00
default :
std : : cerr < < " GxsGroupFrameDialog::loadRequest() ERROR: INVALID TYPE " ;
std : : cerr < < std : : endl ;
}
}
}