mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-07-29 01:08:50 -04:00
Added disable/enable of GxsIdDetails process.
Disabled GxsIdDetails process when filling gxs id's in forums. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@8556 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
c3b794afb2
commit
227e7121cc
3 changed files with 82 additions and 45 deletions
|
@ -47,8 +47,9 @@
|
||||||
#define IMAGE_DEV_PATCHER ":/images/tags/dev-patcher.png"
|
#define IMAGE_DEV_PATCHER ":/images/tags/dev-patcher.png"
|
||||||
#define IMAGE_DEV_DEVELOPER ":/images/tags/developer.png"
|
#define IMAGE_DEV_DEVELOPER ":/images/tags/developer.png"
|
||||||
|
|
||||||
#define TIMER_INTERVAL 1000
|
#define TIMER_INTERVAL 500
|
||||||
#define MAX_ATTEMPTS 10
|
#define MAX_ATTEMPTS 10
|
||||||
|
#define MAX_PROCESS_COUNT_PER_TIMER 50
|
||||||
|
|
||||||
const int kRecognTagClass_DEVELOPMENT = 1;
|
const int kRecognTagClass_DEVELOPMENT = 1;
|
||||||
|
|
||||||
|
@ -65,6 +66,7 @@ GxsIdDetails::GxsIdDetails()
|
||||||
: QObject()
|
: QObject()
|
||||||
{
|
{
|
||||||
mCheckTimerId = 0;
|
mCheckTimerId = 0;
|
||||||
|
mProcessDisableCount = 0;
|
||||||
|
|
||||||
connect(this, SIGNAL(startTimerFromThread()), this, SLOT(doStartTimer()));
|
connect(this, SIGNAL(startTimerFromThread()), this, SLOT(doStartTimer()));
|
||||||
}
|
}
|
||||||
|
@ -147,11 +149,16 @@ void GxsIdDetails::timerEvent(QTimerEvent *event)
|
||||||
if (rsIdentity) {
|
if (rsIdentity) {
|
||||||
QMutexLocker lock(&mMutex);
|
QMutexLocker lock(&mMutex);
|
||||||
|
|
||||||
|
if (mProcessDisableCount == 0) {
|
||||||
if (!mPendingData.empty()) {
|
if (!mPendingData.empty()) {
|
||||||
/* Check pending id's */
|
/* Check pending id's */
|
||||||
QList<CallbackData>::iterator dataIt;
|
int processed = qMin(MAX_PROCESS_COUNT_PER_TIMER, mPendingData.size());
|
||||||
for (dataIt = mPendingData.begin(); dataIt != mPendingData.end(); ) {
|
while (!mPendingData.isEmpty()) {
|
||||||
CallbackData &pendingData = *dataIt;
|
if (processed-- <= 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
CallbackData &pendingData = mPendingData.front();
|
||||||
|
|
||||||
RsIdentityDetails details;
|
RsIdentityDetails details;
|
||||||
if (rsIdentity->getIdDetails(pendingData.mId, details)) {
|
if (rsIdentity->getIdDetails(pendingData.mId, details)) {
|
||||||
|
@ -159,7 +166,7 @@ void GxsIdDetails::timerEvent(QTimerEvent *event)
|
||||||
pendingData.mCallback(GXS_ID_DETAILS_TYPE_DONE, details, pendingData.mObject, pendingData.mData);
|
pendingData.mCallback(GXS_ID_DETAILS_TYPE_DONE, details, pendingData.mObject, pendingData.mData);
|
||||||
|
|
||||||
QObject *object = pendingData.mObject;
|
QObject *object = pendingData.mObject;
|
||||||
dataIt = mPendingData.erase(dataIt);
|
mPendingData.pop_front();
|
||||||
connectObject_locked(object, false);
|
connectObject_locked(object, false);
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
|
@ -171,13 +178,14 @@ void GxsIdDetails::timerEvent(QTimerEvent *event)
|
||||||
pendingData.mCallback(GXS_ID_DETAILS_TYPE_FAILED, details, pendingData.mObject, pendingData.mData);
|
pendingData.mCallback(GXS_ID_DETAILS_TYPE_FAILED, details, pendingData.mObject, pendingData.mData);
|
||||||
|
|
||||||
QObject *object = pendingData.mObject;
|
QObject *object = pendingData.mObject;
|
||||||
dataIt = mPendingData.erase(dataIt);
|
mPendingData.pop_front();
|
||||||
connectObject_locked(object, false);
|
connectObject_locked(object, false);
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
++dataIt;
|
mPendingData.move(0, mPendingData.size() - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -206,6 +214,24 @@ void GxsIdDetails::doStartTimer()
|
||||||
mCheckTimerId = startTimer(TIMER_INTERVAL);
|
mCheckTimerId = startTimer(TIMER_INTERVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GxsIdDetails::enableProcess(bool enable)
|
||||||
|
{
|
||||||
|
if (!mInstance) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMutexLocker lock(&mInstance->mMutex);
|
||||||
|
|
||||||
|
if (enable) {
|
||||||
|
--mInstance->mProcessDisableCount;
|
||||||
|
if (mInstance->mProcessDisableCount < 0) {
|
||||||
|
mInstance->mProcessDisableCount = 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
++mInstance->mProcessDisableCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool GxsIdDetails::process(const RsGxsId &id, GxsIdDetailsCallbackFunction callback, QObject *object, const QVariant &data)
|
bool GxsIdDetails::process(const RsGxsId &id, GxsIdDetailsCallbackFunction callback, QObject *object, const QVariant &data)
|
||||||
{
|
{
|
||||||
if (!callback) {
|
if (!callback) {
|
||||||
|
|
|
@ -81,6 +81,7 @@ public:
|
||||||
static QImage makeDefaultIcon(const RsGxsId& id);
|
static QImage makeDefaultIcon(const RsGxsId& id);
|
||||||
|
|
||||||
/* Processing */
|
/* Processing */
|
||||||
|
static void enableProcess(bool enable);
|
||||||
static bool process(const RsGxsId &id, GxsIdDetailsCallbackFunction callback, QObject *object, const QVariant &data = QVariant());
|
static bool process(const RsGxsId &id, GxsIdDetailsCallbackFunction callback, QObject *object, const QVariant &data = QVariant());
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
@ -131,7 +132,7 @@ protected:
|
||||||
/* Pending data */
|
/* Pending data */
|
||||||
QList<CallbackData> mPendingData;
|
QList<CallbackData> mPendingData;
|
||||||
int mCheckTimerId;
|
int mCheckTimerId;
|
||||||
std::map<RsGxsId,QImage> image_cache ;
|
int mProcessDisableCount;
|
||||||
|
|
||||||
/* Thread safe */
|
/* Thread safe */
|
||||||
QMutex mMutex;
|
QMutex mMutex;
|
||||||
|
|
|
@ -770,6 +770,8 @@ void GxsForumThreadWidget::fillThreadFinished()
|
||||||
mStateHelper->setActive(mTokenTypeInsertThreads, true);
|
mStateHelper->setActive(mTokenTypeInsertThreads, true);
|
||||||
ui->threadTreeWidget->setSortingEnabled(false);
|
ui->threadTreeWidget->setSortingEnabled(false);
|
||||||
|
|
||||||
|
GxsIdDetails::enableProcess(false);
|
||||||
|
|
||||||
/* add all messages in! */
|
/* add all messages in! */
|
||||||
if (mLastViewType != thread->mViewType || mLastForumID != groupId()) {
|
if (mLastViewType != thread->mViewType || mLastForumID != groupId()) {
|
||||||
ui->threadTreeWidget->clear();
|
ui->threadTreeWidget->clear();
|
||||||
|
@ -786,6 +788,27 @@ void GxsForumThreadWidget::fillThreadFinished()
|
||||||
cleanupItems(thread->mItems);
|
cleanupItems(thread->mItems);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Move value from ROLE_THREAD_AUTHOR to GxsIdRSTreeWidgetItem::setId */
|
||||||
|
QTreeWidgetItemIterator itemIterator(ui->threadTreeWidget);
|
||||||
|
QTreeWidgetItem *item = NULL;
|
||||||
|
while ((item = *itemIterator) != NULL) {
|
||||||
|
++itemIterator;
|
||||||
|
|
||||||
|
QString gxsId = item->data(COLUMN_THREAD_DATA, ROLE_THREAD_AUTHOR).toString();
|
||||||
|
if (gxsId.isEmpty()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
item->setData(COLUMN_THREAD_DATA, ROLE_THREAD_AUTHOR, QVariant());
|
||||||
|
|
||||||
|
GxsIdRSTreeWidgetItem *gxsIdItem = dynamic_cast<GxsIdRSTreeWidgetItem*>(item);
|
||||||
|
if (gxsIdItem) {
|
||||||
|
gxsIdItem->setId(RsGxsId(gxsId.toStdString()), COLUMN_THREAD_AUTHOR, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GxsIdDetails::enableProcess(true);
|
||||||
|
|
||||||
ui->threadTreeWidget->setSortingEnabled(true);
|
ui->threadTreeWidget->setSortingEnabled(true);
|
||||||
|
|
||||||
if (thread->mFocusMsgId.empty() == false) {
|
if (thread->mFocusMsgId.empty() == false) {
|
||||||
|
@ -880,7 +903,7 @@ QTreeWidgetItem *GxsForumThreadWidget::convertMsgToThreadWidget(const RsGxsForum
|
||||||
item->setText(COLUMN_THREAD_DATE, text);
|
item->setText(COLUMN_THREAD_DATE, text);
|
||||||
item->setData(COLUMN_THREAD_DATE, ROLE_THREAD_SORT, sort);
|
item->setData(COLUMN_THREAD_DATE, ROLE_THREAD_SORT, sort);
|
||||||
|
|
||||||
item->setId(msg.mMeta.mAuthorId, COLUMN_THREAD_AUTHOR, false);
|
// Set later with GxsIdRSTreeWidgetItem::setId
|
||||||
item->setData(COLUMN_THREAD_DATA, ROLE_THREAD_AUTHOR, QString::fromStdString(msg.mMeta.mAuthorId.toStdString()));
|
item->setData(COLUMN_THREAD_DATA, ROLE_THREAD_AUTHOR, QString::fromStdString(msg.mMeta.mAuthorId.toStdString()));
|
||||||
//#TODO
|
//#TODO
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -1035,20 +1058,7 @@ static void copyItem(QTreeWidgetItem *item, const QTreeWidgetItem *newItem)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < COLUMN_THREAD_COUNT; ++i) {
|
for (i = 0; i < COLUMN_THREAD_COUNT; ++i) {
|
||||||
if (i == COLUMN_THREAD_AUTHOR) {
|
if (i != COLUMN_THREAD_AUTHOR) {
|
||||||
QString authorId = newItem->data(COLUMN_THREAD_DATA, ROLE_THREAD_AUTHOR).toString();
|
|
||||||
if (authorId != item->data(COLUMN_THREAD_DATA, ROLE_THREAD_AUTHOR).toString()) {
|
|
||||||
/* Author has changed? */
|
|
||||||
GxsIdRSTreeWidgetItem *gxsIdItem = dynamic_cast<GxsIdRSTreeWidgetItem*>(item);
|
|
||||||
if (gxsIdItem) {
|
|
||||||
/* Set new gxs id */
|
|
||||||
gxsIdItem->setId(RsGxsId(authorId.toStdString()), i, false);
|
|
||||||
} else {
|
|
||||||
/* Copy text */
|
|
||||||
item->setText(i, newItem->text(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* Copy text */
|
/* Copy text */
|
||||||
item->setText(i, newItem->text(i));
|
item->setText(i, newItem->text(i));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue