merging gxs_phase2 branch

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@6401 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
chrisparker126 2013-06-04 21:00:43 +00:00
parent 1150366913
commit 325fa4f222
116 changed files with 6050 additions and 3596 deletions

View file

@ -50,7 +50,9 @@ CirclesDialog::CirclesDialog(QWidget *parent)
ui.setupUi(this);
connect( ui.pushButton_refresh, SIGNAL(clicked()), this, SLOT(reloadAll()));
connect( ui.pushButton_circle, SIGNAL(clicked()), this, SLOT(create()));
connect( ui.pushButton_extCircle, SIGNAL(clicked()), this, SLOT(createExternalCircle()));
connect( ui.pushButton_localCircle, SIGNAL(clicked()), this, SLOT(createPersonalCircle()));
connect( ui.pushButton_editCircle, SIGNAL(clicked()), this, SLOT(editExistingCircle()));
QTimer *timer = new QTimer(this);
timer->connect(timer, SIGNAL(timeout()), this, SLOT(checkUpdate()));
@ -86,10 +88,31 @@ void CirclesDialog::checkUpdate()
#define CIRCLEGROUP_FRIEND_COL_NAME 0
#define CIRCLEGROUP_FRIEND_COL_ID 1
void CirclesDialog::create()
void CirclesDialog::createExternalCircle()
{
CreateCircleDialog *createDialog = new CreateCircleDialog();
createDialog->editNewId(true);
createDialog->show();
}
void CirclesDialog::createPersonalCircle()
{
CreateCircleDialog *createDialog = new CreateCircleDialog();
createDialog->editNewId(false);
createDialog->show();
}
void CirclesDialog::editExistingCircle()
{
#if 0
std::string id;
CreateCircleDialog *createDialog = new CreateCircleDialog();
createDialog->editExistingId(id);
createDialog->show();
#endif
}
@ -586,9 +609,21 @@ void CirclesDialog::loadGroupMeta(const uint32_t &token)
}
/* add the top level item */
QTreeWidgetItem *circlesItem = new QTreeWidgetItem();
circlesItem->setText(0, "Circles");
ui.treeWidget_membership->addTopLevelItem(circlesItem);
QTreeWidgetItem *personalCirclesItem = new QTreeWidgetItem();
personalCirclesItem->setText(0, "Personal Circles");
ui.treeWidget_membership->addTopLevelItem(personalCirclesItem);
QTreeWidgetItem *externalAdminCirclesItem = new QTreeWidgetItem();
externalAdminCirclesItem->setText(0, "External Circles (Admin)");
ui.treeWidget_membership->addTopLevelItem(externalAdminCirclesItem);
QTreeWidgetItem *externalSubCirclesItem = new QTreeWidgetItem();
externalSubCirclesItem->setText(0, "External Circles (Subscribed)");
ui.treeWidget_membership->addTopLevelItem(externalSubCirclesItem);
QTreeWidgetItem *externalOtherCirclesItem = new QTreeWidgetItem();
externalOtherCirclesItem->setText(0, "External Circles (Other)");
ui.treeWidget_membership->addTopLevelItem(externalOtherCirclesItem);
for(vit = groupInfo.begin(); vit != groupInfo.end(); vit++)
{
@ -600,7 +635,26 @@ void CirclesDialog::loadGroupMeta(const uint32_t &token)
QTreeWidgetItem *groupItem = new QTreeWidgetItem();
groupItem->setText(CIRCLEGROUP_CIRCLE_COL_GROUPNAME, QString::fromStdString(vit->mGroupName));
groupItem->setText(CIRCLEGROUP_CIRCLE_COL_GROUPID, QString::fromStdString(vit->mGroupId));
circlesItem->addChild(groupItem);
if (vit->mCircleType == GXS_CIRCLE_TYPE_LOCAL)
{
personalCirclesItem->addChild(groupItem);
}
else
{
if (vit->mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN)
{
externalAdminCirclesItem->addChild(groupItem);
}
else if (vit->mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED)
{
externalSubCirclesItem->addChild(groupItem);
}
else
{
externalOtherCirclesItem->addChild(groupItem);
}
}
}
}

View file

@ -44,7 +44,9 @@ void loadRequest(const TokenQueue *queue, const TokenRequest &req);
private slots:
void create();
void createExternalCircle();
void createPersonalCircle();
void editExistingCircle();
void checkUpdate();

View file

@ -17,16 +17,23 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QPushButton" name="pushButton_localgroup">
<widget class="QPushButton" name="pushButton_localCircle">
<property name="text">
<string>Create Personal Group</string>
<string>Create Personal Circle</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_circle">
<widget class="QPushButton" name="pushButton_extCircle">
<property name="text">
<string>Create Circle</string>
<string>Create External Circle</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_editCircle">
<property name="text">
<string>Edit Circle</string>
</property>
</widget>
</item>
@ -157,6 +164,9 @@
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="enabled">
<bool>false</bool>
</property>
<property name="title">
<string>Permissions</string>
</property>

View file

@ -78,6 +78,9 @@ CreateCircleDialog::CreateCircleDialog()
connect(ui.addButton, SIGNAL(clicked()), this, SLOT(addMember()));
connect(ui.removeButton, SIGNAL(clicked()), this, SLOT(removeMember()));
connect(ui.pushButton_create, SIGNAL(clicked()), this, SLOT(createCircle()));
connect(ui.pushButton_cancel, SIGNAL(clicked()), this, SLOT(cancelDialog()));
//connect(ui.emoticonButton, SIGNAL(clicked()), this, SLOT(smileyWidgetForums()));
//connect(ui.attachFileButton, SIGNAL(clicked()), this, SLOT(addFile()));
//connect(ui.pastersButton, SIGNAL(clicked()), this, SLOT(pasteLink()));
@ -87,8 +90,13 @@ CreateCircleDialog::CreateCircleDialog()
ui.removeButton->setEnabled(false);
ui.addButton->setEnabled(false);
ui.radioButton_ListAll->setChecked(true);
requestIdentities();
ui.radioButton_ListKnownPGP->setChecked(true);
mIsExistingCircle = false;
mIsExternalCircle = true;
ui.idChooser->loadIds(0,"");
ui.circleComboBox->loadCircles(GXS_CIRCLE_CHOOSER_EXTERNAL);
}
@ -99,6 +107,83 @@ CreateCircleDialog::~CreateCircleDialog()
delete(mIdQueue);
}
void CreateCircleDialog::editExistingId(std::string circleId)
{
/* load this circle */
mIsExistingCircle = true;
/* setup personal or external circle */
bool isExternal = false;
if (isExternal)
{
setupForExternalCircle();
}
else
{
setupForPersonalCircle();
}
/* lock stuff they cannot edit */
}
void CreateCircleDialog::editNewId(bool isExternal)
{
/* load this circle */
mIsExistingCircle = false;
/* setup personal or external circle */
if (isExternal)
{
setupForExternalCircle();
}
else
{
setupForPersonalCircle();
}
/* enable stuff that might be locked */
}
void CreateCircleDialog::setupForPersonalCircle()
{
mIsExternalCircle = false;
/* hide distribution line */
ui.groupBox_title->setTitle(tr("Personal Circle Details"));
ui.frame_PgpTypes->hide();
ui.frame_Distribution->hide();
ui.idChooserLabel->hide();
ui.idChooser->hide();
getPgpIdentities();
}
void CreateCircleDialog::setupForExternalCircle()
{
mIsExternalCircle = true;
/* show distribution line */
ui.groupBox_title->setTitle(tr("External Circle Details"));
ui.frame_PgpTypes->show();
ui.frame_Distribution->show();
ui.idChooserLabel->show();
ui.idChooser->show();
requestGxsIdentities();
}
void CreateCircleDialog::cancelDialog()
{
close();
}
void CreateCircleDialog::selectedId(QTreeWidgetItem *current, QTreeWidgetItem *previous)
{
@ -532,13 +617,29 @@ void CreateCircleDialog::addMember()
{
return;
}
/* check that its not there already */
QString keyId = item->text(RSCIRCLEID_COL_KEYID);
QTreeWidget *tree = ui.treeWidget_membership;
int count = tree->topLevelItemCount();
for(int i = 0; i < count; i++)
{
QTreeWidgetItem *item = tree->topLevelItem(i);
if (keyId == item->text(RSCIRCLEID_COL_KEYID))
{
std::cerr << "CreateCircleDialog::addMember() Already is a Member: " << keyId.toStdString();
std::cerr << std::endl;
return;
}
}
QTreeWidgetItem *member = new QTreeWidgetItem();
member->setText(RSCIRCLEID_COL_NICKNAME, item->text(RSCIRCLEID_COL_NICKNAME));
member->setText(RSCIRCLEID_COL_KEYID, item->text(RSCIRCLEID_COL_KEYID));
member->setText(RSCIRCLEID_COL_IDTYPE, item->text(RSCIRCLEID_COL_IDTYPE));
ui.treeWidget_membership->addTopLevelItem(member);
tree->addTopLevelItem(member);
}
@ -558,6 +659,9 @@ void CreateCircleDialog::removeMember()
void CreateCircleDialog::createCircle()
{
std::cerr << "CreateCircleDialog::createCircle()";
std::cerr << std::endl;
QString name = ui.circleName->text();
QString desc;
@ -588,8 +692,106 @@ void CreateCircleDialog::createCircle()
/* copy Ids from GUI */
QTreeWidget *tree = ui.treeWidget_membership;
int count = tree->topLevelItemCount();
for(int i = 0; i < count; i++)
{
QTreeWidgetItem *item = tree->topLevelItem(i);
QString keyId = item->text(RSCIRCLEID_COL_KEYID);
/* insert into circle */
if (mIsExternalCircle)
{
circle.mInvitedMembers.push_back(keyId.toStdString());
std::cerr << "CreateCircleDialog::createCircle() Inserting Member: " << keyId.toStdString();
std::cerr << std::endl;
}
else
{
circle.mLocalFriends.push_back(keyId.toStdString());
std::cerr << "CreateCircleDialog::createCircle() Inserting Friend: " << keyId.toStdString();
std::cerr << std::endl;
}
}
if (mIsExistingCircle)
{
std::cerr << "CreateCircleDialog::createCircle() Existing Circle TODO";
std::cerr << std::endl;
// cannot edit these yet.
QMessageBox::warning(this, tr("RetroShare"),tr("Cannot Edit Existing Circles Yet"),
QMessageBox::Ok, QMessageBox::Ok);
return;
}
if (mIsExternalCircle)
{
std::cerr << "CreateCircleDialog::createCircle() External Circle";
std::cerr << std::endl;
// set distribution from GUI.
circle.mMeta.mCircleId = "";
if (ui.radioButton_Public->isChecked())
{
std::cerr << "CreateCircleDialog::createCircle() Public Circle";
std::cerr << std::endl;
circle.mMeta.mCircleType = GXS_CIRCLE_TYPE_PUBLIC;
}
else if (ui.radioButton_Self->isChecked())
{
std::cerr << "CreateCircleDialog::createCircle() ExtSelfRef Circle";
std::cerr << std::endl;
circle.mMeta.mCircleType = GXS_CIRCLE_TYPE_EXT_SELF;
}
else if (ui.radioButton_Restricted->isChecked())
{
std::cerr << "CreateCircleDialog::createCircle() External (Other) Circle";
std::cerr << std::endl;
circle.mMeta.mCircleType = GXS_CIRCLE_TYPE_EXTERNAL;
/* grab circle ID from chooser */
RsGxsCircleId chosenId;
if (ui.circleComboBox->getChosenCircle(chosenId))
{
std::cerr << "CreateCircleDialog::createCircle() ChosenId: " << chosenId;
std::cerr << std::endl;
circle.mMeta.mCircleId = chosenId;
}
else
{
std::cerr << "CreateCircleDialog::createCircle() Error no Id Chosen";
std::cerr << std::endl;
QMessageBox::warning(this, tr("RetroShare"),tr("No Restriction Circle Selected"),
QMessageBox::Ok, QMessageBox::Ok);
return;
}
}
else
{
QMessageBox::warning(this, tr("RetroShare"),tr("No Circle Limitations Selected"),
QMessageBox::Ok, QMessageBox::Ok);
return;
}
}
else
{
std::cerr << "CreateCircleDialog::createCircle() Personal Circle";
std::cerr << std::endl;
// set personal distribution
circle.mMeta.mCircleId = "";
circle.mMeta.mCircleType = GXS_CIRCLE_TYPE_LOCAL;
}
std::cerr << "CreateCircleDialog::createCircle() Checks and Balances Okay - calling service proper..";
std::cerr << std::endl;
uint32_t token;
rsGxsCircles->createGroup(token, circle);
@ -648,7 +850,37 @@ void CreateCircleDialog::loadCircle(uint32_t token)
}
void CreateCircleDialog::requestIdentities()
void CreateCircleDialog::getPgpIdentities()
{
std::cerr << "CreateCircleDialog::getPgpIdentities()";
std::cerr << std::endl;
QTreeWidget *tree = ui.treeWidget_IdList;
tree->clear();
std::list<std::string> ids;
std::list<std::string>::iterator it;
rsPeers->getGPGAcceptedList(ids);
for(it = ids.begin(); it != ids.end(); it++)
{
QTreeWidgetItem *item = new QTreeWidgetItem();
RsPeerDetails details;
rsPeers->getGPGDetails(*it, details);
item->setText(RSCIRCLEID_COL_IDTYPE, "PGP Identity");
item->setText(RSCIRCLEID_COL_NICKNAME, QString::fromStdString(details.name));
item->setText(RSCIRCLEID_COL_KEYID, QString::fromStdString(details.gpg_id));
tree->addTopLevelItem(item);
}
}
void CreateCircleDialog::requestGxsIdentities()
{
RsTokReqOptions opts;
opts.mReqType = GXS_REQUEST_TYPE_GROUP_DATA;
@ -676,7 +908,6 @@ void CreateCircleDialog::loadIdentities(uint32_t token)
std::list<std::string> ids;
std::list<std::string>::iterator it;
bool acceptAll = ui.radioButton_ListAll->isChecked();
bool acceptAllPGP = ui.radioButton_ListAllPGP->isChecked();
bool acceptKnownPGP = ui.radioButton_ListKnownPGP->isChecked();
@ -696,11 +927,7 @@ void CreateCircleDialog::loadIdentities(uint32_t token)
/* do filtering */
bool ok = false;
if (acceptAll)
{
ok = true;
}
else if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID)
if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID)
{
if (acceptAllPGP)
{

View file

@ -39,6 +39,9 @@ public:
CreateCircleDialog();
~CreateCircleDialog();
void editNewId(bool isExternal);
void editExistingId(std::string circleId);
#if 0
void newMsg(); /* cleanup */
#endif
@ -53,6 +56,9 @@ private slots:
void selectedId(QTreeWidgetItem*, QTreeWidgetItem*);
void selectedMember(QTreeWidgetItem*, QTreeWidgetItem*);
void createCircle();
void cancelDialog();
#if 0
/** Create the context popup menu and it's submenus */
void forumMessageCostumPopupMenu( QPoint point );
@ -94,13 +100,18 @@ private:
RsGroupMetaData mForumMeta;
#endif
void createCircle();
void setupForPersonalCircle();
void setupForExternalCircle();
bool mIsExistingCircle;
bool mIsExternalCircle;
void loadCircle(uint32_t token);
void loadIdentities(uint32_t token);
void requestCircle(const RsGxsGroupId &groupId);
void requestIdentities();
void requestGxsIdentities();
void getPgpIdentities();
TokenQueue *mCircleQueue;
TokenQueue *mIdQueue;

View file

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>746</width>
<height>568</height>
<width>681</width>
<height>544</height>
</rect>
</property>
<property name="windowTitle">
@ -15,7 +15,7 @@
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="3">
<widget class="QGroupBox" name="groupBox_5">
<widget class="QGroupBox" name="groupBox_title">
<property name="title">
<string>Circle Details</string>
</property>
@ -39,7 +39,7 @@
<widget class="QLineEdit" name="circleName"/>
</item>
<item>
<widget class="QLabel" name="label_4">
<widget class="QLabel" name="idChooserLabel">
<property name="font">
<font>
<weight>75</weight>
@ -57,58 +57,72 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_3">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Distribution</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_Public">
<property name="text">
<string>Public</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_Self">
<property name="text">
<string>Self-Restricted</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_Restricted">
<property name="text">
<string>Restricted to:</string>
</property>
</widget>
</item>
<item>
<widget class="GxsCircleChooser" name="circleComboBox"/>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
<widget class="QFrame" name="frame_Distribution">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label_3">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Distribution</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_Public">
<property name="text">
<string>Public</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_Self">
<property name="text">
<string>Self-Restricted</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_Restricted">
<property name="text">
<string>Restricted to:</string>
</property>
</widget>
</item>
<item>
<widget class="GxsCircleChooser" name="circleComboBox"/>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>147</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
@ -187,29 +201,36 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QRadioButton" name="radioButton_ListAll">
<property name="text">
<string>All IDs</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_ListAllPGP">
<property name="text">
<string>All PGP IDs</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_ListKnownPGP">
<property name="text">
<string>Known PGP IDs</string>
</property>
</widget>
</item>
</layout>
<widget class="QFrame" name="frame_PgpTypes">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="spacing">
<number>0</number>
</property>
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QRadioButton" name="radioButton_ListAllPGP">
<property name="text">
<string>All PGP IDs</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_ListKnownPGP">
<property name="text">
<string>Known PGP IDs</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
@ -263,14 +284,14 @@
</spacer>
</item>
<item>
<widget class="QPushButton" name="pushButton_publicgroup_2">
<widget class="QPushButton" name="pushButton_cancel">
<property name="text">
<string>Cancel</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_publicgroup">
<widget class="QPushButton" name="pushButton_create">
<property name="text">
<string>Create Group</string>
</property>