diff --git a/libretroshare/src/gxs/rsgenexchange.cc b/libretroshare/src/gxs/rsgenexchange.cc index d133355d7..7b1c328cf 100644 --- a/libretroshare/src/gxs/rsgenexchange.cc +++ b/libretroshare/src/gxs/rsgenexchange.cc @@ -2519,7 +2519,7 @@ void RsGenExchange::processGroupUpdatePublish() { GroupUpdatePublish& gup = *vit; const RsGxsGroupId& groupId = gup.grpItem->meta.mGroupId; - grpMeta.insert(std::make_pair(groupId, (RsGxsGrpMetaData*)(NULL))); + grpMeta.insert(std::make_pair(groupId, std::make_shared())); } if(grpMeta.empty()) @@ -2985,7 +2985,7 @@ bool RsGenExchange::getGroupKeys(const RsGxsGroupId &grpId, RsTlvSecurityKeySet RS_STACK_MUTEX(mGenMtx) ; RsGxsGrpMetaTemporaryMap grpMeta; - grpMeta[grpId] = NULL; + grpMeta[grpId] = std::make_shared(); mDataStore->retrieveGxsGrpMetaData(grpMeta); if(grpMeta.empty()) @@ -3078,7 +3078,7 @@ void RsGenExchange::processRecvdMessages() } else { - grpMetas.insert(std::make_pair(pend_it->second.mItem->grpId, (RsGxsGrpMetaData*)NULL)); + grpMetas.insert(std::make_pair(pend_it->second.mItem->grpId, std::make_shared())); ++pend_it; } } diff --git a/libretroshare/src/gxs/rsgxsnettunnel.cc b/libretroshare/src/gxs/rsgxsnettunnel.cc index 61e1101f4..0237c4fb7 100644 --- a/libretroshare/src/gxs/rsgxsnettunnel.cc +++ b/libretroshare/src/gxs/rsgxsnettunnel.cc @@ -766,7 +766,12 @@ void RsGxsNetTunnelService::threadTick() } #endif - rstime::rs_usleep(1*1000*1000) ; // 1 sec + for(uint32_t i=0;i<2;++i) + { + if(shouldStop()) + return; + rstime::rs_usleep(500*1000) ; // 1 sec + } } const Bias20Bytes& RsGxsNetTunnelService::locked_randomBias() diff --git a/libretroshare/src/services/broadcastdiscoveryservice.cc b/libretroshare/src/services/broadcastdiscoveryservice.cc index f691fd7ed..076244b44 100644 --- a/libretroshare/src/services/broadcastdiscoveryservice.cc +++ b/libretroshare/src/services/broadcastdiscoveryservice.cc @@ -141,8 +141,6 @@ void BroadcastDiscoveryService::updatePublishedData() void BroadcastDiscoveryService::threadTick() { - auto nextRunAt = std::chrono::system_clock::now() + std::chrono::seconds(5); - if( mUdcParameters.can_discover() && !mRsPeers.isHiddenNode(mRsPeers.getOwnId()) ) { @@ -200,7 +198,13 @@ void BroadcastDiscoveryService::threadTick() if( mUdcParameters.can_be_discovered() && !mRsPeers.isHiddenNode(mRsPeers.getOwnId()) ) updatePublishedData(); - std::this_thread::sleep_until(nextRunAt); + // This avoids waiting 5 secs when the thread should actually terminate (when RS closes). + for(uint32_t i=0;i<10;++i) + { + if(shouldStop()) + return; + rstime::rs_usleep(500*1000); // sleep for 0.5 sec. + } } RsBroadcastDiscoveryResult BroadcastDiscoveryService::createResult( diff --git a/libretroshare/src/services/p3gxschannels.cc b/libretroshare/src/services/p3gxschannels.cc index 1abc1f0e2..9176aafab 100644 --- a/libretroshare/src/services/p3gxschannels.cc +++ b/libretroshare/src/services/p3gxschannels.cc @@ -93,13 +93,17 @@ p3GxsChannels::p3GxsChannels( mLastDistantSearchNotificationTS = 0; mCommentService = new p3GxsCommentService(this, RS_SERVICE_GXS_TYPE_CHANNELS); - RsTickEvent::schedule_in(CHANNEL_PROCESS, 0); - + // This is not needed since it just loads all channel data ever 5 mins which takes a lot + // of useless CPU/memory. + // + // RsTickEvent::schedule_in(CHANNEL_PROCESS, 0); + // // Test Data disabled in repo. - //RsTickEvent::schedule_in(CHANNEL_TESTEVENT_DUMMYDATA, DUMMYDATA_PERIOD); + // + // RsTickEvent::schedule_in(CHANNEL_TESTEVENT_DUMMYDATA, DUMMYDATA_PERIOD); + mGenToken = 0; mGenCount = 0; - } diff --git a/libretroshare/src/services/p3idservice.cc b/libretroshare/src/services/p3idservice.cc index 201c49a5d..7d608941f 100644 --- a/libretroshare/src/services/p3idservice.cc +++ b/libretroshare/src/services/p3idservice.cc @@ -643,6 +643,7 @@ void p3IdService::notifyChanges(std::vector &changes) case RsGxsNotify::TYPE_PROCESSED: break ; // Happens when the group is subscribed. This is triggered by RsGenExchange::subscribeToGroup, so better not // call it again from here!! + case RsGxsNotify::TYPE_UPDATED: case RsGxsNotify::TYPE_PUBLISHED: { auto ev = std::make_shared(); diff --git a/retroshare-gui/src/gui/Identity/IdEditDialog.cpp b/retroshare-gui/src/gui/Identity/IdEditDialog.cpp index 94d092faf..33eb903b0 100644 --- a/retroshare-gui/src/gui/Identity/IdEditDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdEditDialog.cpp @@ -20,6 +20,7 @@ #include #include +#include #include "IdEditDialog.h" #include "ui_IdEditDialog.h" @@ -100,6 +101,7 @@ IdEditDialog::~IdEditDialog() {} void IdEditDialog::changeAvatar() { +#ifdef TODO AvatarDialog dialog(this); dialog.setAvatar(mAvatar); @@ -109,6 +111,23 @@ void IdEditDialog::changeAvatar() setAvatar(newAvatar); } +#endif + // For now we use a simpler method since AvatarDialog is not finished yet; we use the thumbnail viewer to allow the user to + // select a proper scale/crop of a given image to make his/her avatar. + + QString image_filename ; + + if(!misc::getOpenFileName(this,RshareSettings::LASTDIR_IMAGES,tr("Import image"), tr("Image files (*.jpg *.png);;All files (*)"),image_filename)) + return; + + QImage img(image_filename); + + ui->avatarLabel->setPicture(QPixmap::fromImage(img)); + ui->avatarLabel->setEnableZoom(true); + ui->avatarLabel->setToolTip(tr("Use the mouse to zoom and adjust the image for your avatar.")); + + // shows the tooltip for a while + QToolTip::showText( ui->avatarLabel->mapToGlobal( QPoint( 0, 0 ) ), ui->avatarLabel->toolTip() ); } void IdEditDialog::setupNewId(bool pseudo,bool enable_anon) @@ -598,6 +617,8 @@ void IdEditDialog::updateId() mEditGroup.mMeta.mGroupName = groupname.toUtf8().constData(); + mAvatar = ui->avatarLabel->extractCroppedScaledPicture(); + if (!mAvatar.isNull()) { QByteArray ba; diff --git a/retroshare-gui/src/gui/Identity/IdEditDialog.ui b/retroshare-gui/src/gui/Identity/IdEditDialog.ui index 9ed2d258a..fee114a9d 100644 --- a/retroshare-gui/src/gui/Identity/IdEditDialog.ui +++ b/retroshare-gui/src/gui/Identity/IdEditDialog.ui @@ -6,8 +6,8 @@ 0 0 - 542 - 536 + 593 + 604 @@ -291,7 +291,7 @@ - + 0 @@ -330,7 +330,7 @@ - Set Avatar + Choose image... @@ -529,9 +529,13 @@
gui/common/HeaderFrame.h
1 + + ZoomableLabel + QLabel +
gui/gxschannels/GxsChannelPostThumbnail.h
+
- diff --git a/retroshare-gui/src/gui/MainWindow.cpp b/retroshare-gui/src/gui/MainWindow.cpp index 4092334b5..28300d8b7 100644 --- a/retroshare-gui/src/gui/MainWindow.cpp +++ b/retroshare-gui/src/gui/MainWindow.cpp @@ -376,9 +376,10 @@ MainWindow::~MainWindow() delete toasterDisable; delete sysTrayStatus; delete trayIcon; - delete notifyMenu;//notifyMenu belongs to trayMenu delete trayMenu; - StatisticsWindow::releaseInstance(); +// delete notifyMenu; // already deleted by the deletion of trayMenu + StatisticsWindow::releaseInstance(); + #ifdef MESSENGER_WINDOW MessengerWindow::releaseInstance(); #endif diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp index ada176066..0828cbbd2 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp @@ -669,7 +669,6 @@ void GxsChannelPostsWidgetWithModel::download() for(auto& file:post.mFiles) { std::list sources; - std::string destination; // Add possible direct sources. FileInfo fileInfo;