2012-02-13 13:43:15 -05:00
/*
* Retroshare Identity .
*
* Copyright 2012 - 2012 by Robert Fernie .
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Library General Public
* License Version 2.1 as published by the Free Software Foundation .
*
* This library 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
* Library General Public License for more details .
*
* You should have received a copy of the GNU Library General Public
* License along with this library ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307
* USA .
*
* Please report all bugs and problems to " retroshare@lunamutt.com " .
*
*/
2013-07-10 17:57:23 -04:00
# include <QMessageBox>
2014-05-03 13:56:12 -04:00
# include <QMenu>
2013-07-10 17:57:23 -04:00
2012-02-13 13:43:15 -05:00
# include "IdDialog.h"
2014-12-24 09:43:06 -05:00
# include "ui_IdDialog.h"
# include "IdEditDialog.h"
2014-09-14 12:28:02 -04:00
# include "gui/gxs/GxsIdDetails.h"
2013-06-04 17:00:43 -04:00
# include "gui/gxs/GxsIdTreeWidgetItem.h"
2013-07-10 17:57:23 -04:00
# include "gui/common/UIStateHelper.h"
2014-06-12 06:28:23 -04:00
# include "gui/chat/ChatDialog.h"
2014-12-24 09:43:06 -05:00
# include "gui/settings/rsharesettings.h"
2015-01-23 11:35:06 -05:00
# include "gui/msgs/MessageComposer.h"
2012-02-13 13:43:15 -05:00
# include <retroshare/rspeers.h>
2013-02-28 16:58:38 -05:00
# include "retroshare/rsgxsflags.h"
2015-01-23 11:35:06 -05:00
# include "retroshare/rsmsgs.h"
2012-02-13 13:43:15 -05:00
# include <iostream>
2014-12-24 09:43:06 -05:00
# include <algorithm>
2012-02-13 13:43:15 -05:00
/******
* # define ID_DEBUG 1
* * * * */
2012-06-13 20:36:25 -04:00
// Data Requests.
2014-12-24 09:43:06 -05:00
# define IDDIALOG_IDLIST 1
# define IDDIALOG_IDDETAILS 2
# define IDDIALOG_REPLIST 3
# define IDDIALOG_REFRESH 4
2012-02-13 13:43:15 -05:00
/****************************************************************
*/
2013-07-11 04:14:38 -04:00
# define RSID_COL_NICKNAME 0
# define RSID_COL_KEYID 1
# define RSID_COL_IDTYPE 2
2012-02-13 13:43:15 -05:00
2013-07-11 04:14:38 -04:00
# define RSIDREP_COL_NAME 0
# define RSIDREP_COL_OPINION 1
# define RSIDREP_COL_COMMENT 2
# define RSIDREP_COL_REPUTATION 3
2012-02-13 13:43:15 -05:00
2015-02-05 15:37:24 -05:00
# define RSID_FILTER_OWNED_BY_YOU 0x0001
2013-07-10 17:57:23 -04:00
# define RSID_FILTER_FRIENDS 0x0002
# define RSID_FILTER_OTHERS 0x0004
# define RSID_FILTER_PSEUDONYMS 0x0008
2015-02-05 15:37:24 -05:00
# define RSID_FILTER_YOURSELF 0x0010
2013-07-10 17:57:23 -04:00
# define RSID_FILTER_ALL 0xffff
2012-06-07 13:11:57 -04:00
2014-05-03 13:56:12 -04:00
# define IMAGE_EDIT ": / images / edit_16.png"
2012-02-13 13:43:15 -05:00
/** Constructor */
2014-12-24 09:43:06 -05:00
IdDialog : : IdDialog ( QWidget * parent ) :
RsGxsUpdateBroadcastPage ( rsIdentity , parent ) ,
ui ( new Ui : : IdDialog )
2012-02-13 13:43:15 -05:00
{
2014-12-24 09:43:06 -05:00
ui - > setupUi ( this ) ;
2012-02-13 13:43:15 -05:00
2013-07-10 17:57:23 -04:00
mIdQueue = NULL ;
/* Setup UI helper */
mStateHelper = new UIStateHelper ( this ) ;
2014-12-24 09:43:06 -05:00
// mStateHelper->addWidget(IDDIALOG_IDLIST, ui->treeWidget_IdList);
mStateHelper - > addLoadPlaceholder ( IDDIALOG_IDLIST , ui - > treeWidget_IdList , false ) ;
mStateHelper - > addClear ( IDDIALOG_IDLIST , ui - > treeWidget_IdList ) ;
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > lineEdit_Nickname ) ;
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > lineEdit_KeyId ) ;
// mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->lineEdit_GpgHash);
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > lineEdit_GpgId ) ;
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > lineEdit_GpgName ) ;
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > lineEdit_Type ) ;
2015-03-14 10:33:23 -04:00
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > lineEdit_LastUsed ) ;
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > toolButton_Reputation ) ;
2014-12-24 09:43:06 -05:00
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > line_RatingOverall ) ;
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > line_RatingImplicit ) ;
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > line_RatingOwn ) ;
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > line_RatingPeers ) ;
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > repModButton ) ;
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > repMod_Accept ) ;
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > repMod_Ban ) ;
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > repMod_Negative ) ;
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > repMod_Positive ) ;
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > repMod_Custom ) ;
mStateHelper - > addWidget ( IDDIALOG_IDDETAILS , ui - > repMod_spinBox ) ;
mStateHelper - > addLoadPlaceholder ( IDDIALOG_IDDETAILS , ui - > lineEdit_Nickname ) ;
mStateHelper - > addLoadPlaceholder ( IDDIALOG_IDDETAILS , ui - > lineEdit_GpgName ) ;
mStateHelper - > addLoadPlaceholder ( IDDIALOG_IDDETAILS , ui - > lineEdit_KeyId ) ;
// mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->lineEdit_GpgHash);
mStateHelper - > addLoadPlaceholder ( IDDIALOG_IDDETAILS , ui - > lineEdit_GpgId ) ;
mStateHelper - > addLoadPlaceholder ( IDDIALOG_IDDETAILS , ui - > lineEdit_Type ) ;
mStateHelper - > addLoadPlaceholder ( IDDIALOG_IDDETAILS , ui - > lineEdit_GpgName ) ;
2015-03-14 10:33:23 -04:00
mStateHelper - > addLoadPlaceholder ( IDDIALOG_IDDETAILS , ui - > lineEdit_LastUsed ) ;
mStateHelper - > addLoadPlaceholder ( IDDIALOG_IDDETAILS , ui - > line_RatingOverall ) ;
2014-12-24 09:43:06 -05:00
mStateHelper - > addLoadPlaceholder ( IDDIALOG_IDDETAILS , ui - > line_RatingImplicit ) ;
mStateHelper - > addLoadPlaceholder ( IDDIALOG_IDDETAILS , ui - > line_RatingOwn ) ;
mStateHelper - > addLoadPlaceholder ( IDDIALOG_IDDETAILS , ui - > line_RatingPeers ) ;
mStateHelper - > addClear ( IDDIALOG_IDDETAILS , ui - > lineEdit_Nickname ) ;
mStateHelper - > addClear ( IDDIALOG_IDDETAILS , ui - > lineEdit_KeyId ) ;
// mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->lineEdit_GpgHash);
mStateHelper - > addClear ( IDDIALOG_IDDETAILS , ui - > lineEdit_GpgId ) ;
mStateHelper - > addClear ( IDDIALOG_IDDETAILS , ui - > lineEdit_Type ) ;
2015-03-14 10:33:23 -04:00
mStateHelper - > addClear ( IDDIALOG_IDDETAILS , ui - > lineEdit_GpgName ) ;
mStateHelper - > addClear ( IDDIALOG_IDDETAILS , ui - > lineEdit_LastUsed ) ;
mStateHelper - > addClear ( IDDIALOG_IDDETAILS , ui - > line_RatingOverall ) ;
2014-12-24 09:43:06 -05:00
mStateHelper - > addClear ( IDDIALOG_IDDETAILS , ui - > line_RatingImplicit ) ;
mStateHelper - > addClear ( IDDIALOG_IDDETAILS , ui - > line_RatingOwn ) ;
mStateHelper - > addClear ( IDDIALOG_IDDETAILS , ui - > line_RatingPeers ) ;
//mStateHelper->addWidget(IDDIALOG_REPLIST, ui->treeWidget_RepList);
//mStateHelper->addLoadPlaceholder(IDDIALOG_REPLIST, ui->treeWidget_RepList);
//mStateHelper->addClear(IDDIALOG_REPLIST, ui->treeWidget_RepList);
2013-07-10 17:57:23 -04:00
/* Connect signals */
2014-12-24 09:43:06 -05:00
connect ( ui - > toolButton_NewId , SIGNAL ( clicked ( ) ) , this , SLOT ( addIdentity ( ) ) ) ;
connect ( ui - > todoPushButton , SIGNAL ( clicked ( ) ) , this , SLOT ( todo ( ) ) ) ;
2015-01-24 14:27:19 -05:00
2014-12-24 09:43:06 -05:00
connect ( ui - > removeIdentity , SIGNAL ( triggered ( ) ) , this , SLOT ( removeIdentity ( ) ) ) ;
connect ( ui - > editIdentity , SIGNAL ( triggered ( ) ) , this , SLOT ( editIdentity ( ) ) ) ;
connect ( ui - > chatIdentity , SIGNAL ( triggered ( ) ) , this , SLOT ( chatIdentity ( ) ) ) ;
2014-05-03 13:56:12 -04:00
2014-12-24 09:43:06 -05:00
connect ( ui - > treeWidget_IdList , SIGNAL ( itemSelectionChanged ( ) ) , this , SLOT ( updateSelection ( ) ) ) ;
connect ( ui - > treeWidget_IdList , SIGNAL ( customContextMenuRequested ( QPoint ) ) , this , SLOT ( IdListCustomPopupMenu ( QPoint ) ) ) ;
2012-02-13 13:43:15 -05:00
2014-12-24 09:43:06 -05:00
connect ( ui - > filterComboBox , SIGNAL ( currentIndexChanged ( int ) ) , this , SLOT ( filterComboBoxChanged ( ) ) ) ;
connect ( ui - > filterLineEdit , SIGNAL ( textChanged ( QString ) ) , this , SLOT ( filterChanged ( QString ) ) ) ;
connect ( ui - > repModButton , SIGNAL ( clicked ( ) ) , this , SLOT ( modifyReputation ( ) ) ) ;
2015-02-09 20:14:44 -05:00
connect ( ui - > messageButton , SIGNAL ( clicked ( ) ) , this , SLOT ( sendMsg ( ) ) ) ;
2014-09-09 15:45:38 -04:00
2015-02-09 20:14:44 -05:00
ui - > avlabel - > setPixmap ( QPixmap ( " :/images/user/friends64.png " ) ) ;
ui - > headerTextLabel - > setText ( tr ( " People " ) ) ;
2014-12-24 09:43:06 -05:00
/* Initialize splitter */
ui - > splitter - > setStretchFactor ( 0 , 1 ) ;
ui - > splitter - > setStretchFactor ( 1 , 0 ) ;
2013-07-10 17:57:23 -04:00
2015-02-16 10:45:53 -05:00
QList < int > sizes ;
sizes < < width ( ) < < 500 ; // Qt calculates the right sizes
ui - > splitter - > setSizes ( sizes ) ;
2013-07-10 17:57:23 -04:00
/* Add filter types */
2015-02-05 15:37:24 -05:00
ui - > filterComboBox - > addItem ( tr ( " All " ) , RSID_FILTER_ALL ) ;
ui - > filterComboBox - > addItem ( tr ( " Owned by you " ) , RSID_FILTER_OWNED_BY_YOU ) ;
ui - > filterComboBox - > addItem ( tr ( " Linked to your node " ) , RSID_FILTER_YOURSELF ) ;
ui - > filterComboBox - > addItem ( tr ( " Linked to neighbor nodes " ) , RSID_FILTER_FRIENDS ) ;
ui - > filterComboBox - > addItem ( tr ( " Linked to distant nodes " ) , RSID_FILTER_OTHERS ) ;
ui - > filterComboBox - > addItem ( tr ( " Anonymous " ) , RSID_FILTER_PSEUDONYMS ) ;
2014-12-24 09:43:06 -05:00
ui - > filterComboBox - > setCurrentIndex ( 0 ) ;
2013-07-10 17:57:23 -04:00
/* Add filter actions */
2014-12-24 09:43:06 -05:00
QTreeWidgetItem * headerItem = ui - > treeWidget_IdList - > headerItem ( ) ;
2013-07-10 17:57:23 -04:00
QString headerText = headerItem - > text ( RSID_COL_NICKNAME ) ;
2014-12-24 09:43:06 -05:00
ui - > filterLineEdit - > addFilter ( QIcon ( ) , headerText , RSID_COL_NICKNAME , QString ( " %1 %2 " ) . arg ( tr ( " Search " ) , headerText ) ) ;
2013-07-10 17:57:23 -04:00
headerText = headerItem - > text ( RSID_COL_KEYID ) ;
2014-12-24 09:43:06 -05:00
ui - > filterLineEdit - > addFilter ( QIcon ( ) , headerItem - > text ( RSID_COL_KEYID ) , RSID_COL_KEYID , QString ( " %1 %2 " ) . arg ( tr ( " Search " ) , headerText ) ) ;
2013-07-10 17:57:23 -04:00
2015-02-07 15:24:27 -05:00
initializeHeader ( true ) ;
2014-05-03 13:56:12 -04:00
2014-12-24 09:43:06 -05:00
/* Setup tree */
ui - > treeWidget_IdList - > sortByColumn ( RSID_COL_NICKNAME , Qt : : AscendingOrder ) ;
ui - > treeWidget_IdList - > setContextMenuPolicy ( Qt : : CustomContextMenu ) ;
2015-02-07 15:24:27 -05:00
/** Setup the actions for the header context menu */
hideIdAct = new QAction ( headerItem - > text ( RSID_COL_KEYID ) , this ) ;
hideIdAct - > setCheckable ( true ) ; hideIdAct - > setToolTip ( tr ( " Show " ) + hideIdAct - > text ( ) + tr ( " Column " ) ) ;
connect ( hideIdAct , SIGNAL ( triggered ( bool ) ) , this , SLOT ( setHideIdColumn ( bool ) ) ) ;
hideTypeAct = new QAction ( headerItem - > text ( RSID_COL_IDTYPE ) , this ) ;
hideTypeAct - > setCheckable ( true ) ; hideTypeAct - > setToolTip ( tr ( " Show " ) + hideTypeAct - > text ( ) + tr ( " Column " ) ) ;
connect ( hideTypeAct , SIGNAL ( triggered ( bool ) ) , this , SLOT ( setHideIdTypeColumn ( bool ) ) ) ;
2015-02-17 16:31:14 -05:00
2012-11-01 20:49:06 -04:00
mIdQueue = new TokenQueue ( rsIdentity - > getTokenService ( ) , this ) ;
2013-07-10 17:57:23 -04:00
mStateHelper - > setActive ( IDDIALOG_IDDETAILS , false ) ;
mStateHelper - > setActive ( IDDIALOG_REPLIST , false ) ;
2014-02-19 06:11:06 -05:00
2015-02-17 16:31:14 -05:00
ui - > treeWidget_IdList - > setColumnHidden ( RSID_COL_IDTYPE , true ) ;
2014-02-19 06:11:06 -05:00
// Hiding RepList until that part is finished.
2014-12-24 09:43:06 -05:00
//ui->treeWidget_RepList->setVisible(false);
ui - > toolButton_Reputation - > setVisible ( false ) ;
2014-09-09 15:45:38 -04:00
# ifndef UNFINISHED
2014-12-24 09:43:06 -05:00
ui - > todoPushButton - > hide ( ) ;
2014-09-09 15:45:38 -04:00
# endif
QString hlp_str = tr (
" <h1><img width= \" 32 \" src= \" :/images/64px_help.png \" > Identities</h1> \
< p > In this tab you can create / edit pseudo - anonymous identities . \
< / p > \
< p > Identities are used to securely identify your data : sign forum and channel posts , \
and receive feedback using Retroshare built - in email system , post comments \
after channel posts , etc . < / p > \
< p > \
Identities can optionally be signed by your Retroshare node ' s certificate . \
Signed identities are easier to trust but are easily linked to your node ' s IP address . \
< / p > \
< p > \
Anonymous identities allow you to anonymously interact with other users . They cannot be \
spoofed , but noone can prove who really owns a given identity . \
< / p > \
" ) ;
2014-12-24 09:43:06 -05:00
registerHelpButton ( ui - > helpButton , hlp_str ) ;
// load settings
processSettings ( true ) ;
2015-02-18 17:09:51 -05:00
// hide reputation sice it's currently unused
ui - > reputationGroupBox - > hide ( ) ;
ui - > tweakGroupBox - > hide ( ) ;
2012-02-13 13:43:15 -05:00
}
2014-10-12 06:46:09 -04:00
IdDialog : : ~ IdDialog ( )
{
2014-12-24 09:43:06 -05:00
// save settings
processSettings ( false ) ;
delete ( ui ) ;
2014-10-12 06:46:09 -04:00
delete ( mIdQueue ) ;
}
2015-02-07 15:24:27 -05:00
void IdDialog : : initializeHeader ( bool )
{
/* Set header resize modes and initial section sizes ID TreeView*/
QHeaderView * _idheader = ui - > treeWidget_IdList - > header ( ) ;
_idheader - > resizeSection ( RSID_COL_NICKNAME , 170 ) ;
_idheader - > resizeSection ( RSID_COL_KEYID , 120 ) ;
_idheader - > resizeSection ( RSID_COL_IDTYPE , 170 ) ;
}
2013-07-10 17:57:23 -04:00
void IdDialog : : todo ( )
2012-02-13 13:43:15 -05:00
{
2013-07-10 17:57:23 -04:00
QMessageBox : : information ( this , " Todo " ,
2014-12-24 09:43:06 -05:00
" <b>Open points:</b><ul> "
" <li>Reputation "
" </ul> " ) ;
}
void IdDialog : : processSettings ( bool load )
{
QHeaderView * header = ui - > treeWidget_IdList - > header ( ) ;
Settings - > beginGroup ( " IdDialog " ) ;
if ( load ) {
// load settings
// filterColumn
ui - > filterLineEdit - > setCurrentFilter ( Settings - > value ( " filterColumn " , RSID_COL_NICKNAME ) . toInt ( ) ) ;
// state of thread tree
header - > restoreState ( Settings - > value ( " IdList " ) . toByteArray ( ) ) ;
// state of splitter
ui - > splitter - > restoreState ( Settings - > value ( " splitter " ) . toByteArray ( ) ) ;
} else {
// save settings
// filterColumn
Settings - > setValue ( " filterColumn " , ui - > filterLineEdit - > currentFilter ( ) ) ;
// state of thread tree
Settings - > setValue ( " IdList " , header - > saveState ( ) ) ;
// state of splitter
Settings - > setValue ( " splitter " , ui - > splitter - > saveState ( ) ) ;
}
Settings - > endGroup ( ) ;
2013-07-10 17:57:23 -04:00
}
void IdDialog : : filterComboBoxChanged ( )
2013-07-11 04:14:38 -04:00
{
requestIdList ( ) ;
}
2012-02-13 13:43:15 -05:00
2013-07-10 17:57:23 -04:00
void IdDialog : : filterChanged ( const QString & /*text*/ )
{
filterIds ( ) ;
}
2012-02-13 13:43:15 -05:00
void IdDialog : : updateSelection ( )
{
2014-12-24 09:43:06 -05:00
QTreeWidgetItem * item = ui - > treeWidget_IdList - > currentItem ( ) ;
RsGxsGroupId id ;
2013-07-10 17:57:23 -04:00
2014-12-24 09:43:06 -05:00
if ( item ) {
id = RsGxsGroupId ( item - > text ( RSID_COL_KEYID ) . toStdString ( ) ) ;
2013-07-10 17:57:23 -04:00
}
2014-12-24 09:43:06 -05:00
if ( id ! = mId ) {
mId = id ;
requestIdDetails ( ) ;
requestRepList ( ) ;
}
2013-07-10 17:57:23 -04:00
}
void IdDialog : : requestIdList ( )
{
2014-12-24 09:43:06 -05:00
//Disable by default, will be enable by insertIdDetails()
2015-01-25 09:14:03 -05:00
ui - > removeIdentity - > setEnabled ( false ) ;
ui - > editIdentity - > setEnabled ( false ) ;
2014-12-24 09:43:06 -05:00
2013-07-10 17:57:23 -04:00
if ( ! mIdQueue )
return ;
mStateHelper - > setLoading ( IDDIALOG_IDLIST , true ) ;
mIdQueue - > cancelActiveRequestTokens ( IDDIALOG_IDLIST ) ;
RsTokReqOptions opts ;
opts . mReqType = GXS_REQUEST_TYPE_GROUP_DATA ;
uint32_t token ;
mIdQueue - > requestGroupInfo ( token , RS_TOKREQ_ANSTYPE_DATA , opts , IDDIALOG_IDLIST ) ;
}
2014-03-17 16:56:06 -04:00
bool IdDialog : : fillIdListItem ( const RsGxsIdGroup & data , QTreeWidgetItem * & item , const RsPgpId & ownPgpId , int accept )
2013-07-10 17:57:23 -04:00
{
2015-02-05 15:37:24 -05:00
bool isLinkedToOwnNode = ( data . mPgpKnown & & ( data . mPgpId = = ownPgpId ) ) ;
bool isOwnId = ( data . mMeta . mSubscribeFlags & GXS_SERV : : GROUP_SUBSCRIBE_ADMIN ) ;
uint32_t item_flags = 0 ;
2013-07-10 17:57:23 -04:00
/* do filtering */
bool ok = false ;
if ( data . mMeta . mGroupFlags & RSGXSID_GROUPFLAG_REALID )
2015-02-05 15:37:24 -05:00
{
if ( isLinkedToOwnNode & & ( accept & RSID_FILTER_YOURSELF ) )
{
ok = true ;
item_flags | = RSID_FILTER_YOURSELF ;
}
if ( data . mPgpKnown & & ( accept & RSID_FILTER_FRIENDS ) )
{
ok = true ;
item_flags | = RSID_FILTER_FRIENDS ;
}
if ( accept & RSID_FILTER_OTHERS )
{
ok = true ;
item_flags | = RSID_FILTER_OTHERS ;
}
}
else if ( accept & RSID_FILTER_PSEUDONYMS )
{
ok = true ;
item_flags | = RSID_FILTER_PSEUDONYMS ;
}
if ( isOwnId & & ( accept & RSID_FILTER_OWNED_BY_YOU ) )
{
ok = true ;
item_flags | = RSID_FILTER_OWNED_BY_YOU ;
}
2013-07-10 17:57:23 -04:00
if ( ! ok )
return false ;
2012-02-13 13:43:15 -05:00
if ( ! item )
2015-02-05 15:37:24 -05:00
item = new QTreeWidgetItem ( ) ;
2015-04-09 15:53:01 -04:00
item - > setText ( RSID_COL_NICKNAME , QString : : fromUtf8 ( data . mMeta . mGroupName . c_str ( ) ) . left ( RSID_MAXIMUM_NICKNAME_SIZE ) ) ;
2015-02-05 15:37:24 -05:00
item - > setText ( RSID_COL_KEYID , QString : : fromStdString ( data . mMeta . mGroupId . toStdString ( ) ) ) ;
item - > setData ( RSID_COL_KEYID , Qt : : UserRole , QVariant ( item_flags ) ) ;
2014-09-24 17:00:40 -04:00
2014-09-24 16:13:19 -04:00
if ( isOwnId )
{
2015-02-05 15:37:24 -05:00
QFont font = item - > font ( RSID_COL_NICKNAME ) ;
2014-12-24 09:43:06 -05:00
font . setBold ( true ) ;
item - > setFont ( RSID_COL_NICKNAME , font ) ;
item - > setFont ( RSID_COL_IDTYPE , font ) ;
item - > setFont ( RSID_COL_KEYID , font ) ;
QString tooltip = tr ( " This identity is owned by you " ) ;
item - > setToolTip ( RSID_COL_NICKNAME , tooltip ) ;
item - > setToolTip ( RSID_COL_KEYID , tooltip ) ;
item - > setToolTip ( RSID_COL_IDTYPE , tooltip ) ;
2014-09-24 16:13:19 -04:00
}
2014-10-25 09:16:47 -04:00
# ifdef ID_DEBUG
2014-09-15 19:28:53 -04:00
std : : cerr < < " Setting item image : " < < pixmap . width ( ) < < " x " < < pixmap . height ( ) < < std : : endl ;
2014-10-25 09:16:47 -04:00
# endif
2015-01-25 17:09:12 -05:00
QPixmap pixmap ;
if ( data . mImage . mSize = = 0 | | ! pixmap . loadFromData ( data . mImage . mData , data . mImage . mSize , " PNG " ) )
pixmap = QPixmap : : fromImage ( GxsIdDetails : : makeDefaultIcon ( RsGxsId ( data . mMeta . mGroupId ) ) ) ;
item - > setIcon ( RSID_COL_NICKNAME , QIcon ( pixmap ) ) ;
2014-09-15 19:28:53 -04:00
2015-02-17 16:31:14 -05:00
QString tooltip ;
2013-07-10 17:57:23 -04:00
if ( data . mMeta . mGroupFlags & RSGXSID_GROUPFLAG_REALID )
{
if ( data . mPgpKnown )
{
RsPeerDetails details ;
rsPeers - > getGPGDetails ( data . mPgpId , details ) ;
item - > setText ( RSID_COL_IDTYPE , QString : : fromUtf8 ( details . name . c_str ( ) ) ) ;
2014-10-25 09:16:47 -04:00
item - > setToolTip ( RSID_COL_IDTYPE , QString : : fromStdString ( data . mPgpId . toStdString ( ) ) ) ;
2015-02-17 16:31:14 -05:00
tooltip + = tr ( " Node name: " ) + QString : : fromUtf8 ( details . name . c_str ( ) ) + " \n " ;
tooltip + = tr ( " Node Id : " ) + QString : : fromStdString ( data . mPgpId . toStdString ( ) ) ;
item - > setToolTip ( RSID_COL_KEYID , tooltip ) ;
2013-07-10 17:57:23 -04:00
}
2014-04-14 11:37:06 -04:00
else
{
2014-10-25 09:16:47 -04:00
item - > setText ( RSID_COL_IDTYPE , tr ( " Unknown PGP key " ) ) ;
2014-09-24 16:13:19 -04:00
item - > setToolTip ( RSID_COL_IDTYPE , tr ( " Unknown key ID " ) ) ;
2015-02-17 16:31:14 -05:00
item - > setToolTip ( RSID_COL_KEYID , tr ( " Unknown key ID " ) ) ;
2014-04-14 11:37:06 -04:00
}
2012-06-07 13:11:57 -04:00
}
2013-07-10 17:57:23 -04:00
else
{
2014-09-24 16:13:19 -04:00
item - > setText ( RSID_COL_IDTYPE , QString ( ) ) ;
item - > setToolTip ( RSID_COL_IDTYPE , QString ( ) ) ;
2013-07-10 17:57:23 -04:00
}
2012-02-13 13:43:15 -05:00
2013-07-10 17:57:23 -04:00
return true ;
}
2012-02-13 13:43:15 -05:00
2013-07-10 17:57:23 -04:00
void IdDialog : : insertIdList ( uint32_t token )
2012-06-07 13:11:57 -04:00
{
2013-07-10 17:57:23 -04:00
mStateHelper - > setLoading ( IDDIALOG_IDLIST , false ) ;
2014-12-24 09:43:06 -05:00
int accept = ui - > filterComboBox - > itemData ( ui - > filterComboBox - > currentIndex ( ) ) . toInt ( ) ;
2013-07-10 17:57:23 -04:00
RsGxsIdGroup data ;
std : : vector < RsGxsIdGroup > datavector ;
std : : vector < RsGxsIdGroup > : : iterator vit ;
if ( ! rsIdentity - > getGroupData ( token , datavector ) )
{
2014-10-25 09:16:47 -04:00
# ifdef ID_DEBUG
2013-07-10 17:57:23 -04:00
std : : cerr < < " IdDialog::insertIdList() Error getting GroupData " ;
std : : cerr < < std : : endl ;
2014-10-25 09:16:47 -04:00
# endif
2013-07-10 17:57:23 -04:00
mStateHelper - > setActive ( IDDIALOG_IDLIST , false ) ;
mStateHelper - > clear ( IDDIALOG_IDLIST ) ;
return ;
2014-04-14 11:37:06 -04:00
}
2012-02-13 13:43:15 -05:00
2013-07-10 17:57:23 -04:00
mStateHelper - > setActive ( IDDIALOG_IDLIST , true ) ;
2014-03-17 16:56:06 -04:00
RsPgpId ownPgpId = rsPeers - > getGPGOwnId ( ) ;
2012-02-13 13:43:15 -05:00
2013-07-10 17:57:23 -04:00
/* Update existing and remove not existing items */
2014-12-24 09:43:06 -05:00
QTreeWidgetItemIterator itemIterator ( ui - > treeWidget_IdList ) ;
2013-07-10 17:57:23 -04:00
QTreeWidgetItem * item = NULL ;
while ( ( item = * itemIterator ) ! = NULL ) {
2014-10-21 18:33:02 -04:00
+ + itemIterator ;
2012-06-13 20:36:25 -04:00
2013-07-10 17:57:23 -04:00
for ( vit = datavector . begin ( ) ; vit ! = datavector . end ( ) ; + + vit )
{
2014-12-24 09:43:06 -05:00
if ( vit - > mMeta . mGroupId = = RsGxsGroupId ( item - > text ( RSID_COL_KEYID ) . toStdString ( ) ) )
2013-07-10 17:57:23 -04:00
{
break ;
}
}
if ( vit = = datavector . end ( ) )
{
delete ( item ) ;
} else {
if ( ! fillIdListItem ( * vit , item , ownPgpId , accept ) )
{
delete ( item ) ;
}
datavector . erase ( vit ) ;
}
}
/* Insert new items */
for ( vit = datavector . begin ( ) ; vit ! = datavector . end ( ) ; + + vit )
{
data = ( * vit ) ;
item = NULL ;
if ( fillIdListItem ( * vit , item , ownPgpId , accept ) )
{
2014-12-24 09:43:06 -05:00
ui - > treeWidget_IdList - > addTopLevelItem ( item ) ;
2013-07-10 17:57:23 -04:00
}
}
filterIds ( ) ;
updateSelection ( ) ;
}
2012-06-13 20:36:25 -04:00
2014-12-24 09:43:06 -05:00
void IdDialog : : requestIdDetails ( )
2012-02-13 13:43:15 -05:00
{
2013-07-10 17:57:23 -04:00
mIdQueue - > cancelActiveRequestTokens ( IDDIALOG_IDDETAILS ) ;
2014-12-24 09:43:06 -05:00
if ( mId . isNull ( ) )
2013-07-10 17:57:23 -04:00
{
mStateHelper - > setActive ( IDDIALOG_IDDETAILS , false ) ;
mStateHelper - > setLoading ( IDDIALOG_IDDETAILS , false ) ;
mStateHelper - > clear ( IDDIALOG_IDDETAILS ) ;
return ;
}
mStateHelper - > setLoading ( IDDIALOG_IDDETAILS , true ) ;
2012-06-13 20:36:25 -04:00
RsTokReqOptions opts ;
2013-07-11 04:14:38 -04:00
opts . mReqType = GXS_REQUEST_TYPE_GROUP_DATA ;
2012-02-13 13:43:15 -05:00
2012-06-13 20:36:25 -04:00
uint32_t token ;
2014-12-24 09:43:06 -05:00
std : : list < RsGxsGroupId > groupIds ;
groupIds . push_back ( mId ) ;
2012-02-13 13:43:15 -05:00
2013-07-11 04:14:38 -04:00
mIdQueue - > requestGroupInfo ( token , RS_TOKREQ_ANSTYPE_DATA , opts , groupIds , IDDIALOG_IDDETAILS ) ;
2012-02-13 13:43:15 -05:00
}
2015-03-14 10:33:23 -04:00
static QString getHumanReadableDuration ( uint32_t seconds )
{
if ( seconds < 60 )
2015-06-01 12:35:00 -04:00
return QString ( QObject : : tr ( " %1 seconds ago " ) ) . arg ( seconds ) ;
2015-03-14 10:33:23 -04:00
else if ( seconds < 3600 )
2015-06-01 12:35:00 -04:00
return QString ( QObject : : tr ( " %1 minute(s) ago " )).arg(seconds/60) ;
2015-03-14 10:33:23 -04:00
else if ( seconds < 24 * 3600 )
2015-06-01 12:35:00 -04:00
return QString ( QObject : : tr ( " %1 hour(s) ago " )).arg(seconds/3600) ;
2015-03-14 10:33:23 -04:00
else
2015-06-01 12:35:00 -04:00
return QString ( QObject : : tr ( " %1 day(s) ago " )).arg(seconds/86400) ;
2015-03-14 10:33:23 -04:00
}
2012-06-07 13:11:57 -04:00
void IdDialog : : insertIdDetails ( uint32_t token )
2012-02-13 13:43:15 -05:00
{
2013-07-10 17:57:23 -04:00
mStateHelper - > setLoading ( IDDIALOG_IDDETAILS , false ) ;
2012-06-07 13:11:57 -04:00
/* get details from libretroshare */
2012-10-31 19:32:56 -04:00
RsGxsIdGroup data ;
2012-11-01 20:49:06 -04:00
std : : vector < RsGxsIdGroup > datavector ;
if ( ! rsIdentity - > getGroupData ( token , datavector ) )
2012-02-13 13:43:15 -05:00
{
2013-07-10 17:57:23 -04:00
mStateHelper - > setActive ( IDDIALOG_IDDETAILS , false ) ;
mStateHelper - > clear ( IDDIALOG_REPLIST ) ;
2014-12-24 09:43:06 -05:00
ui - > lineEdit_KeyId - > setText ( " ERROR GETTING KEY! " ) ;
2013-07-10 17:57:23 -04:00
2012-06-07 13:11:57 -04:00
return ;
}
2012-11-01 20:49:06 -04:00
if ( datavector . size ( ) ! = 1 )
{
2014-10-25 09:16:47 -04:00
# ifdef ID_DEBUG
2012-11-01 20:49:06 -04:00
std : : cerr < < " IdDialog::insertIdDetails() Invalid datavector size " ;
2014-10-25 09:16:47 -04:00
# endif
2013-07-10 17:57:23 -04:00
mStateHelper - > setActive ( IDDIALOG_IDDETAILS , false ) ;
mStateHelper - > clear ( IDDIALOG_IDDETAILS ) ;
2014-12-24 09:43:06 -05:00
ui - > lineEdit_KeyId - > setText ( " INVALID DV SIZE " ) ;
2013-07-10 17:57:23 -04:00
2012-11-01 20:49:06 -04:00
return ;
}
2013-07-10 17:57:23 -04:00
mStateHelper - > setActive ( IDDIALOG_IDDETAILS , true ) ;
2012-11-01 20:49:06 -04:00
data = datavector [ 0 ] ;
2012-06-07 13:11:57 -04:00
/* get GPG Details from rsPeers */
2014-03-17 16:56:06 -04:00
RsPgpId ownPgpId = rsPeers - > getGPGOwnId ( ) ;
2013-07-11 04:14:38 -04:00
2015-04-21 14:42:56 -04:00
ui - > lineEdit_Nickname - > setText ( QString : : fromUtf8 ( data . mMeta . mGroupName . c_str ( ) ) . left ( RSID_MAXIMUM_NICKNAME_SIZE ) ) ;
2014-12-24 09:43:06 -05:00
ui - > lineEdit_KeyId - > setText ( QString : : fromStdString ( data . mMeta . mGroupId . toStdString ( ) ) ) ;
//ui->lineEdit_GpgHash->setText(QString::fromStdString(data.mPgpIdHash.toStdString()));
2015-03-14 10:33:23 -04:00
ui - > lineEdit_GpgId - > setText ( QString : : fromStdString ( data . mPgpId . toStdString ( ) ) ) ;
time_t now = time ( NULL ) ;
ui - > lineEdit_LastUsed - > setText ( getHumanReadableDuration ( now - data . mLastUsageTS ) ) ;
2015-04-21 14:42:56 -04:00
ui - > headerTextLabel - > setText ( QString : : fromUtf8 ( data . mMeta . mGroupName . c_str ( ) ) . left ( RSID_MAXIMUM_NICKNAME_SIZE ) ) ;
2012-11-05 17:32:52 -05:00
2015-01-25 17:09:12 -05:00
QPixmap pixmap ;
if ( data . mImage . mSize = = 0 | | ! pixmap . loadFromData ( data . mImage . mData , data . mImage . mSize , " PNG " ) )
pixmap = QPixmap : : fromImage ( GxsIdDetails : : makeDefaultIcon ( RsGxsId ( data . mMeta . mGroupId ) ) ) ;
2014-10-25 09:16:47 -04:00
# ifdef ID_DEBUG
2014-12-24 09:43:06 -05:00
std : : cerr < < " Setting header frame image : " < < pix . width ( ) < < " x " < < pix . height ( ) < < std : : endl ;
2014-10-25 09:16:47 -04:00
# endif
2015-02-09 20:14:44 -05:00
ui - > avlabel - > setPixmap ( pixmap ) ;
2015-02-03 17:16:21 -05:00
ui - > avatarLabel - > setPixmap ( pixmap ) ;
2014-09-14 12:28:02 -04:00
2012-11-06 14:18:56 -05:00
if ( data . mPgpKnown )
2012-06-07 13:11:57 -04:00
{
2012-11-06 14:18:56 -05:00
RsPeerDetails details ;
rsPeers - > getGPGDetails ( data . mPgpId , details ) ;
2014-12-24 09:43:06 -05:00
ui - > lineEdit_GpgName - > setText ( QString : : fromUtf8 ( details . name . c_str ( ) ) ) ;
2012-06-07 13:11:57 -04:00
}
2012-11-06 14:18:56 -05:00
else
2012-06-07 13:11:57 -04:00
{
2012-11-06 14:18:56 -05:00
if ( data . mMeta . mGroupFlags & RSGXSID_GROUPFLAG_REALID )
{
2014-12-24 09:43:06 -05:00
ui - > lineEdit_GpgName - > setText ( tr ( " Unknown real name " ) ) ;
2012-11-06 14:18:56 -05:00
}
else
{
2014-12-24 09:43:06 -05:00
ui - > lineEdit_GpgName - > setText ( tr ( " Anonymous Id " ) ) ;
2012-11-06 14:18:56 -05:00
}
2012-06-07 13:11:57 -04:00
}
2012-11-06 14:18:56 -05:00
2014-09-24 16:13:19 -04:00
if ( data . mPgpId . isNull ( ) )
{
2014-12-24 09:43:06 -05:00
ui - > lineEdit_GpgId - > hide ( ) ;
ui - > lineEdit_GpgName - > hide ( ) ;
ui - > PgpId_LB - > hide ( ) ;
ui - > PgpName_LB - > hide ( ) ;
2014-09-24 16:13:19 -04:00
}
else
{
2014-12-24 09:43:06 -05:00
ui - > lineEdit_GpgId - > show ( ) ;
ui - > lineEdit_GpgName - > show ( ) ;
ui - > PgpId_LB - > show ( ) ;
ui - > PgpName_LB - > show ( ) ;
2014-09-24 16:13:19 -04:00
}
2015-02-05 15:37:24 -05:00
bool isLinkedToOwnPgpId = ( data . mPgpKnown & & ( data . mPgpId = = ownPgpId ) ) ;
bool isOwnId = ( data . mMeta . mSubscribeFlags & GXS_SERV : : GROUP_SUBSCRIBE_ADMIN ) ;
if ( isOwnId )
if ( isLinkedToOwnPgpId )
ui - > lineEdit_Type - > setText ( tr ( " Identity owned by you, linked to your Retroshare node " ) ) ;
else
ui - > lineEdit_Type - > setText ( tr ( " Anonymous identity, owned by you " ) ) ;
else if ( data . mMeta . mGroupFlags & RSGXSID_GROUPFLAG_REALID )
{
if ( data . mPgpKnown )
if ( rsPeers - > isGPGAccepted ( data . mPgpId ) )
ui - > lineEdit_Type - > setText ( tr ( " Linked to a friend Retroshare node " ) ) ;
else
ui - > lineEdit_Type - > setText ( tr ( " Linked to a known Retroshare node " ) ) ;
else
ui - > lineEdit_Type - > setText ( tr ( " Linked to unknown Retroshare node " ) ) ;
}
else
ui - > lineEdit_Type - > setText ( tr ( " Anonymous identity " ) ) ;
// if (isOwnId)
2014-09-24 16:48:16 -04:00
// {
2014-12-24 09:43:06 -05:00
// ui->radioButton_IdYourself->setChecked(true);
2014-09-24 16:48:16 -04:00
// }
// else if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID)
// {
// if (data.mPgpKnown)
// {
// if (rsPeers->isGPGAccepted(data.mPgpId))
// {
2014-12-24 09:43:06 -05:00
// ui->radioButton_IdFriend->setChecked(true);
2014-09-24 16:48:16 -04:00
// }
// else
// {
2014-12-24 09:43:06 -05:00
// ui->radioButton_IdFOF->setChecked(true);
2014-09-24 16:48:16 -04:00
// }
// }
// else
// {
2014-12-24 09:43:06 -05:00
// ui->radioButton_IdOther->setChecked(true);
2014-09-24 16:48:16 -04:00
// }
// }
// else
// {
2014-12-24 09:43:06 -05:00
// ui->radioButton_IdPseudo->setChecked(true);
2014-09-24 16:48:16 -04:00
// }
2012-11-06 14:18:56 -05:00
if ( isOwnId )
2012-06-07 13:11:57 -04:00
{
2014-12-24 09:43:06 -05:00
mStateHelper - > setWidgetEnabled ( ui - > toolButton_Reputation , false ) ;
2015-01-25 09:14:03 -05:00
ui - > editIdentity - > setEnabled ( true ) ;
ui - > removeIdentity - > setEnabled ( true ) ;
2014-12-24 09:43:06 -05:00
ui - > chatIdentity - > setEnabled ( false ) ;
2015-02-16 10:33:35 -05:00
ui - > messageButton - > setEnabled ( false ) ;
2012-06-07 13:11:57 -04:00
}
else
{
2013-07-10 17:57:23 -04:00
// No Reputation yet!
2014-12-24 09:43:06 -05:00
mStateHelper - > setWidgetEnabled ( ui - > toolButton_Reputation , /*true*/ false ) ;
2015-01-25 09:14:03 -05:00
ui - > editIdentity - > setEnabled ( false ) ;
ui - > removeIdentity - > setEnabled ( false ) ;
2014-12-24 09:43:06 -05:00
ui - > chatIdentity - > setEnabled ( true ) ;
2015-02-17 16:31:14 -05:00
ui - > messageButton - > setEnabled ( true ) ;
2012-06-07 13:11:57 -04:00
}
2013-06-04 17:00:43 -04:00
/* now fill in the reputation information */
2014-12-24 09:43:06 -05:00
ui - > line_RatingOverall - > setText ( " Overall Rating TODO " ) ;
ui - > line_RatingOwn - > setText ( " Own Rating TODO " ) ;
2013-06-04 17:00:43 -04:00
if ( data . mPgpKnown )
{
2014-12-24 09:43:06 -05:00
ui - > line_RatingImplicit - > setText ( " +50 Known PGP " ) ;
2013-06-04 17:00:43 -04:00
}
else if ( data . mMeta . mGroupFlags & RSGXSID_GROUPFLAG_REALID )
{
2014-12-24 09:43:06 -05:00
ui - > line_RatingImplicit - > setText ( " +10 UnKnown PGP " ) ;
2013-06-04 17:00:43 -04:00
}
2013-07-11 04:14:38 -04:00
else
2013-06-04 17:00:43 -04:00
{
2014-12-24 09:43:06 -05:00
ui - > line_RatingImplicit - > setText ( " +5 Anon Id " ) ;
2013-06-04 17:00:43 -04:00
}
2014-02-19 06:11:06 -05:00
{
QString rating = QString : : number ( data . mReputation . mOverallScore ) ;
2014-12-24 09:43:06 -05:00
ui - > line_RatingOverall - > setText ( rating ) ;
2014-02-19 06:11:06 -05:00
}
{
QString rating = QString : : number ( data . mReputation . mIdScore ) ;
2014-12-24 09:43:06 -05:00
ui - > line_RatingImplicit - > setText ( rating ) ;
2014-02-19 06:11:06 -05:00
}
{
QString rating = QString : : number ( data . mReputation . mOwnOpinion ) ;
2014-12-24 09:43:06 -05:00
ui - > line_RatingOwn - > setText ( rating ) ;
2014-02-19 06:11:06 -05:00
}
{
QString rating = QString : : number ( data . mReputation . mPeerOpinion ) ;
2014-12-24 09:43:06 -05:00
ui - > line_RatingPeers - > setText ( rating ) ;
2014-02-19 06:11:06 -05:00
}
}
void IdDialog : : modifyReputation ( )
{
2014-10-25 09:16:47 -04:00
# ifdef ID_DEBUG
2014-02-19 06:11:06 -05:00
std : : cerr < < " IdDialog::modifyReputation() " ;
std : : cerr < < std : : endl ;
2014-10-25 09:16:47 -04:00
# endif
2014-02-19 06:11:06 -05:00
2014-12-24 09:43:06 -05:00
RsGxsId id ( ui - > lineEdit_KeyId - > text ( ) . toStdString ( ) ) ;
2014-02-19 06:11:06 -05:00
int mod = 0 ;
2014-12-24 09:43:06 -05:00
if ( ui - > repMod_Accept - > isChecked ( ) )
2014-02-19 06:11:06 -05:00
{
mod + = 100 ;
}
2014-12-24 09:43:06 -05:00
else if ( ui - > repMod_Positive - > isChecked ( ) )
2014-02-19 06:11:06 -05:00
{
mod + = 10 ;
}
2014-12-24 09:43:06 -05:00
else if ( ui - > repMod_Negative - > isChecked ( ) )
2014-02-19 06:11:06 -05:00
{
mod + = - 10 ;
}
2014-12-24 09:43:06 -05:00
else if ( ui - > repMod_Ban - > isChecked ( ) )
2014-02-19 06:11:06 -05:00
{
mod + = - 100 ;
}
2014-12-24 09:43:06 -05:00
else if ( ui - > repMod_Custom - > isChecked ( ) )
2014-02-19 06:11:06 -05:00
{
2014-12-24 09:43:06 -05:00
mod + = ui - > repMod_spinBox - > value ( ) ;
2014-02-19 06:11:06 -05:00
}
else
{
// invalid
return ;
}
2014-10-25 09:16:47 -04:00
# ifdef ID_DEBUG
2014-02-19 06:11:06 -05:00
std : : cerr < < " IdDialog::modifyReputation() ID: " < < id < < " Mod: " < < mod ;
std : : cerr < < std : : endl ;
2014-10-25 09:16:47 -04:00
# endif
2014-02-19 06:11:06 -05:00
uint32_t token ;
if ( ! rsIdentity - > submitOpinion ( token , id , false , mod ) )
{
2014-10-25 09:16:47 -04:00
# ifdef ID_DEBUG
2014-02-19 06:11:06 -05:00
std : : cerr < < " IdDialog::modifyReputation() Error submitting Opinion " ;
std : : cerr < < std : : endl ;
2014-10-25 09:16:47 -04:00
# endif
2014-02-19 06:11:06 -05:00
}
2014-10-25 09:16:47 -04:00
# ifdef ID_DEBUG
2014-02-19 06:11:06 -05:00
std : : cerr < < " IdDialog::modifyReputation() queuingRequest(), token: " < < token ;
std : : cerr < < std : : endl ;
2014-10-25 09:16:47 -04:00
# endif
2014-02-19 06:11:06 -05:00
// trigger refresh when finished.
// basic / anstype are not needed.
mIdQueue - > queueRequest ( token , 0 , 0 , IDDIALOG_REFRESH ) ;
return ;
2012-02-13 13:43:15 -05:00
}
2014-02-19 06:11:06 -05:00
2014-12-24 09:43:06 -05:00
void IdDialog : : updateDisplay ( bool complete )
2012-02-13 13:43:15 -05:00
{
2013-07-14 14:48:40 -04:00
/* Update identity list */
2014-12-24 09:43:06 -05:00
if ( complete ) {
/* Fill complete */
requestIdList ( ) ;
requestIdDetails ( ) ;
requestRepList ( ) ;
return ;
}
std : : list < RsGxsGroupId > grpIds ;
getAllGrpIds ( grpIds ) ;
if ( ! getGrpIds ( ) . empty ( ) ) {
requestIdList ( ) ;
if ( ! mId . isNull ( ) & & std : : find ( grpIds . begin ( ) , grpIds . end ( ) , mId ) ! = grpIds . end ( ) ) {
requestIdDetails ( ) ;
requestRepList ( ) ;
}
}
2012-02-13 13:43:15 -05:00
}
2013-07-10 17:57:23 -04:00
void IdDialog : : addIdentity ( )
2012-02-13 13:43:15 -05:00
{
2013-07-10 17:57:23 -04:00
IdEditDialog dlg ( this ) ;
dlg . setupNewId ( false ) ;
dlg . exec ( ) ;
2014-04-14 11:37:06 -04:00
}
2012-02-13 13:43:15 -05:00
2014-05-06 13:15:20 -04:00
void IdDialog : : removeIdentity ( )
{
2014-12-24 09:43:06 -05:00
QTreeWidgetItem * item = ui - > treeWidget_IdList - > currentItem ( ) ;
2014-05-06 13:15:20 -04:00
if ( ! item )
{
2014-10-25 09:16:47 -04:00
# ifdef ID_DEBUG
2014-05-06 13:15:20 -04:00
std : : cerr < < " IdDialog::editIdentity() Invalid item " ;
std : : cerr < < std : : endl ;
2014-10-25 09:16:47 -04:00
# endif
2014-05-06 13:15:20 -04:00
return ;
}
2014-12-24 09:43:06 -05:00
if ( ( QMessageBox : : question ( this , tr ( " Really delete? " ) , tr ( " Do you really want to delete this Identity? " ) , QMessageBox : : Yes | QMessageBox : : No , QMessageBox : : No ) ) = = QMessageBox : : Yes )
{
std : : string keyId = item - > text ( RSID_COL_KEYID ) . toStdString ( ) ;
2014-05-06 13:15:20 -04:00
2014-12-24 09:43:06 -05:00
uint32_t dummyToken = 0 ;
RsGxsIdGroup group ;
group . mMeta . mGroupId = RsGxsGroupId ( keyId ) ;
rsIdentity - > deleteIdentity ( dummyToken , group ) ;
}
2014-05-06 13:15:20 -04:00
}
2013-07-10 17:57:23 -04:00
void IdDialog : : editIdentity ( )
2012-02-13 13:43:15 -05:00
{
2014-12-24 09:43:06 -05:00
QTreeWidgetItem * item = ui - > treeWidget_IdList - > currentItem ( ) ;
2012-02-13 13:43:15 -05:00
if ( ! item )
{
2014-10-25 09:16:47 -04:00
# ifdef ID_DEBUG
2013-07-10 17:57:23 -04:00
std : : cerr < < " IdDialog::editIdentity() Invalid item " ;
2012-02-13 13:43:15 -05:00
std : : cerr < < std : : endl ;
2014-10-25 09:16:47 -04:00
# endif
2012-02-13 13:43:15 -05:00
return ;
}
2015-02-10 07:55:16 -05:00
RsGxsGroupId keyId = RsGxsGroupId ( item - > text ( RSID_COL_KEYID ) . toStdString ( ) ) ;
if ( keyId . isNull ( ) ) {
return ;
}
2012-02-13 13:43:15 -05:00
2013-07-10 17:57:23 -04:00
IdEditDialog dlg ( this ) ;
dlg . setupExistingId ( keyId ) ;
dlg . exec ( ) ;
2014-04-14 11:37:06 -04:00
}
2012-02-13 13:43:15 -05:00
2013-07-10 17:57:23 -04:00
void IdDialog : : filterIds ( )
2012-02-13 13:43:15 -05:00
{
2014-12-24 09:43:06 -05:00
int filterColumn = ui - > filterLineEdit - > currentFilter ( ) ;
QString text = ui - > filterLineEdit - > text ( ) ;
2012-02-13 13:43:15 -05:00
2014-12-24 09:43:06 -05:00
ui - > treeWidget_IdList - > filterItems ( filterColumn , text ) ;
2012-02-13 13:43:15 -05:00
}
2014-12-24 09:43:06 -05:00
void IdDialog : : requestRepList ( )
2012-02-13 13:43:15 -05:00
{
2014-12-24 09:43:06 -05:00
// Removing this for the moment.
return ;
2013-07-10 17:57:23 -04:00
mStateHelper - > setLoading ( IDDIALOG_REPLIST , true ) ;
2012-02-13 13:43:15 -05:00
2013-07-10 17:57:23 -04:00
mIdQueue - > cancelActiveRequestTokens ( IDDIALOG_REPLIST ) ;
2012-02-13 13:43:15 -05:00
2013-07-11 04:14:38 -04:00
std : : list < RsGxsGroupId > groupIds ;
2014-12-24 09:43:06 -05:00
groupIds . push_back ( mId ) ;
2013-06-04 17:00:43 -04:00
2013-07-11 04:14:38 -04:00
RsTokReqOptions opts ;
opts . mReqType = GXS_REQUEST_TYPE_MSG_DATA ;
2013-06-04 17:00:43 -04:00
2013-07-11 04:14:38 -04:00
uint32_t token ;
mIdQueue - > requestMsgInfo ( token , RS_TOKREQ_ANSTYPE_DATA , opts , groupIds , IDDIALOG_REPLIST ) ;
2013-06-04 17:00:43 -04:00
}
void IdDialog : : insertRepList ( uint32_t token )
{
2014-05-06 13:15:20 -04:00
Q_UNUSED ( token )
2013-07-10 17:57:23 -04:00
mStateHelper - > setLoading ( IDDIALOG_REPLIST , false ) ;
2014-02-19 06:11:06 -05:00
#if 0
2013-06-04 17:00:43 -04:00
std : : vector < RsGxsIdOpinion > opinions ;
std : : vector < RsGxsIdOpinion > : : iterator vit ;
if ( ! rsIdentity - > getMsgData ( token , opinions ) )
{
2014-10-25 09:16:47 -04:00
# ifdef ID_DEBUG
2013-06-04 17:00:43 -04:00
std : : cerr < < " IdDialog::insertRepList() Error getting Opinions " ;
std : : cerr < < std : : endl ;
2014-10-25 09:16:47 -04:00
# endif
2013-07-10 17:57:23 -04:00
mStateHelper - > setActive ( IDDIALOG_REPLIST , false ) ;
mStateHelper - > clear ( IDDIALOG_REPLIST ) ;
2013-06-04 17:00:43 -04:00
return ;
}
2014-10-21 18:33:02 -04:00
for ( vit = opinions . begin ( ) ; vit ! = opinions . end ( ) ; + + vit )
2013-06-04 17:00:43 -04:00
{
RsGxsIdOpinion & op = ( * vit ) ;
GxsIdTreeWidgetItem * item = new GxsIdTreeWidgetItem ( ) ;
/* insert 4 columns */
/* friend name */
2014-12-24 09:43:06 -05:00
item - > setId ( op . mMeta . mAuthorId , RSIDREP_COL_NAME ) ;
2013-06-04 17:00:43 -04:00
/* score */
item - > setText ( RSIDREP_COL_OPINION , QString : : number ( op . getOpinion ( ) ) ) ;
/* comment */
item - > setText ( RSIDREP_COL_COMMENT , QString : : fromUtf8 ( op . mComment . c_str ( ) ) ) ;
/* local reputation */
item - > setText ( RSIDREP_COL_REPUTATION , QString : : number ( op . getReputation ( ) ) ) ;
2014-12-24 09:43:06 -05:00
ui - > treeWidget_RepList - > addTopLevelItem ( item ) ;
2013-06-04 17:00:43 -04:00
}
2014-02-19 06:11:06 -05:00
# endif
2014-12-24 09:43:06 -05:00
2014-02-19 06:11:06 -05:00
mStateHelper - > setActive ( IDDIALOG_REPLIST , true ) ;
2013-06-04 17:00:43 -04:00
}
2014-02-19 06:11:06 -05:00
void IdDialog : : loadRequest ( const TokenQueue * /*queue*/ , const TokenRequest & req )
2012-02-13 13:43:15 -05:00
{
2014-10-25 09:16:47 -04:00
# ifdef ID_DEBUG
2013-07-11 04:14:38 -04:00
std : : cerr < < " IdDialog::loadRequest() UserType: " < < req . mUserType ;
std : : cerr < < std : : endl ;
2014-10-25 09:16:47 -04:00
# endif
2013-07-11 04:14:38 -04:00
2012-06-13 20:36:25 -04:00
switch ( req . mUserType )
2012-02-13 13:43:15 -05:00
{
2012-06-13 20:36:25 -04:00
case IDDIALOG_IDLIST :
insertIdList ( req . mToken ) ;
break ;
2013-07-11 04:14:38 -04:00
2012-06-13 20:36:25 -04:00
case IDDIALOG_IDDETAILS :
insertIdDetails ( req . mToken ) ;
2014-12-24 09:43:06 -05:00
break ;
2013-07-11 04:14:38 -04:00
2013-06-04 17:00:43 -04:00
case IDDIALOG_REPLIST :
insertRepList ( req . mToken ) ;
break ;
2013-07-11 04:14:38 -04:00
2014-02-19 06:11:06 -05:00
case IDDIALOG_REFRESH :
2014-12-24 09:43:06 -05:00
// replaced by RsGxsUpdateBroadcastPage
// updateDisplay(true);
2014-02-19 06:11:06 -05:00
break ;
2012-06-07 13:11:57 -04:00
default :
2013-07-11 04:14:38 -04:00
std : : cerr < < " IdDialog::loadRequest() ERROR " ;
std : : cerr < < std : : endl ;
2012-06-13 20:36:25 -04:00
break ;
2012-02-13 13:43:15 -05:00
}
}
2014-05-03 13:56:12 -04:00
void IdDialog : : IdListCustomPopupMenu ( QPoint )
{
2014-12-24 09:43:06 -05:00
QMenu contextMnu ( this ) ;
2014-05-03 13:56:12 -04:00
2015-02-09 20:14:44 -05:00
std : : list < RsGxsId > own_identities ;
2015-02-05 15:37:24 -05:00
rsIdentity - > getOwnIds ( own_identities ) ;
2014-11-18 10:55:31 -05:00
2015-02-05 15:37:24 -05:00
QTreeWidgetItem * item = ui - > treeWidget_IdList - > currentItem ( ) ;
uint32_t item_flags = item - > data ( RSID_COL_KEYID , Qt : : UserRole ) . toUInt ( ) ;
2015-01-23 11:35:06 -05:00
2015-02-05 15:37:24 -05:00
if ( ! ( item_flags & RSID_FILTER_OWNED_BY_YOU ) )
{
if ( own_identities . size ( ) < = 1 )
{
QAction * action = contextMnu . addAction ( QIcon ( " :/images/chat_24.png " ) , tr ( " Chat with this person " ) , this , SLOT ( chatIdentity ( ) ) ) ;
2014-11-20 18:18:14 -05:00
2014-11-18 10:55:31 -05:00
2015-02-05 15:37:24 -05:00
if ( own_identities . empty ( ) )
action - > setEnabled ( false ) ;
else
action - > setData ( QString : : fromStdString ( ( own_identities . front ( ) ) . toStdString ( ) ) ) ;
}
else
{
QMenu * mnu = contextMnu . addMenu ( QIcon ( " :/images/chat_24.png " ) , tr ( " Chat with this person as... " ) ) ;
2014-11-18 10:55:31 -05:00
2015-02-05 15:37:24 -05:00
for ( std : : list < RsGxsId > : : const_iterator it = own_identities . begin ( ) ; it ! = own_identities . end ( ) ; + + it )
{
RsIdentityDetails idd ;
rsIdentity - > getIdDetails ( * it , idd ) ;
2015-01-25 17:09:12 -05:00
2015-02-05 15:37:24 -05:00
QPixmap pixmap ;
2014-11-18 10:55:31 -05:00
2015-02-05 15:37:24 -05:00
if ( idd . mAvatar . mSize = = 0 | | ! pixmap . loadFromData ( idd . mAvatar . mData , idd . mAvatar . mSize , " PNG " ) )
pixmap = QPixmap : : fromImage ( GxsIdDetails : : makeDefaultIcon ( * it ) ) ;
QAction * action = mnu - > addAction ( QIcon ( pixmap ) , QString ( " %1 (%2) " ) . arg ( QString : : fromUtf8 ( idd . mNickname . c_str ( ) ) , QString : : fromStdString ( ( * it ) . toStdString ( ) ) ) , this , SLOT ( chatIdentity ( ) ) ) ;
action - > setData ( QString : : fromStdString ( ( * it ) . toStdString ( ) ) ) ;
}
}
contextMnu . addAction ( QIcon ( " :/images/mail_new.png " ) , tr ( " Send message to this person " ) , this , SLOT ( sendMsg ( ) ) ) ;
}
2015-01-25 09:14:03 -05:00
contextMnu . addSeparator ( ) ;
2015-01-23 11:35:06 -05:00
2015-01-25 09:14:03 -05:00
contextMnu . addAction ( ui - > editIdentity ) ;
contextMnu . addAction ( ui - > removeIdentity ) ;
2015-02-07 15:24:27 -05:00
contextMnu . addSeparator ( ) ;
hideIdAct - > setChecked ( ! ui - > treeWidget_IdList - > isColumnHidden ( RSID_COL_KEYID ) ) ;
hideTypeAct - > setChecked ( ! ui - > treeWidget_IdList - > isColumnHidden ( RSID_COL_IDTYPE ) ) ;
QMenu * menu = contextMnu . addMenu ( tr ( " Columns " ) ) ;
menu - > addAction ( hideIdAct ) ;
menu - > addAction ( hideTypeAct ) ;
2014-05-03 13:56:12 -04:00
2014-12-24 09:43:06 -05:00
contextMnu . exec ( QCursor : : pos ( ) ) ;
2014-05-06 13:15:20 -04:00
}
2014-06-12 06:28:23 -04:00
void IdDialog : : chatIdentity ( )
{
2014-12-24 09:43:06 -05:00
QTreeWidgetItem * item = ui - > treeWidget_IdList - > currentItem ( ) ;
2014-06-12 06:28:23 -04:00
if ( ! item )
{
std : : cerr < < " IdDialog::editIdentity() Invalid item " ;
std : : cerr < < std : : endl ;
return ;
}
2014-12-24 09:43:06 -05:00
std : : string keyId = item - > text ( RSID_COL_KEYID ) . toStdString ( ) ;
2014-11-18 10:55:31 -05:00
2014-12-24 09:43:06 -05:00
QAction * action = qobject_cast < QAction * > ( QObject : : sender ( ) ) ;
if ( ! action )
return ;
2014-06-12 06:28:23 -04:00
2014-12-24 09:43:06 -05:00
RsGxsId from_gxs_id ( action - > data ( ) . toString ( ) . toStdString ( ) ) ;
uint32_t error_code ;
2014-06-12 06:28:23 -04:00
2014-12-24 09:43:06 -05:00
if ( ! rsMsgs - > initiateDistantChatConnexion ( RsGxsId ( keyId ) , from_gxs_id , error_code ) )
2015-01-23 11:35:06 -05:00
QMessageBox : : information ( NULL , tr ( " Distant chat cannot work " ) , QString ( " %1 %2: %3 " ) . arg ( tr ( " Distant chat refused with this person. " ) ) . arg ( tr ( " Error code " ) ) . arg ( error_code ) ) ;
}
void IdDialog : : sendMsg ( )
{
QTreeWidgetItem * item = ui - > treeWidget_IdList - > currentItem ( ) ;
if ( ! item )
{
return ;
}
MessageComposer * nMsgDialog = MessageComposer : : newMsg ( ) ;
if ( nMsgDialog = = NULL ) {
return ;
}
2015-02-05 15:37:24 -05:00
std : : string keyId = item - > text ( RSID_COL_KEYID ) . toStdString ( ) ;
2015-01-23 11:35:06 -05:00
nMsgDialog - > addRecipient ( MessageComposer : : TO , RsGxsId ( keyId ) ) ;
nMsgDialog - > show ( ) ;
nMsgDialog - > activateWindow ( ) ;
/* window will destroy itself! */
2014-06-12 06:28:23 -04:00
}
2015-02-07 15:24:27 -05:00
void IdDialog : : setHideIdColumn ( bool show )
{
if ( ui - > treeWidget_IdList - > isColumnHidden ( RSID_COL_KEYID ) = = show ) {
ui - > treeWidget_IdList - > setColumnHidden ( RSID_COL_KEYID , ! show ) ;
}
ui - > treeWidget_IdList - > header ( ) - > setVisible ( getNumColVisible ( ) > 1 ) ;
initializeHeader ( true ) ;
}
void IdDialog : : setHideIdTypeColumn ( bool show )
{
if ( ui - > treeWidget_IdList - > isColumnHidden ( RSID_COL_IDTYPE ) = = show ) {
ui - > treeWidget_IdList - > setColumnHidden ( RSID_COL_IDTYPE , ! show ) ;
}
ui - > treeWidget_IdList - > header ( ) - > setVisible ( getNumColVisible ( ) > 1 ) ;
initializeHeader ( true ) ;
}
int IdDialog : : getNumColVisible ( )
{
int iNumColVis = 0 ;
for ( int iColumn = 0 ; iColumn < RSID_COL_IDTYPE ; + + iColumn ) {
if ( ! ui - > treeWidget_IdList - > isColumnHidden ( iColumn ) ) {
+ + iNumColVis ;
}
}
return iNumColVis ;
2015-03-14 10:33:23 -04:00
}