diff --git a/libretroshare/src/retroshare/rsidentity.h b/libretroshare/src/retroshare/rsidentity.h index fec4d0944..ca67623bc 100644 --- a/libretroshare/src/retroshare/rsidentity.h +++ b/libretroshare/src/retroshare/rsidentity.h @@ -214,6 +214,12 @@ public: /********************************************************************************************/ /********************************************************************************************/ + + enum Opinion { + OPINION_NEGATIVE = -1, + OPINION_NEUTRAL = 0, + OPINION_POSITIVE = 1 + }; // For Other Services.... // It should be impossible for them to get a message which we don't have the identity. diff --git a/retroshare-gui/src/gui/Identity/IdDialog.cpp b/retroshare-gui/src/gui/Identity/IdDialog.cpp index 1189b2d37..b6b691a2e 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdDialog.cpp @@ -91,19 +91,10 @@ IdDialog::IdDialog(QWidget *parent) : mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->lineEdit_GpgId); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->lineEdit_GpgName); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->lineEdit_Type); - mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->lineEdit_LastUsed); - mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->toolButton_Reputation); - 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->addWidget(IDDIALOG_IDDETAILS, ui->lineEdit_LastUsed); + mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->ownOpinion_CB); + mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->overallOpinion_TF); + mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->neighborNodesOpinion_TF); mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->lineEdit_Nickname); mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->lineEdit_GpgName); @@ -112,23 +103,16 @@ IdDialog::IdDialog(QWidget *parent) : mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->lineEdit_GpgId); mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->lineEdit_Type); mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->lineEdit_GpgName); - mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->lineEdit_LastUsed); - mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->line_RatingOverall); - mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->line_RatingImplicit); - mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->line_RatingOwn); - mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->line_RatingPeers); + mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->lineEdit_LastUsed); + //mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->line_RatingOverall); 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); - mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->lineEdit_GpgName); - mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->lineEdit_LastUsed); - mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->line_RatingOverall); - mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->line_RatingImplicit); - mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->line_RatingOwn); - mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->line_RatingPeers); + mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->lineEdit_GpgName); + mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->lineEdit_LastUsed); //mStateHelper->addWidget(IDDIALOG_REPLIST, ui->treeWidget_RepList); //mStateHelper->addLoadPlaceholder(IDDIALOG_REPLIST, ui->treeWidget_RepList); @@ -147,7 +131,7 @@ IdDialog::IdDialog(QWidget *parent) : 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())); + connect(ui->ownOpinion_CB, SIGNAL(currentIndexChanged(int)), this, SLOT(modifyReputation())); connect(ui->messageButton, SIGNAL(clicked()), this, SLOT(sendMsg())); @@ -197,7 +181,7 @@ IdDialog::IdDialog(QWidget *parent) : // Hiding RepList until that part is finished. //ui->treeWidget_RepList->setVisible(false); - ui->toolButton_Reputation->setVisible(false); + #ifndef UNFINISHED ui->todoPushButton->hide() ; #endif @@ -225,8 +209,8 @@ IdDialog::IdDialog(QWidget *parent) : processSettings(true); // hide reputation sice it's currently unused - ui->reputationGroupBox->hide(); - ui->tweakGroupBox->hide(); + //ui->reputationGroupBox->hide(); + //ui->tweakGroupBox->hide(); } IdDialog::~IdDialog() @@ -652,36 +636,9 @@ void IdDialog::insertIdDetails(uint32_t token) else ui->lineEdit_Type->setText(tr("Anonymous identity")) ; - // if (isOwnId) -// { -// ui->radioButton_IdYourself->setChecked(true); -// } -// else if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID) -// { -// if (data.mPgpKnown) -// { -// if (rsPeers->isGPGAccepted(data.mPgpId)) -// { -// ui->radioButton_IdFriend->setChecked(true); -// } -// else -// { -// ui->radioButton_IdFOF->setChecked(true); -// } -// } -// else -// { -// ui->radioButton_IdOther->setChecked(true); -// } -// } -// else -// { -// ui->radioButton_IdPseudo->setChecked(true); -// } - if (isOwnId) { - mStateHelper->setWidgetEnabled(ui->toolButton_Reputation, false); + mStateHelper->setWidgetEnabled(ui->ownOpinion_CB, false); ui->editIdentity->setEnabled(true); ui->removeIdentity->setEnabled(true); ui->chatIdentity->setEnabled(false); @@ -690,7 +647,7 @@ void IdDialog::insertIdDetails(uint32_t token) else { // No Reputation yet! - mStateHelper->setWidgetEnabled(ui->toolButton_Reputation, /*true*/ false); + mStateHelper->setWidgetEnabled(ui->ownOpinion_CB, true); ui->editIdentity->setEnabled(false); ui->removeIdentity->setEnabled(false); ui->chatIdentity->setEnabled(true); @@ -698,9 +655,8 @@ void IdDialog::insertIdDetails(uint32_t token) } /* now fill in the reputation information */ - ui->line_RatingOverall->setText("Overall Rating TODO"); - ui->line_RatingOwn->setText("Own Rating TODO"); +#ifdef SUSPENDED if (data.mPgpKnown) { ui->line_RatingImplicit->setText(tr("+50 Known PGP")); @@ -713,26 +669,25 @@ void IdDialog::insertIdDetails(uint32_t token) { ui->line_RatingImplicit->setText(tr("+5 Anon Id")); } - - { - QString rating = QString::number(data.mReputation.mOverallScore); - ui->line_RatingOverall->setText(rating); - } - { QString rating = QString::number(data.mReputation.mIdScore); ui->line_RatingImplicit->setText(rating); } +#endif + + ui->overallOpinion_TF->setText(QString::number(data.mReputation.mOverallScore)); + + switch(data.mReputation.mOwnOpinion) { - QString rating = QString::number(data.mReputation.mOwnOpinion); - ui->line_RatingOwn->setText(rating); + case RsIdentity::OPINION_NEGATIVE: ui->ownOpinion_CB->setCurrentIndex(0); break ; + case RsIdentity::OPINION_NEUTRAL : ui->ownOpinion_CB->setCurrentIndex(1); break ; + case RsIdentity::OPINION_POSITIVE: ui->ownOpinion_CB->setCurrentIndex(2); break ; + default: + std::cerr << "Unexpected value in own opinion: " << data.mReputation.mOwnOpinion << std::endl; } - { - QString rating = QString::number(data.mReputation.mPeerOpinion); - ui->line_RatingPeers->setText(rating); - } + ui->neighborNodesOpinion_TF->setText(QString::number(data.mReputation.mPeerOpinion)); } void IdDialog::modifyReputation() @@ -743,33 +698,18 @@ void IdDialog::modifyReputation() #endif RsGxsId id(ui->lineEdit_KeyId->text().toStdString()); + + RsIdentity::Opinion op ; - int mod = 0; - if (ui->repMod_Accept->isChecked()) - { - mod += 100; - } - else if (ui->repMod_Positive->isChecked()) - { - mod += 10; - } - else if (ui->repMod_Negative->isChecked()) - { - mod += -10; - } - else if (ui->repMod_Ban->isChecked()) - { - mod += -100; - } - else if (ui->repMod_Custom->isChecked()) - { - mod += ui->repMod_spinBox->value(); - } - else - { - // invalid - return; - } + switch(ui->ownOpinion_CB->currentIndex()) + { + case 0: op = RsIdentity::OPINION_NEGATIVE ; break ; + case 1: op = RsIdentity::OPINION_NEUTRAL ; break ; + case 2: op = RsIdentity::OPINION_POSITIVE ; break ; + default: + std::cerr << "Wrong value from opinion combobox. Bug??" << std::endl; + + } #ifdef ID_DEBUG std::cerr << "IdDialog::modifyReputation() ID: " << id << " Mod: " << mod; @@ -777,7 +717,7 @@ void IdDialog::modifyReputation() #endif uint32_t token; - if (!rsIdentity->submitOpinion(token, id, false, mod)) + if (!rsIdentity->submitOpinion(token, id, false, op)) { #ifdef ID_DEBUG std::cerr << "IdDialog::modifyReputation() Error submitting Opinion"; diff --git a/retroshare-gui/src/gui/Identity/IdDialog.ui b/retroshare-gui/src/gui/Identity/IdDialog.ui index 4109e6bcb..789dd66f6 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.ui +++ b/retroshare-gui/src/gui/Identity/IdDialog.ui @@ -7,7 +7,7 @@ 0 0 826 - 752 + 757 @@ -483,7 +483,80 @@ - + + + + true + + + + + + + Your opinion: + + + + + + + Neighbor nodes: + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Your own opinion about an identity rules the visibility of that identity for yourself,</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">and is shared among friends. A final score is calculated according to a formula that accounts your own opinion and your friends' opinions about someone:</p> +<p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> S = own_opinion * a + friends_opinion * (1-a)</p> +<p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The factor 'a' depends on the type of ID. </p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- anonymous IDs: </p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- PGP-signed IDs by unknown PGP keys: a=</p> +<p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The overall score is used in chat lobbies, forums and channels to decide on the actions to take for each specific identity:</p> +<p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">S &lt; -0.5: Posts are not stored, nor forwarded </p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">S &lt; 0.2: Posts are hidden, but still transmitted</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">S &lt; 0.0: </p> +<p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The overall rating is computed in such a way that it is not possible for a single person to deterministically change someone's status at neighbor nodes.</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + 1 + + + + Positive + + + + + Neutral + + + + + Negative + + + + + + + + true + + + + @@ -492,158 +565,12 @@ - Overall - - - - - - - true - - - - - - - Implicit - - - - - - - true - - - - - - - Opinion - - - - - - - true - - - - - - - Peers - - - - - - - true + Overall: - - - - Qt::NoFocus - - - Edit reputation - - - - :/images/edit_24.png:/images/edit_24.png - - - - 24 - 24 - - - - Qt::ToolButtonTextBesideIcon - - - true - - - - - - - - - - - 0 - 0 - - - - Tweak Opinion - - - - - - Accept (+100) - - - - - - - Positive (+10) - - - - - - - Negative (-10) - - - - - - - Ban (-100) - - - - - - - - - Custom - - - - - - - -100 - - - 100 - - - - - - - - - Modify - - - @@ -730,9 +657,6 @@ lineEdit_KeyId lineEdit_GpgId lineEdit_GpgName - line_RatingOverall - line_RatingImplicit - line_RatingOwn