summaryrefslogtreecommitdiff
path: root/net-p2p
diff options
context:
space:
mode:
Diffstat (limited to 'net-p2p')
-rw-r--r--net-p2p/retroshare/files/abstractitemmodel_test.patch1180
-rw-r--r--net-p2p/retroshare/retroshare-scm.ebuild15
2 files changed, 1189 insertions, 6 deletions
diff --git a/net-p2p/retroshare/files/abstractitemmodel_test.patch b/net-p2p/retroshare/files/abstractitemmodel_test.patch
new file mode 100644
index 0000000..0a3fde5
--- /dev/null
+++ b/net-p2p/retroshare/files/abstractitemmodel_test.patch
@@ -0,0 +1,1180 @@
+diff --git a/RetroShare.pro b/RetroShare.pro
+index 833173029..d22af1418 100644
+--- a/RetroShare.pro
++++ b/RetroShare.pro
+@@ -56,12 +56,6 @@ retroshare_qml_app {
+ }
+ }
+
+-retroshare_plugins {
+- SUBDIRS += plugins
+- plugins.file = plugins/plugins.pro
+- plugins.depends = retroshare_gui
+- plugins.target = plugins
+-}
+
+ wikipoos {
+ SUBDIRS += pegmarkdown
+diff --git a/retroshare-gui/src/gui/NetworkDialog.cpp b/retroshare-gui/src/gui/NetworkDialog.cpp
+index bdeda264c..76dc61aa4 100644
+--- a/retroshare-gui/src/gui/NetworkDialog.cpp
++++ b/retroshare-gui/src/gui/NetworkDialog.cpp
+@@ -81,85 +81,67 @@ static const unsigned int ROLE_SORT = Qt::UserRole + 1 ;
+
+ /** Constructor */
+ NetworkDialog::NetworkDialog(QWidget *parent)
+-: RsAutoUpdatePage(10000,parent) // updates every 10 sec.
+ {
+ /* Invoke the Qt Designer generated object setup routine */
+ ui.setupUi(this);
+
+- connect( ui.connectTreeWidget, SIGNAL( customContextMenuRequested( QPoint ) ), this, SLOT( connectTreeWidgetCostumPopupMenu( QPoint ) ) );
+- connect( ui.connectTreeWidget, SIGNAL( itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT( peerdetails () ) );
+-
+ connect( ui.filterLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(filterItems(QString)));
+ connect( ui.filterLineEdit, SIGNAL(filterChanged(int)), this, SLOT(filterColumnChanged(int)));
+
+ connect( ui.onlyTrustedKeys, SIGNAL(clicked()), this, SLOT(securedUpdateDisplay()));
+
+- /* hide the Tree +/- */
+- ui.connectTreeWidget -> setRootIsDecorated( false );
+- ui.connectTreeWidget -> setColumnCount(6);
+
+- compareNetworkRole = new RSTreeWidgetItemCompareRole;
+- compareNetworkRole->setRole(COLUMN_LAST_USED, ROLE_SORT);
++/* compareNetworkRole = new RSTreeWidgetItemCompareRole;
++ compareNetworkRole->setRole(COLUMN_LAST_USED, ROLE_SORT); */
++
++ //list data model
++ float f = QFontMetricsF(font()).height()/14.0 ;
++ PGPIdItemModel = new pgpid_item_model(neighs, f, this);
++ PGPIdItemProxy = new pgpid_item_proxy(this);
++ PGPIdItemProxy->setSourceModel(PGPIdItemModel);
++ PGPIdItemProxy->setFilterKeyColumn(COLUMN_PEERNAME);
++ PGPIdItemProxy->setFilterCaseSensitivity(Qt::CaseInsensitive);
++ ui.connectTreeWidget->setModel(PGPIdItemProxy);
++ ui.connectTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
++ ui.connectTreeWidget->verticalHeader()->hide();
++ ui.connectTreeWidget->setShowGrid(false);
++ ui.connectTreeWidget->setUpdatesEnabled(true);
++ ui.connectTreeWidget->setSortingEnabled(true);
++ ui.connectTreeWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
++ connect(ui.connectTreeWidget, SIGNAL( customContextMenuRequested( QPoint ) ), this, SLOT( connectTreeWidgetCostumPopupMenu( QPoint ) ) );
++ connect(ui.connectTreeWidget, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(peerdetails()));
++
++
+
+ /* Set header resize modes and initial section sizes */
+- QHeaderView * _header = ui.connectTreeWidget->header () ;
++/* QHeaderView * _header = ui.connectTreeWidget->header () ;
+ QHeaderView_setSectionResizeModeColumn(_header, COLUMN_CHECK, QHeaderView::Custom);
+ QHeaderView_setSectionResizeModeColumn(_header, COLUMN_PEERNAME, QHeaderView::Interactive);
+ QHeaderView_setSectionResizeModeColumn(_header, COLUMN_I_AUTH_PEER, QHeaderView::Interactive);
+ QHeaderView_setSectionResizeModeColumn(_header, COLUMN_PEER_AUTH_ME, QHeaderView::Interactive);
+ QHeaderView_setSectionResizeModeColumn(_header, COLUMN_PEERID, QHeaderView::Interactive);
+- QHeaderView_setSectionResizeModeColumn(_header, COLUMN_LAST_USED, QHeaderView::Interactive);
+-
+- _header->model()->setHeaderData(COLUMN_CHECK, Qt::Horizontal, tr(""));
+- _header->model()->setHeaderData(COLUMN_PEERNAME, Qt::Horizontal, tr("Profile"));
+- _header->model()->setHeaderData(COLUMN_I_AUTH_PEER, Qt::Horizontal, tr("Trust level"));
+- _header->model()->setHeaderData(COLUMN_PEER_AUTH_ME, Qt::Horizontal, tr("Has signed your key?"));
+- _header->model()->setHeaderData(COLUMN_PEERID, Qt::Horizontal, tr("Id"));
+- _header->model()->setHeaderData(COLUMN_LAST_USED, Qt::Horizontal, tr("Last used"));
+-
+- _header->model()->setHeaderData(COLUMN_CHECK, Qt::Horizontal, tr(" Do you accept connections signed by this profile?"),Qt::ToolTipRole);
+- _header->model()->setHeaderData(COLUMN_PEERNAME, Qt::Horizontal, tr("Name of the profile"),Qt::ToolTipRole);
+- _header->model()->setHeaderData(COLUMN_I_AUTH_PEER, Qt::Horizontal, tr("This column indicates trust level and whether you signed the profile PGP key"),Qt::ToolTipRole);
+- _header->model()->setHeaderData(COLUMN_PEER_AUTH_ME, Qt::Horizontal, tr("Did that peer sign your own profile PGP key"),Qt::ToolTipRole);
+- _header->model()->setHeaderData(COLUMN_PEERID, Qt::Horizontal, tr("PGP Key Id of that profile"),Qt::ToolTipRole);
+- _header->model()->setHeaderData(COLUMN_LAST_USED, Qt::Horizontal, tr("Last time this key was used (received time, or to check connection)"),Qt::ToolTipRole);
++ QHeaderView_setSectionResizeModeColumn(_header, COLUMN_LAST_USED, QHeaderView::Interactive); */
+
+- float f = QFontMetricsF(font()).height()/14.0 ;
+-
+- _header->resizeSection ( COLUMN_CHECK, 25*f );
+- _header->resizeSection ( COLUMN_PEERNAME, 200*f );
+- _header->resizeSection ( COLUMN_I_AUTH_PEER, 200*f );
+- _header->resizeSection ( COLUMN_PEER_AUTH_ME, 200*f );
+- _header->resizeSection ( COLUMN_LAST_USED, 75*f );
+
+- // set header text aligment
+- QTreeWidgetItem * headerItem = ui.connectTreeWidget->headerItem();
+- headerItem->setTextAlignment(COLUMN_CHECK, Qt::AlignHCenter | Qt::AlignVCenter);
+- headerItem->setTextAlignment(COLUMN_PEERNAME, Qt::AlignHCenter | Qt::AlignVCenter);
+- headerItem->setTextAlignment(COLUMN_I_AUTH_PEER, Qt::AlignHCenter | Qt::AlignVCenter);
+- headerItem->setTextAlignment(COLUMN_PEER_AUTH_ME, Qt::AlignHCenter | Qt::AlignVCenter);
+- headerItem->setTextAlignment(COLUMN_PEERID, Qt::AlignVCenter);
+- headerItem->setTextAlignment(COLUMN_LAST_USED, Qt::AlignVCenter);
+-
+- headerItem->setText(0,QString()) ;
++ ui.onlyTrustedKeys->setMinimumWidth(20*f);
+
+- ui.connectTreeWidget->sortItems( COLUMN_PEERNAME, Qt::AscendingOrder );
+
+- ui.onlyTrustedKeys->setMinimumWidth(20*f);
+
+- QMenu *menu = new QMenu();
++/* QMenu *menu = new QMenu();
+ menu->addAction(ui.actionTabsright);
+ menu->addAction(ui.actionTabswest);
+ menu->addAction(ui.actionTabssouth);
+ menu->addAction(ui.actionTabsnorth);
+ menu->addSeparator();
+ menu->addAction(ui.actionTabsTriangular);
+- menu->addAction(ui.actionTabsRounded);
++ menu->addAction(ui.actionTabsRounded); */
+
+ /* add filter actions */
+ ui.filterLineEdit->addFilter(QIcon(), tr("Name"), COLUMN_PEERNAME, tr("Search name"));
+ ui.filterLineEdit->addFilter(QIcon(), tr("Peer ID"), COLUMN_PEERID, tr("Search peer ID"));
+ ui.filterLineEdit->setCurrentFilter(COLUMN_PEERNAME);
++ connect(ui.filterLineEdit, SIGNAL(textChanged(QString)), PGPIdItemProxy, SLOT(setFilterWildcard(QString)));
++
+ }
+
+ void NetworkDialog::changeEvent(QEvent *e)
+@@ -177,14 +159,14 @@ void NetworkDialog::changeEvent(QEvent *e)
+
+ void NetworkDialog::connectTreeWidgetCostumPopupMenu( QPoint /*point*/ )
+ {
+- //std::cerr << "NetworkDialog::connectTreeWidgetCostumPopupMenu( QPoint point ) called" << std::endl;
+- QTreeWidgetItem *wi = getCurrentNeighbour();
+- if (!wi)
+- return;
++
++ QModelIndexList l = ui.connectTreeWidget->selectionModel()->selection().indexes();
++ if(l.empty())
++ return;
+
+ QMenu *contextMnu = new QMenu;
+
+- RsPgpId peer_id(wi->text(COLUMN_PEERID).toStdString()) ;
++ RsPgpId peer_id(ui.connectTreeWidget->model()->data(ui.connectTreeWidget->model()->index(l.begin()->row(), COLUMN_PEERID)).toString().toStdString()) ;
+
+ // That's what context menus are made for
+ RsPeerDetails detail;
+@@ -276,8 +258,11 @@ void NetworkDialog::removeUnusedKeys()
+
+ void NetworkDialog::denyFriend()
+ {
+- QTreeWidgetItem *wi = getCurrentNeighbour();
+- RsPgpId peer_id( wi->text(COLUMN_PEERID).toStdString() );
++ QModelIndexList l = ui.connectTreeWidget->selectionModel()->selection().indexes();
++ if(l.empty())
++ return;
++
++ RsPgpId peer_id(ui.connectTreeWidget->model()->data(ui.connectTreeWidget->model()->index(l.begin()->row(), COLUMN_PEERID)).toString().toStdString());
+ rsPeers->removeFriend(peer_id) ;
+
+ securedUpdateDisplay();
+@@ -300,27 +285,32 @@ void NetworkDialog::denyFriend()
+
+ void NetworkDialog::makeFriend()
+ {
+- PGPKeyDialog::showIt(RsPgpId(getCurrentNeighbour()->text(COLUMN_PEERID).toStdString()), PGPKeyDialog::PageDetails);
++
++ QModelIndexList l = ui.connectTreeWidget->selectionModel()->selection().indexes();
++ if(l.empty())
++ return;
++
++ PGPKeyDialog::showIt(RsPgpId(ui.connectTreeWidget->model()->data(ui.connectTreeWidget->model()->index(l.begin()->row(), COLUMN_PEERID)).toString().toStdString()), PGPKeyDialog::PageDetails);
+ }
+
+ /** Shows Peer Information/Auth Dialog */
+ void NetworkDialog::peerdetails()
+ {
+- QTreeWidgetItem* item = getCurrentNeighbour();
+- if (item == NULL) {
+- return;
+- }
+- PGPKeyDialog::showIt(RsPgpId(item->text(COLUMN_PEERID).toStdString()), PGPKeyDialog::PageDetails);
++ QModelIndexList l = ui.connectTreeWidget->selectionModel()->selection().indexes();
++ if(l.empty())
++ return;
++
++ PGPKeyDialog::showIt(RsPgpId(ui.connectTreeWidget->model()->data(ui.connectTreeWidget->model()->index(l.begin()->row(), COLUMN_PEERID)).toString().toStdString()), PGPKeyDialog::PageDetails);
+ }
+
+ void NetworkDialog::copyLink()
+ {
+- QTreeWidgetItem *wi = getCurrentNeighbour();
+- if (wi == NULL) {
+- return;
+- }
++ QModelIndexList l = ui.connectTreeWidget->selectionModel()->selection().indexes();
++ if(l.empty())
++ return;
+
+- RsPgpId peer_id ( wi->text(COLUMN_PEERID).toStdString() ) ;
++
++ RsPgpId peer_id (ui.connectTreeWidget->model()->data(ui.connectTreeWidget->model()->index(l.begin()->row(), COLUMN_PEERID)).toString().toStdString()) ;
+
+ QList<RetroShareLink> urls;
+ RetroShareLink link = RetroShareLink::createPerson(peer_id);
+@@ -356,137 +346,39 @@ void NetworkDialog::copyLink()
+ // /* window will destroy itself! */
+ //}
+
+-void NetworkDialog::updateDisplay()
+-{
+- insertConnect() ;
+-}
+-
+ /* get the list of Neighbours from the RsIface. */
+ void NetworkDialog::insertConnect()
+ {
+ // static time_t last_time = 0 ;
+
+- if (!rsPeers)
+- return;
+-
+-// // Because this is called from a qt signal, there's no limitation between calls.
+- time_t now = time(NULL);
++// if (!rsPeers)
++// return;
+
+- std::list<RsPgpId> neighs; //these are GPG ids
+- std::list<RsPgpId>::iterator it;
+- rsPeers->getGPGAllList(neighs);
++ //these are GPG ids
++// std::list<RsPgpId>::iterator it;
++// rsPeers->getGPGAllList(neighs);
+
+ /* get a link to the table */
+- QTreeWidget *connectWidget = ui.connectTreeWidget;
++// QTreeView *connectWidget = ui.connectTreeWidget;
+ /* disable sorting while editing the table */
+- connectWidget->setSortingEnabled(false);
++// connectWidget->setSortingEnabled(false);
+
+ //remove items
+- int index = 0;
+- while (index < connectWidget->topLevelItemCount())
+- {
+- RsPgpId gpg_widget_id( (connectWidget->topLevelItem(index))->text(COLUMN_PEERID).toStdString() );
+- RsPeerDetails detail;
+- if ( (!rsPeers->getGPGDetails(gpg_widget_id, detail)) || (ui.onlyTrustedKeys->isChecked() && (detail.validLvl < RS_TRUST_LVL_MARGINAL && !detail.accept_connection)))
+- delete (connectWidget->takeTopLevelItem(index));
+- else
+- ++index;
+- }
++// int index = 0;
+
+- for(it = neighs.begin(); it != neighs.end(); ++it)
+- {
++/* for(it = neighs.begin(); it != neighs.end(); ++it)
++ {
+ #ifdef NET_DEBUG
+ std::cerr << "NetworkDialog::insertConnect() inserting gpg key : " << *it << std::endl;
+-#endif
+- if (*it == rsPeers->getGPGOwnId()) {
+- continue;
+- }
+-
+- RsPeerDetails detail;
+- if (!rsPeers->getGPGDetails(*it, detail))
+- {
+- continue; /* BAD */
+- }
+-
+- /* make a widget per friend */
+- QTreeWidgetItem *item;
+- QList<QTreeWidgetItem *> list = connectWidget->findItems(QString::fromStdString( (*it).toStdString() ), Qt::MatchExactly, COLUMN_PEERID);
+- if (list.size() == 1) {
+- item = list.front();
+- } else {
+- //create new item
+-#ifdef NET_DEBUG
+- std::cerr << "NetworkDialog::insertConnect() creating new tree widget item : " << *it << std::endl;
+-#endif
+- item = new RSTreeWidgetItem(compareNetworkRole, 0);
+- item -> setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicatorWhenChildless);
+-
+- int S = QFontMetricsF(font()).height() ;
+- item -> setSizeHint(COLUMN_CHECK, QSize( S,S ) );
+-
+- /* (1) Person */
+- item -> setText(COLUMN_PEERNAME, QString::fromUtf8(detail.name.c_str()));
+-
+- /* (4) key id */
+- item -> setText(COLUMN_PEERID, QString::fromStdString(detail.gpg_id.toStdString()));
+- }
+-
+- //QString TrustLevelString ;
+-
+- /* (2) Key validity */
+- if (detail.ownsign)
+- {
+- item -> setText(COLUMN_I_AUTH_PEER, tr("Personal signature"));
+- item -> setToolTip(COLUMN_I_AUTH_PEER, tr("PGP key signed by you"));
+- }
+- else
+- switch(detail.trustLvl)
+- {
+- case RS_TRUST_LVL_MARGINAL: item->setText(COLUMN_I_AUTH_PEER,tr("Marginally trusted peer")) ; break;
+- case RS_TRUST_LVL_FULL:
+- case RS_TRUST_LVL_ULTIMATE: item->setText(COLUMN_I_AUTH_PEER,tr("Fully trusted peer")) ; break ;
+- case RS_TRUST_LVL_UNKNOWN:
+- case RS_TRUST_LVL_UNDEFINED:
+- case RS_TRUST_LVL_NEVER:
+- default: item->setText(2,tr("Untrusted peer")) ; break ;
+- }
+-
+- /* (3) has me auth */
+- QString PeerAuthenticationString ;
+-
+- if (detail.hasSignedMe)
+- PeerAuthenticationString = tr("Yes");
+- else
+- PeerAuthenticationString = tr("No");
+-
+- item->setText(COLUMN_PEER_AUTH_ME,PeerAuthenticationString) ;
+-
+- uint64_t last_time_used = now - detail.lastUsed ;
+- QString lst_used_str ;
+-
+- if(last_time_used < 3600)
+- lst_used_str = tr("Last hour") ;
+- else if(last_time_used < 86400)
+- lst_used_str = tr("Today") ;
+- else if(last_time_used > 86400 * 15000)
+- lst_used_str = tr("Never");
+- else
+- lst_used_str = tr("%1 days ago").arg((int)( last_time_used / 86400 )) ;
+-
+- QString lst_used_sort_str = QString::number(detail.lastUsed,'f',10);
+-
+- item->setText(COLUMN_LAST_USED,lst_used_str) ;
+- item->setData(COLUMN_LAST_USED,ROLE_SORT,lst_used_sort_str) ;
++#endif */
+
+ /**
+ * Determinated the Background Color
+ */
+- QColor backgrndcolor;
++/* QColor backgrndcolor;
+
+ if (detail.accept_connection)
+ {
+- item -> setText(COLUMN_CHECK, "0");
+- item -> setIcon(COLUMN_CHECK,(QIcon(IMAGE_AUTHED)));
+ if (detail.ownsign)
+ {
+ backgrndcolor = backgroundColorOwnSign();
+@@ -498,19 +390,14 @@ void NetworkDialog::insertConnect()
+ }
+ else
+ {
+- item -> setText(COLUMN_CHECK, "1");
+
+ if (detail.hasSignedMe)
+ {
+ backgrndcolor = backgroundColorHasSignedMe();
+- item -> setIcon(COLUMN_CHECK,(QIcon(IMAGE_DENIED)));
+- for(int k=0;k<COLUMN_COUNT;++k)
+- item -> setToolTip(k, QString::fromUtf8(detail.name.c_str()) + tr(" has authenticated you. \nRight-click and select 'make friend' to be able to connect."));
+ }
+ else
+ {
+ backgrndcolor = backgroundColorDenied();
+- item -> setIcon(COLUMN_CHECK,(QIcon(IMAGE_DENIED)));
+ }
+ }
+
+@@ -520,14 +407,14 @@ void NetworkDialog::insertConnect()
+ item -> setBackground(i,QBrush(backgrndcolor));
+
+ if( (detail.accept_connection || detail.validLvl >= RS_TRUST_LVL_MARGINAL) || !ui.onlyTrustedKeys->isChecked())
+- connectWidget->addTopLevelItem(item);
+- }
++ connectWidget->addTopLevelItem(item); */
++// }
+
+ // add self to network.
+- RsPeerDetails ownGPGDetails;
+- rsPeers->getGPGDetails(rsPeers->getGPGOwnId(), ownGPGDetails);
++// RsPeerDetails ownGPGDetails;
++// rsPeers->getGPGDetails(rsPeers->getGPGOwnId(), ownGPGDetails);
+ /* make a widget per friend */
+- QTreeWidgetItem *self_item;
++/* QTreeWidgetItem *self_item;
+ QList<QTreeWidgetItem *> list = connectWidget->findItems(QString::fromStdString(ownGPGDetails.gpg_id.toStdString()), Qt::MatchExactly, COLUMN_PEERID);
+ if (list.size() == 1) {
+ self_item = list.front();
+@@ -546,28 +433,19 @@ void NetworkDialog::insertConnect()
+ {
+ self_item->setBackground(i,backgroundColorSelf()) ;
+ }
+- connectWidget->addTopLevelItem(self_item);
++ connectWidget->addTopLevelItem(self_item); */
+
+ /* enable sorting */
+- connectWidget->setSortingEnabled(true);
++// connectWidget->setSortingEnabled(true);
+ /* update display */
+- connectWidget->update();
++// connectWidget->update();
+
+- if (ui.filterLineEdit->text().isEmpty() == false) {
+- filterItems(ui.filterLineEdit->text());
+- }
++// if (ui.filterLineEdit->text().isEmpty() == false) {
++// filterItems(ui.filterLineEdit->text());
++// }
+
+ }
+
+-QTreeWidgetItem *NetworkDialog::getCurrentNeighbour()
+-{
+- if (ui.connectTreeWidget->selectedItems().size() != 0)
+- {
+- return ui.connectTreeWidget -> currentItem();
+- }
+-
+- return NULL;
+-}
+
+ /* Utility Fns */
+ RsPeerId getNeighRsCertId(QTreeWidgetItem *i)
+@@ -700,12 +578,14 @@ void NetworkDialog::on_actionCreate_New_Profile_activated()
+ // Settings->endGroup();
+ // }
+
+-void NetworkDialog::filterColumnChanged(int)
++void NetworkDialog::filterColumnChanged(int col)
+ {
+- filterItems(ui.filterLineEdit->text());
++ if(PGPIdItemProxy)
++ PGPIdItemProxy->setFilterKeyColumn(col);
++ //filterItems(ui.filterLineEdit->text());
+ }
+
+-void NetworkDialog::filterItems(const QString &text)
++/*void NetworkDialog::filterItems(const QString &text)
+ {
+ int filterColumn = ui.filterLineEdit->currentFilter();
+
+@@ -713,7 +593,7 @@ void NetworkDialog::filterItems(const QString &text)
+ for (int index = 0; index < count; ++index) {
+ filterItem(ui.connectTreeWidget->topLevelItem(index), text, filterColumn);
+ }
+-}
++}*/
+
+ bool NetworkDialog::filterItem(QTreeWidgetItem *item, const QString &text, int filterColumn)
+ {
+@@ -741,3 +621,15 @@ bool NetworkDialog::filterItem(QTreeWidgetItem *item, const QString &text, int f
+
+ return (visible || visibleChildCount);
+ }
++
++void NetworkDialog::updateDisplay()
++{
++ if (!rsPeers)
++ return;
++ //update ids list
++ std::list<RsPgpId> new_neighs;
++ rsPeers->getGPGAllList(new_neighs);
++ //refresh model
++ PGPIdItemModel->data_updated(new_neighs);
++}
++
+diff --git a/retroshare-gui/src/gui/NetworkDialog.h b/retroshare-gui/src/gui/NetworkDialog.h
+index 2d90e98e7..084b04126 100644
+--- a/retroshare-gui/src/gui/NetworkDialog.h
++++ b/retroshare-gui/src/gui/NetworkDialog.h
+@@ -25,6 +25,11 @@
+
+ #include "ui_NetworkDialog.h"
+ #include "RsAutoUpdatePage.h"
++#include "gui/NetworkDialog/pgpid_item_model.h"
++#include "gui/NetworkDialog/pgpid_item_proxy.h"
++
++//tmp
++class QTreeWidgetItem;
+
+ class RSTreeWidgetItemCompareRole ;
+
+@@ -42,9 +47,8 @@ public:
+ /** Default Constructor */
+ NetworkDialog(QWidget *parent = 0);
+
+- //void load();
+ virtual void updateDisplay() ; // overloaded from RsAutoUpdatePage
+-
++
+ QColor backgroundColorSelf() const { return mBackgroundColorSelf; }
+ QColor backgroundColorOwnSign() const { return mBackgroundColorOwnSign; }
+ QColor backgroundColorAcceptConnection() const { return mBackgroundColorAcceptConnection; }
+@@ -68,7 +72,7 @@ protected:
+
+ private slots:
+
+- void removeUnusedKeys() ;
++ void removeUnusedKeys() ;
+ void makeFriend() ;
+ void denyFriend() ;
+ // void deleteCert() ;
+@@ -104,10 +108,11 @@ private slots:
+ // void on_actionTabsTriangular_activated();
+
+ void filterColumnChanged(int);
+- void filterItems(const QString &text);
++// void filterItems(const QString &text);
++
++
+
+ private:
+- QTreeWidgetItem *getCurrentNeighbour();
+
+ // class NetworkView *networkview;
+
+@@ -122,6 +127,12 @@ private:
+
+ RSTreeWidgetItemCompareRole *compareNetworkRole ;
+
++ //iinternal long lived data
++ std::list<RsPgpId> neighs;
++
++ pgpid_item_model *PGPIdItemModel;
++ pgpid_item_proxy *PGPIdItemProxy;
++
+ /** Qt Designer generated object */
+ Ui::NetworkDialog ui;
+ };
+diff --git a/retroshare-gui/src/gui/NetworkDialog.ui b/retroshare-gui/src/gui/NetworkDialog.ui
+index 3c0fb4c93..833fb542b 100644
+--- a/retroshare-gui/src/gui/NetworkDialog.ui
++++ b/retroshare-gui/src/gui/NetworkDialog.ui
+@@ -41,7 +41,7 @@
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+- <widget class="QTreeWidget" name="connectTreeWidget">
++ <widget class="QTableView" name="connectTreeWidget">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+@@ -66,63 +66,6 @@
+ <height>16</height>
+ </size>
+ </property>
+- <property name="uniformRowHeights">
+- <bool>true</bool>
+- </property>
+- <property name="sortingEnabled">
+- <bool>true</bool>
+- </property>
+- <property name="animated">
+- <bool>true</bool>
+- </property>
+- <property name="allColumnsShowFocus">
+- <bool>true</bool>
+- </property>
+- <property name="wordWrap">
+- <bool>true</bool>
+- </property>
+- <attribute name="headerCascadingSectionResizes">
+- <bool>true</bool>
+- </attribute>
+- <attribute name="headerDefaultSectionSize">
+- <number>200</number>
+- </attribute>
+- <attribute name="headerStretchLastSection">
+- <bool>true</bool>
+- </attribute>
+- <column>
+- <property name="text">
+- <string/>
+- </property>
+- </column>
+- <column>
+- <property name="text">
+- <string>Profile</string>
+- </property>
+- </column>
+- <column>
+- <property name="text">
+- <string>Did I authenticated peer</string>
+- </property>
+- <property name="toolTip">
+- <string>Did I sign his PGP key</string>
+- </property>
+- </column>
+- <column>
+- <property name="text">
+- <string>Has signed my key</string>
+- </property>
+- </column>
+- <column>
+- <property name="text">
+- <string>Cert Id</string>
+- </property>
+- </column>
+- <column>
+- <property name="text">
+- <string>Last used</string>
+- </property>
+- </column>
+ </widget>
+ </widget>
+ </item>
+diff --git a/retroshare-gui/src/gui/NetworkDialog/pgpid_item_model.cpp b/retroshare-gui/src/gui/NetworkDialog/pgpid_item_model.cpp
+new file mode 100644
+index 000000000..e6f9eaa90
+--- /dev/null
++++ b/retroshare-gui/src/gui/NetworkDialog/pgpid_item_model.cpp
+@@ -0,0 +1,375 @@
++#include "pgpid_item_model.h"
++#include <retroshare/rspeers.h>
++#include <QIcon>
++
++#define IMAGE_AUTHED ":/images/accepted16.png"
++#define IMAGE_DENIED ":/images/denied16.png"
++#define IMAGE_TRUSTED ":/images/rs-2.png"
++
++/*TODO:
++ * using list here for internal data storage is not best options
++*/
++pgpid_item_model::pgpid_item_model(std::list<RsPgpId> &neighs_, float &_font_height, QObject *parent)
++ : QAbstractTableModel(parent), neighs(neighs_), font_height(_font_height)
++{
++}
++
++QVariant pgpid_item_model::headerData(int section, Qt::Orientation orientation, int role) const
++{
++ if(orientation == Qt::Horizontal)
++ {
++ if(role == Qt::ToolTipRole)
++ {
++ switch(section)
++ {
++ case COLUMN_CHECK:
++ return QString(tr(" Do you accept connections signed by this profile?"));
++ break;
++ case COLUMN_PEERNAME:
++ return QString(tr("Name of the profile"));
++ break;
++ case COLUMN_I_AUTH_PEER:
++ return QString(tr("This column indicates trust level and whether you signed the profile PGP key"));
++ break;
++ case COLUMN_PEER_AUTH_ME:
++ return QString(tr("Did that peer sign your own profile PGP key"));
++ break;
++ case COLUMN_PEERID:
++ return QString(tr("PGP Key Id of that profile"));
++ break;
++ case COLUMN_LAST_USED:
++ return QString(tr("Last time this key was used (received time, or to check connection)"));
++ break;
++ }
++ }
++ else if(role == Qt::DisplayRole)
++ {
++ switch(section)
++ {
++ case COLUMN_CHECK:
++ return QString(tr(""));
++ break;
++ case COLUMN_PEERNAME:
++ return QString(tr("Profile"));
++ break;
++ case COLUMN_I_AUTH_PEER:
++ return QString(tr("Trust level"));
++ break;
++ case COLUMN_PEER_AUTH_ME:
++ return QString(tr("Has signed your key?"));
++ break;
++ case COLUMN_PEERID:
++ return QString(tr("Id"));
++ break;
++ case COLUMN_LAST_USED:
++ return QString(tr("Last used"));
++ break;
++ }
++ }
++ else if (role == Qt::TextAlignmentRole)
++ {
++ switch(section)
++ {
++ default:
++ return (uint32_t)(Qt::AlignHCenter | Qt::AlignVCenter);
++ break;
++ }
++ }
++ else if(role == Qt::SizeHintRole)
++ {
++ switch(section)
++ {
++ case COLUMN_CHECK:
++ return 25*font_height;
++ break;
++ case COLUMN_PEERNAME: case COLUMN_I_AUTH_PEER: case COLUMN_PEER_AUTH_ME:
++ return 200*font_height;
++ break;
++ case COLUMN_LAST_USED:
++ return 75*font_height;
++ break;
++ }
++
++ }
++ }
++ return QVariant();
++}
++
++/*QModelIndex pgpid_item_model::index(int row, int column, const QModelIndex &parent) const
++{
++ return createIndex(row, column);
++}*/
++
++/*QModelIndex pgpid_item_model::parent(const QModelIndex &index) const
++{
++ if(index.row() > -1 && index.column() > -1)
++ return createIndex(-1, -1);
++ if (!index.isValid())
++ return QModelIndex();
++ return QModelIndex();
++}*/
++
++/*bool pgpid_item_model::hasChildren(const QModelIndex &parent) const
++{
++ if(parent.column() == -1 && parent.row() == -1)
++ return true;
++ return false;
++} */
++
++int pgpid_item_model::rowCount(const QModelIndex &/*parent*/) const
++{
++ return neighs.size();
++}
++
++int pgpid_item_model::columnCount(const QModelIndex &/*parent*/) const
++{
++ return COLUMN_COUNT;
++}
++
++//bool pgpid_item_model::insertRows(int position, int rows, const QModelIndex &/*index*/)
++//{
++// beginInsertRows(QModelIndex(), position, position+rows-1);
++// endInsertRows();
++// return true;
++//}
++
++//bool pgpid_item_model::removeRows(int position, int rows, const QModelIndex &/*index*/)
++//{
++// beginRemoveRows(QModelIndex(), position, position+rows-1);
++// endRemoveRows();
++// return true;
++//}
++
++
++QVariant pgpid_item_model::data(const QModelIndex &index, int role) const
++{
++ if (!index.isValid())
++ return QVariant();
++
++ if((unsigned)index.row() >= neighs.size())
++ return QVariant();
++
++
++ //shit code (please rewrite it)
++
++ std::list<RsPgpId>::iterator it = neighs.begin();
++ for(int i = 0; i < index.row(); i++)
++ it++;
++ RsPeerDetails detail;
++ if (!rsPeers->getGPGDetails(*it, detail))
++ return QVariant();
++ //shit code end
++ if(role == Qt::DisplayRole)
++ {
++ switch(index.column())
++ {
++ case COLUMN_PEERNAME:
++ return QString::fromUtf8(detail.name.c_str());
++ break;
++ case COLUMN_PEERID:
++ return QString::fromStdString(detail.gpg_id.toStdString());
++ break;
++ case COLUMN_I_AUTH_PEER:
++ {
++ if (detail.ownsign)
++ return tr("Personal signature");
++ else
++ {
++ switch(detail.trustLvl)
++ {
++ case RS_TRUST_LVL_MARGINAL: return tr("Marginally trusted peer") ; break;
++ case RS_TRUST_LVL_FULL:
++ case RS_TRUST_LVL_ULTIMATE: return tr("Fully trusted peer") ; break ;
++ case RS_TRUST_LVL_UNKNOWN:
++ case RS_TRUST_LVL_UNDEFINED:
++ case RS_TRUST_LVL_NEVER:
++ default: return tr("Untrusted peer") ; break ;
++ }
++ }
++ }
++ break;
++ case COLUMN_PEER_AUTH_ME:
++ {
++ if (detail.hasSignedMe)
++ return tr("Yes");
++ else
++ return tr("No");
++ }
++ break;
++ case COLUMN_LAST_USED:
++ {
++ time_t now = time(NULL);
++ uint64_t last_time_used = now - detail.lastUsed ;
++ QString lst_used_str ;
++
++ if(last_time_used < 3600)
++ lst_used_str = tr("Last hour") ;
++ else if(last_time_used < 86400)
++ lst_used_str = tr("Today") ;
++ else if(last_time_used > 86400 * 15000)
++ lst_used_str = tr("Never");
++ else
++ lst_used_str = tr("%1 days ago").arg((int)( last_time_used / 86400 )) ;
++
++// QString lst_used_sort_str = QString::number(detail.lastUsed,'f',10);
++
++ return lst_used_str;
++// item->setData(COLUMN_LAST_USED,ROLE_SORT,lst_used_sort_str) ;
++ }
++ break;
++ case COLUMN_CHECK:
++ {
++ if (detail.accept_connection)
++ {
++ return QString("0");
++ }
++ else
++ {
++ return QString("1");
++ }
++ }
++ break;
++
++
++ }
++ }
++ else if(role == Qt::ToolTipRole)
++ {
++ switch(index.column())
++ {
++ case COLUMN_I_AUTH_PEER:
++ {
++ if (detail.ownsign)
++ return tr("PGP key signed by you");
++ }
++ break;
++ default:
++ {
++ if (!detail.accept_connection && detail.hasSignedMe)
++ {
++ return QString::fromUtf8(detail.name.c_str()) + tr(" has authenticated you. \nRight-click and select 'make friend' to be able to connect.");
++ }
++ }
++ break;
++
++ }
++ }
++ else if(role == Qt::DecorationRole)
++ {
++ switch(index.column())
++ {
++ case COLUMN_CHECK:
++ {
++ if (detail.accept_connection)
++ return QIcon(IMAGE_AUTHED);
++ else
++ return QIcon(IMAGE_DENIED);
++
++ }
++ break;
++ }
++ }
++ else if(role == Qt::BackgroundRole)
++ {
++ switch(index.column())
++ {
++ default:
++ {
++ //TODO: add access to bckground colors from networkdialog
++ if (detail.accept_connection)
++ {
++ if (detail.ownsign)
++ ;
++ }
++ }
++ break;
++
++ }
++ }
++
++
++ return QVariant();
++}
++
++/*void pgpid_item_model::sort(int column, Qt::SortOrder order)
++{
++
++} */
++
++
++//following code is just a poc, it's still suboptimal, unefficient, but much better then existing rs code
++
++void pgpid_item_model::data_updated(std::list<RsPgpId> &new_neighs)
++{
++
++ //shit code follow (rewrite this please)
++ size_t old_size = neighs.size(), new_size = 0;
++ std::list<RsPgpId> old_neighs = neighs;
++
++ //find all bad elements in list
++ std::list<RsPgpId> bad_elements;
++ for(std::list<RsPgpId>::iterator it = new_neighs.begin(); it != new_neighs.end(); ++it)
++ {
++ if (*it == rsPeers->getGPGOwnId())
++ bad_elements.push_back(*it);
++ RsPeerDetails detail;
++ if (!rsPeers->getGPGDetails(*it, detail))
++ bad_elements.push_back(*it);
++
++ }
++ //remove all bad elements from list
++ for(std::list<RsPgpId>::iterator it = bad_elements.begin(); it != bad_elements.end(); ++it)
++ {
++ std::list<RsPgpId>::iterator it2 = std::find(new_neighs.begin(), new_neighs.end(), *it);
++ if(it2 != new_neighs.end())
++ new_neighs.remove(*it2);
++ }
++ new_size = new_neighs.size();
++ //set model data to new cleaned up data
++ neighs = new_neighs;
++
++ //reflect actual row count in model
++ if(old_size < new_size)
++ {
++ beginInsertRows(QModelIndex(), old_size - 1, old_size - 1 + new_size - old_size);
++ insertRows(old_size - 1 , new_size - old_size);
++ endInsertRows();
++ }
++ else if(new_size < old_size)
++ {
++ beginRemoveRows(QModelIndex(), new_size - 1, new_size - 1 + old_size - new_size);
++ removeRows(old_size - 1, old_size - new_size);
++ endRemoveRows();
++ }
++ //update data in ui, to avoid unnecessary redraw and ui updates, updating only changed elements
++ //i guessing what order is unchanged between rsPeers->getGPGAllList() calls
++ //TODO: libretroshare should implement a way to obtain only changed elements via some signalling non-blocking api.
++ {
++ size_t ii1 = 0;
++ for(auto i1 = neighs.begin(), end1 = neighs.end(), i2 = old_neighs.begin(), end2 = old_neighs.end(); i1 != end1; ++i1, ++i2, ii1++)
++ {
++ if(i2 == end2)
++ break;
++ if(*i1 != *i2)
++ {
++ QModelIndex topLeft = createIndex(ii1,0), bottomRight = createIndex(ii1, COLUMN_COUNT-1);
++ emit dataChanged(topLeft, bottomRight);
++ }
++ }
++ }
++ if(new_size > old_size)
++ {
++ QModelIndex topLeft = createIndex(old_size ? old_size -1 : 0 ,0), bottomRight = createIndex(new_size -1, COLUMN_COUNT-1);
++ emit dataChanged(topLeft, bottomRight);
++ }
++ //dirty solution for initial data fetch
++ //TODO: do it properly!
++ if(!old_size)
++ {
++ beginResetModel();
++ endResetModel();
++ }
++
++ //shit code end
++}
++
+diff --git a/retroshare-gui/src/gui/NetworkDialog/pgpid_item_model.h b/retroshare-gui/src/gui/NetworkDialog/pgpid_item_model.h
+new file mode 100644
+index 000000000..84bae523b
+--- /dev/null
++++ b/retroshare-gui/src/gui/NetworkDialog/pgpid_item_model.h
+@@ -0,0 +1,48 @@
++#ifndef KEY_ITEM_MODEL_H
++#define KEY_ITEM_MODEL_H
++
++#include <QAbstractItemModel>
++#include <retroshare/rspeers.h>
++
++#define COLUMN_CHECK 0
++#define COLUMN_PEERNAME 1
++#define COLUMN_I_AUTH_PEER 2
++#define COLUMN_PEER_AUTH_ME 3
++#define COLUMN_PEERID 4
++#define COLUMN_LAST_USED 5
++#define COLUMN_COUNT 6
++
++
++class pgpid_item_model : public QAbstractTableModel
++{
++ Q_OBJECT
++
++public:
++ explicit pgpid_item_model(std::list<RsPgpId> &neighs, float &font_height, QObject *parent = nullptr);
++
++ // Header:
++ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
++
++ // Basic functionality:
++// QModelIndex index(int row, int column,
++// const QModelIndex &parent = QModelIndex()) const override;
++// QModelIndex parent(const QModelIndex &index) const override;
++// bool hasChildren(const QModelIndex &parent = QModelIndex()) const override;
++
++ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
++ int columnCount(const QModelIndex &parent = QModelIndex()) const override;
++// bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex()) override;
++// bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex()) override;
++
++ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
++
++// void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
++public slots:
++ void data_updated(std::list<RsPgpId> &new_neighs);
++
++private:
++ std::list<RsPgpId> &neighs;
++ float &font_height;
++};
++
++#endif // KEY_ITEM_MODEL_H
+diff --git a/retroshare-gui/src/gui/NetworkDialog/pgpid_item_proxy.cpp b/retroshare-gui/src/gui/NetworkDialog/pgpid_item_proxy.cpp
+new file mode 100644
+index 000000000..da42db568
+--- /dev/null
++++ b/retroshare-gui/src/gui/NetworkDialog/pgpid_item_proxy.cpp
+@@ -0,0 +1,50 @@
++#include "pgpid_item_proxy.h"
++
++pgpid_item_proxy::pgpid_item_proxy(QObject *parent) :
++ //QAbstractProxyModel(parent)
++ QSortFilterProxyModel(parent)
++{
++
++}
++
++
++/*QModelIndex pgpid_item_proxy::mapFromSource(const QModelIndex &sourceIndex) const
++{
++ if(sourceIndex.isValid())
++ return createIndex(sourceIndex.row(), sourceIndex.column(), sourceIndex.internalPointer());
++ else
++ return QModelIndex();
++}
++
++
++QModelIndex pgpid_item_proxy::mapToSource(const QModelIndex &proxyIndex) const
++{
++ if(proxyIndex.isValid())
++ return sourceModel()->index(proxyIndex.row(), proxyIndex.column());
++ else
++ return QModelIndex();}
++
++
++QModelIndex pgpid_item_proxy::index(int row, int column, const QModelIndex &parent) const
++{
++ const QModelIndex sourceParent = mapToSource(parent);
++ const QModelIndex sourceIndex = sourceModel()->index(row, column, sourceParent);
++ return mapFromSource(sourceIndex);
++}
++
++QModelIndex pgpid_item_proxy::parent(const QModelIndex &child) const
++{
++ const QModelIndex sourceIndex = mapToSource(child);
++ const QModelIndex sourceParent = sourceIndex.parent();
++ return mapFromSource(sourceParent);
++}
++int pgpid_item_proxy::rowCount(const QModelIndex &parent) const
++{
++ //TODO:
++ return sourceModel()->rowCount(parent);
++}
++int pgpid_item_proxy::columnCount(const QModelIndex &parent) const
++{
++ return sourceModel()->columnCount(parent);
++}
++*/
+diff --git a/retroshare-gui/src/gui/NetworkDialog/pgpid_item_proxy.h b/retroshare-gui/src/gui/NetworkDialog/pgpid_item_proxy.h
+new file mode 100644
+index 000000000..d33bc9666
+--- /dev/null
++++ b/retroshare-gui/src/gui/NetworkDialog/pgpid_item_proxy.h
+@@ -0,0 +1,23 @@
++#ifndef PGPID_ITEM_PROXY_H
++#define PGPID_ITEM_PROXY_H
++
++#include <QSortFilterProxyModel>
++
++class pgpid_item_proxy :
++ //public QAbstractProxyModel
++ public QSortFilterProxyModel
++{
++ Q_OBJECT
++
++public:
++ pgpid_item_proxy(QObject *parent = nullptr);
++/* virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const;
++ QModelIndex mapToSource(const QModelIndex &proxyIndex) const;
++ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
++ QModelIndex parent(const QModelIndex &child) const;
++ int rowCount(const QModelIndex &parent = QModelIndex()) const;
++ int columnCount(const QModelIndex &parent = QModelIndex()) const;
++*/
++};
++
++#endif // PGPID_ITEM_PROXY_H
+diff --git a/retroshare-gui/src/main.cpp b/retroshare-gui/src/main.cpp
+index 2430a1984..8dfa43c48 100644
+--- a/retroshare-gui/src/main.cpp
++++ b/retroshare-gui/src/main.cpp
+@@ -416,7 +416,7 @@ feenableexcept(FE_INVALID | FE_DIVBYZERO);
+ QObject::connect(notify,SIGNAL(chatStatusChanged(const QString&,const QString&,bool)),w->friendsDialog,SLOT(updatePeerStatusString(const QString&,const QString&,bool)));
+ QObject::connect(notify,SIGNAL(ownStatusMessageChanged()),w->friendsDialog,SLOT(loadmypersonalstatus()));
+
+- QObject::connect(notify,SIGNAL(logInfoChanged(const QString&)) ,w->friendsDialog->networkDialog,SLOT(setLogInfo(QString))) ;
++// QObject::connect(notify,SIGNAL(logInfoChanged(const QString&)) ,w->friendsDialog->networkDialog,SLOT(setLogInfo(QString))) ;
+ QObject::connect(notify,SIGNAL(discInfoChanged()) ,w->friendsDialog->networkView,SLOT(update()),Qt::QueuedConnection) ;
+ QObject::connect(notify,SIGNAL(errorOccurred(int,int,const QString&)),w,SLOT(displayErrorMessage(int,int,const QString&))) ;
+
+diff --git a/retroshare-gui/src/retroshare-gui.pro b/retroshare-gui/src/retroshare-gui.pro
+index b7bc361ce..6c4c821d1 100644
+--- a/retroshare-gui/src/retroshare-gui.pro
++++ b/retroshare-gui/src/retroshare-gui.pro
+@@ -565,7 +565,9 @@ HEADERS += rshare.h \
+ gui/GetStartedDialog.h \
+ gui/statistics/BWGraph.h \
+ util/RsSyntaxHighlighter.h \
+- util/imageutil.h
++ util/imageutil.h \
++ gui/NetworkDialog/pgpid_item_model.h \
++ gui/NetworkDialog/pgpid_item_proxy.h
+
+ # gui/ForumsDialog.h \
+ # gui/forums/ForumDetails.h \
+@@ -925,7 +927,9 @@ SOURCES += main.cpp \
+ gui/statistics/RttStatistics.cpp \
+ gui/statistics/BWGraph.cpp \
+ util/RsSyntaxHighlighter.cpp \
+- util/imageutil.cpp
++ util/imageutil.cpp \
++ gui/NetworkDialog/pgpid_item_model.cpp \
++ gui/NetworkDialog/pgpid_item_proxy.cpp
+
+ # gui/ForumsDialog.cpp \
+ # gui/forums/ForumDetails.cpp \
diff --git a/net-p2p/retroshare/retroshare-scm.ebuild b/net-p2p/retroshare/retroshare-scm.ebuild
index 3a438cb..21fc516 100644
--- a/net-p2p/retroshare/retroshare-scm.ebuild
+++ b/net-p2p/retroshare/retroshare-scm.ebuild
@@ -2,7 +2,7 @@
# Distributed under the terms of the GNU General Public License v2
# $Id$
-EAPI=5
+EAPI=6
inherit eutils gnome2-utils multilib qmake-utils git-r3
@@ -79,8 +79,16 @@ DEPEND="${RDEPEND}
qt4? ( dev-qt/qtcore:4 )
virtual/pkgconfig"
+PATCHES=(
+ "${FILESDIR}/hidden_service.patch"
+ "${FILESDIR}/cflags.patch"
+ "${FILESDIR}/disable_key_array_redraw.patch"
+ "${FILESDIR}/abstractitemmodel_test.patch"
+)
+
src_prepare() {
+ default
local dir
sed -i \
@@ -112,11 +120,6 @@ src_prepare() {
qtchooser -run-tool=lrelease -qt=5 retroshare-gui/src/retroshare-gui.pro
fi
-
- epatch "${FILESDIR}/hidden_service.patch"
- epatch "${FILESDIR}/cflags.patch"
- epatch "${FILESDIR}/disable_key_array_redraw.patch"
-
epatch_user
}