From ccf849159a550a8782d64ee95249416607acfe3f Mon Sep 17 00:00:00 2001 From: drbob Date: Fri, 15 May 2020 12:58:27 +1000 Subject: [PATCH 01/95] update libretroshare interface for TheWire expanded groups and msgs with additional data and images. new interfaces for improved ui display of message start moving fetch logic to libretroshare with blocking APIs. --- libretroshare/src/retroshare/rswire.h | 136 +++- libretroshare/src/rsitems/rswireitems.cc | 26 +- libretroshare/src/services/p3wire.cc | 917 ++++++++++++++++++++++- libretroshare/src/services/p3wire.h | 44 ++ 4 files changed, 1062 insertions(+), 61 deletions(-) diff --git a/libretroshare/src/retroshare/rswire.h b/libretroshare/src/retroshare/rswire.h index 03da21116..862fc2410 100644 --- a/libretroshare/src/retroshare/rswire.h +++ b/libretroshare/src/retroshare/rswire.h @@ -35,11 +35,36 @@ class RsWire; extern RsWire *rsWire; -struct RsWireGroup: RsGxsGenericGroupData +class RsWireGroup; +typedef std::shared_ptr RsWireGroupSPtr; +typedef std::shared_ptr RsWireGroupConstSPtr; + +class RsWireGroup: public RsGxsGenericGroupData { public: - std::string mDescription; - RsGxsImage mIcon; + std::string mTagline; + std::string mLocation; + + // Images max size should be enforced. + RsGxsImage mHeadshot; // max size? + RsGxsImage mMasthead; // max size? + + // Unserialised stuff --------------------- + + // These are this groups top-level msgs. + uint32_t mGroupPulses; + uint32_t mGroupRepublishes; + uint32_t mGroupLikes; + uint32_t mGroupReplies; + // how do we handle these. TODO + // uint32_t mGroupFollowing; + // uint32_t mGroupFollowers; + + // These are this groups REF / RESPONSE msgs from others. + uint32_t mRefMentions; // TODO how to handle this? + uint32_t mRefRepublishes; + uint32_t mRefLikes; + uint32_t mRefReplies; }; @@ -60,13 +85,7 @@ struct RsWireGroup: RsGxsGenericGroupData * ***********************************************************************/ -class RsWirePlace -{ - public: - - -}; /************************************************************************ * Pulse comes in three flavours. @@ -82,24 +101,39 @@ class RsWirePlace * This info will be duplicated in two msgs - but allow data to spread easier. * * Reply Msg Pulse, will be Top-Level Msg on Publisher's Group. - * - mPulseMode = WIRE_PULSE_TYPE_REPLY_MSG + * - mPulseMode = WIRE_PULSE_TYPE_RESPONSE | WIRE_PULSE_TYPE_REPLY * - Ref fields refer to Parent (InReplyTo) Msg. * * Reply Reference, is Child Msg of Parent Msg, on Parent Publisher's Group. - * - mPulseMode = WIRE_PULSE_TYPE_REPLY_REFERENCE + * - mPulseMode = WIRE_PULSE_TYPE_REFERENCE | WIRE_PULSE_TYPE_REPLY * - Ref fields refer to Reply Msg. * - NB: This Msg requires Parent Msg for complete info, while other two are self-contained. + * + * Additionally need to sort out additional relationships. + * - Mentions. + * - Followers. + * - Following. ***********************************************************************/ -#define WIRE_PULSE_TYPE_ORIGINAL_MSG (0x0001) -#define WIRE_PULSE_TYPE_REPLY_MSG (0x0002) -#define WIRE_PULSE_TYPE_REPLY_REFERENCE (0x0004) +#define WIRE_PULSE_TYPE_ORIGINAL (0x0001) +#define WIRE_PULSE_TYPE_RESPONSE (0x0002) +#define WIRE_PULSE_TYPE_REFERENCE (0x0004) + +#define WIRE_PULSE_RESPONSE_MASK (0x0f00) +#define WIRE_PULSE_TYPE_REPLY (0x0100) +#define WIRE_PULSE_TYPE_REPUBLISH (0x0200) +#define WIRE_PULSE_TYPE_LIKE (0x0400) #define WIRE_PULSE_SENTIMENT_NO_SENTIMENT (0x0000) #define WIRE_PULSE_SENTIMENT_POSITIVE (0x0001) #define WIRE_PULSE_SENTIMENT_NEUTRAL (0x0002) #define WIRE_PULSE_SENTIMENT_NEGATIVE (0x0003) +class RsWirePulse; + +typedef std::shared_ptr RsWirePulseSPtr; +typedef std::shared_ptr RsWirePulseConstSPtr; + class RsWirePulse { public: @@ -112,21 +146,45 @@ class RsWirePulse uint32_t mPulseType; uint32_t mReplySentiment; // only relevant if a reply. - // These Ref to the related (parent or reply) if reply (MODE_REPLY_MSG set) - // Mode REPLY_MSG only REPLY_REFERENCE - RsGxsGroupId mRefGroupId; // PARENT_GrpId REPLY_GrpId - std::string mRefGroupName; // PARENT_GrpName REPLY_GrpName - RsGxsMessageId mRefOrigMsgId; // PARENT_OrigMsgId REPLY_OrigMsgId - RsGxsId mRefAuthorId; // PARENT_AuthorId REPLY_AuthorId - rstime_t mRefPublishTs; // PARENT_PublishTs REPLY_PublishTs - std::string mRefPulseText; // PARENT_PulseText REPLY_PulseText + // These Ref to the related (parent or reply) if reply (RESPONSE set) + // Mode RESPONSE REFERENCE + RsGxsGroupId mRefGroupId; // PARENT_GrpId REPLY_GrpId + std::string mRefGroupName; // PARENT_GrpName REPLY_GrpName + RsGxsMessageId mRefOrigMsgId; // PARENT_OrigMsgId REPLY_OrigMsgId + RsGxsId mRefAuthorId; // PARENT_AuthorId REPLY_AuthorId + std::string mRefAuthorName; // PARENT_AuthorName REPLY_AuthorName // TODO + rstime_t mRefPublishTs; // PARENT_PublishTs REPLY_PublishTs + std::string mRefPulseText; // PARENT_PulseText REPLY_PulseText + uint32_t mRefImageCount; // PARENT_#Images REPLY_#Images // TODO - // Open Question. Do we want these additional fields? - // These can potentially be added at some point. - // std::list mMentions; - // std::list mHashTags; - // std::list mUrls; - // RsWirePlace mPlace; + // Additional Fields for version 2. + // Images, need to enforce 20k limit? + RsGxsImage mImage1; + RsGxsImage mImage2; + RsGxsImage mImage3; + RsGxsImage mImage4; + + // Below Here is not serialised. + // They are additional fields linking pulses together or parsing elements of msg. + + // can't have self referencial list, so need to use pointers. + // using SharedPointers to automatically cleanup. + + // Pointer to WireGroup. + RsWireGroupSPtr mRefGroupPtr; + RsWireGroupSPtr mGroupPtr; + + // These are the direct children of this message + // split into likes, replies and retweets. + std::list mReplies; + std::list mLikes; + std::list mRepublishes; + + // parsed from msg. + // do we need references..? + std::list mHashTags; + std::list mMentions; + std::list mUrls; }; @@ -158,7 +216,27 @@ virtual bool createPulse(uint32_t &token, RsWirePulse &pulse) = 0; // Blocking Interfaces. virtual bool createGroup(RsWireGroup &group) = 0; virtual bool updateGroup(const RsWireGroup &group) = 0; -virtual bool getGroups(const std::list grpIds, std::vector &groups) = 0; +virtual bool getGroups(const std::list grpIds, + std::vector &groups) = 0; + + // New Blocking Interfaces. + // Plan to migrate all GUI calls to these, and remove old interfaces above. + // These are not single requests, but return data graphs for display. +virtual bool createOriginalPulse(RsGxsGroupId grpId, std::string msg) = 0; +virtual bool createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, + RsGxsGroupId replyWith, uint32_t reply_type, + uint32_t sentiment, std::string msg) = 0; + + // Provide Group Details for display. +virtual bool getWireGroup(const RsGxsGroupId &groupId, RsWireGroupSPtr &grp) = 0; + + // Provide list of pulses associated with groups. +virtual bool getPulsesForGroups(const std::list &groupIds, + std::list &pulsePtrs) = 0; + + // Provide pulse, and associated replies / like etc. +virtual bool getPulseFocus(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId, + int type, RsWirePulseSPtr &pPulse) = 0; }; diff --git a/libretroshare/src/rsitems/rswireitems.cc b/libretroshare/src/rsitems/rswireitems.cc index 69774ffc5..a68cb6b3f 100644 --- a/libretroshare/src/rsitems/rswireitems.cc +++ b/libretroshare/src/rsitems/rswireitems.cc @@ -43,14 +43,18 @@ RsItem *RsGxsWireSerialiser::create_item(uint16_t service,uint8_t item_subtype) void RsGxsWireGroupItem::clear() { - group.mDescription.clear(); - group.mIcon.clear(); + group.mTagline.clear(); + group.mLocation.clear(); + group.mHeadshot.clear(); + group.mMasthead.clear(); } void RsGxsWireGroupItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { - RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_DESCR,group.mDescription,"group.mDescription") ; - group.mIcon.serial_process(j, ctx); + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_DESCR,group.mTagline,"group.mTagline") ; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_LOCATION,group.mLocation,"group.mLocation") ; + group.mHeadshot.serial_process(j, ctx); + group.mMasthead.serial_process(j, ctx); } void RsGxsWirePulseItem::clear() @@ -62,7 +66,15 @@ void RsGxsWirePulseItem::clear() pulse.mRefGroupName.clear(); pulse.mRefOrigMsgId.clear(); pulse.mRefAuthorId.clear(); + pulse.mRefAuthorName.clear(); + pulse.mRefPublishTs = 0; pulse.mRefPulseText.clear(); + pulse.mRefImageCount = 0; + + pulse.mImage1.clear(); + pulse.mImage2.clear(); + pulse.mImage3.clear(); + pulse.mImage4.clear(); } void RsGxsWirePulseItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) @@ -74,8 +86,14 @@ void RsGxsWirePulseItem::serial_process(RsGenericSerializer::SerializeJob j,RsGe RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_NAME,pulse.mRefGroupName,"pulse.mRefGroupName") ; RsTypeSerializer::serial_process(j,ctx,pulse.mRefOrigMsgId,"pulse.mRefOrigMsgId") ; RsTypeSerializer::serial_process(j,ctx,pulse.mRefAuthorId,"pulse.mRefAuthorId") ; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_NAME,pulse.mRefAuthorName,"pulse.mRefAuthorName") ; RsTypeSerializer::serial_process(j,ctx,pulse.mRefPublishTs,"pulse.mRefPublishTs") ; RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_MSG,pulse.mRefPulseText,"pulse.mRefPulseText") ; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_UINT32_PARAM,pulse.mRefImageCount,"pulse.mRefImageCount") ; + pulse.mImage1.serial_process(j, ctx); + pulse.mImage2.serial_process(j, ctx); + pulse.mImage3.serial_process(j, ctx); + pulse.mImage4.serial_process(j, ctx); } diff --git a/libretroshare/src/services/p3wire.cc b/libretroshare/src/services/p3wire.cc index 434a9b9ca..997cddeaa 100644 --- a/libretroshare/src/services/p3wire.cc +++ b/libretroshare/src/services/p3wire.cc @@ -47,12 +47,12 @@ const uint16_t WIRE_MIN_MINOR_VERSION = 0; RsServiceInfo p3Wire::getServiceInfo() { - return RsServiceInfo(RS_SERVICE_GXS_TYPE_WIRE, - WIRE_APP_NAME, - WIRE_APP_MAJOR_VERSION, - WIRE_APP_MINOR_VERSION, - WIRE_MIN_MAJOR_VERSION, - WIRE_MIN_MINOR_VERSION); + return RsServiceInfo(RS_SERVICE_GXS_TYPE_WIRE, + WIRE_APP_NAME, + WIRE_APP_MAJOR_VERSION, + WIRE_APP_MINOR_VERSION, + WIRE_MIN_MAJOR_VERSION, + WIRE_MIN_MINOR_VERSION); } @@ -91,13 +91,13 @@ RsTokenService* p3Wire::getTokenService() { return RsGenExchange::getTokenService(); } -void p3Wire::notifyChanges(std::vector& changes) +void p3Wire::notifyChanges(std::vector& /*changes*/) { std::cerr << "p3Wire::notifyChanges() New stuff"; std::cerr << std::endl; } - /* Specific Service Data */ + /* Specific Service Data */ bool p3Wire::getGroupData(const uint32_t &token, std::vector &groups) { std::cerr << "p3Wire::getGroupData()"; @@ -137,6 +137,45 @@ bool p3Wire::getGroupData(const uint32_t &token, std::vector &group return ok; } +bool p3Wire::getGroupPtrData(const uint32_t &token, std::map &groups) +{ + std::cerr << "p3Wire::getGroupPtrData()"; + std::cerr << std::endl; + + std::vector grpData; + bool ok = RsGenExchange::getGroupData(token, grpData); + + if(ok) + { + std::vector::iterator vit = grpData.begin(); + + for(; vit != grpData.end(); ++vit) + { + RsGxsWireGroupItem* item = dynamic_cast(*vit); + + if (item) + { + RsWireGroupSPtr pGroup = std::make_shared(item->group); + pGroup->mMeta = item->meta; + delete item; + + groups[pGroup->mMeta.mGroupId] = pGroup; + + std::cerr << "p3Wire::getGroupPtrData() Adding WireGroup to Vector: "; + std::cerr << pGroup->mMeta.mGroupId.toStdString(); + std::cerr << std::endl; + } + else + { + std::cerr << "Not a WireGroupItem, deleting!" << std::endl; + delete *vit; + } + + } + } + return ok; +} + bool p3Wire::getPulseData(const uint32_t &token, std::vector &pulses) { @@ -149,7 +188,6 @@ bool p3Wire::getPulseData(const uint32_t &token, std::vector &pulse for(; mit != msgData.end(); ++mit) { - RsGxsGroupId grpId = mit->first; std::vector& msgItems = mit->second; std::vector::iterator vit = msgItems.begin(); @@ -166,7 +204,7 @@ bool p3Wire::getPulseData(const uint32_t &token, std::vector &pulse } else { - std::cerr << "Not a WikiPulse Item, deleting!" << std::endl; + std::cerr << "Not a WirePulse Item, deleting!" << std::endl; delete *vit; } } @@ -175,6 +213,88 @@ bool p3Wire::getPulseData(const uint32_t &token, std::vector &pulse return ok; } +bool p3Wire::getPulsePtrData(const uint32_t &token, std::list &pulses) +{ + GxsMsgDataMap msgData; + bool ok = RsGenExchange::getMsgData(token, msgData); + + if(ok) + { + GxsMsgDataMap::iterator mit = msgData.begin(); + + for(; mit != msgData.end(); ++mit) + { + std::vector& msgItems = mit->second; + std::vector::iterator vit = msgItems.begin(); + + for(; vit != msgItems.end(); ++vit) + { + RsGxsWirePulseItem* item = dynamic_cast(*vit); + + if(item) + { + RsWirePulseSPtr pPulse = std::make_shared(item->pulse); + pPulse->mMeta = item->meta; + pulses.push_back(pPulse); + delete item; + } + else + { + std::cerr << "Not a WirePulse Item, deleting!" << std::endl; + delete *vit; + } + } + } + } + return ok; +} + +bool p3Wire::getRelatedPulseData(const uint32_t &token, std::vector &pulses) +{ + GxsMsgRelatedDataMap msgData; + std::cerr << "p3Wire::getRelatedPulseData()"; + std::cerr << std::endl; + bool ok = RsGenExchange::getMsgRelatedData(token, msgData); + + if (ok) + { + std::cerr << "p3Wire::getRelatedPulseData() is OK"; + std::cerr << std::endl; + GxsMsgRelatedDataMap::iterator mit = msgData.begin(); + + for(; mit != msgData.end(); ++mit) + { + std::vector& msgItems = mit->second; + std::vector::iterator vit = msgItems.begin(); + + for(; vit != msgItems.end(); ++vit) + { + RsGxsWirePulseItem* item = dynamic_cast(*vit); + + if(item) + { + RsWirePulse pulse = item->pulse; + pulse.mMeta = item->meta; + pulses.push_back(pulse); + delete item; + } + else + { + std::cerr << "Not a WirePulse Item, deleting!" << std::endl; + delete *vit; + } + } + } + } + else + { + std::cerr << "p3Wire::getRelatedPulseData() is NOT OK"; + std::cerr << std::endl; + } + + return ok; +} + bool p3Wire::createGroup(uint32_t &token, RsWireGroup &group) { @@ -215,7 +335,7 @@ bool p3Wire::createGroup(RsWireGroup &group) return createGroup(token, group) && waitToken(token) == RsTokenService::COMPLETE; } -bool p3Wire::updateGroup(const RsWireGroup &group) +bool p3Wire::updateGroup(const RsWireGroup & /*group*/) { // TODO return false; @@ -230,12 +350,16 @@ bool p3Wire::getGroups(const std::list groupIds, std::vector groupIds, std::vector &set_msgIds = ids[grpId]; + set_msgIds.insert(msgId); + + getTokenService()->requestMsgInfo( + token, RS_TOKREQ_ANSTYPE_DATA, opts, ids); + } + + // wait for pulse request to completed. + std::cerr << "p3Wire::fetchPulse() waiting for token"; + std::cerr << std::endl; + + int result = waitToken(token); + if (result != RsTokenService::COMPLETE) + { + std::cerr << "p3Wire::fetchPulse() token FAILED, result: " << result; + std::cerr << std::endl; + return false; + } + + // retrieve Pulse. + std::cerr << "p3Wire::fetchPulse() retrieving token"; + std::cerr << std::endl; + { + bool okay = true; + std::vector pulses; + if (getPulseData(token, pulses)) { + if (pulses.size() == 1) { + // save to output pulse. + pPulse = std::make_shared(pulses[0]); + std::cerr << "p3Wire::fetchPulse() retrieved token: " << *pPulse; + std::cerr << std::endl; + } else { + std::cerr << "p3Wire::fetchPulse() ERROR multiple pulses"; + std::cerr << std::endl; + okay = false; + } + } else { + std::cerr << "p3Wire::fetchPulse() ERROR failed to retrieve token"; + std::cerr << std::endl; + okay = false; + } + + if (!okay) { + std::cerr << "p3Wire::fetchPulse() tokenPulse ERROR"; + std::cerr << std::endl; + // TODO cancel other request. + return false; + } + } + return true; +} + +// New Interfaces. +// TODO: createOriginalPulse has not been tested. +bool p3Wire::createOriginalPulse(RsGxsGroupId grpId, std::string msg) +{ + // request Group. + std::list groupIds = { grpId }; + std::vector groups; + bool groupOkay = getGroups(groupIds, groups); + if (!groupOkay) { + std::cerr << "p3Wire::createOriginalPulse() getGroups failed"; + std::cerr << std::endl; + return false; + } + + if (groups.size() != 1) { + std::cerr << "p3Wire::createOriginalPulse() getGroups invalid size"; + std::cerr << std::endl; + return false; + } + + // ensure Group is suitable. + RsWireGroup group = groups[0]; + if ((group.mMeta.mGroupId != grpId) || + (!(group.mMeta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_PUBLISH))) + { + std::cerr << "p3Wire::createOriginalPulse() Group unsuitable"; + std::cerr << std::endl; + return false; + } + + // Create Msg. + RsWirePulse pulse; + + pulse.mMeta.mGroupId = group.mMeta.mGroupId; + pulse.mMeta.mAuthorId = group.mMeta.mAuthorId; + pulse.mMeta.mThreadId.clear(); + pulse.mMeta.mParentId.clear(); + pulse.mMeta.mOrigMsgId.clear(); + + pulse.mPulseType = WIRE_PULSE_TYPE_ORIGINAL; + pulse.mReplySentiment = WIRE_PULSE_SENTIMENT_NO_SENTIMENT; + pulse.mPulseText = msg; + + // all mRefs should empty. + + uint32_t token; + createPulse(token, pulse); + + int result = waitToken(token); + if (result != RsTokenService::COMPLETE) + { + std::cerr << "p3Wire::createOriginalPulse() Failed to create Pulse"; + std::cerr << std::endl; + return false; + } + + return true; +} + +// TODO: createReplyPulse has not been tested. +bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGroupId replyWith, uint32_t reply_type, uint32_t /*sentiment*/, std::string msg) +{ + // check reply_type. can only be ONE. + if (!((reply_type == WIRE_PULSE_TYPE_REPLY) || + (reply_type == WIRE_PULSE_TYPE_REPUBLISH) || + (reply_type == WIRE_PULSE_TYPE_LIKE))) + { + std::cerr << "p3Wire::createReplyPulse() reply_type is invalid"; + std::cerr << std::endl; + return false; + } + + // request both groups. + std::list groupIds = { grpId, replyWith }; + std::vector groups; + bool groupOkay = getGroups(groupIds, groups); + if (!groupOkay) { + std::cerr << "p3Wire::createReplyPulse() getGroups failed"; + std::cerr << std::endl; + return false; + } + + if (groups.size() != 2) { + std::cerr << "p3Wire::createReplyPulse() getGroups != 2"; + std::cerr << std::endl; + return false; + } + + // extract group info. + RsWireGroup replyToGroup; + RsWireGroup replyWithGroup; + + if (groups[0].mMeta.mGroupId == grpId) { + replyToGroup = groups[0]; + replyWithGroup = groups[1]; + } else { + replyToGroup = groups[1]; + replyWithGroup = groups[0]; + } + + if ((replyToGroup.mMeta.mGroupId != grpId) || + (replyToGroup.mMeta.mGroupId != replyWith)) + { + std::cerr << "p3Wire::createReplyPulse() groupid mismatch"; + std::cerr << std::endl; + return false; + } + + // ensure Group is suitable. + if ((!(replyToGroup.mMeta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED)) || + (!(replyWithGroup.mMeta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_PUBLISH))) + { + std::cerr << "p3Wire::createReplyPulse() Group unsuitable"; + std::cerr << std::endl; + return false; + } + + // ********************************************************** + RsWirePulseSPtr replyToPulse; + if (!fetchPulse(grpId, msgId, replyToPulse)) + { + std::cerr << "p3Wire::createReplyPulse() fetchPulse FAILED"; + std::cerr << std::endl; + return false; + } + + // create Reply Msg. + RsWirePulse responsePulse; + + responsePulse.mMeta.mGroupId = replyWithGroup.mMeta.mGroupId; + responsePulse.mMeta.mAuthorId = replyWithGroup.mMeta.mAuthorId; + responsePulse.mMeta.mThreadId.clear(); + responsePulse.mMeta.mParentId.clear(); + responsePulse.mMeta.mOrigMsgId.clear(); + + responsePulse.mPulseType = WIRE_PULSE_TYPE_RESPONSE | reply_type; + responsePulse.mReplySentiment = 0; // toPulseSentiment(ui.comboBox_sentiment->currentIndex()); + responsePulse.mPulseText = msg; // ui.textEdit_Pulse->toPlainText().toStdString(); + + // mRefs refer to parent post. + responsePulse.mRefGroupId = replyToPulse->mMeta.mGroupId; + responsePulse.mRefGroupName = replyToGroup.mMeta.mGroupName; + responsePulse.mRefOrigMsgId = replyToPulse->mMeta.mOrigMsgId; + responsePulse.mRefAuthorId = replyToPulse->mMeta.mAuthorId; + responsePulse.mRefPublishTs = replyToPulse->mMeta.mPublishTs; + responsePulse.mRefPulseText = replyToPulse->mPulseText; + + uint32_t token; + createPulse(token, responsePulse); + + // get MsgId. + + // update responsePulse. + // TODO. + + // create ReplyTo Ref Msg. + std::cerr << "PulseAddDialog::postRefPulse() create Reference!"; + std::cerr << std::endl; + + // Reference Pulse. posted on Parent's Group. + RsWirePulse refPulse; + + refPulse.mMeta.mGroupId = replyToPulse->mMeta.mGroupId; + refPulse.mMeta.mAuthorId = replyWithGroup.mMeta.mAuthorId; // own author Id. + refPulse.mMeta.mThreadId = replyToPulse->mMeta.mOrigMsgId; + refPulse.mMeta.mParentId = replyToPulse->mMeta.mOrigMsgId; + refPulse.mMeta.mOrigMsgId.clear(); + + refPulse.mPulseType = WIRE_PULSE_TYPE_REFERENCE | reply_type; + refPulse.mReplySentiment = 0; //toPulseSentiment(ui.comboBox_sentiment->currentIndex()); + + // Dont put parent PulseText into refPulse - it is available on Thread Msg. + // otherwise gives impression it is correctly setup Parent / Reply... + // when in fact the parent PublishTS, and AuthorId are wrong. + refPulse.mPulseText = ""; + + // refs refer back to own Post. + refPulse.mRefGroupId = replyWithGroup.mMeta.mGroupId; + refPulse.mRefGroupName = replyWithGroup.mMeta.mGroupName; + refPulse.mRefOrigMsgId = responsePulse.mMeta.mOrigMsgId; + refPulse.mRefAuthorId = replyWithGroup.mMeta.mAuthorId; + refPulse.mRefPublishTs = responsePulse.mMeta.mPublishTs; + refPulse.mRefPulseText = responsePulse.mPulseText; + + // uint32_t token; + rsWire->createPulse(token, refPulse); + + // publish Ref Msg. + return true; +} + + + // Blocking, request structures for display. +#if 0 +bool p3Wire::createReplyPulse(uint32_t &token, RsWirePulse &pulse) +{ + + return true; +} + +bool p3Wire::createRepublishPulse(uint32_t &token, RsWirePulse &pulse) +{ + + return true; +} + +bool p3Wire::createLikePulse(uint32_t &token, RsWirePulse &pulse) +{ + + return true; +} +#endif + + // WireGroup Details. +bool p3Wire::getWireGroup(const RsGxsGroupId &groupId, RsWireGroupSPtr &grp) +{ + std::set groupIds = { groupId }; + std::map groups; + if (!fetchGroupPtrs(groupIds, groups)) + { + std::cerr << "p3Wire::getWireGroup() failed to fetchGroupPtrs"; + std::cerr << std::endl; + return false; + } + + if (groups.size() != 1) + { + std::cerr << "p3Wire::getWireGroup() invalid group size"; + std::cerr << std::endl; + return false; + } + + grp = groups.begin()->second; + + // TODO Should fill in Counters of pulses/likes/republishes/replies + return true; +} + +bool compare_time(const RsWirePulseSPtr& first, const RsWirePulseSPtr &second) +{ + return first->mMeta.mPublishTs > second->mMeta.mPublishTs; +} + + // should this filter them in some way? + // date, or count would be more likely. +bool p3Wire::getPulsesForGroups(const std::list &groupIds, std::list &pulsePtrs) +{ + // request all the pulses (Top-Level Thread Msgs). + std::cerr << "p3Wire::getPulsesForGroups()"; + std::cerr << std::endl; + + uint32_t token; + { + RsTokReqOptions opts; + opts.mReqType = GXS_REQUEST_TYPE_MSG_DATA; + opts.mOptions = RS_TOKREQOPT_MSG_LATEST | RS_TOKREQOPT_MSG_THREAD; + + getTokenService()->requestMsgInfo( + token, RS_TOKREQ_ANSTYPE_DATA, opts, groupIds); + } + + // wait for pulse request to completed. + std::cerr << "p3Wire::getPulsesForGroups() waiting for token"; + std::cerr << std::endl; + + int result = waitToken(token); + if (result != RsTokenService::COMPLETE) + { + std::cerr << "p3Wire::getPulsesForGroups() token FAILED, result: " << result; + std::cerr << std::endl; + return false; + } + + // retrieve Pulses. + std::cerr << "p3Wire::getPulsesForGroups() retrieving token"; + std::cerr << std::endl; + if (!getPulsePtrData(token, pulsePtrs)) + { + std::cerr << "p3Wire::getPulsesForGroups() tokenPulse ERROR"; + std::cerr << std::endl; + return false; + } + + std::cerr << "p3Wire::getPulsesForGroups() size = " << pulsePtrs.size(); + std::cerr << " sorting and trimming"; + std::cerr << std::endl; + + // sort and filter list. + pulsePtrs.sort(compare_time); + + // trim to N max. + uint32_t N = 10; + if (pulsePtrs.size() > N) { + pulsePtrs.resize(N); + } + + // set to collect groupIds... + // this is only important if updatePulse Level > 1. + // but this is more general. + std::set allGroupIds; + + // for each fill in details. + std::list::iterator it; + for (it = pulsePtrs.begin(); it != pulsePtrs.end(); it++) + { + if (!updatePulse(*it, 1)) + { + std::cerr << "p3Wire::getPulsesForGroups() Failed to updatePulse"; + std::cerr << std::endl; + return false; + } + + if (!extractGroupIds(*it, allGroupIds)) + { + std::cerr << "p3Wire::getPulsesForGroups() failed to extractGroupIds"; + std::cerr << std::endl; + return false; + } + } + + // fetch GroupPtrs for allGroupIds. + std::map groups; + if (!fetchGroupPtrs(allGroupIds, groups)) + { + std::cerr << "p3Wire::getPulsesForGroups() failed to fetchGroupPtrs"; + std::cerr << std::endl; + return false; + } + + // update GroupPtrs for all pulsePtrs. + for (it = pulsePtrs.begin(); it != pulsePtrs.end(); it++) + { + if (!updateGroupPtrs(*it, groups)) + { + std::cerr << "p3Wire::getPulsesForGroups() failed to updateGroupPtrs"; + std::cerr << std::endl; + return false; + } + } + + return true; +} + + +bool p3Wire::getPulseFocus(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId, int /* type */, RsWirePulseSPtr &pPulse) +{ + std::cerr << "p3Wire::getPulseFocus("; + std::cerr << "grpId: " << groupId << " msgId: " << msgId; + std::cerr << " )"; + std::cerr << std::endl; + + if (!fetchPulse(groupId, msgId, pPulse)) + { + std::cerr << "p3Wire::getPulseFocus() failed to fetch Pulse"; + std::cerr << std::endl; + return false; + } + + if (!updatePulse(pPulse, 3)) + { + std::cerr << "p3Wire::getPulseFocus() failed to update Pulse"; + std::cerr << std::endl; + return false; + } + + /* final stage is to fetch associated groups and reference them from pulses + * this could be done as part of updates, but probably more efficient to do once + * -- Future improvement. + * -- Fetch RefGroups as well, these are not necessarily available, + * so need to add dataRequest FlAG to return okay even if not all groups there. + */ + + std::set groupIds; + if (!extractGroupIds(pPulse, groupIds)) + { + std::cerr << "p3Wire::getPulseFocus() failed to extractGroupIds"; + std::cerr << std::endl; + return false; + } + + std::map groups; + if (!fetchGroupPtrs(groupIds, groups)) + { + std::cerr << "p3Wire::getPulseFocus() failed to fetchGroupPtrs"; + std::cerr << std::endl; + return false; + } + + if (!updateGroupPtrs(pPulse, groups)) + { + std::cerr << "p3Wire::getPulseFocus() failed to updateGroupPtrs"; + std::cerr << std::endl; + return false; + } + + return true; +} + + +// function to update a pulse with the (Ref) child with actual data. +bool p3Wire::updatePulse(RsWirePulseSPtr pPulse, int levels) +{ + bool okay = true; + + // setup logging label. + std::ostringstream out; + out << "pulse[" << (void *) pPulse.get() << "], " << levels; + std::string label = out.str(); + + std::cerr << "p3Wire::updatePulse(" << label << ") starting"; + std::cerr << std::endl; + + // is pPulse is a REF, then request the original. + // if no original available the done. + if (pPulse->mPulseType & WIRE_PULSE_TYPE_REFERENCE) + { + RsWirePulseSPtr fullPulse; + std::cerr << "p3Wire::updatePulse(" << label << ") fetching REF ("; + std::cerr << "grpId: " << pPulse->mRefGroupId << " msgId: " << pPulse->mRefOrigMsgId; + std::cerr << " )"; + std::cerr << std::endl; + if (!fetchPulse(pPulse->mRefGroupId, pPulse->mRefOrigMsgId, fullPulse)) + { + std::cerr << "p3Wire::updatePulse(" << label << ") failed to fetch REF"; + std::cerr << std::endl; + return false; + } + std::cerr << "p3Wire::updatePulse(" << label << ") replacing REF"; + std::cerr << std::endl; + + *pPulse = *fullPulse; + } + + // Request children: (Likes / Retweets / Replies) + std::cerr << "p3Wire::updatePulse(" << label << ") requesting children"; + std::cerr << std::endl; + + uint32_t token; + { + RsTokReqOptions opts; + opts.mReqType = GXS_REQUEST_TYPE_MSG_RELATED_DATA; + // OR opts.mOptions = RS_TOKREQOPT_MSG_LATEST | RS_TOKREQOPT_MSG_PARENT; + opts.mOptions = RS_TOKREQOPT_MSG_LATEST | RS_TOKREQOPT_MSG_THREAD; + + std::vector msgIds = { + std::make_pair(pPulse->mMeta.mGroupId, pPulse->mMeta.mOrigMsgId) + }; + + getTokenService()->requestMsgRelatedInfo( + token, RS_TOKREQ_ANSTYPE_DATA, opts, msgIds); + } + + // wait for request to complete + std::cerr << "p3Wire::updatePulse(" << label << ") waiting for token"; + std::cerr << std::endl; + + int result = waitToken(token); + if (result != RsTokenService::COMPLETE) + { + std::cerr << "p3Wire::updatePulse(" << label << ") token FAILED, result: " << result; + std::cerr << std::endl; + return false; + } + + /* load children */ + okay = updatePulseChildren(pPulse, token); + if (!okay) + { + std::cerr << "p3Wire::updatePulse(" << label << ") FAILED to update Children"; + std::cerr << std::endl; + return false; + } + + /* if down to last level, no need to updateChildren */ + if (levels <= 1) + { + std::cerr << "p3Wire::updatePulse(" << label << ") Level <= 1 finished"; + std::cerr << std::endl; + return okay; + } + + /* recursively update children */ + std::cerr << "p3Wire::updatePulse(" << label << ") updating children recursively"; + std::cerr << std::endl; + std::list::iterator it; + for (it = pPulse->mReplies.begin(); it != pPulse->mReplies.end(); it++) + { + bool childOkay = updatePulse(*it, levels - 1); + if (!childOkay) { + std::cerr << "p3Wire::updatePulse(" << label << ") update children (reply) failed"; + std::cerr << std::endl; + } + } + + for (it = pPulse->mRepublishes.begin(); it != pPulse->mRepublishes.end(); it++) + { + bool childOkay = updatePulse(*it, levels - 1); + if (!childOkay) { + std::cerr << "p3Wire::updatePulse(" << label << ") update children (repub) failed"; + std::cerr << std::endl; + } + } + + return okay; +} + + +// function to update the (Ref) child with actual data. +bool p3Wire::updatePulseChildren(RsWirePulseSPtr pParent, uint32_t token) +{ + { + bool okay = true; + std::vector pulses; + if (getRelatedPulseData(token, pulses)) { + std::vector::iterator it; + for (it = pulses.begin(); it != pulses.end(); it++) + { + std::cerr << "p3Wire::updatePulseChildren() retrieved child: " << *it; + std::cerr << std::endl; + + RsWirePulseSPtr pPulse = std::make_shared(*it); + // switch on type. + if (it->mPulseType & WIRE_PULSE_TYPE_LIKE) { + pParent->mLikes.push_back(pPulse); + std::cerr << "p3Wire::updatePulseChildren() adding Like"; + std::cerr << std::endl; + } + else if (it->mPulseType & WIRE_PULSE_TYPE_REPUBLISH) { + pParent->mRepublishes.push_back(pPulse); + std::cerr << "p3Wire::updatePulseChildren() adding Republish"; + std::cerr << std::endl; + } + else if (it->mPulseType & WIRE_PULSE_TYPE_REPLY) { + pParent->mReplies.push_back(pPulse); + std::cerr << "p3Wire::updatePulseChildren() adding Reply"; + std::cerr << std::endl; + } + else { + std::cerr << "p3Wire::updatePulseChildren() unknown child type: " << it->mPulseType; + std::cerr << std::endl; + } + } + } else { + std::cerr << "p3Wire::updatePulseChildren() ERROR failed to retrieve token"; + std::cerr << std::endl; + okay = false; + } + + if (!okay) { + std::cerr << "p3Wire::updatePulseChildren() token ERROR"; + std::cerr << std::endl; + } + return okay; + } +} + + +// this function doesn't depend on p3Wire, could make static. +bool p3Wire::extractGroupIds(RsWirePulseConstSPtr pPulse, std::set &groupIds) +{ + std::cerr << "p3Wire::extractGroupIds()"; + std::cerr << std::endl; + + if (!pPulse) { + std::cerr << "p3Wire::extractGroupIds() INVALID pPulse"; + std::cerr << std::endl; + return false; + } + + /* do this recursively */ + if (pPulse->mPulseType & WIRE_PULSE_TYPE_REFERENCE) { + /* skipping */ + std::cerr << "p3Wire::extractGroupIds() skipping ref type"; + std::cerr << std::endl; + return true; + } + + // install own groupId. + groupIds.insert(pPulse->mMeta.mGroupId); + + /* iterate through children, recursively */ + std::list::const_iterator it; + for (it = pPulse->mReplies.begin(); it != pPulse->mReplies.end(); it++) + { + bool childOkay = extractGroupIds(*it, groupIds); + if (!childOkay) { + std::cerr << "p3Wire::extractGroupIds() update children (reply) failed"; + std::cerr << std::endl; + return false; + } + } + + for (it = pPulse->mRepublishes.begin(); it != pPulse->mRepublishes.end(); it++) + { + bool childOkay = extractGroupIds(*it, groupIds); + if (!childOkay) { + std::cerr << "p3Wire::extractGroupIds() update children (repub) failed"; + std::cerr << std::endl; + return false; + } + } + + // not bothering with LIKEs at the moment. TODO. + + return true; +} + +bool p3Wire::updateGroupPtrs(RsWirePulseSPtr pPulse, const std::map &groups) +{ + /* don't bother with Refs... though we could */ + /* do this recursively */ + if (pPulse->mPulseType & WIRE_PULSE_TYPE_REFERENCE) { + /* skipping */ + return true; + } + + std::map::const_iterator git; + git = groups.find(pPulse->mMeta.mGroupId); + if (git == groups.end()) { + // error + return false; + } + + pPulse->mGroupPtr = git->second; + + /* recursively apply to children */ + std::list::iterator it; + for (it = pPulse->mReplies.begin(); it != pPulse->mReplies.end(); it++) + { + bool childOkay = updateGroupPtrs(*it, groups); + if (!childOkay) { + std::cerr << "p3Wire::updateGroupPtrs() update children (reply) failed"; + std::cerr << std::endl; + return false; + } + } + + for (it = pPulse->mRepublishes.begin(); it != pPulse->mRepublishes.end(); it++) + { + bool childOkay = updateGroupPtrs(*it, groups); + if (!childOkay) { + std::cerr << "p3Wire::updateGroupPtrs() update children (repub) failed"; + std::cerr << std::endl; + return false; + } + } + + // not bothering with LIKEs at the moment. TODO. + return true; +} + +bool p3Wire::fetchGroupPtrs(const std::set &groupIds, + std::map &groups) +{ + std::cerr << "p3Wire::fetchGroupPtrs()"; + std::cerr << std::endl; + std::list groupIdList(groupIds.begin(), groupIds.end()); + + uint32_t token; + RsTokReqOptions opts; + opts.mReqType = GXS_REQUEST_TYPE_GROUP_DATA; + + if (!requestGroupInfo(token, opts, groupIdList) || waitToken(token) != RsTokenService::COMPLETE ) + { + std::cerr << "p3Wire::fetchGroupPtrs() failed to fetch groups"; + std::cerr << std::endl; + return false; + } + return getGroupPtrData(token, groups); +} + + diff --git a/libretroshare/src/services/p3wire.h b/libretroshare/src/services/p3wire.h index 4ebb0b407..cf0d7b080 100644 --- a/libretroshare/src/services/p3wire.h +++ b/libretroshare/src/services/p3wire.h @@ -61,7 +61,51 @@ public: virtual bool updateGroup(const RsWireGroup &group) override; virtual bool getGroups(const std::list grpIds, std::vector &groups) override; + // New Interfaces. + // Blocking, request structures for display. + virtual bool createOriginalPulse(RsGxsGroupId grpId, std::string msg) override; + virtual bool createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, + RsGxsGroupId replyWith, uint32_t reply_type, + uint32_t sentiment, std::string msg) override; + +#if 0 + virtual bool createReplyPulse(uint32_t &token, RsWirePulse &pulse) override; + virtual bool createRepublishPulse(uint32_t &token, RsWirePulse &pulse) override; + virtual bool createLikePulse(uint32_t &token, RsWirePulse &pulse) override; +#endif + + virtual bool getWireGroup(const RsGxsGroupId &groupId, RsWireGroupSPtr &grp) override; + + virtual bool getPulsesForGroups(const std::list &groupIds, std::list &pulsePtrs) override; + + virtual bool getPulseFocus(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId, int type, RsWirePulseSPtr &pPulse) override; + private: + // Internal Service Data. + // They should eventually all be here. + bool getRelatedPulseData(const uint32_t &token, std::vector &pulses); + bool getGroupPtrData(const uint32_t &token, + std::map &groups); + bool getPulsePtrData(const uint32_t &token, std::list &pulses); + + // util functions fetching data. + bool fetchPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsWirePulseSPtr &pPulse); + bool updatePulse(RsWirePulseSPtr pPulse, int levels); + bool updatePulseChildren(RsWirePulseSPtr pParent, uint32_t token); + + // update GroupPtrs + bool extractGroupIds(RsWirePulseConstSPtr pPulse, std::set &groupIds); + + bool updateGroupPtrs(RsWirePulseSPtr pPulse, + const std::map &groups); + + bool fetchGroupPtrs(const std::set &groupIds, + std::map &groups); + + + + + virtual void generateDummyData(); std::string genRandomId(); From 11ce959b2fb74f4ea4f791769b32a2dfab6f720b Mon Sep 17 00:00:00 2001 From: drbob Date: Fri, 15 May 2020 22:36:50 +1000 Subject: [PATCH 02/95] Improvements to UI to make behaviour more similar to twitter. Add new UI elements. Can show PulseFocus or GroupFocus at the moment. WIP, Much more work to get this finalised. --- .../src/gui/TheWire/PulseAddDialog.cpp | 6 +- .../src/gui/TheWire/PulseDetails.cpp | 15 +- retroshare-gui/src/gui/TheWire/PulseItem.cpp | 2 +- retroshare-gui/src/gui/TheWire/PulseItem.h | 1 + .../src/gui/TheWire/PulseMessage.cpp | 70 ++ retroshare-gui/src/gui/TheWire/PulseMessage.h | 39 ++ .../src/gui/TheWire/PulseMessage.ui | 88 +++ retroshare-gui/src/gui/TheWire/PulseReply.cpp | 142 ++++ retroshare-gui/src/gui/TheWire/PulseReply.h | 65 ++ retroshare-gui/src/gui/TheWire/PulseReply.ui | 600 ++++++++++++++++ .../src/gui/TheWire/PulseReplySeperator.cpp | 32 + .../src/gui/TheWire/PulseReplySeperator.h | 35 + .../src/gui/TheWire/PulseReplySeperator.ui | 102 +++ .../src/gui/TheWire/PulseTopLevel.cpp | 132 ++++ .../src/gui/TheWire/PulseTopLevel.h | 65 ++ .../src/gui/TheWire/PulseTopLevel.ui | 663 ++++++++++++++++++ .../src/gui/TheWire/PulseViewGroup.cpp | 47 ++ .../src/gui/TheWire/PulseViewGroup.h | 43 ++ .../src/gui/TheWire/PulseViewGroup.ui | 542 ++++++++++++++ .../src/gui/TheWire/PulseViewItem.cpp | 364 ++++++++++ .../src/gui/TheWire/PulseViewItem.h | 142 ++++ retroshare-gui/src/gui/TheWire/WireDialog.cpp | 321 ++++++++- retroshare-gui/src/gui/TheWire/WireDialog.h | 44 +- retroshare-gui/src/gui/TheWire/WireDialog.ui | 290 +++++--- .../src/gui/TheWire/WireGroupDialog.cpp | 15 +- retroshare-gui/src/retroshare-gui.pro | 17 + 26 files changed, 3747 insertions(+), 135 deletions(-) create mode 100644 retroshare-gui/src/gui/TheWire/PulseMessage.cpp create mode 100644 retroshare-gui/src/gui/TheWire/PulseMessage.h create mode 100644 retroshare-gui/src/gui/TheWire/PulseMessage.ui create mode 100644 retroshare-gui/src/gui/TheWire/PulseReply.cpp create mode 100644 retroshare-gui/src/gui/TheWire/PulseReply.h create mode 100644 retroshare-gui/src/gui/TheWire/PulseReply.ui create mode 100644 retroshare-gui/src/gui/TheWire/PulseReplySeperator.cpp create mode 100644 retroshare-gui/src/gui/TheWire/PulseReplySeperator.h create mode 100644 retroshare-gui/src/gui/TheWire/PulseReplySeperator.ui create mode 100644 retroshare-gui/src/gui/TheWire/PulseTopLevel.cpp create mode 100644 retroshare-gui/src/gui/TheWire/PulseTopLevel.h create mode 100644 retroshare-gui/src/gui/TheWire/PulseTopLevel.ui create mode 100644 retroshare-gui/src/gui/TheWire/PulseViewGroup.cpp create mode 100644 retroshare-gui/src/gui/TheWire/PulseViewGroup.h create mode 100644 retroshare-gui/src/gui/TheWire/PulseViewGroup.ui create mode 100644 retroshare-gui/src/gui/TheWire/PulseViewItem.cpp create mode 100644 retroshare-gui/src/gui/TheWire/PulseViewItem.h diff --git a/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp b/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp index 9a493b7d0..27bb7d185 100644 --- a/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp @@ -172,7 +172,7 @@ void PulseAddDialog::postOriginalPulse() pulse.mMeta.mParentId.clear(); pulse.mMeta.mOrigMsgId.clear(); - pulse.mPulseType = WIRE_PULSE_TYPE_ORIGINAL_MSG; + pulse.mPulseType = WIRE_PULSE_TYPE_ORIGINAL; pulse.mReplySentiment = WIRE_PULSE_SENTIMENT_NO_SENTIMENT; pulse.mPulseText = ui.textEdit_Pulse->toPlainText().toStdString(); // all mRefs should empty. @@ -219,7 +219,7 @@ void PulseAddDialog::postReplyPulse() pulse.mMeta.mParentId.clear(); pulse.mMeta.mOrigMsgId.clear(); - pulse.mPulseType = WIRE_PULSE_TYPE_REPLY_MSG; + pulse.mPulseType = WIRE_PULSE_TYPE_RESPONSE | WIRE_PULSE_TYPE_REPLY; pulse.mReplySentiment = toPulseSentiment(ui.comboBox_sentiment->currentIndex()); pulse.mPulseText = ui.textEdit_Pulse->toPlainText().toStdString(); @@ -254,7 +254,7 @@ void PulseAddDialog::postRefPulse(RsWirePulse &pulse) refPulse.mMeta.mParentId = mReplyToPulse.mMeta.mOrigMsgId; refPulse.mMeta.mOrigMsgId.clear(); - refPulse.mPulseType = WIRE_PULSE_TYPE_REPLY_REFERENCE; + refPulse.mPulseType = WIRE_PULSE_TYPE_REFERENCE | WIRE_PULSE_TYPE_REPLY; refPulse.mReplySentiment = toPulseSentiment(ui.comboBox_sentiment->currentIndex()); // Dont put parent PulseText into refPulse - it is available on Thread Msg. diff --git a/retroshare-gui/src/gui/TheWire/PulseDetails.cpp b/retroshare-gui/src/gui/TheWire/PulseDetails.cpp index 5cdddad70..eb899c25b 100644 --- a/retroshare-gui/src/gui/TheWire/PulseDetails.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseDetails.cpp @@ -93,7 +93,7 @@ void PulseDetails::setup() frame_replies->setVisible(false); mHasReplies = false; - toolButton_follow->setEnabled(false); // TODO + // TMP toolButton_follow->setEnabled(false); // TODO toolButton_rate->setEnabled(false); // TODO toolButton_reply->setEnabled(mActions != NULL); } @@ -153,6 +153,7 @@ void PulseDetails::toggle() } } +const int SUMMARY_MAX_LEN = 50; QString PulseDetails::getSummary() { std::string summary = mPulse.mPulseText; @@ -178,6 +179,13 @@ QString PulseDetails::getSummary() in_whitespace = false; } } + + if (SUMMARY_MAX_LEN < len) + { + summary = summary.substr(0,SUMMARY_MAX_LEN-3); + summary += "..."; + } + std::cerr << "PulseDetails::getSummary() summary: " << summary; std::cerr << std::endl; @@ -189,7 +197,10 @@ void PulseDetails::follow() // follow group. if (mActions) { - mActions->follow(mPulse.mMeta.mGroupId); + // tmp hack for developing. + mActions->focus(mPulse.mMeta.mGroupId, mPulse.mMeta.mOrigMsgId); + + //mActions->follow(mPulse.mMeta.mGroupId); } } diff --git a/retroshare-gui/src/gui/TheWire/PulseItem.cpp b/retroshare-gui/src/gui/TheWire/PulseItem.cpp index 1e73b3364..a2dac8bc2 100644 --- a/retroshare-gui/src/gui/TheWire/PulseItem.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseItem.cpp @@ -52,7 +52,7 @@ PulseItem::PulseItem(PulseHolder *holder, RsWirePulse *pulse_ptr, RsWireGroup *g QWidget *pulse_widget = widget_parent; // default msg goes into widget_parent. /* if it is a reply */ - if (mPulse.mPulseType & WIRE_PULSE_TYPE_REPLY_MSG) { + if (mPulse.mPulseType & WIRE_PULSE_TYPE_RESPONSE) { std::cerr << "Installing Reply Msg"; std::cerr << std::endl; diff --git a/retroshare-gui/src/gui/TheWire/PulseItem.h b/retroshare-gui/src/gui/TheWire/PulseItem.h index 0e7395e0e..a0bbc9b77 100644 --- a/retroshare-gui/src/gui/TheWire/PulseItem.h +++ b/retroshare-gui/src/gui/TheWire/PulseItem.h @@ -35,6 +35,7 @@ public: virtual void notifyPulseSelection(PulseItem *item) = 0; // Actions. + virtual void focus(RsGxsGroupId &groupId, RsGxsMessageId &msgId) = 0; virtual void follow(RsGxsGroupId &groupId) = 0; virtual void rate(RsGxsId &authorId) = 0; virtual void reply(RsWirePulse &pulse, std::string &groupName) = 0; diff --git a/retroshare-gui/src/gui/TheWire/PulseMessage.cpp b/retroshare-gui/src/gui/TheWire/PulseMessage.cpp new file mode 100644 index 000000000..c7d884d9c --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseMessage.cpp @@ -0,0 +1,70 @@ +/******************************************************************************* + * gui/TheWire/PulseMessage.cpp * + * * + * Copyright (c) 2020-2020 Robert Fernie * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#include "PulseMessage.h" + +/** Constructor */ + +PulseMessage::PulseMessage(QWidget *parent) +:QWidget(parent) +{ + setupUi(this); +} + +void PulseMessage::setup(RsWirePulseSPtr pulse) +{ + if (!pulse) { + return; + } + + setMessage(QString::fromStdString(pulse->mPulseText)); + + // setup images. + if (!pulse->mImage1.empty()) { + // install image. + } else { + // leave this visible for a bit. + // label_image1->setVisible(false); + } + + if (!pulse->mImage2.empty()) { + // install image. + } else { + label_image2->setVisible(false); + } + + if (!pulse->mImage3.empty()) { + // install image. + } else { + label_image3->setVisible(false); + } + + if (!pulse->mImage4.empty()) { + // install image. + } else { + label_image4->setVisible(false); + } +} + +void PulseMessage::setMessage(QString msg) +{ + textBrowser->setPlainText(msg); +} + diff --git a/retroshare-gui/src/gui/TheWire/PulseMessage.h b/retroshare-gui/src/gui/TheWire/PulseMessage.h new file mode 100644 index 000000000..b39eedc2c --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseMessage.h @@ -0,0 +1,39 @@ +/******************************************************************************* + * gui/TheWire/PulseMessage.h * + * * + * Copyright (c) 2020-2020 Robert Fernie * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#ifndef MRK_PULSE_MSG_H +#define MRK_PULSE_MSG_H + +#include "ui_PulseMessage.h" + +#include + +class PulseMessage : public QWidget, private Ui::PulseMessage +{ + Q_OBJECT + +public: + PulseMessage(QWidget *parent); + + void setup(RsWirePulseSPtr pulse); + void setMessage(QString msg); +}; + +#endif diff --git a/retroshare-gui/src/gui/TheWire/PulseMessage.ui b/retroshare-gui/src/gui/TheWire/PulseMessage.ui new file mode 100644 index 000000000..17d88eec3 --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseMessage.ui @@ -0,0 +1,88 @@ + + + PulseMessage + + + + 0 + 0 + 553 + 281 + + + + Form + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + 80 + 80 + + + + Image + + + + + + + + 80 + 80 + + + + Image + + + + + + + + 80 + 80 + + + + Image + + + + + + + + 80 + 80 + + + + Image + + + + + + + + + + + diff --git a/retroshare-gui/src/gui/TheWire/PulseReply.cpp b/retroshare-gui/src/gui/TheWire/PulseReply.cpp new file mode 100644 index 000000000..3f3a11719 --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseReply.cpp @@ -0,0 +1,142 @@ +/******************************************************************************* + * gui/TheWire/PulseReply.cpp * + * * + * Copyright (c) 2020-2020 Robert Fernie * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#include +#include +#include +#include + +#include "PulseReply.h" + +#include +#include + +/** Constructor */ + +PulseReply::PulseReply(PulseViewHolder *holder, RsWirePulseSPtr pulse) +:PulseDataItem(holder, pulse) +{ + setupUi(this); + setAttribute ( Qt::WA_DeleteOnClose, true ); + + setup(); + + if (mPulse) { + showPulse(); + } + + widget_prefix->setVisible(false); +} + +void PulseReply::setup() +{ + // connect(pushButton_tmpViewGroup, SIGNAL(clicked()), this, SLOT(actionViewGroup())); + // connect(pushButton_tmpViewParent, SIGNAL(clicked()), this, SLOT(actionViewParent())); + + connect(toolButton_follow, SIGNAL(clicked()), this, SLOT(actionFollow())); + // connect(toolButton_rate, SIGNAL(clicked()), this, SLOT(rate())); + + connect(toolButton_reply, SIGNAL(clicked()), this, SLOT(actionReply())); + connect(toolButton_republish, SIGNAL(clicked()), this, SLOT(actionRepublish())); + connect(toolButton_like, SIGNAL(clicked()), this, SLOT(actionLike())); + connect(toolButton_view, SIGNAL(clicked()), this, SLOT(actionViewPulse())); +} + +void PulseReply::showReplyLine(bool enable) +{ + line_replyLine->setVisible(enable); +} + +// PulseDataInterface =========== + // Group +void PulseReply::setHeadshot(const QPixmap &pixmap) +{ + label_headshot->setPixmap(pixmap); +} + +void PulseReply::setGroupNameString(QString name) +{ + label_groupName->setText("@" + name); +} + +void PulseReply::setAuthorString(QString name) +{ + label_authorName->setText(BoldString(name)); +} + + // Msg +void PulseReply::setRefMessage(QString msg, uint32_t image_count) +{ + widget_message->setMessage(msg); + //, image_count); +} + +void PulseReply::setMessage(RsWirePulseSPtr pulse) +{ + widget_message->setup(pulse); +} + +void PulseReply::setDateString(QString date) +{ + label_date->setText(date); +} + + // Refs +void PulseReply::setLikesString(QString likes) +{ + label_likes->setText(likes); +} + +void PulseReply::setRepublishesString(QString repub) +{ + label_republishes->setText(repub); +} + +void PulseReply::setRepliesString(QString reply) +{ + label_replies->setText(reply); +} + +void PulseReply::showResponseStats(bool enable) +{ + widget_actions->setVisible(enable); + widget_follow->setVisible(!enable); +} + +void PulseReply::setReferenceString(QString ref) +{ + if (ref.size() == 0) + { + // appear to have duplicated here.... + // widget_prefix->setVisible(false); + widget_reply_header->setVisible(false); + } + else + { + label_reference->setText(ref); + } +} +// PulseDataInterface =========== + +void PulseReply::mousePressEvent(QMouseEvent *event) +{ +} + + diff --git a/retroshare-gui/src/gui/TheWire/PulseReply.h b/retroshare-gui/src/gui/TheWire/PulseReply.h new file mode 100644 index 000000000..da3c0337b --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseReply.h @@ -0,0 +1,65 @@ +/******************************************************************************* + * gui/TheWire/PulseReply.h * + * * + * Copyright (c) 2020-2020 Robert Fernie * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#ifndef MRK_PULSE_REPLY_H +#define MRK_PULSE_REPLY_H + +#include "ui_PulseReply.h" +#include "PulseViewItem.h" + +#include + +class PulseReply : public PulseDataItem, private Ui::PulseReply +{ + Q_OBJECT + +public: + PulseReply(PulseViewHolder *holder, RsWirePulseSPtr pulse); + + void showReplyLine(bool enable); + +protected: + void setup(); + +// PulseDataInterface =========== + // Group + virtual void setHeadshot(const QPixmap &pixmap) override; + virtual void setGroupNameString(QString name) override; + virtual void setAuthorString(QString name) override; + + // Msg + virtual void setRefMessage(QString msg, uint32_t image_count) override; + virtual void setMessage(RsWirePulseSPtr pulse) override; + virtual void setDateString(QString date) override; + + // Refs + virtual void setLikesString(QString likes) override; + virtual void setRepublishesString(QString repub) override; + virtual void setRepliesString(QString reply) override; + + // + virtual void setReferenceString(QString ref) override; + virtual void showResponseStats(bool enable) override; +// PulseDataInterface =========== + + void mousePressEvent(QMouseEvent *event); +}; + +#endif diff --git a/retroshare-gui/src/gui/TheWire/PulseReply.ui b/retroshare-gui/src/gui/TheWire/PulseReply.ui new file mode 100644 index 000000000..67bb24484 --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseReply.ui @@ -0,0 +1,600 @@ + + + PulseReply + + + + 0 + 0 + 579 + 478 + + + + + 0 + 0 + + + + + 9 + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + QFrame#frame{border: 2px solid #CCCCCC; +background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #EEEEEE, stop: 1 #CCCCCC); +border-radius: 10px} + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 21 + 18 + + + + + + + + + 0 + 0 + + + + icn + + + + + + + retweeted + + + + + + + Qt::Horizontal + + + + 222 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + RPL + + + + + + + 1 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + RET + + + + + + + 1 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + LIK + + + + + + + 1 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + LNK + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + 1 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + + + Qt::Horizontal + + + + 104 + 20 + + + + + + + + FOLLOW + + + + + + + for response statistics + + + + + + + Qt::Horizontal + + + + 104 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + + + <html><head/><body><p><span style=" font-weight:600;">Sidler</span></p></body></html> + + + + + + + <html><head/><body><p><span style=" color:#555753;">@sidler_here</span></p></body></html> + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 19 + + + + + + + + <html><head/><body><p><span style=" color:#2e3436;">· Apr 13 ·</span></p></body></html> + + + + + + + Qt::Horizontal + + + + 64 + 18 + + + + + + + + + + + + + + 0 + 0 + + + + + 50 + 50 + + + + <html><head/><body><p>Head</p><p>Shot</p></body></html> + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 5 + 20 + + + + + + + + Qt::Vertical + + + + + + + + 0 + 0 + + + + + 1 + 0 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 5 + 20 + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + + + <html><head/><body><p><span style=" color:#555753;">Replying to @sidler</span></p></body></html> + + + + + + + Qt::Horizontal + + + + 215 + 18 + + + + + + + + + + + + + + + + + + PulseMessage + QWidget +
gui/TheWire/PulseMessage.h
+ 1 +
+
+ + + + +
diff --git a/retroshare-gui/src/gui/TheWire/PulseReplySeperator.cpp b/retroshare-gui/src/gui/TheWire/PulseReplySeperator.cpp new file mode 100644 index 000000000..e9bf0d3e9 --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseReplySeperator.cpp @@ -0,0 +1,32 @@ +/******************************************************************************* + * gui/TheWire/PulseReplySeperator.cpp * + * * + * Copyright (c) 2020-2020 Robert Fernie * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#include "PulseReplySeperator.h" + +/** Constructor */ + +PulseReplySeperator::PulseReplySeperator() +:PulseViewItem(NULL) +{ + setupUi(this); + setAttribute ( Qt::WA_DeleteOnClose, true ); +} + + diff --git a/retroshare-gui/src/gui/TheWire/PulseReplySeperator.h b/retroshare-gui/src/gui/TheWire/PulseReplySeperator.h new file mode 100644 index 000000000..08b236a0c --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseReplySeperator.h @@ -0,0 +1,35 @@ +/******************************************************************************* + * gui/TheWire/PulseReplySeperator.h * + * * + * Copyright (c) 2020-2020 Robert Fernie * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#ifndef MRK_PULSE_REPLY_SEPERATOR_H +#define MRK_PULSE_REPLY_SEPERATOR_H + +#include "ui_PulseReplySeperator.h" +#include "PulseViewItem.h" + +class PulseReplySeperator : public PulseViewItem, private Ui::PulseReplySeperator +{ + Q_OBJECT + +public: + PulseReplySeperator(); +}; + +#endif diff --git a/retroshare-gui/src/gui/TheWire/PulseReplySeperator.ui b/retroshare-gui/src/gui/TheWire/PulseReplySeperator.ui new file mode 100644 index 000000000..4a605a219 --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseReplySeperator.ui @@ -0,0 +1,102 @@ + + + PulseReplySeperator + + + + 0 + 0 + 781 + 57 + + + + + 0 + 0 + + + + + 9 + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + QFrame#frame{border: 2px solid #CCCCCC; +background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #EEEEEE, stop: 1 #CCCCCC); +border-radius: 10px} + + + QFrame::StyledPanel + + + QFrame::Raised + + + 100 + + + + + + Qt::Vertical + + + + 20 + 3 + + + + + + + + + 0 + 0 + + + + + 0 + 5 + + + + 100 + + + Qt::Horizontal + + + + + + + + + + + + + diff --git a/retroshare-gui/src/gui/TheWire/PulseTopLevel.cpp b/retroshare-gui/src/gui/TheWire/PulseTopLevel.cpp new file mode 100644 index 000000000..a6ceb4a27 --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseTopLevel.cpp @@ -0,0 +1,132 @@ +/******************************************************************************* + * gui/TheWire/PulseItem.cpp * + * * + * Copyright (c) 2020-2020 Robert Fernie * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#include +#include +#include +#include + +#include "PulseTopLevel.h" + +#include +#include + +/** Constructor */ + +PulseTopLevel::PulseTopLevel(PulseViewHolder *holder, RsWirePulseSPtr pulse) +:PulseDataItem(holder, pulse) +{ + setupUi(this); + setAttribute ( Qt::WA_DeleteOnClose, true ); + setup(); + + if (mPulse) { + showPulse(); + } + +} + +void PulseTopLevel::setup() +{ + connect(pushButton_tmpViewGroup, SIGNAL(clicked()), this, SLOT(actionViewGroup())); + connect(pushButton_tmpViewParent, SIGNAL(clicked()), this, SLOT(actionViewParent())); + + // connect(toolButton_follow, SIGNAL(clicked()), this, SLOT(follow())); + // connect(toolButton_rate, SIGNAL(clicked()), this, SLOT(rate())); + + connect(toolButton_reply, SIGNAL(clicked()), this, SLOT(actionReply())); + connect(toolButton_republish, SIGNAL(clicked()), this, SLOT(actionRepublish())); + connect(toolButton_like, SIGNAL(clicked()), this, SLOT(actionLike())); + connect(toolButton_view, SIGNAL(clicked()), this, SLOT(actionViewPulse())); +} + +void PulseTopLevel::setRefMessage(QString msg, uint32_t image_count) +{ + // This should never happen. + //widget_message->setRefMessage(msg, image_count); +} + +void PulseTopLevel::setMessage(RsWirePulseSPtr pulse) +{ + widget_message->setup(pulse); +} + +// Set UI elements. +void PulseTopLevel::setHeadshot(const QPixmap &pixmap) +{ + label_headshot->setPixmap(pixmap); +} + +void PulseTopLevel::setGroupNameString(QString name) +{ + label_groupName->setText("@" + name); +} + +void PulseTopLevel::setAuthorString(QString name) +{ + label_authorName->setText(BoldString(name)); +} + +void PulseTopLevel::setDateString(QString date) +{ + label_date->setText(date); +} + +void PulseTopLevel::setLikesString(QString likes) +{ + label_extra_likes->setText(BoldString(likes)); + label_likes->setText(likes); +} + +void PulseTopLevel::setRepublishesString(QString repub) +{ + label_extra_republishes->setText(BoldString(repub)); + label_republishes->setText(repub); +} + +void PulseTopLevel::setRepliesString(QString reply) +{ + label_extra_replies->setText(BoldString(reply)); + label_replies->setText(reply); +} + +void PulseTopLevel::showResponseStats(bool enable) +{ + widget_replies->setVisible(enable); + widget_actions->setVisible(enable); +} + +void PulseTopLevel::setReferenceString(QString ref) +{ + if (ref.size() == 0) + { + widget_prefix->setVisible(false); + } + else + { + label_reference->setText(ref); + } +} + +void PulseTopLevel::mousePressEvent(QMouseEvent *event) +{ +} + + diff --git a/retroshare-gui/src/gui/TheWire/PulseTopLevel.h b/retroshare-gui/src/gui/TheWire/PulseTopLevel.h new file mode 100644 index 000000000..e43fe012d --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseTopLevel.h @@ -0,0 +1,65 @@ +/******************************************************************************* + * gui/TheWire/PulseTopLevel.h * + * * + * Copyright (c) 2020-2020 Robert Fernie * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#ifndef MRK_PULSE_TOP_LEVEL_H +#define MRK_PULSE_TOP_LEVEL_H + +#include "ui_PulseTopLevel.h" + +#include "PulseViewItem.h" +#include + +class PulseTopLevel : public PulseDataItem, private Ui::PulseTopLevel +{ + Q_OBJECT + +public: + PulseTopLevel(PulseViewHolder *holder, RsWirePulseSPtr pulse); + + +protected: + void setup(); + +// PulseDataInterface =========== + // Group + virtual void setHeadshot(const QPixmap &pixmap) override; + virtual void setGroupNameString(QString name) override; + virtual void setAuthorString(QString name) override; + + // Msg + virtual void setRefMessage(QString msg, uint32_t image_count) override; + virtual void setMessage(RsWirePulseSPtr pulse) override; + virtual void setDateString(QString date) override; + + // Refs + virtual void setLikesString(QString likes) override; + virtual void setRepublishesString(QString repub) override; + virtual void setRepliesString(QString reply) override; + + // + virtual void setReferenceString(QString ref) override; + virtual void showResponseStats(bool enable) override; +// PulseDataInterface =========== + +protected: + void mousePressEvent(QMouseEvent *event); +}; + +#endif diff --git a/retroshare-gui/src/gui/TheWire/PulseTopLevel.ui b/retroshare-gui/src/gui/TheWire/PulseTopLevel.ui new file mode 100644 index 000000000..1a197905a --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseTopLevel.ui @@ -0,0 +1,663 @@ + + + PulseTopLevel + + + + 0 + 0 + 732 + 551 + + + + + 0 + 0 + + + + + 9 + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + QFrame#frame{border: 2px solid #CCCCCC; +background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #EEEEEE, stop: 1 #CCCCCC); +border-radius: 10px} + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 21 + 18 + + + + + + + + + 0 + 0 + + + + icn + + + + + + + retweeted + + + + + + + TMP VIEW PARENT + + + + + + + Qt::Horizontal + + + + 537 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 60 + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 10 + + + + + + + + + 0 + 0 + + + + + 0 + 20 + + + + <html><head/><body><p><span style=" color:#555753;">@sidler_here</span></p></body></html> + + + + + + + + 0 + 0 + + + + + 0 + 20 + + + + <html><head/><body><p><span style=" font-weight:600;">Sidler</span></p></body></html> + + + + + + + Qt::Horizontal + + + + 518 + 58 + + + + + + + + + 0 + 0 + + + + + 50 + 50 + + + + <html><head/><body><p>Head</p><p>Shot</p></body></html> + + + + + + + TMP VIEW + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + 16777215 + 16777215 + + + + + + + <html><head/><body><p><span style=" color:#2e3436;">3:58 AM · Apr 13, 2020 ·</span></p></body></html> + + + + + + + Qt::Horizontal + + + + 505 + 20 + + + + + + + + + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + + + + + <html><head/><body><p><span style=" font-weight:600;">1.2K</span></p></body></html> + + + + + + + <html><head/><body><p><span style=" color:#2e3436;">Replies</span></p></body></html> + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 40 + 20 + + + + + + + + + + + + <html><head/><body><p><span style=" font-weight:600;">1.2K</span></p></body></html> + + + + + + + <html><head/><body><p><span style=" color:#2e3436;">Republishes</span></p></body></html> + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 40 + 20 + + + + + + + + + + + + <html><head/><body><p><span style=" font-weight:600;">21.3K</span></p></body></html> + + + + + + + <html><head/><body><p><span style=" color:#2e3436;">Likes</span></p></body></html> + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 40 + 20 + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + RPL + + + + + + + 1 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + RET + + + + + + + 1 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + LIK + + + + + + + 1 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + LNK + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + 1 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + PulseMessage + QWidget +
gui/TheWire/PulseMessage.h
+ 1 +
+
+ + + + +
diff --git a/retroshare-gui/src/gui/TheWire/PulseViewGroup.cpp b/retroshare-gui/src/gui/TheWire/PulseViewGroup.cpp new file mode 100644 index 000000000..38ead4b84 --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseViewGroup.cpp @@ -0,0 +1,47 @@ +/******************************************************************************* + * gui/TheWire/PulseViewGroup.cpp * + * * + * Copyright (c) 2012-2020 Robert Fernie * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#include +#include +#include +#include + +#include "PulseViewGroup.h" + +#include "util/DateTime.h" + +/** Constructor */ + +PulseViewGroup::PulseViewGroup(PulseViewHolder *holder, RsWireGroupSPtr group) +:PulseViewItem(holder), mGroup(group) +{ + setupUi(this); + setAttribute ( Qt::WA_DeleteOnClose, true ); + setup(); +} + +void PulseViewGroup::setup() +{ + if (mGroup) { + label_groupName->setText(QString::fromStdString(mGroup->mMeta.mGroupName)); + label_authorName->setText(QString::fromStdString(mGroup->mMeta.mAuthorId.toStdString())); + } +} + diff --git a/retroshare-gui/src/gui/TheWire/PulseViewGroup.h b/retroshare-gui/src/gui/TheWire/PulseViewGroup.h new file mode 100644 index 000000000..94b3f1031 --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseViewGroup.h @@ -0,0 +1,43 @@ +/******************************************************************************* + * gui/TheWire/PulseViewGroup.h * + * * + * Copyright (c) 2020-2020 Robert Fernie * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#ifndef MRK_PULSE_VIEW_GROUP_H +#define MRK_PULSE_VIEW_GROUP_H + +#include "ui_PulseViewGroup.h" + +#include "PulseViewItem.h" +#include + +class PulseViewGroup : public PulseViewItem, private Ui::PulseViewGroup +{ + Q_OBJECT + +public: + PulseViewGroup(PulseViewHolder *holder, RsWireGroupSPtr group); + +protected: + void setup(); + +protected: + RsWireGroupSPtr mGroup; +}; + +#endif diff --git a/retroshare-gui/src/gui/TheWire/PulseViewGroup.ui b/retroshare-gui/src/gui/TheWire/PulseViewGroup.ui new file mode 100644 index 000000000..3a4d3e688 --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseViewGroup.ui @@ -0,0 +1,542 @@ + + + PulseViewGroup + + + + 0 + 0 + 745 + 483 + + + + + 0 + 0 + + + + + 9 + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + QFrame#frame{border: 2px solid #CCCCCC; +background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #EEEEEE, stop: 1 #CCCCCC); +border-radius: 10px} + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + + Qt::Horizontal + + + + 283 + 20 + + + + + + + + + 0 + 0 + + + + + 100 + 100 + + + + headshot + + + + + + + Qt::Horizontal + + + + 23 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 60 + + + + + + + Qt::Horizontal + + + + 518 + 58 + + + + + + + + + 0 + 0 + + + + + 0 + 20 + + + + <html><head/><body><p><span style=" color:#555753;">@sidler_here</span></p></body></html> + + + + + + + + 0 + 0 + + + + + 0 + 20 + + + + <html><head/><body><p><span style=" font-weight:600;">Sidler</span></p></body></html> + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 10 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 50 + + + + + 16777215 + 16777215 + + + + + + + + 0 + 0 + + + + + 0 + 20 + + + + <html><head/><body><p><span style=" color:#2e3436;">3:58 AM · Apr 13, 2020 ·</span></p></body></html> + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + 0 + 0 + + + + + 0 + 20 + + + + Location + + + + + + + Qt::Horizontal + + + + 2000 + 20 + + + + + + + + + 0 + 0 + + + + + 0 + 20 + + + + Tag Line + + + + + + + + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + + + + + <html><head/><body><p><span style=" font-weight:600;">1.2K</span></p></body></html> + + + + + + + <html><head/><body><p><span style=" color:#2e3436;">Pulses</span></p></body></html> + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 40 + 20 + + + + + + + + + + + + <html><head/><body><p><span style=" font-weight:600;">1.2K</span></p></body></html> + + + + + + + <html><head/><body><p><span style=" color:#2e3436;">Replies</span></p></body></html> + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 40 + 20 + + + + + + + + + + + + <html><head/><body><p><span style=" font-weight:600;">1.2K</span></p></body></html> + + + + + + + <html><head/><body><p><span style=" color:#2e3436;">Republishes</span></p></body></html> + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 40 + 20 + + + + + + + + + + + + <html><head/><body><p><span style=" font-weight:600;">21.3K</span></p></body></html> + + + + + + + <html><head/><body><p><span style=" color:#2e3436;">Likes</span></p></body></html> + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 40 + 20 + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + + 0 + 40 + + + + + + + Qt::Horizontal + + + + 298 + 20 + + + + + + + + FOLLOW + + + + + + + Qt::Horizontal + + + + 297 + 20 + + + + + + + + + + + + + + + + + diff --git a/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp b/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp new file mode 100644 index 000000000..deb0c65d9 --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp @@ -0,0 +1,364 @@ +/******************************************************************************* + * gui/TheWire/PulseViewItem.cpp * + * * + * Copyright (c) 2012-2020 Robert Fernie * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#include +#include +#include +#include + +#include "PulseViewItem.h" + +#include "gui/gxs/GxsIdDetails.h" +#include "util/DateTime.h" + +/** Constructor */ + +PulseViewItem::PulseViewItem(PulseViewHolder *holder) +:QWidget(NULL), mHolder(holder) +{ +} + + +PulseDataItem::PulseDataItem(PulseViewHolder *holder, RsWirePulseSPtr pulse) +:PulseViewItem(holder), mPulse(pulse) +{ +} + +void PulseDataItem::actionReply() +{ + std::cerr << "PulseDataItem::actionReply()"; + std::cerr << std::endl; + + if (mHolder) { + std::string groupName = "unknownGroupName"; + mHolder->PVHreply(*mPulse, groupName); + } +} + +void PulseDataItem::actionRepublish() +{ + std::cerr << "PulseDataItem::actionRepublish()"; + std::cerr << std::endl; + + if (mHolder) { + std::string groupName = "unknownGroupName"; + mHolder->PVHrepublish(*mPulse, groupName); + } +} + +void PulseDataItem::actionLike() +{ + std::cerr << "PulseDataItem::actionLike()"; + std::cerr << std::endl; + + if (mHolder) { + std::string groupName = "unknownGroupName"; + mHolder->PVHlike(*mPulse, groupName); + } +} + +void PulseDataItem::actionViewGroup() +{ + std::cerr << "PulseDataItem::actionViewGroup()"; + std::cerr << std::endl; + + RsGxsGroupId groupId; + + if (mPulse) { + if ((mPulse->mPulseType & WIRE_PULSE_TYPE_ORIGINAL) || + (mPulse->mPulseType & WIRE_PULSE_TYPE_RESPONSE)) + { + /* use pulse group */ + groupId = mPulse->mMeta.mGroupId; + } + else + { + /* IS REF use pulse group */ + groupId = mPulse->mRefGroupId; + } + } + + if (mHolder) { + mHolder->PVHviewGroup(groupId); + } +} + +void PulseDataItem::actionViewParent() +{ + std::cerr << "PulseDataItem::actionViewParent()"; + std::cerr << std::endl; + + // TODO + RsGxsGroupId groupId; + RsGxsMessageId msgId; + + if (mPulse) { + if (mPulse->mPulseType & WIRE_PULSE_TYPE_ORIGINAL) + { + std::cerr << "PulseDataItem::actionViewParent() Error ORIGINAL no parent"; + std::cerr << std::endl; + } + else if (mPulse->mPulseType & WIRE_PULSE_TYPE_RESPONSE) + { + /* mRefs refer to parent */ + groupId = mPulse->mRefGroupId; + msgId = mPulse->mRefOrigMsgId; + } + else + { + /* type = REF, group / thread ref to parent */ + groupId = mPulse->mMeta.mGroupId; + msgId = mPulse->mMeta.mThreadId; + } + } + + if (mHolder) { + mHolder->PVHviewPulse(groupId, msgId); + } +} + +void PulseDataItem::actionViewPulse() +{ + std::cerr << "PulseDataItem::actionViewPulse()"; + std::cerr << std::endl; + + // TODO + RsGxsGroupId groupId; + RsGxsMessageId msgId; + + if (mPulse) { + if ((mPulse->mPulseType & WIRE_PULSE_TYPE_ORIGINAL) || + (mPulse->mPulseType & WIRE_PULSE_TYPE_RESPONSE)) + { + groupId = mPulse->mMeta.mGroupId; + msgId = mPulse->mMeta.mOrigMsgId; + } + else + { + /* type = REF, mRefs link to message */ + std::cerr << "PulseDataItem::actionViewPulse() REF unlikely retrievable"; + std::cerr << std::endl; + + groupId = mPulse->mRefGroupId; + msgId = mPulse->mRefOrigMsgId; + } + } + + if (mHolder) { + mHolder->PVHviewPulse(groupId, msgId); + } +} + +void PulseDataItem::actionFollow() +{ + std::cerr << "PulseDataItem::actionFollow()"; + std::cerr << std::endl; + + // TODO + RsGxsGroupId groupId; + + if (mHolder) { + mHolder->PVHfollow(groupId); + } +} + +void PulseDataItem::actionRate() +{ + std::cerr << "PulseDataItem::actionRate()"; + std::cerr << std::endl; + + // TODO + RsGxsId authorId; + + if (mHolder) { + mHolder->PVHrate(authorId); + } +} + + + +void PulseDataItem::showPulse() +{ + std::cerr << "PulseDataItem::showPulse()"; + std::cerr << std::endl; + if (!mPulse) { + std::cerr << "PulseDataItem::showPulse() PULSE invalid - skipping"; + std::cerr << std::endl; + return; + } + + /* 3 Modes: + * ORIGINAL + * RESPONSE + * REFERENCE + * + * ORIG / RESPONSE are similar. + */ + + if (mPulse->mPulseType & WIRE_PULSE_TYPE_REFERENCE) + { + // Group + setGroupName(mPulse->mRefGroupName); + setAuthor(mPulse->mRefAuthorId.toStdString()); + + // Msg + setRefMessage(QString::fromStdString(mPulse->mRefPulseText), mPulse->mRefImageCount); + setDate(mPulse->mRefPublishTs); + + // References (unknown for a REFERENCE) + // should show FOLLOW button instead. + // setLikes(mPulse->mLikes.size()); + // setReplies(mPulse->mReplies.size()); + // setRepublishes(mPulse->mRepublishes.size()); + + showResponseStats(false); + + // + setReference(mPulse->mPulseType & WIRE_PULSE_RESPONSE_MASK, mPulse->mMeta.mGroupId, "GroupName TODO"); + + } + else // ORIG / RESPONSE. + { + + // Group + bool headshotOkay = false; + if (mPulse->mGroupPtr) { + setGroupName(mPulse->mGroupPtr->mMeta.mGroupName); + + if (mPulse->mGroupPtr->mHeadshot.mData) + { + QPixmap pixmap; + if (GxsIdDetails::loadPixmapFromData( + mPulse->mGroupPtr->mHeadshot.mData, + mPulse->mGroupPtr->mHeadshot.mSize, + pixmap,GxsIdDetails::ORIGINAL)) + { + headshotOkay = true; + pixmap = pixmap.scaled(50,50); + setHeadshot(pixmap); + } + } + } else { + setGroupName("GroupName UNKNOWN"); + } + + if (!headshotOkay) + { + // default. + QPixmap pixmap = QPixmap(":/icons/png/posted.png").scaled(50,50); + setHeadshot(pixmap); // QPixmap(":/icons/png/posted.png")); + } + + setAuthor(mPulse->mMeta.mAuthorId.toStdString()); + + // Msg + setMessage(mPulse); + setDate(mPulse->mMeta.mPublishTs); + + // References + showResponseStats(true); + setLikes(mPulse->mLikes.size()); + setReplies(mPulse->mReplies.size()); + setRepublishes(mPulse->mRepublishes.size()); + + if (mPulse->mPulseType & WIRE_PULSE_TYPE_RESPONSE) + { + setReference(mPulse->mPulseType & WIRE_PULSE_RESPONSE_MASK, mPulse->mRefGroupId, mPulse->mRefGroupName); + } + } +} + +void PulseDataItem::setGroupName(std::string name) +{ + setGroupNameString(QString::fromStdString(name)); +} + +void PulseDataItem::setAuthor(std::string name) +{ + setAuthorString(QString::fromStdString(name)); +} + +void PulseDataItem::setDate(rstime_t date) +{ + // could be more intelligent. + // eg. 3 Hr ago, if recent. + setDateString(DateTime::formatDateTime(date)); +} + +void PulseDataItem::setLikes(uint32_t count) +{ + setLikesString(ToNumberUnits(count)); +} + +void PulseDataItem::setRepublishes(uint32_t count) +{ + setRepublishesString(ToNumberUnits(count)); +} + +void PulseDataItem::setReplies(uint32_t count) +{ + std::cerr << "PulseDataItem::setReplies(" << count << ")"; + std::cerr << std::endl; + setRepliesString(ToNumberUnits(count)); +} + +void PulseDataItem::setReference(uint32_t response_type, RsGxsGroupId groupId, std::string groupName) +{ + QString ref; + if (response_type == WIRE_PULSE_TYPE_REPLY) { + ref = "In reply to @" + QString::fromStdString(groupName); + } + else if (response_type == WIRE_PULSE_TYPE_REPUBLISH) { + ref = "retweeting @" + QString::fromStdString(groupName); + } + else if (response_type == WIRE_PULSE_TYPE_LIKE) { + ref = "liking @" + QString::fromStdString(groupName); + } + + setReferenceString(ref); +} + +// Utils. +QString BoldString(QString msg) +{ + QString output = "

"; + output += msg; + output += "

"; + return output; +} + +QString ToNumberUnits(uint32_t count) +{ + QString ans; + if (count > 1000000) + { + ans.sprintf("%6.2fm", count / 1000000.0); + } + else if (count > 1000) + { + ans.sprintf("%6.2fk", count / 1000.0); + } + else + { + ans.sprintf("%6d", count); + } + return ans; +} + diff --git a/retroshare-gui/src/gui/TheWire/PulseViewItem.h b/retroshare-gui/src/gui/TheWire/PulseViewItem.h new file mode 100644 index 000000000..bb22afdd6 --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/PulseViewItem.h @@ -0,0 +1,142 @@ +/******************************************************************************* + * gui/TheWire/PulseViewItem.h * + * * + * Copyright (c) 2020-2020 Robert Fernie * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#ifndef MRK_PULSE_VIEW_ITEM_H +#define MRK_PULSE_VIEW_ITEM_H + +#include "ui_PulseItem.h" + +#include + +class PulseViewItem; + +class PulseViewHolder +{ +public: + virtual ~PulseViewHolder() {} + + // Actions. + virtual void PVHreply(RsWirePulse &pulse, std::string &groupName) = 0; + virtual void PVHrepublish(RsWirePulse &pulse, std::string &groupName) = 0; + virtual void PVHlike(RsWirePulse &pulse, std::string &groupName) = 0; + + virtual void PVHviewGroup(RsGxsGroupId &groupId) = 0; + virtual void PVHviewPulse(RsGxsGroupId &groupId, RsGxsMessageId &msgId) = 0; + virtual void PVHviewReply(RsGxsGroupId &groupId, RsGxsMessageId &msgId) = 0; + + virtual void PVHfollow(RsGxsGroupId &groupId) = 0; + virtual void PVHrate(RsGxsId &authorId) = 0; +}; + +class PulseDataInterface +{ +public: + virtual ~PulseDataInterface() {} + +protected: + // Group + virtual void setHeadshot(const QPixmap &pixmap) = 0; + virtual void setGroupNameString(QString name) = 0; + virtual void setAuthorString(QString name) = 0; + + // Msg + virtual void setRefMessage(QString msg, uint32_t image_count) = 0; + virtual void setMessage(RsWirePulseSPtr pulse) = 0; + virtual void setDateString(QString date) = 0; + + // Refs + virtual void setLikesString(QString likes) = 0; + virtual void setRepublishesString(QString repub) = 0; + virtual void setRepliesString(QString reply) = 0; + + // + virtual void setReferenceString(QString ref) = 0; + virtual void showResponseStats(bool enable) = 0; +}; + + + +class PulseViewItem : public QWidget +{ + Q_OBJECT + +public: + PulseViewItem(PulseViewHolder *holder); + +protected: + PulseViewHolder *mHolder; +}; + + +class PulseDataItem : public PulseViewItem, public PulseDataInterface +{ + Q_OBJECT + +public: + PulseDataItem(PulseViewHolder *holder, RsWirePulseSPtr pulse); + + +private slots: + + // Action interfaces -------------------------- + void actionReply(); + void actionRepublish(); + void actionLike(); + + void actionViewGroup(); + void actionViewParent(); + void actionViewPulse(); + + void actionFollow(); + void actionRate(); + // Action interfaces -------------------------- + +protected: + + // top-level set data onto UI. + virtual void showPulse(); + + // UI elements. + // Group + void setGroupName(std::string name); + void setAuthor(std::string name); + + // Msg + void setDate(rstime_t date); + + // Refs + void setLikes(uint32_t count); + void setRepublishes(uint32_t count); + void setReplies(uint32_t count); + + // + void setReference(uint32_t flags, RsGxsGroupId groupId, std::string groupName); + + // DATA. + RsWirePulseSPtr mPulse; +}; + + +// utilities. +QString BoldString(QString input); +QString ToNumberUnits(uint32_t count); + + +#endif diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.cpp b/retroshare-gui/src/gui/TheWire/WireDialog.cpp index 19baa25ac..6cbea03df 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/WireDialog.cpp @@ -23,6 +23,11 @@ #include "WireGroupDialog.h" #include "WireGroupItem.h" +#include "PulseViewGroup.h" +#include "PulseReplySeperator.h" + +#include "util/qtthreadsutils.h" + #include #include @@ -74,6 +79,9 @@ WireDialog::WireDialog(QWidget *parent) mWireQueue = new TokenQueue(rsWire->getTokenService(), this); requestGroupData(); + + // just for testing + postTestTwitterView(); } void WireDialog::refreshGroups() @@ -96,6 +104,18 @@ void WireDialog::deletePulseItem(PulseItem * /* item */, uint32_t /* type */) // Actions from PulseHolder. +void WireDialog::focus(RsGxsGroupId &groupId, RsGxsMessageId &msgId) +{ + std::cerr << "WireDialog::focus("; + std::cerr << groupId.toStdString() << ","; + std::cerr << msgId.toStdString(); + std::cerr << ")"; + std::cerr << std::endl; + + showPulseFocus(groupId, msgId); +} + + void WireDialog::follow(RsGxsGroupId &groupId) { std::cerr << "WireDialog::follow("; @@ -581,6 +601,9 @@ bool WireDialog::loadPulseData(const uint32_t &token) std::vector pulses; rsWire->getPulseData(token, pulses); + std::cerr << "WireDialog::loadPulseData() pulses.size(): " << pulses.size(); + std::cerr << std::endl; + std::list references; std::map pulseGrouping; @@ -596,7 +619,7 @@ bool WireDialog::loadPulseData(const uint32_t &token) for(; vit != pulses.end(); vit++) { RsWirePulse& pulse = *vit; - if (pulse.mPulseType & WIRE_PULSE_TYPE_REPLY_REFERENCE) + if (pulse.mPulseType & WIRE_PULSE_TYPE_REFERENCE) { // store references to add in later. std::cerr << "WireDialog::loadPulseData() REF: GroupId: " << pulse.mMeta.mGroupId; @@ -787,3 +810,299 @@ void WireDialog::loadRequest(const TokenQueue *queue, const TokenRequest &req) /**************************** Request / Response Filling of Data ************************/ + + + + +/****************************************************************************************/ +// TWITTER VIEW. +/****************************************************************************************/ + +// TODO +// - Handle Groups +// - Add GroupPtr to WirePulseSPtrs (DONE) +// - Add HeadShot to WireGroup +// - Add GxsIdLabel to Pulse UI elements. +// +// - Create Groups. +// - Add HeadShot +// +// - Create Pulse. +// - Add Images. +// +// - Link up Reply / Republish / Like. +// +// - showGroupFocus +// - TODO +// +// - showPulseFocus +// - Basics (DONE). +// - MoreReplies +// - Show Actual Message. + +// +// - showReplyFocus +// - TODO + + +// PulseDataItem interface +// Actions. +void WireDialog::PVHreply(RsWirePulse &pulse, std::string &groupName) +{ + std::cerr << "WireDialog::PVHreply() TODO"; + std::cerr << std::endl; +} + +void WireDialog::PVHrepublish(RsWirePulse &pulse, std::string &groupName) +{ + std::cerr << "WireDialog::PVHrepublish() TODO"; + std::cerr << std::endl; +} + +void WireDialog::PVHlike(RsWirePulse &pulse, std::string &groupName) +{ + std::cerr << "WireDialog::PVHlike() TODO"; + std::cerr << std::endl; +} + +void WireDialog::PVHviewGroup(RsGxsGroupId &groupId) +{ + std::cerr << "WireDialog::PVHviewGroup("; + std::cerr << groupId.toStdString(); + std::cerr << ")"; + std::cerr << std::endl; + + showGroupFocus(groupId); +} + +void WireDialog::PVHviewPulse(RsGxsGroupId &groupId, RsGxsMessageId &msgId) +{ + std::cerr << "WireDialog::PVHviewPulse("; + std::cerr << groupId.toStdString() << ","; + std::cerr << msgId.toStdString(); + std::cerr << ")"; + std::cerr << std::endl; + + showPulseFocus(groupId, msgId); +} + +void WireDialog::PVHviewReply(RsGxsGroupId &groupId, RsGxsMessageId &msgId) +{ + std::cerr << "WireDialog::PVHviewReply("; + std::cerr << groupId.toStdString() << ","; + std::cerr << msgId.toStdString(); + std::cerr << ")"; + std::cerr << std::endl; + + // showPulseFocus(groupId, msgId); +} + +void WireDialog::PVHfollow(RsGxsGroupId &groupId) +{ + std::cerr << "WireDialog::PVHfollow("; + std::cerr << groupId.toStdString(); + std::cerr << ") TODO"; + std::cerr << std::endl; +} + +void WireDialog::PVHrate(RsGxsId &authorId) +{ + std::cerr << "WireDialog::PVHrate("; + std::cerr << authorId.toStdString(); + std::cerr << ") TODO"; + std::cerr << std::endl; +} + +void WireDialog::postTestTwitterView() +{ + clearTwitterView(); + + addTwitterView(new PulseTopLevel(NULL,RsWirePulseSPtr())); + addTwitterView(new PulseReply(NULL,RsWirePulseSPtr())); + addTwitterView(new PulseReply(NULL,RsWirePulseSPtr())); + addTwitterView(new PulseReply(NULL,RsWirePulseSPtr())); + addTwitterView(new PulseReply(NULL,RsWirePulseSPtr())); + addTwitterView(new PulseReply(NULL,RsWirePulseSPtr())); +} + +void WireDialog::clearTwitterView() +{ + std::cerr << "WireDialog::clearTwitterView()"; + std::cerr << std::endl; + + QLayout *alayout = ui.scrollAreaWidgetContents_2->layout(); + QLayoutItem *item; + int i = 0; + while (i < alayout->count()) + { + item = alayout->itemAt(i); + QWidget *widget = item->widget(); + if (NULL != dynamic_cast(widget)) + { + std::cerr << "WireDialog::clearTwitterView() Removing Item at: " << i; + std::cerr << std::endl; + + item = alayout->takeAt(i); + delete item->widget(); + delete item; + } + else + { + std::cerr << "WireDialog::clearTwitterView() Leaving Item at: " << i; + std::cerr << std::endl; + + i++; + } + } +} + +void WireDialog::addTwitterView(PulseViewItem *item) +{ + std::cerr << "WireDialog::addTwitterView()"; + std::cerr << std::endl; + + /* ensure its a boxlayout */ + QLayout *alayout = ui.scrollAreaWidgetContents_2->layout(); + QBoxLayout *boxlayout = dynamic_cast(alayout); + if (boxlayout == NULL) { + std::cerr << "WireDialog::addTwitterView() ERROR not boxlayout, not Inserting"; + std::cerr << std::endl; + return; + } + + // inserting as last item. + std::cerr << "WireDialog::addTwitterView() Inserting at end"; + std::cerr << std::endl; + boxlayout->addWidget(item); +} + + +void WireDialog::showPulseFocus(const RsGxsGroupId groupId, const RsGxsMessageId msgId) +{ + clearTwitterView(); + + // background thread for loading. + RsThread::async([this, groupId, msgId]() + { + // fetch data from backend. + RsWirePulseSPtr pPulse; + int type = 0; + bool success = rsWire->getPulseFocus(groupId, msgId, type, pPulse); + + sleep(2); + + /* now insert the pulse + children into the layput */ + RsQThreadUtils::postToObject([pPulse,this]() + { + /* Here it goes any code you want to be executed on the Qt Gui + * thread, for example to update the data model with new information + * after a blocking call to RetroShare API complete */ + + postPulseFocus(pPulse); + + }, this); + }); +} + + +void WireDialog::postPulseFocus(RsWirePulseSPtr pPulse) +{ + clearTwitterView(); + if (!pPulse) + { + std::cerr << "WireDialog::postPulseFocus() Invalid pulse"; + std::cerr << std::endl; + return; + } + + addTwitterView(new PulseTopLevel(this, pPulse)); + + std::list::iterator it; + for(it = pPulse->mReplies.begin(); it != pPulse->mReplies.end(); it++) + { + RsWirePulseSPtr reply = *it; + PulseReply *firstReply = new PulseReply(this, reply); + addTwitterView(firstReply); + + if (reply->mReplies.size() > 0) + { + PulseReply *secondReply = new PulseReply(this, reply->mReplies.front()); + addTwitterView(secondReply); + firstReply->showReplyLine(true); + secondReply->showReplyLine(false); + } + else + { + firstReply->showReplyLine(false); + } + + + if (reply->mReplies.size() > 1) + { + // addTwitterView(new PulseMoreReplies(NULL, reply)); + } + + addTwitterView(new PulseReplySeperator()); + } +} + +void WireDialog::showGroupFocus(const RsGxsGroupId groupId) +{ + clearTwitterView(); + + // background thread for loading. + RsThread::async([this, groupId]() + { + // fetch data from backend. + RsWireGroupSPtr grp; + std::list pulses; + + bool success = rsWire->getWireGroup(groupId, grp); + std::list groupIds = { groupId }; + success = rsWire->getPulsesForGroups(groupIds, pulses); + + sleep(2); + + /* now insert the pulse + children into the layput */ + RsQThreadUtils::postToObject([grp, pulses,this]() + { + /* Here it goes any code you want to be executed on the Qt Gui + * thread, for example to update the data model with new information + * after a blocking call to RetroShare API complete */ + + postGroupFocus(grp, pulses); + + }, this); + }); +} + + +void WireDialog::postGroupFocus(RsWireGroupSPtr group, std::list pulses) +{ + std::cerr << "WireDialog::postGroupFocus()"; + std::cerr << std::endl; + + if (!group) + { + std::cerr << "WireDialog::postGroupFocus() group is INVALID"; + std::cerr << std::endl; + return; + } + + addTwitterView(new PulseViewGroup(this, group)); + + std::list::iterator it; + for(it = pulses.begin(); it != pulses.end(); it++) + { + RsWirePulseSPtr reply = *it; + PulseReply *firstReply = new PulseReply(this, reply); + addTwitterView(firstReply); + firstReply->showReplyLine(false); + + addTwitterView(new PulseReplySeperator()); + + } +} + + + diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.h b/retroshare-gui/src/gui/TheWire/WireDialog.h index 904c09ade..d3c16664f 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.h +++ b/retroshare-gui/src/gui/TheWire/WireDialog.h @@ -32,11 +32,16 @@ #include "gui/TheWire/WireGroupItem.h" #include "gui/TheWire/PulseAddDialog.h" +#include "gui/TheWire/PulseViewItem.h" +#include "gui/TheWire/PulseTopLevel.h" +#include "gui/TheWire/PulseReply.h" + + #include "util/TokenQueue.h" #define IMAGE_WIRE ":/icons/wire.png" -class WireDialog : public MainPage, public TokenResponse, public PulseHolder, public WireGroupHolder +class WireDialog : public MainPage, public TokenResponse, public PulseHolder, public WireGroupHolder, public PulseViewHolder { Q_OBJECT @@ -51,15 +56,38 @@ public: virtual void deletePulseItem(PulseItem *, uint32_t type); virtual void notifyPulseSelection(PulseItem *item); - virtual void follow(RsGxsGroupId &groupId); - virtual void rate(RsGxsId &authorId); - virtual void reply(RsWirePulse &pulse, std::string &groupName); + virtual void focus(RsGxsGroupId &groupId, RsGxsMessageId &msgId) override; + virtual void follow(RsGxsGroupId &groupId) override; + virtual void rate(RsGxsId &authorId) override; + virtual void reply(RsWirePulse &pulse, std::string &groupName) override; // WireGroupHolder interface. - virtual void subscribe(RsGxsGroupId &groupId); - virtual void unsubscribe(RsGxsGroupId &groupId); - virtual void notifyGroupSelection(WireGroupItem *item); + virtual void subscribe(RsGxsGroupId &groupId) override; + virtual void unsubscribe(RsGxsGroupId &groupId) override; + virtual void notifyGroupSelection(WireGroupItem *item) override; + + // PulseViewItem interface + virtual void PVHreply(RsWirePulse &pulse, std::string &groupName) override; + virtual void PVHrepublish(RsWirePulse &pulse, std::string &groupName) override; + virtual void PVHlike(RsWirePulse &pulse, std::string &groupName) override; + + virtual void PVHviewGroup(RsGxsGroupId &groupId) override; + virtual void PVHviewPulse(RsGxsGroupId &groupId, RsGxsMessageId &msgId) override; + virtual void PVHviewReply(RsGxsGroupId &groupId, RsGxsMessageId &msgId) override; + + virtual void PVHfollow(RsGxsGroupId &groupId) override; + virtual void PVHrate(RsGxsId &authorId) override; + + // New TwitterView + void postTestTwitterView(); + void clearTwitterView(); + void addTwitterView(PulseViewItem *item); + void showPulseFocus(const RsGxsGroupId groupId, const RsGxsMessageId msgId); + void postPulseFocus(RsWirePulseSPtr pulse); + + void showGroupFocus(const RsGxsGroupId groupId); + void postGroupFocus(RsWireGroupSPtr group, std::list pulses); private slots: @@ -85,7 +113,7 @@ private: void showSelectedGroups(); void updateGroups(std::vector &groups); - // utils. + // utils. rstime_t getFilterTimestamp(); // Loading Data. diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.ui b/retroshare-gui/src/gui/TheWire/WireDialog.ui index eb1f91d2a..fa0d76eda 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.ui +++ b/retroshare-gui/src/gui/TheWire/WireDialog.ui @@ -6,8 +6,8 @@ 0 0 - 726 - 557 + 804 + 586 @@ -215,118 +215,24 @@ - + 3 0 - - QFrame::StyledPanel + + 0 - - QFrame::Raised - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - Show Posts from - - - - - - - - 0 - 0 - - - - - All Time - - - - - Last 24 hours - - - - - Last 7 days - - - - - Last 30 days - - - - - - - - - - - true - - - Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft - - - - - 0 - 0 - 431 - 443 - - - - QWidget#scrollAreaWidgetContents{border: none;} - - + + + Orig View + + + + + 0 @@ -343,23 +249,179 @@ 0 - + - Qt::Vertical + Qt::Horizontal - 20 - 40 + 40 + 20 + + + + + 0 + 0 + + + + Show Posts from + + + + + + + + 0 + 0 + + + + + All Time + + + + + Last 24 hours + + + + + Last 7 days + + + + + Last 30 days + + + + - - - + + + + + true + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + 0 + 0 + 508 + 435 + + + + QWidget#scrollAreaWidgetContents{border: none;} + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + Fancy View + + + + + + true + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + 0 + 0 + 508 + 466 + + + + QWidget#scrollAreaWidgetContents{border: none;} + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + diff --git a/retroshare-gui/src/gui/TheWire/WireGroupDialog.cpp b/retroshare-gui/src/gui/TheWire/WireGroupDialog.cpp index 80d51f167..e8d388734 100644 --- a/retroshare-gui/src/gui/TheWire/WireGroupDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/WireGroupDialog.cpp @@ -95,9 +95,11 @@ QPixmap WireGroupDialog::serviceImage() void WireGroupDialog::prepareWireGroup(RsWireGroup &group, const RsGroupMetaData &meta) { group.mMeta = meta; - group.mDescription = getDescription().toUtf8().constData(); -#if 0 + // To Add. + group.mTagline = "a Tagline"; + group.mLocation = "here"; + QPixmap pixmap = getLogo(); if (!pixmap.isNull()) { @@ -107,11 +109,12 @@ void WireGroupDialog::prepareWireGroup(RsWireGroup &group, const RsGroupMetaData buffer.open(QIODevice::WriteOnly); pixmap.save(&buffer, "PNG"); // writes image into ba in PNG format - group.mThumbnail.copy((uint8_t *) ba.data(), ba.size()); + group.mHeadshot.copy((uint8_t *) ba.data(), ba.size()); + group.mMasthead.copy((uint8_t *) ba.data(), ba.size()); } else { - group.mThumbnail.clear(); + group.mHeadshot.clear(); + group.mMasthead.clear(); } -#endif } @@ -152,7 +155,7 @@ bool WireGroupDialog::service_loadGroup(const RsGxsGenericGroupData *data, Mode } const RsWireGroup &group = *pgroup; - description = QString::fromUtf8(group.mDescription.c_str()); + // description = QString::fromUtf8(group.mDescription.c_str()); #if 0 if (group.mThumbnail.mData) { diff --git a/retroshare-gui/src/retroshare-gui.pro b/retroshare-gui/src/retroshare-gui.pro index a5d6838ae..53ba27470 100644 --- a/retroshare-gui/src/retroshare-gui.pro +++ b/retroshare-gui/src/retroshare-gui.pro @@ -1227,12 +1227,23 @@ gxsthewire { gui/TheWire/WireGroupItem.h \ gui/TheWire/WireGroupDialog.h \ gui/TheWire/PulseAddDialog.h \ + gui/TheWire/PulseViewItem.h \ + gui/TheWire/PulseTopLevel.h \ + gui/TheWire/PulseViewGroup.h \ + gui/TheWire/PulseReply.h \ + gui/TheWire/PulseReplySeperator.h \ + gui/TheWire/PulseMessage.h \ FORMS += gui/TheWire/PulseItem.ui \ gui/TheWire/PulseDetails.ui \ gui/TheWire/WireGroupItem.ui \ gui/TheWire/WireDialog.ui \ gui/TheWire/PulseAddDialog.ui \ + gui/TheWire/PulseTopLevel.ui \ + gui/TheWire/PulseViewGroup.ui \ + gui/TheWire/PulseReply.ui \ + gui/TheWire/PulseReplySeperator.ui \ + gui/TheWire/PulseMessage.ui \ SOURCES += gui/TheWire/PulseItem.cpp \ gui/TheWire/PulseDetails.cpp \ @@ -1240,6 +1251,12 @@ gxsthewire { gui/TheWire/WireGroupItem.cpp \ gui/TheWire/WireGroupDialog.cpp \ gui/TheWire/PulseAddDialog.cpp \ + gui/TheWire/PulseViewItem.cpp \ + gui/TheWire/PulseTopLevel.cpp \ + gui/TheWire/PulseViewGroup.cpp \ + gui/TheWire/PulseReply.cpp \ + gui/TheWire/PulseReplySeperator.cpp \ + gui/TheWire/PulseMessage.cpp \ RESOURCES += gui/TheWire/TheWire_images.qrc } From 8df5a886db33a5e3e228c7e31b77897bf8bd75a4 Mon Sep 17 00:00:00 2001 From: drbob Date: Sat, 16 May 2020 22:35:32 +1000 Subject: [PATCH 03/95] Move createOriginalPulse / createReplyPulse to libretroshare message creation logic moved to libretroshare GUI classes cleaned up. --- libretroshare/src/retroshare/rswire.h | 10 +- libretroshare/src/rsitems/rswireitems.cc | 4 +- libretroshare/src/services/p3wire.cc | 162 ++++++++++--- libretroshare/src/services/p3wire.h | 5 +- .../src/gui/TheWire/PulseAddDialog.cpp | 225 +++++------------- .../src/gui/TheWire/PulseAddDialog.h | 21 +- .../src/gui/TheWire/PulseDetails.cpp | 1 + retroshare-gui/src/gui/TheWire/WireDialog.cpp | 66 ++++- retroshare-gui/src/gui/TheWire/WireDialog.h | 4 + retroshare-gui/src/gui/TheWire/WireDialog.ui | 15 +- 10 files changed, 292 insertions(+), 221 deletions(-) diff --git a/libretroshare/src/retroshare/rswire.h b/libretroshare/src/retroshare/rswire.h index 862fc2410..bc278cc90 100644 --- a/libretroshare/src/retroshare/rswire.h +++ b/libretroshare/src/retroshare/rswire.h @@ -144,7 +144,7 @@ class RsWirePulse std::string mPulseText; uint32_t mPulseType; - uint32_t mReplySentiment; // only relevant if a reply. + uint32_t mSentiment; // sentiment can be asserted at any point. // These Ref to the related (parent or reply) if reply (RESPONSE set) // Mode RESPONSE REFERENCE @@ -222,13 +222,15 @@ virtual bool getGroups(const std::list grpIds, // New Blocking Interfaces. // Plan to migrate all GUI calls to these, and remove old interfaces above. // These are not single requests, but return data graphs for display. -virtual bool createOriginalPulse(RsGxsGroupId grpId, std::string msg) = 0; +virtual bool createOriginalPulse(const RsGxsGroupId &grpId, RsWirePulseSPtr pPulse) = 0; virtual bool createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGroupId replyWith, uint32_t reply_type, - uint32_t sentiment, std::string msg) = 0; + RsWirePulseSPtr pPulse) = 0; - // Provide Group Details for display. + + // Provide Individual Group Details for display. virtual bool getWireGroup(const RsGxsGroupId &groupId, RsWireGroupSPtr &grp) = 0; +virtual bool getWirePulse(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId, RsWirePulseSPtr &pPulse) = 0; // Provide list of pulses associated with groups. virtual bool getPulsesForGroups(const std::list &groupIds, diff --git a/libretroshare/src/rsitems/rswireitems.cc b/libretroshare/src/rsitems/rswireitems.cc index a68cb6b3f..89640ede5 100644 --- a/libretroshare/src/rsitems/rswireitems.cc +++ b/libretroshare/src/rsitems/rswireitems.cc @@ -61,7 +61,7 @@ void RsGxsWirePulseItem::clear() { pulse.mPulseText.clear(); pulse.mPulseType = 0; - pulse.mReplySentiment = 0; + pulse.mSentiment = 0; pulse.mRefGroupId.clear(); pulse.mRefGroupName.clear(); pulse.mRefOrigMsgId.clear(); @@ -81,7 +81,7 @@ void RsGxsWirePulseItem::serial_process(RsGenericSerializer::SerializeJob j,RsGe { RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_MSG,pulse.mPulseText,"pulse.mPulseText") ; RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_UINT32_PARAM,pulse.mPulseType,"pulse.mPulseType") ; - RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_UINT32_PARAM,pulse.mReplySentiment,"pulse.mReplySentiment") ; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_UINT32_PARAM,pulse.mSentiment,"pulse.mSentiment") ; RsTypeSerializer::serial_process(j,ctx,pulse.mRefGroupId,"pulse.mRefGroupId") ; RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_NAME,pulse.mRefGroupName,"pulse.mRefGroupName") ; RsTypeSerializer::serial_process(j,ctx,pulse.mRefOrigMsgId,"pulse.mRefOrigMsgId") ; diff --git a/libretroshare/src/services/p3wire.cc b/libretroshare/src/services/p3wire.cc index 997cddeaa..032d9df27 100644 --- a/libretroshare/src/services/p3wire.cc +++ b/libretroshare/src/services/p3wire.cc @@ -447,6 +447,10 @@ bool p3Wire::fetchPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsWirePulseSPt pPulse = std::make_shared(pulses[0]); std::cerr << "p3Wire::fetchPulse() retrieved token: " << *pPulse; std::cerr << std::endl; + std::cerr << "p3Wire::fetchPulse() ANS GrpId: " << pPulse->mMeta.mGroupId; + std::cerr << " MsgId: " << pPulse->mMeta.mMsgId; + std::cerr << " OrigMsgId: " << pPulse->mMeta.mOrigMsgId; + std::cerr << std::endl; } else { std::cerr << "p3Wire::fetchPulse() ERROR multiple pulses"; std::cerr << std::endl; @@ -469,8 +473,7 @@ bool p3Wire::fetchPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsWirePulseSPt } // New Interfaces. -// TODO: createOriginalPulse has not been tested. -bool p3Wire::createOriginalPulse(RsGxsGroupId grpId, std::string msg) +bool p3Wire::createOriginalPulse(const RsGxsGroupId &grpId, RsWirePulseSPtr pPulse) { // request Group. std::list groupIds = { grpId }; @@ -499,6 +502,7 @@ bool p3Wire::createOriginalPulse(RsGxsGroupId grpId, std::string msg) } // Create Msg. + // Start fresh, just to be sure nothing dodgy happens in UX world. RsWirePulse pulse; pulse.mMeta.mGroupId = group.mMeta.mGroupId; @@ -507,9 +511,14 @@ bool p3Wire::createOriginalPulse(RsGxsGroupId grpId, std::string msg) pulse.mMeta.mParentId.clear(); pulse.mMeta.mOrigMsgId.clear(); + // copy info over pulse.mPulseType = WIRE_PULSE_TYPE_ORIGINAL; - pulse.mReplySentiment = WIRE_PULSE_SENTIMENT_NO_SENTIMENT; - pulse.mPulseText = msg; + pulse.mSentiment = pPulse->mSentiment; + pulse.mPulseText = pPulse->mPulseText; + pulse.mImage1 = pPulse->mImage1; + pulse.mImage2 = pPulse->mImage2; + pulse.mImage3 = pPulse->mImage3; + pulse.mImage4 = pPulse->mImage4; // all mRefs should empty. @@ -527,8 +536,7 @@ bool p3Wire::createOriginalPulse(RsGxsGroupId grpId, std::string msg) return true; } -// TODO: createReplyPulse has not been tested. -bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGroupId replyWith, uint32_t reply_type, uint32_t /*sentiment*/, std::string msg) +bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGroupId replyWith, uint32_t reply_type, RsWirePulseSPtr pPulse) { // check reply_type. can only be ONE. if (!((reply_type == WIRE_PULSE_TYPE_REPLY) || @@ -550,26 +558,41 @@ bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGro return false; } - if (groups.size() != 2) { - std::cerr << "p3Wire::createReplyPulse() getGroups != 2"; - std::cerr << std::endl; - return false; - } - // extract group info. RsWireGroup replyToGroup; RsWireGroup replyWithGroup; - if (groups[0].mMeta.mGroupId == grpId) { + if (grpId == replyWith) + { + if (groups.size() != 1) { + std::cerr << "p3Wire::createReplyPulse() getGroups != 1"; + std::cerr << std::endl; + return false; + } + replyToGroup = groups[0]; - replyWithGroup = groups[1]; - } else { - replyToGroup = groups[1]; replyWithGroup = groups[0]; } + else + { + if (groups.size() != 2) { + std::cerr << "p3Wire::createReplyPulse() getGroups != 2"; + std::cerr << std::endl; + return false; + } + if (groups[0].mMeta.mGroupId == grpId) { + replyToGroup = groups[0]; + replyWithGroup = groups[1]; + } else { + replyToGroup = groups[1]; + replyWithGroup = groups[0]; + } + } + + // check groupIds match if ((replyToGroup.mMeta.mGroupId != grpId) || - (replyToGroup.mMeta.mGroupId != replyWith)) + (replyWithGroup.mMeta.mGroupId != replyWith)) { std::cerr << "p3Wire::createReplyPulse() groupid mismatch"; std::cerr << std::endl; @@ -604,8 +627,8 @@ bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGro responsePulse.mMeta.mOrigMsgId.clear(); responsePulse.mPulseType = WIRE_PULSE_TYPE_RESPONSE | reply_type; - responsePulse.mReplySentiment = 0; // toPulseSentiment(ui.comboBox_sentiment->currentIndex()); - responsePulse.mPulseText = msg; // ui.textEdit_Pulse->toPlainText().toStdString(); + responsePulse.mSentiment = pPulse->mSentiment; + responsePulse.mPulseText = pPulse->mPulseText; // mRefs refer to parent post. responsePulse.mRefGroupId = replyToPulse->mMeta.mGroupId; @@ -615,13 +638,59 @@ bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGro responsePulse.mRefPublishTs = replyToPulse->mMeta.mPublishTs; responsePulse.mRefPulseText = replyToPulse->mPulseText; + std::cerr << "p3Wire::createReplyPulse() create Response Pulse"; + std::cerr << std::endl; + uint32_t token; - createPulse(token, responsePulse); + if (!createPulse(token, responsePulse)) + { + std::cerr << "p3Wire::createReplyPulse() FAILED to create Response Pulse"; + std::cerr << std::endl; + return false; + } + + int result = waitToken(token); + if (result != RsTokenService::COMPLETE) + { + std::cerr << "p3Wire::createReplyPulse() FAILED(2) to create Response Pulse"; + std::cerr << std::endl; + return false; + } // get MsgId. + std::pair responsePair; + if (!acknowledgeMsg(token, responsePair)) + { + std::cerr << "p3Wire::createReplyPulse() FAILED acknowledgeMsg for Response Pulse"; + std::cerr << std::endl; + return false; + } - // update responsePulse. - // TODO. + std::cerr << "p3Wire::createReplyPulse() Response Pulse ID: ("; + std::cerr << responsePair.first.toStdString() << ", "; + std::cerr << responsePair.second.toStdString() << ")"; + std::cerr << std::endl; + + // retrieve newly generated message. + // ********************************************************** + RsWirePulseSPtr createdResponsePulse; + if (!fetchPulse(responsePair.first, responsePair.second, createdResponsePulse)) + { + std::cerr << "p3Wire::createReplyPulse() fetch createdReponsePulse FAILED"; + std::cerr << std::endl; + return false; + } + + /* Check that pulses is created properly */ + if ((createdResponsePulse->mMeta.mGroupId != responsePulse.mMeta.mGroupId) || + (createdResponsePulse->mPulseText != responsePulse.mPulseText) || + (createdResponsePulse->mRefGroupId != responsePulse.mRefGroupId) || + (createdResponsePulse->mRefOrigMsgId != responsePulse.mRefOrigMsgId)) + { + std::cerr << "p3Wire::createReplyPulse() fetch createdReponsePulse FAILED"; + std::cerr << std::endl; + return false; + } // create ReplyTo Ref Msg. std::cerr << "PulseAddDialog::postRefPulse() create Reference!"; @@ -637,7 +706,7 @@ bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGro refPulse.mMeta.mOrigMsgId.clear(); refPulse.mPulseType = WIRE_PULSE_TYPE_REFERENCE | reply_type; - refPulse.mReplySentiment = 0; //toPulseSentiment(ui.comboBox_sentiment->currentIndex()); + refPulse.mSentiment = 0; // should this be =? createdResponsePulse->mSentiment; // Dont put parent PulseText into refPulse - it is available on Thread Msg. // otherwise gives impression it is correctly setup Parent / Reply... @@ -647,15 +716,41 @@ bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGro // refs refer back to own Post. refPulse.mRefGroupId = replyWithGroup.mMeta.mGroupId; refPulse.mRefGroupName = replyWithGroup.mMeta.mGroupName; - refPulse.mRefOrigMsgId = responsePulse.mMeta.mOrigMsgId; + refPulse.mRefOrigMsgId = createdResponsePulse->mMeta.mOrigMsgId; refPulse.mRefAuthorId = replyWithGroup.mMeta.mAuthorId; - refPulse.mRefPublishTs = responsePulse.mMeta.mPublishTs; - refPulse.mRefPulseText = responsePulse.mPulseText; - - // uint32_t token; - rsWire->createPulse(token, refPulse); + refPulse.mRefPublishTs = createdResponsePulse->mMeta.mPublishTs; + refPulse.mRefPulseText = createdResponsePulse->mPulseText; // publish Ref Msg. + if (!createPulse(token, refPulse)) + { + std::cerr << "p3Wire::createReplyPulse() FAILED to create Ref Pulse"; + std::cerr << std::endl; + return false; + } + + result = waitToken(token); + if (result != RsTokenService::COMPLETE) + { + std::cerr << "p3Wire::createReplyPulse() FAILED(2) to create Ref Pulse"; + std::cerr << std::endl; + return false; + } + + // get MsgId. + std::pair refPair; + if (!acknowledgeMsg(token, refPair)) + { + std::cerr << "p3Wire::createReplyPulse() FAILED acknowledgeMsg for Ref Pulse"; + std::cerr << std::endl; + return false; + } + + std::cerr << "p3Wire::createReplyPulse() Success: Ref Pulse ID: ("; + std::cerr << refPair.first.toStdString() << ", "; + std::cerr << refPair.second.toStdString() << ")"; + std::cerr << std::endl; + return true; } @@ -706,6 +801,15 @@ bool p3Wire::getWireGroup(const RsGxsGroupId &groupId, RsWireGroupSPtr &grp) return true; } +// TODO Remove duplicate ... +bool p3Wire::getWirePulse(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId, RsWirePulseSPtr &pPulse) +{ + return fetchPulse(groupId, msgId, pPulse); +} + + + + bool compare_time(const RsWirePulseSPtr& first, const RsWirePulseSPtr &second) { return first->mMeta.mPublishTs > second->mMeta.mPublishTs; diff --git a/libretroshare/src/services/p3wire.h b/libretroshare/src/services/p3wire.h index cf0d7b080..897886e67 100644 --- a/libretroshare/src/services/p3wire.h +++ b/libretroshare/src/services/p3wire.h @@ -63,10 +63,10 @@ public: // New Interfaces. // Blocking, request structures for display. - virtual bool createOriginalPulse(RsGxsGroupId grpId, std::string msg) override; + virtual bool createOriginalPulse(const RsGxsGroupId &grpId, RsWirePulseSPtr pPulse) override; virtual bool createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGroupId replyWith, uint32_t reply_type, - uint32_t sentiment, std::string msg) override; + RsWirePulseSPtr pPulse) override; #if 0 virtual bool createReplyPulse(uint32_t &token, RsWirePulse &pulse) override; @@ -75,6 +75,7 @@ public: #endif virtual bool getWireGroup(const RsGxsGroupId &groupId, RsWireGroupSPtr &grp) override; + virtual bool getWirePulse(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId, RsWirePulseSPtr &pPulse) override; virtual bool getPulsesForGroups(const std::list &groupIds, std::list &pulsePtrs) override; diff --git a/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp b/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp index 27bb7d185..651a53e23 100644 --- a/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp @@ -28,12 +28,10 @@ const uint32_t PULSE_MAX_SIZE = 1000; // 1k char. /** Constructor */ PulseAddDialog::PulseAddDialog(QWidget *parent) -: QWidget(parent), mIsReply(false), mWaitingRefMsg(false) +: QWidget(parent), mIsReply(false) { ui.setupUi(this); - mWireQueue = new TokenQueue(rsWire->getTokenService(), this); - connect(ui.pushButton_Post, SIGNAL( clicked( void ) ), this, SLOT( postPulse( void ) ) ); connect(ui.pushButton_AddURL, SIGNAL( clicked( void ) ), this, SLOT( addURL( void ) ) ); connect(ui.pushButton_ClearDisplayAs, SIGNAL( clicked( void ) ), this, SLOT( clearDisplayAs( void ) ) ); @@ -48,12 +46,21 @@ void PulseAddDialog::setGroup(RsWireGroup &group) mGroup = group; } +// set ReplyWith Group. +void PulseAddDialog::setGroup(const RsGxsGroupId &grpId) +{ + /* fetch in the background */ + RsWireGroupSPtr pGroup; + rsWire->getWireGroup(grpId, pGroup); + + setGroup(*pGroup); +} void PulseAddDialog::cleanup() { if (mIsReply) { - std::cerr << "PulseAddDialog::setReplyTo() cleaning up old replyto"; + std::cerr << "PulseAddDialog::cleanup() cleaning up old replyto"; std::cerr << std::endl; QLayout *layout = ui.widget_replyto->layout(); // completely delete layout and sublayouts @@ -63,14 +70,14 @@ void PulseAddDialog::cleanup() { if ((widget = item->widget()) != 0) { - std::cerr << "PulseAddDialog::setReplyTo() removing widget"; + std::cerr << "PulseAddDialog::cleanup() removing widget"; std::cerr << std::endl; widget->hide(); delete widget; } else { - std::cerr << "PulseAddDialog::setReplyTo() removing item"; + std::cerr << "PulseAddDialog::cleanup() removing item"; std::cerr << std::endl; delete item; } @@ -96,11 +103,11 @@ void PulseAddDialog::pulseTextChanged() ui.pushButton_Post->setEnabled(enable); } +// Old Interface, deprecate / make internal. void PulseAddDialog::setReplyTo(RsWirePulse &pulse, std::string &groupName) { mIsReply = true; mReplyToPulse = pulse; - mReplyGroupName = groupName; ui.frame_reply->setVisible(true); { @@ -116,6 +123,27 @@ void PulseAddDialog::setReplyTo(RsWirePulse &pulse, std::string &groupName) } } +void PulseAddDialog::setReplyTo(const RsGxsGroupId &grpId, const RsGxsMessageId &msgId) +{ + /* fetch in the background */ + RsWireGroupSPtr pGroup; + if (!rsWire->getWireGroup(grpId, pGroup)) + { + std::cerr << "PulseAddDialog::setRplyTo() failed to fetch group"; + std::cerr << std::endl; + return; + } + + RsWirePulseSPtr pPulse; + if (!rsWire->getWirePulse(grpId, msgId, pPulse)) + { + std::cerr << "PulseAddDialog::setRplyTo() failed to fetch pulse"; + std::cerr << std::endl; + return; + } + + setReplyTo(*pPulse, pGroup->mMeta.mGroupName); +} void PulseAddDialog::addURL() { @@ -164,21 +192,19 @@ void PulseAddDialog::postOriginalPulse() std::cerr << "PulseAddDialog::postOriginalPulse()"; std::cerr << std::endl; - RsWirePulse pulse; + RsWirePulseSPtr pPulse(new RsWirePulse()); - pulse.mMeta.mGroupId = mGroup.mMeta.mGroupId; - pulse.mMeta.mAuthorId = mGroup.mMeta.mAuthorId; - pulse.mMeta.mThreadId.clear(); - pulse.mMeta.mParentId.clear(); - pulse.mMeta.mOrigMsgId.clear(); + pPulse->mSentiment = WIRE_PULSE_SENTIMENT_NO_SENTIMENT; + pPulse->mPulseText = ui.textEdit_Pulse->toPlainText().toStdString(); + // set images here too. - pulse.mPulseType = WIRE_PULSE_TYPE_ORIGINAL; - pulse.mReplySentiment = WIRE_PULSE_SENTIMENT_NO_SENTIMENT; - pulse.mPulseText = ui.textEdit_Pulse->toPlainText().toStdString(); - // all mRefs should empty. - - uint32_t token; - rsWire->createPulse(token, pulse); + // this should be in async thread, so doesn't block UI thread. + if (!rsWire->createOriginalPulse(mGroup.mMeta.mGroupId, pPulse)) + { + std::cerr << "PulseAddDialog::postOriginalPulse() FAILED"; + std::cerr << std::endl; + return; + } clearDialog(); hide(); @@ -211,67 +237,23 @@ void PulseAddDialog::postReplyPulse() std::cerr << "PulseAddDialog::postReplyPulse()"; std::cerr << std::endl; - RsWirePulse pulse; + RsWirePulseSPtr pPulse(new RsWirePulse()); - pulse.mMeta.mGroupId = mGroup.mMeta.mGroupId; - pulse.mMeta.mAuthorId = mGroup.mMeta.mAuthorId; - pulse.mMeta.mThreadId.clear(); - pulse.mMeta.mParentId.clear(); - pulse.mMeta.mOrigMsgId.clear(); + pPulse->mSentiment = toPulseSentiment(ui.comboBox_sentiment->currentIndex()); + pPulse->mPulseText = ui.textEdit_Pulse->toPlainText().toStdString(); + // set images too. - pulse.mPulseType = WIRE_PULSE_TYPE_RESPONSE | WIRE_PULSE_TYPE_REPLY; - pulse.mReplySentiment = toPulseSentiment(ui.comboBox_sentiment->currentIndex()); - pulse.mPulseText = ui.textEdit_Pulse->toPlainText().toStdString(); - - // mRefs refer to parent post. - pulse.mRefGroupId = mReplyToPulse.mMeta.mGroupId; - pulse.mRefGroupName = mReplyGroupName; - pulse.mRefOrigMsgId = mReplyToPulse.mMeta.mOrigMsgId; - pulse.mRefAuthorId = mReplyToPulse.mMeta.mAuthorId; - pulse.mRefPublishTs = mReplyToPulse.mMeta.mPublishTs; - pulse.mRefPulseText = mReplyToPulse.mPulseText; - - // Need Pulse MsgID before we can create associated Reference. - mWaitingRefMsg = true; - - uint32_t token; - rsWire->createPulse(token, pulse); - mWireQueue->queueRequest(token, TOKENREQ_MSGINFO, RS_TOKREQ_ANSTYPE_ACK, 0); -} - - -void PulseAddDialog::postRefPulse(RsWirePulse &pulse) -{ - std::cerr << "PulseAddDialog::postRefPulse() create Reference!"; - std::cerr << std::endl; - - // Reference Pulse. posted on Parent's Group. - RsWirePulse refPulse; - - refPulse.mMeta.mGroupId = mReplyToPulse.mMeta.mGroupId; - refPulse.mMeta.mAuthorId = mGroup.mMeta.mAuthorId; // own author Id. - refPulse.mMeta.mThreadId = mReplyToPulse.mMeta.mOrigMsgId; - refPulse.mMeta.mParentId = mReplyToPulse.mMeta.mOrigMsgId; - refPulse.mMeta.mOrigMsgId.clear(); - - refPulse.mPulseType = WIRE_PULSE_TYPE_REFERENCE | WIRE_PULSE_TYPE_REPLY; - refPulse.mReplySentiment = toPulseSentiment(ui.comboBox_sentiment->currentIndex()); - - // Dont put parent PulseText into refPulse - it is available on Thread Msg. - // otherwise gives impression it is correctly setup Parent / Reply... - // when in fact the parent PublishTS, and AuthorId are wrong. - refPulse.mPulseText = ""; - - // refs refer back to own Post. - refPulse.mRefGroupId = mGroup.mMeta.mGroupId; - refPulse.mRefGroupName = mGroup.mMeta.mGroupName; - refPulse.mRefOrigMsgId = pulse.mMeta.mOrigMsgId; - refPulse.mRefAuthorId = mGroup.mMeta.mAuthorId; - refPulse.mRefPublishTs = pulse.mMeta.mPublishTs; - refPulse.mRefPulseText = pulse.mPulseText; - - uint32_t token; - rsWire->createPulse(token, refPulse); + // this should be in async thread, so doesn't block UI thread. + if (!rsWire->createReplyPulse(mReplyToPulse.mMeta.mGroupId, + mReplyToPulse.mMeta.mOrigMsgId, + mGroup.mMeta.mGroupId, + WIRE_PULSE_TYPE_REPLY, + pPulse)) + { + std::cerr << "PulseAddDialog::postReplyPulse() FAILED"; + std::cerr << std::endl; + return; + } clearDialog(); hide(); @@ -283,89 +265,4 @@ void PulseAddDialog::clearDialog() } -void PulseAddDialog::acknowledgeMessage(const uint32_t &token) -{ - std::cerr << "PulseAddDialog::acknowledgeMessage()"; - std::cerr << std::endl; - std::pair p; - rsWire->acknowledgeMsg(token, p); - - if (mWaitingRefMsg) - { - std::cerr << "PulseAddDialog::acknowledgeMessage() Waiting Ref Msg"; - std::cerr << std::endl; - mWaitingRefMsg = false; - - // request photo data. - GxsMsgReq req; - std::set msgIds; - msgIds.insert(p.second); - req[p.first] = msgIds; - - RsTokReqOptions opts; - opts.mReqType = GXS_REQUEST_TYPE_MSG_DATA; - uint32_t token; - mWireQueue->requestMsgInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, req, 0); - } - else - { - std::cerr << "PulseAddDialog::acknowledgeMessage() Not Waiting Ref Msg"; - std::cerr << std::endl; - } -} - -void PulseAddDialog::loadPulseData(const uint32_t &token) -{ - std::cerr << "PulseAddDialog::loadPulseData()"; - std::cerr << std::endl; - std::vector pulses; - rsWire->getPulseData(token, pulses); - - if (pulses.size() != 1) - { - std::cerr << "PulseAddDialog::loadPulseData() Error Too many pulses"; - std::cerr << std::endl; - return; - } - - std::cerr << "PulseAddDialog::loadPulseData() calling postRefMsg"; - std::cerr << std::endl; - - RsWirePulse& pulse = pulses[0]; - postRefPulse(pulse); -} - - -/**************************** Request / Response Filling of Data ************************/ - -void PulseAddDialog::loadRequest(const TokenQueue *queue, const TokenRequest &req) -{ - if (queue == mWireQueue) - { - /* now switch on req */ - switch(req.mType) - { - case TOKENREQ_MSGINFO: - switch(req.mAnsType) - { - case RS_TOKREQ_ANSTYPE_ACK: - acknowledgeMessage(req.mToken); - break; - case RS_TOKREQ_ANSTYPE_DATA: - loadPulseData(req.mToken); - break; - default: - std::cerr << "PulseAddDialog::loadRequest() ERROR: MSG: INVALID ANS TYPE"; - std::cerr << std::endl; - break; - } - break; - default: - std::cerr << "PulseAddDialog::loadRequest() ERROR: INVALID TYPE"; - std::cerr << std::endl; - break; - } - } -} - diff --git a/retroshare-gui/src/gui/TheWire/PulseAddDialog.h b/retroshare-gui/src/gui/TheWire/PulseAddDialog.h index 0ab3c826a..24be86ff4 100644 --- a/retroshare-gui/src/gui/TheWire/PulseAddDialog.h +++ b/retroshare-gui/src/gui/TheWire/PulseAddDialog.h @@ -24,9 +24,8 @@ #include "ui_PulseAddDialog.h" #include -#include "util/TokenQueue.h" -class PulseAddDialog : public QWidget, public TokenResponse +class PulseAddDialog : public QWidget { Q_OBJECT @@ -34,8 +33,9 @@ public: PulseAddDialog(QWidget *parent = 0); void cleanup(); - void setGroup(RsWireGroup &group); - void setReplyTo(RsWirePulse &pulse, std::string &groupName); + + void setReplyTo(const RsGxsGroupId &grpId, const RsGxsMessageId &msgId); + void setGroup(const RsGxsGroupId &grpId); private slots: void addURL(); @@ -46,26 +46,23 @@ private slots: void pulseTextChanged(); private: + // OLD VERSIONs, private now. + void setGroup(RsWireGroup &group); + void setReplyTo(RsWirePulse &pulse, std::string &groupName); + void postOriginalPulse(); void postReplyPulse(); - void postRefPulse(RsWirePulse &pulse); - void acknowledgeMessage(const uint32_t &token); - void loadPulseData(const uint32_t &token); - void loadRequest(const TokenQueue *queue, const TokenRequest &req); uint32_t toPulseSentiment(int index); protected: - RsWireGroup mGroup; // where we want to post from. + RsWireGroup mGroup; // replyWith. // if this is a reply bool mIsReply; - std::string mReplyGroupName; RsWirePulse mReplyToPulse; - bool mWaitingRefMsg; - TokenQueue* mWireQueue; Ui::PulseAddDialog ui; }; diff --git a/retroshare-gui/src/gui/TheWire/PulseDetails.cpp b/retroshare-gui/src/gui/TheWire/PulseDetails.cpp index eb899c25b..3cb45dc2b 100644 --- a/retroshare-gui/src/gui/TheWire/PulseDetails.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseDetails.cpp @@ -56,6 +56,7 @@ PulseDetails::PulseDetails(PulseHolder *actions, // reuse Meta data structure. mPulse.mMeta.mGroupId = parentGroupId; mPulse.mMeta.mOrigMsgId = parentOrigMsgId; + mPulse.mMeta.mMsgId = parentOrigMsgId; // add in, for completeness. mPulse.mMeta.mAuthorId = parentAuthorId; mPulse.mMeta.mPublishTs = parentPublishTs; mPulse.mPulseText = parentPulseText; diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.cpp b/retroshare-gui/src/gui/TheWire/WireDialog.cpp index 6cbea03df..ab6460784 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/WireDialog.cpp @@ -136,7 +136,9 @@ void WireDialog::reply(RsWirePulse &pulse, std::string &groupName) { std::cerr << "WireDialog::reply("; std::cerr << pulse.mMeta.mGroupId.toStdString(); - std::cerr << ","; + std::cerr << ", MsgId:"; + std::cerr << pulse.mMeta.mMsgId.toStdString(); + std::cerr << ", OrigMsgId:"; std::cerr << pulse.mMeta.mOrigMsgId.toStdString(); std::cerr << ")"; std::cerr << std::endl; @@ -159,10 +161,11 @@ void WireDialog::reply(RsWirePulse &pulse, std::string &groupName) // publishing group. RsWireGroup group = mOwnGroups[idx]; mAddDialog->cleanup(); - mAddDialog->setGroup(group); + mAddDialog->setGroup(group.mMeta.mGroupId); // establish replyTo. - mAddDialog->setReplyTo(pulse, groupName); + //mAddDialog->setReplyTo(pulse, groupName); + mAddDialog->setReplyTo(pulse.mMeta.mGroupId, pulse.mMeta.mMsgId); mAddDialog->show(); } @@ -269,7 +272,7 @@ void WireDialog::createPulse() RsWireGroup group = mOwnGroups[idx]; mAddDialog->cleanup(); - mAddDialog->setGroup(group); + mAddDialog->setGroup(group.mMeta.mGroupId); mAddDialog->show(); } @@ -440,6 +443,9 @@ void WireDialog::showSelectedGroups() std::list grpIds; grpIds.push_back(mGroupSelected->groupId()); requestPulseData(grpIds); + + // show GroupFocus. + showGroupFocus(mGroupSelected->groupId()); } else { @@ -454,6 +460,7 @@ void WireDialog::showGroups() deletePulses(); + std::list allGroupIds; /* depends on the comboBox */ std::map::const_iterator it; @@ -481,9 +488,12 @@ void WireDialog::showGroups() // request data. std::list grpIds; grpIds.push_back(it->second.mMeta.mGroupId); + allGroupIds.push_back(it->second.mMeta.mGroupId); requestPulseData(grpIds); } } + + showGroupsPulses(allGroupIds); } @@ -1015,6 +1025,8 @@ void WireDialog::postPulseFocus(RsWirePulseSPtr pPulse) return; } + ui.label_viewMode->setText("Pulse Focus"); + addTwitterView(new PulseTopLevel(this, pPulse)); std::list::iterator it; @@ -1089,6 +1101,8 @@ void WireDialog::postGroupFocus(RsWireGroupSPtr group, std::listsetText("Group Focus"); + addTwitterView(new PulseViewGroup(this, group)); std::list::iterator it; @@ -1104,5 +1118,49 @@ void WireDialog::postGroupFocus(RsWireGroupSPtr group, std::list groupIds) +{ + clearTwitterView(); + // background thread for loading. + RsThread::async([this, groupIds]() + { + // fetch data from backend. + std::list pulses; + bool success = rsWire->getPulsesForGroups(groupIds, pulses); + + sleep(2); + + /* now insert the pulse + children into the layput */ + RsQThreadUtils::postToObject([pulses,this]() + { + /* Here it goes any code you want to be executed on the Qt Gui + * thread, for example to update the data model with new information + * after a blocking call to RetroShare API complete */ + + postGroupsPulses(pulses); + + }, this); + }); +} + +void WireDialog::postGroupsPulses(std::list pulses) +{ + std::cerr << "WireDialog::postGroupsPulses()"; + std::cerr << std::endl; + + ui.label_viewMode->setText("Groups Pulses"); + + std::list::iterator it; + for(it = pulses.begin(); it != pulses.end(); it++) + { + RsWirePulseSPtr reply = *it; + PulseReply *firstReply = new PulseReply(this, reply); + addTwitterView(firstReply); + firstReply->showReplyLine(false); + + addTwitterView(new PulseReplySeperator()); + + } +} diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.h b/retroshare-gui/src/gui/TheWire/WireDialog.h index d3c16664f..7e18f523f 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.h +++ b/retroshare-gui/src/gui/TheWire/WireDialog.h @@ -83,12 +83,16 @@ public: void postTestTwitterView(); void clearTwitterView(); void addTwitterView(PulseViewItem *item); + void showPulseFocus(const RsGxsGroupId groupId, const RsGxsMessageId msgId); void postPulseFocus(RsWirePulseSPtr pulse); void showGroupFocus(const RsGxsGroupId groupId); void postGroupFocus(RsWireGroupSPtr group, std::list pulses); + void showGroupsPulses(const std::list groupIds); + void postGroupsPulses(std::list pulses); + private slots: void createGroup(); diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.ui b/retroshare-gui/src/gui/TheWire/WireDialog.ui index fa0d76eda..dddbe26e6 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.ui +++ b/retroshare-gui/src/gui/TheWire/WireDialog.ui @@ -192,7 +192,7 @@ 0 0 228 - 421 + 442 @@ -223,9 +223,9 @@ - 0 + 1 - + Orig View @@ -367,6 +367,13 @@ Fancy View + + + + Most Recent + + + @@ -381,7 +388,7 @@ 0 0 508 - 466 + 443 From f585b7a629f347c54ea0b0ce67e96a514482095b Mon Sep 17 00:00:00 2001 From: drbob Date: Sun, 17 May 2020 12:10:46 +1000 Subject: [PATCH 04/95] Enable Republish / Likes from new UI elements Update interface to use groupId / msgId. Tweak PulseAddDialog for Republish & like. Hide Like messages from showing in UI. Wire up buttons from new UI elements. --- .../src/gui/TheWire/PulseAddDialog.cpp | 34 +++++- .../src/gui/TheWire/PulseAddDialog.h | 6 +- .../src/gui/TheWire/PulseAddDialog.ui | 2 +- .../src/gui/TheWire/PulseViewItem.cpp | 24 +++- .../src/gui/TheWire/PulseViewItem.h | 16 +-- retroshare-gui/src/gui/TheWire/WireDialog.cpp | 113 ++++++++++++------ retroshare-gui/src/gui/TheWire/WireDialog.h | 18 +-- 7 files changed, 148 insertions(+), 65 deletions(-) diff --git a/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp b/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp index 651a53e23..10e76f173 100644 --- a/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp @@ -91,9 +91,13 @@ void PulseAddDialog::cleanup() ui.lineEdit_URL->setText(""); ui.lineEdit_DisplayAs->setText(""); ui.textEdit_Pulse->setPlainText(""); - ui.pushButton_Post->setEnabled(false); // disable URL until functionality finished. ui.frame_URL->setEnabled(false); + + ui.pushButton_Post->setEnabled(false); + ui.pushButton_Post->setText("Post Pulse to Wire"); + ui.frame_input->setVisible(true); + ui.widget_sentiment->setVisible(true); } void PulseAddDialog::pulseTextChanged() @@ -104,10 +108,11 @@ void PulseAddDialog::pulseTextChanged() } // Old Interface, deprecate / make internal. -void PulseAddDialog::setReplyTo(RsWirePulse &pulse, std::string &groupName) +void PulseAddDialog::setReplyTo(RsWirePulse &pulse, std::string &groupName, uint32_t replyType) { mIsReply = true; mReplyToPulse = pulse; + mReplyType = replyType; ui.frame_reply->setVisible(true); { @@ -121,9 +126,28 @@ void PulseAddDialog::setReplyTo(RsWirePulse &pulse, std::string &groupName) ui.widget_replyto->setLayout(vbox); ui.widget_replyto->setVisible(true); } + + if (mReplyType & WIRE_PULSE_TYPE_REPLY) + { + ui.pushButton_Post->setText("Reply to Pulse"); + } + else + { + // cannot add msg for like / republish. + ui.pushButton_Post->setEnabled(true); + ui.frame_input->setVisible(false); + ui.widget_sentiment->setVisible(false); + if (mReplyType & WIRE_PULSE_TYPE_REPUBLISH) { + ui.pushButton_Post->setText("Republish Pulse"); + } + else if (mReplyType & WIRE_PULSE_TYPE_LIKE) { + ui.pushButton_Post->setText("Like Pulse"); + } + } + } -void PulseAddDialog::setReplyTo(const RsGxsGroupId &grpId, const RsGxsMessageId &msgId) +void PulseAddDialog::setReplyTo(const RsGxsGroupId &grpId, const RsGxsMessageId &msgId, uint32_t replyType) { /* fetch in the background */ RsWireGroupSPtr pGroup; @@ -142,7 +166,7 @@ void PulseAddDialog::setReplyTo(const RsGxsGroupId &grpId, const RsGxsMessageId return; } - setReplyTo(*pPulse, pGroup->mMeta.mGroupName); + setReplyTo(*pPulse, pGroup->mMeta.mGroupName, replyType); } void PulseAddDialog::addURL() @@ -247,7 +271,7 @@ void PulseAddDialog::postReplyPulse() if (!rsWire->createReplyPulse(mReplyToPulse.mMeta.mGroupId, mReplyToPulse.mMeta.mOrigMsgId, mGroup.mMeta.mGroupId, - WIRE_PULSE_TYPE_REPLY, + mReplyType, pPulse)) { std::cerr << "PulseAddDialog::postReplyPulse() FAILED"; diff --git a/retroshare-gui/src/gui/TheWire/PulseAddDialog.h b/retroshare-gui/src/gui/TheWire/PulseAddDialog.h index 24be86ff4..88b0bb815 100644 --- a/retroshare-gui/src/gui/TheWire/PulseAddDialog.h +++ b/retroshare-gui/src/gui/TheWire/PulseAddDialog.h @@ -34,7 +34,7 @@ public: void cleanup(); - void setReplyTo(const RsGxsGroupId &grpId, const RsGxsMessageId &msgId); + void setReplyTo(const RsGxsGroupId &grpId, const RsGxsMessageId &msgId, uint32_t replyType); void setGroup(const RsGxsGroupId &grpId); private slots: @@ -48,7 +48,7 @@ private slots: private: // OLD VERSIONs, private now. void setGroup(RsWireGroup &group); - void setReplyTo(RsWirePulse &pulse, std::string &groupName); + void setReplyTo(RsWirePulse &pulse, std::string &groupName, uint32_t replyType); void postOriginalPulse(); void postReplyPulse(); @@ -62,9 +62,9 @@ protected: // if this is a reply bool mIsReply; RsWirePulse mReplyToPulse; + uint32_t mReplyType; Ui::PulseAddDialog ui; - }; #endif diff --git a/retroshare-gui/src/gui/TheWire/PulseAddDialog.ui b/retroshare-gui/src/gui/TheWire/PulseAddDialog.ui index b87d02794..6e88f6219 100644 --- a/retroshare-gui/src/gui/TheWire/PulseAddDialog.ui +++ b/retroshare-gui/src/gui/TheWire/PulseAddDialog.ui @@ -150,7 +150,7 @@ - + QFrame::StyledPanel diff --git a/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp b/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp index deb0c65d9..d0d3c2d07 100644 --- a/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp @@ -47,8 +47,12 @@ void PulseDataItem::actionReply() std::cerr << std::endl; if (mHolder) { - std::string groupName = "unknownGroupName"; - mHolder->PVHreply(*mPulse, groupName); + if (mPulse->mPulseType & WIRE_PULSE_TYPE_REFERENCE) { + std::cerr << "PulseDataItem::actionReply() NO ACTION FOR REF"; + std::cerr << std::endl; + return; + } + mHolder->PVHreply(mPulse->mMeta.mGroupId, mPulse->mMeta.mMsgId); } } @@ -58,8 +62,12 @@ void PulseDataItem::actionRepublish() std::cerr << std::endl; if (mHolder) { - std::string groupName = "unknownGroupName"; - mHolder->PVHrepublish(*mPulse, groupName); + if (mPulse->mPulseType & WIRE_PULSE_TYPE_REFERENCE) { + std::cerr << "PulseDataItem::actionRepublish() NO ACTION FOR REF"; + std::cerr << std::endl; + return; + } + mHolder->PVHrepublish(mPulse->mMeta.mGroupId, mPulse->mMeta.mMsgId); } } @@ -69,8 +77,12 @@ void PulseDataItem::actionLike() std::cerr << std::endl; if (mHolder) { - std::string groupName = "unknownGroupName"; - mHolder->PVHlike(*mPulse, groupName); + if (mPulse->mPulseType & WIRE_PULSE_TYPE_REFERENCE) { + std::cerr << "PulseDataItem::actionLike() NO ACTION FOR REF"; + std::cerr << std::endl; + return; + } + mHolder->PVHlike(mPulse->mMeta.mGroupId, mPulse->mMeta.mMsgId); } } diff --git a/retroshare-gui/src/gui/TheWire/PulseViewItem.h b/retroshare-gui/src/gui/TheWire/PulseViewItem.h index bb22afdd6..8c0c6bbe6 100644 --- a/retroshare-gui/src/gui/TheWire/PulseViewItem.h +++ b/retroshare-gui/src/gui/TheWire/PulseViewItem.h @@ -33,16 +33,16 @@ public: virtual ~PulseViewHolder() {} // Actions. - virtual void PVHreply(RsWirePulse &pulse, std::string &groupName) = 0; - virtual void PVHrepublish(RsWirePulse &pulse, std::string &groupName) = 0; - virtual void PVHlike(RsWirePulse &pulse, std::string &groupName) = 0; + virtual void PVHreply(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) = 0; + virtual void PVHrepublish(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) = 0; + virtual void PVHlike(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) = 0; - virtual void PVHviewGroup(RsGxsGroupId &groupId) = 0; - virtual void PVHviewPulse(RsGxsGroupId &groupId, RsGxsMessageId &msgId) = 0; - virtual void PVHviewReply(RsGxsGroupId &groupId, RsGxsMessageId &msgId) = 0; + virtual void PVHviewGroup(const RsGxsGroupId &groupId) = 0; + virtual void PVHviewPulse(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) = 0; + virtual void PVHviewReply(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) = 0; - virtual void PVHfollow(RsGxsGroupId &groupId) = 0; - virtual void PVHrate(RsGxsId &authorId) = 0; + virtual void PVHfollow(const RsGxsGroupId &groupId) = 0; + virtual void PVHrate(const RsGxsId &authorId) = 0; }; class PulseDataInterface diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.cpp b/retroshare-gui/src/gui/TheWire/WireDialog.cpp index ab6460784..cf4c93ac5 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/WireDialog.cpp @@ -132,6 +132,35 @@ void WireDialog::rate(RsGxsId &authorId) std::cerr << std::endl; } +bool WireDialog::setupPulseAddDialog() +{ + std::cerr << "WireDialog::setupPulseAddDialog()"; + std::cerr << std::endl; + + if (!mAddDialog) + { + mAddDialog = new PulseAddDialog(NULL); + mAddDialog->hide(); + } + + mAddDialog->cleanup(); + + int idx = ui.groupChooser->currentIndex(); + if (idx < 0) { + std::cerr << "WireDialog::setupPulseAddDialog() ERROR GETTING AuthorId!"; + std::cerr << std::endl; + + QMessageBox::warning(this, tr("RetroShare"),tr("Please create or choose Wire Groupd first"), QMessageBox::Ok, QMessageBox::Ok); + return false; + } + + // publishing group. + RsWireGroup group = mOwnGroups[idx]; + mAddDialog->setGroup(group.mMeta.mGroupId); + + return true; +} + void WireDialog::reply(RsWirePulse &pulse, std::string &groupName) { std::cerr << "WireDialog::reply("; @@ -143,31 +172,11 @@ void WireDialog::reply(RsWirePulse &pulse, std::string &groupName) std::cerr << ")"; std::cerr << std::endl; - if (!mAddDialog) + if (setupPulseAddDialog()) { - mAddDialog = new PulseAddDialog(NULL); - mAddDialog->hide(); + mAddDialog->setReplyTo(pulse.mMeta.mGroupId, pulse.mMeta.mMsgId, WIRE_PULSE_TYPE_REPLY); + mAddDialog->show(); } - - int idx = ui.groupChooser->currentIndex(); - if (idx < 0) { - std::cerr << "WireDialog::reply() ERROR GETTING AuthorId!"; - std::cerr << std::endl; - - QMessageBox::warning(this, tr("RetroShare"),tr("Please create or choose Wire Groupd first"), QMessageBox::Ok, QMessageBox::Ok); - return; - } - - // publishing group. - RsWireGroup group = mOwnGroups[idx]; - mAddDialog->cleanup(); - mAddDialog->setGroup(group.mMeta.mGroupId); - - // establish replyTo. - //mAddDialog->setReplyTo(pulse, groupName); - mAddDialog->setReplyTo(pulse.mMeta.mGroupId, pulse.mMeta.mMsgId); - - mAddDialog->show(); } void WireDialog::notifyPulseSelection(PulseItem *item) @@ -857,25 +866,46 @@ void WireDialog::loadRequest(const TokenQueue *queue, const TokenRequest &req) // PulseDataItem interface // Actions. -void WireDialog::PVHreply(RsWirePulse &pulse, std::string &groupName) +void WireDialog::PVHreply(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) { - std::cerr << "WireDialog::PVHreply() TODO"; + std::cerr << "WireDialog::PVHreply() GroupId: " << groupId; + std::cerr << "MsgId: " << msgId; std::cerr << std::endl; + + if (setupPulseAddDialog()) + { + mAddDialog->setReplyTo(groupId, msgId, WIRE_PULSE_TYPE_REPLY); + mAddDialog->show(); + } } -void WireDialog::PVHrepublish(RsWirePulse &pulse, std::string &groupName) +void WireDialog::PVHrepublish(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) { - std::cerr << "WireDialog::PVHrepublish() TODO"; + std::cerr << "WireDialog::PVHrepublish() GroupId: " << groupId; + std::cerr << "MsgId: " << msgId; std::cerr << std::endl; + + if (setupPulseAddDialog()) + { + mAddDialog->setReplyTo(groupId, msgId, WIRE_PULSE_TYPE_REPUBLISH); + mAddDialog->show(); + } } -void WireDialog::PVHlike(RsWirePulse &pulse, std::string &groupName) +void WireDialog::PVHlike(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) { - std::cerr << "WireDialog::PVHlike() TODO"; + std::cerr << "WireDialog::PVHlike() GroupId: " << groupId; + std::cerr << "MsgId: " << msgId; std::cerr << std::endl; + + if (setupPulseAddDialog()) + { + mAddDialog->setReplyTo(groupId, msgId, WIRE_PULSE_TYPE_LIKE); + mAddDialog->show(); + } } -void WireDialog::PVHviewGroup(RsGxsGroupId &groupId) +void WireDialog::PVHviewGroup(const RsGxsGroupId &groupId) { std::cerr << "WireDialog::PVHviewGroup("; std::cerr << groupId.toStdString(); @@ -885,7 +915,7 @@ void WireDialog::PVHviewGroup(RsGxsGroupId &groupId) showGroupFocus(groupId); } -void WireDialog::PVHviewPulse(RsGxsGroupId &groupId, RsGxsMessageId &msgId) +void WireDialog::PVHviewPulse(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) { std::cerr << "WireDialog::PVHviewPulse("; std::cerr << groupId.toStdString() << ","; @@ -896,7 +926,7 @@ void WireDialog::PVHviewPulse(RsGxsGroupId &groupId, RsGxsMessageId &msgId) showPulseFocus(groupId, msgId); } -void WireDialog::PVHviewReply(RsGxsGroupId &groupId, RsGxsMessageId &msgId) +void WireDialog::PVHviewReply(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) { std::cerr << "WireDialog::PVHviewReply("; std::cerr << groupId.toStdString() << ","; @@ -907,7 +937,7 @@ void WireDialog::PVHviewReply(RsGxsGroupId &groupId, RsGxsMessageId &msgId) // showPulseFocus(groupId, msgId); } -void WireDialog::PVHfollow(RsGxsGroupId &groupId) +void WireDialog::PVHfollow(const RsGxsGroupId &groupId) { std::cerr << "WireDialog::PVHfollow("; std::cerr << groupId.toStdString(); @@ -915,7 +945,7 @@ void WireDialog::PVHfollow(RsGxsGroupId &groupId) std::cerr << std::endl; } -void WireDialog::PVHrate(RsGxsId &authorId) +void WireDialog::PVHrate(const RsGxsId &authorId) { std::cerr << "WireDialog::PVHrate("; std::cerr << authorId.toStdString(); @@ -1109,6 +1139,14 @@ void WireDialog::postGroupFocus(RsWireGroupSPtr group, std::listmPulseType & WIRE_PULSE_TYPE_LIKE) { + std::cerr << "WireDialog::postGroupFocus() Not showing LIKE"; + std::cerr << std::endl; + continue; + } + PulseReply *firstReply = new PulseReply(this, reply); addTwitterView(firstReply); firstReply->showReplyLine(false); @@ -1155,6 +1193,13 @@ void WireDialog::postGroupsPulses(std::list pulses) for(it = pulses.begin(); it != pulses.end(); it++) { RsWirePulseSPtr reply = *it; + // don't show likes + if (reply->mPulseType & WIRE_PULSE_TYPE_LIKE) { + std::cerr << "WireDialog::postGroupsPulses() Not showing LIKE"; + std::cerr << std::endl; + continue; + } + PulseReply *firstReply = new PulseReply(this, reply); addTwitterView(firstReply); firstReply->showReplyLine(false); diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.h b/retroshare-gui/src/gui/TheWire/WireDialog.h index 7e18f523f..35351af17 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.h +++ b/retroshare-gui/src/gui/TheWire/WireDialog.h @@ -68,16 +68,16 @@ public: virtual void notifyGroupSelection(WireGroupItem *item) override; // PulseViewItem interface - virtual void PVHreply(RsWirePulse &pulse, std::string &groupName) override; - virtual void PVHrepublish(RsWirePulse &pulse, std::string &groupName) override; - virtual void PVHlike(RsWirePulse &pulse, std::string &groupName) override; + virtual void PVHreply(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) override; + virtual void PVHrepublish(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) override; + virtual void PVHlike(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) override; - virtual void PVHviewGroup(RsGxsGroupId &groupId) override; - virtual void PVHviewPulse(RsGxsGroupId &groupId, RsGxsMessageId &msgId) override; - virtual void PVHviewReply(RsGxsGroupId &groupId, RsGxsMessageId &msgId) override; + virtual void PVHviewGroup(const RsGxsGroupId &groupId) override; + virtual void PVHviewPulse(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) override; + virtual void PVHviewReply(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) override; - virtual void PVHfollow(RsGxsGroupId &groupId) override; - virtual void PVHrate(RsGxsId &authorId) override; + virtual void PVHfollow(const RsGxsGroupId &groupId) override; + virtual void PVHrate(const RsGxsId &authorId) override; // New TwitterView void postTestTwitterView(); @@ -104,6 +104,8 @@ private slots: private: + bool setupPulseAddDialog(); + void addGroup(QWidget *item); void addPulse(RsWirePulse *pulse, RsWireGroup *group, From 3312faf3ea545c16c0e2fab3104c311ae2fb5b56 Mon Sep 17 00:00:00 2001 From: drbob Date: Sun, 17 May 2020 19:56:58 +1000 Subject: [PATCH 05/95] fixup button labels are prefix headers --- retroshare-gui/src/gui/TheWire/PulseReply.cpp | 2 - retroshare-gui/src/gui/TheWire/PulseReply.ui | 33 ++------------ .../src/gui/TheWire/PulseTopLevel.ui | 43 ++++++------------- .../src/gui/TheWire/PulseViewItem.cpp | 4 ++ 4 files changed, 20 insertions(+), 62 deletions(-) diff --git a/retroshare-gui/src/gui/TheWire/PulseReply.cpp b/retroshare-gui/src/gui/TheWire/PulseReply.cpp index 3f3a11719..baa960d27 100644 --- a/retroshare-gui/src/gui/TheWire/PulseReply.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseReply.cpp @@ -124,8 +124,6 @@ void PulseReply::setReferenceString(QString ref) { if (ref.size() == 0) { - // appear to have duplicated here.... - // widget_prefix->setVisible(false); widget_reply_header->setVisible(false); } else diff --git a/retroshare-gui/src/gui/TheWire/PulseReply.ui b/retroshare-gui/src/gui/TheWire/PulseReply.ui index 67bb24484..78a6d7ab7 100644 --- a/retroshare-gui/src/gui/TheWire/PulseReply.ui +++ b/retroshare-gui/src/gui/TheWire/PulseReply.ui @@ -152,7 +152,7 @@ border-radius: 10px} - RPL + REPLY @@ -196,7 +196,7 @@ border-radius: 10px} - RET + REPUBLISH @@ -240,7 +240,7 @@ border-radius: 10px} - LIK + LIKE @@ -284,32 +284,7 @@ border-radius: 10px} - LNK - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - 1 + SHOW diff --git a/retroshare-gui/src/gui/TheWire/PulseTopLevel.ui b/retroshare-gui/src/gui/TheWire/PulseTopLevel.ui index 1a197905a..feb31abee 100644 --- a/retroshare-gui/src/gui/TheWire/PulseTopLevel.ui +++ b/retroshare-gui/src/gui/TheWire/PulseTopLevel.ui @@ -106,7 +106,7 @@ border-radius: 10px} - TMP VIEW PARENT + SHOW PARENT @@ -229,8 +229,14 @@ border-radius: 10px} + + + 0 + 25 + + - TMP VIEW + SHOW GROUP @@ -464,7 +470,7 @@ border-radius: 10px} - RPL + REPLY @@ -508,7 +514,7 @@ border-radius: 10px} - RET + REPUBLISH @@ -552,7 +558,7 @@ border-radius: 10px} - LIK + LIKE @@ -596,32 +602,7 @@ border-radius: 10px} - LNK - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - 1 + SHOW diff --git a/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp b/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp index d0d3c2d07..fe84df5b9 100644 --- a/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp @@ -294,6 +294,10 @@ void PulseDataItem::showPulse() { setReference(mPulse->mPulseType & WIRE_PULSE_RESPONSE_MASK, mPulse->mRefGroupId, mPulse->mRefGroupName); } + else + { + setReference(0, mPulse->mRefGroupId, mPulse->mRefGroupName); + } } } From fbf56fcf03684a9d0a57ac5ebfdd5d535ead37a8 Mon Sep 17 00:00:00 2001 From: drbob Date: Mon, 18 May 2020 17:35:08 +1000 Subject: [PATCH 06/95] Add image handling to PulseAddDialog and PulseMessage --- .../src/gui/TheWire/PulseAddDialog.cpp | 158 +++++++++++++++++- .../src/gui/TheWire/PulseAddDialog.h | 20 +++ .../src/gui/TheWire/PulseAddDialog.ui | 84 +++++++++- .../src/gui/TheWire/PulseMessage.cpp | 40 ++++- .../src/gui/TheWire/PulseMessage.ui | 32 ++-- 5 files changed, 319 insertions(+), 15 deletions(-) diff --git a/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp b/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp index 10e76f173..edf95df35 100644 --- a/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp @@ -19,6 +19,7 @@ *******************************************************************************/ #include +#include #include "PulseDetails.h" @@ -37,6 +38,8 @@ PulseAddDialog::PulseAddDialog(QWidget *parent) connect(ui.pushButton_ClearDisplayAs, SIGNAL( clicked( void ) ), this, SLOT( clearDisplayAs( void ) ) ); connect(ui.pushButton_Cancel, SIGNAL( clicked( void ) ), this, SLOT( cancelPulse( void ) ) ); connect(ui.textEdit_Pulse, SIGNAL( textChanged( void ) ), this, SLOT( pulseTextChanged( void ) ) ); + + setAcceptDrops(true); } void PulseAddDialog::setGroup(RsWireGroup &group) @@ -84,7 +87,7 @@ void PulseAddDialog::cleanup() } // then finally delete layout; - mIsReply = false; + mIsReply = false; } ui.frame_reply->setVisible(false); ui.comboBox_sentiment->setCurrentIndex(0); @@ -98,6 +101,23 @@ void PulseAddDialog::cleanup() ui.pushButton_Post->setText("Post Pulse to Wire"); ui.frame_input->setVisible(true); ui.widget_sentiment->setVisible(true); + + // cleanup images. + mImage1.clear(); + ui.label_image1->clear(); + ui.label_image1->setText("Drag and Drop Image"); + + mImage2.clear(); + ui.label_image2->clear(); + ui.label_image2->setText("Drag and Drop Image"); + + mImage3.clear(); + ui.label_image3->clear(); + ui.label_image3->setText("Drag and Drop Image"); + + mImage4.clear(); + ui.label_image4->clear(); + ui.label_image4->setText("Drag and Drop Image"); } void PulseAddDialog::pulseTextChanged() @@ -221,6 +241,10 @@ void PulseAddDialog::postOriginalPulse() pPulse->mSentiment = WIRE_PULSE_SENTIMENT_NO_SENTIMENT; pPulse->mPulseText = ui.textEdit_Pulse->toPlainText().toStdString(); // set images here too. + pPulse->mImage1 = mImage1; + pPulse->mImage2 = mImage2; + pPulse->mImage3 = mImage3; + pPulse->mImage4 = mImage4; // this should be in async thread, so doesn't block UI thread. if (!rsWire->createOriginalPulse(mGroup.mMeta.mGroupId, pPulse)) @@ -265,7 +289,11 @@ void PulseAddDialog::postReplyPulse() pPulse->mSentiment = toPulseSentiment(ui.comboBox_sentiment->currentIndex()); pPulse->mPulseText = ui.textEdit_Pulse->toPlainText().toStdString(); - // set images too. + // set images here too. + pPulse->mImage1 = mImage1; + pPulse->mImage2 = mImage2; + pPulse->mImage3 = mImage3; + pPulse->mImage4 = mImage4; // this should be in async thread, so doesn't block UI thread. if (!rsWire->createReplyPulse(mReplyToPulse.mMeta.mGroupId, @@ -288,5 +316,131 @@ void PulseAddDialog::clearDialog() ui.textEdit_Pulse->setPlainText(""); } +//--------------------------------------------------------------------- +// Drag and Drop Images. + +void PulseAddDialog::dragEnterEvent(QDragEnterEvent *event) +{ + std::cerr << "PulseAddDialog::dragEnterEvent()"; + std::cerr << std::endl; + + if (event->mimeData()->hasUrls()) + { + std::cerr << "PulseAddDialog::dragEnterEvent() Accepting"; + std::cerr << std::endl; + event->accept(); + } + else + { + std::cerr << "PulseAddDialog::dragEnterEvent() Ignoring"; + std::cerr << std::endl; + event->ignore(); + } +} + +void PulseAddDialog::dragLeaveEvent(QDragLeaveEvent *event) +{ + std::cerr << "PulseAddDialog::dragLeaveEvent()"; + std::cerr << std::endl; + + event->ignore(); +} + +void PulseAddDialog::dragMoveEvent(QDragMoveEvent *event) +{ + std::cerr << "PulseAddDialog::dragMoveEvent()"; + std::cerr << std::endl; + + event->accept(); +} + +void PulseAddDialog::dropEvent(QDropEvent *event) +{ + std::cerr << "PulseAddDialog::dropEvent()"; + std::cerr << std::endl; + + if (event->mimeData()->hasUrls()) + { + std::cerr << "PulseAddDialog::dropEvent() Urls:" << std::endl; + + QList urls = event->mimeData()->urls(); + QList::iterator uit; + for (uit = urls.begin(); uit != urls.end(); ++uit) + { + QString localpath = uit->toLocalFile(); + std::cerr << "Whole URL: " << uit->toString().toStdString() << std::endl; + std::cerr << "or As Local File: " << localpath.toStdString() << std::endl; + + addImage(localpath); + } + event->setDropAction(Qt::CopyAction); + event->accept(); + } + else + { + std::cerr << "PulseAddDialog::dropEvent Ignoring"; + std::cerr << std::endl; + event->ignore(); + } +} +void PulseAddDialog::addImage(const QString &path) +{ + std::cerr << "PulseAddDialog::addImage() loading image from: " << path.toStdString(); + std::cerr << std::endl; + + QPixmap qtn = QPixmap(path); + if (qtn.isNull()) { + std::cerr << "PulseAddDialog::addImage() Invalid Image"; + std::cerr << std::endl; + return; + } + + QPixmap image; + if ((qtn.width() <= 512) && (qtn.height() <= 512)) { + image = qtn; + } else { + image = qtn.scaled(512, 512, Qt::KeepAspectRatio, Qt::SmoothTransformation); + } + + // scaled down for display, allow wide images. + QPixmap icon = qtn.scaled(256, 128, Qt::KeepAspectRatio, Qt::SmoothTransformation); + QByteArray ba; + QBuffer buffer(&ba); + + buffer.open(QIODevice::WriteOnly); + image.save(&buffer, "JPG"); + + if (mImage1.empty()) { + std::cerr << "PulseAddDialog::addImage() Installing in Image1"; + std::cerr << std::endl; + ui.label_image1->setPixmap(icon); + mImage1.copy((uint8_t *) ba.data(), ba.size()); + std::cerr << "PulseAddDialog::addImage() Installing in Image1 Size: " << mImage1.mSize; + std::cerr << std::endl; + } + else if (mImage2.empty()) { + ui.label_image2->setPixmap(icon); + mImage2.copy((uint8_t *) ba.data(), ba.size()); + std::cerr << "PulseAddDialog::addImage() Installing in Image2 Size: " << mImage2.mSize; + std::cerr << std::endl; + } + else if (mImage3.empty()) { + ui.label_image3->setPixmap(icon); + mImage3.copy((uint8_t *) ba.data(), ba.size()); + std::cerr << "PulseAddDialog::addImage() Installing in Image3 Size: " << mImage3.mSize; + std::cerr << std::endl; + } + else if (mImage4.empty()) { + ui.label_image4->setPixmap(icon); + mImage4.copy((uint8_t *) ba.data(), ba.size()); + std::cerr << "PulseAddDialog::addImage() Installing in Image4 Size: " << mImage4.mSize; + std::cerr << std::endl; + } + else { + std::cerr << "PulseAddDialog::addImage() Images all full"; + std::cerr << std::endl; + } +} + diff --git a/retroshare-gui/src/gui/TheWire/PulseAddDialog.h b/retroshare-gui/src/gui/TheWire/PulseAddDialog.h index 88b0bb815..881b0c1a7 100644 --- a/retroshare-gui/src/gui/TheWire/PulseAddDialog.h +++ b/retroshare-gui/src/gui/TheWire/PulseAddDialog.h @@ -25,6 +25,14 @@ #include + +QT_BEGIN_NAMESPACE +class QDragEnterEvent; +class QDropEvent; +class QMouseEvent; +QT_END_NAMESPACE + + class PulseAddDialog : public QWidget { Q_OBJECT @@ -56,6 +64,12 @@ private: uint32_t toPulseSentiment(int index); protected: + void dragEnterEvent(QDragEnterEvent *event); + void dragLeaveEvent(QDragLeaveEvent *event); + void dragMoveEvent(QDragMoveEvent *event); + void dropEvent(QDropEvent *event); + + void addImage(const QString &path); RsWireGroup mGroup; // replyWith. @@ -64,6 +78,12 @@ protected: RsWirePulse mReplyToPulse; uint32_t mReplyType; + // images + RsGxsImage mImage1; + RsGxsImage mImage2; + RsGxsImage mImage3; + RsGxsImage mImage4; + Ui::PulseAddDialog ui; }; diff --git a/retroshare-gui/src/gui/TheWire/PulseAddDialog.ui b/retroshare-gui/src/gui/TheWire/PulseAddDialog.ui index 6e88f6219..0b6c4a70c 100644 --- a/retroshare-gui/src/gui/TheWire/PulseAddDialog.ui +++ b/retroshare-gui/src/gui/TheWire/PulseAddDialog.ui @@ -7,7 +7,7 @@ 0 0 720 - 586 + 633 @@ -161,6 +161,88 @@ + + + + + 0 + 100 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + 80 + 80 + + + + Drag and Drop Image + + + Qt::AlignCenter + + + + + + + + 80 + 80 + + + + Drag and Drop Image + + + Qt::AlignCenter + + + + + + + + 80 + 80 + + + + Drag and Drop Image + + + Qt::AlignCenter + + + + + + + + 80 + 80 + + + + Drag and Drop Image + + + Qt::AlignCenter + + + + + + diff --git a/retroshare-gui/src/gui/TheWire/PulseMessage.cpp b/retroshare-gui/src/gui/TheWire/PulseMessage.cpp index c7d884d9c..cd666a408 100644 --- a/retroshare-gui/src/gui/TheWire/PulseMessage.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseMessage.cpp @@ -37,30 +37,66 @@ void PulseMessage::setup(RsWirePulseSPtr pulse) setMessage(QString::fromStdString(pulse->mPulseText)); // setup images. + int width = 256; + int height = 128; + bool imagesShown = false; + + if (pulse->mImage2.empty()) { + // allow wider space for image 1. + width = 512; + } + if (!pulse->mImage1.empty()) { // install image. + QPixmap qtn; + qtn.loadFromData(pulse->mImage1.mData, pulse->mImage1.mSize); + label_image1->setPixmap(qtn.scaled(width, height, + Qt::KeepAspectRatio, Qt::SmoothTransformation)); + imagesShown = true; } else { - // leave this visible for a bit. - // label_image1->setVisible(false); + label_image1->setVisible(false); } if (!pulse->mImage2.empty()) { // install image. + QPixmap qtn; + qtn.loadFromData(pulse->mImage2.mData, pulse->mImage2.mSize); + label_image2->setPixmap(qtn.scaled(width, height, + Qt::KeepAspectRatio, Qt::SmoothTransformation)); + imagesShown = true; } else { label_image2->setVisible(false); } + width = 256; + if (pulse->mImage4.empty()) { + // allow wider space for image 3. + width = 512; + } + if (!pulse->mImage3.empty()) { // install image. + QPixmap qtn; + qtn.loadFromData(pulse->mImage3.mData, pulse->mImage3.mSize); + label_image3->setPixmap(qtn.scaled(width, height, + Qt::KeepAspectRatio, Qt::SmoothTransformation)); + imagesShown = true; } else { label_image3->setVisible(false); } if (!pulse->mImage4.empty()) { // install image. + QPixmap qtn; + qtn.loadFromData(pulse->mImage4.mData, pulse->mImage4.mSize); + label_image4->setPixmap(qtn.scaled(width, height, + Qt::KeepAspectRatio, Qt::SmoothTransformation)); + imagesShown = true; } else { label_image4->setVisible(false); } + + frame_expand->setVisible(imagesShown); } void PulseMessage::setMessage(QString msg) diff --git a/retroshare-gui/src/gui/TheWire/PulseMessage.ui b/retroshare-gui/src/gui/TheWire/PulseMessage.ui index 17d88eec3..a85f602c6 100644 --- a/retroshare-gui/src/gui/TheWire/PulseMessage.ui +++ b/retroshare-gui/src/gui/TheWire/PulseMessage.ui @@ -6,8 +6,8 @@ 0 0 - 553 - 281 + 570 + 376 @@ -30,52 +30,64 @@ - 80 - 80 + 128 + 128 Image + + Qt::AlignCenter + - 80 - 80 + 128 + 128 Image + + Qt::AlignCenter + - 80 - 80 + 128 + 128 Image + + Qt::AlignCenter + - 80 - 80 + 128 + 128 Image + + Qt::AlignCenter + From f4457b13313182ea90ece44990aaac027bd2a01e Mon Sep 17 00:00:00 2001 From: drbob Date: Tue, 19 May 2020 19:40:12 +1000 Subject: [PATCH 07/95] Fixup how REF message are displayed Ensure RefImageCount is correct. Update docs on m(Ref)GroupPtr points to fill-in GroupPtrs on Ref Msgs. Remove mRefAuthorName as not so useful. Add images into Response Msgs. Display Headshot / Images on Ref Msgs - if possible. --- libretroshare/src/retroshare/rswire.h | 13 +++-- libretroshare/src/rsitems/rswireitems.cc | 2 - libretroshare/src/services/p3wire.cc | 47 ++++++++++++++++--- .../src/gui/TheWire/PulseMessage.cpp | 31 ++++++++++++ retroshare-gui/src/gui/TheWire/PulseMessage.h | 1 + retroshare-gui/src/gui/TheWire/PulseReply.cpp | 2 +- .../src/gui/TheWire/PulseViewItem.cpp | 38 ++++++++++++--- 7 files changed, 113 insertions(+), 21 deletions(-) diff --git a/libretroshare/src/retroshare/rswire.h b/libretroshare/src/retroshare/rswire.h index bc278cc90..66fd7ba9a 100644 --- a/libretroshare/src/retroshare/rswire.h +++ b/libretroshare/src/retroshare/rswire.h @@ -152,10 +152,9 @@ class RsWirePulse std::string mRefGroupName; // PARENT_GrpName REPLY_GrpName RsGxsMessageId mRefOrigMsgId; // PARENT_OrigMsgId REPLY_OrigMsgId RsGxsId mRefAuthorId; // PARENT_AuthorId REPLY_AuthorId - std::string mRefAuthorName; // PARENT_AuthorName REPLY_AuthorName // TODO rstime_t mRefPublishTs; // PARENT_PublishTs REPLY_PublishTs std::string mRefPulseText; // PARENT_PulseText REPLY_PulseText - uint32_t mRefImageCount; // PARENT_#Images REPLY_#Images // TODO + uint32_t mRefImageCount; // PARENT_#Images REPLY_#Images // Additional Fields for version 2. // Images, need to enforce 20k limit? @@ -167,12 +166,16 @@ class RsWirePulse // Below Here is not serialised. // They are additional fields linking pulses together or parsing elements of msg. + // functions. + uint32_t ImageCount(); + // can't have self referencial list, so need to use pointers. // using SharedPointers to automatically cleanup. - // Pointer to WireGroup. - RsWireGroupSPtr mRefGroupPtr; - RsWireGroupSPtr mGroupPtr; + // Pointer to WireGroups + // mRefGroupPtr is opportunistically filled in, but will often be empty. + RsWireGroupSPtr mRefGroupPtr; // ORIG/RESP: N/A , REF: Reply Group + RsWireGroupSPtr mGroupPtr; // ORIG/RESP: Own Group, REF: Parent Group // These are the direct children of this message // split into likes, replies and retweets. diff --git a/libretroshare/src/rsitems/rswireitems.cc b/libretroshare/src/rsitems/rswireitems.cc index 89640ede5..a618336f7 100644 --- a/libretroshare/src/rsitems/rswireitems.cc +++ b/libretroshare/src/rsitems/rswireitems.cc @@ -66,7 +66,6 @@ void RsGxsWirePulseItem::clear() pulse.mRefGroupName.clear(); pulse.mRefOrigMsgId.clear(); pulse.mRefAuthorId.clear(); - pulse.mRefAuthorName.clear(); pulse.mRefPublishTs = 0; pulse.mRefPulseText.clear(); pulse.mRefImageCount = 0; @@ -86,7 +85,6 @@ void RsGxsWirePulseItem::serial_process(RsGenericSerializer::SerializeJob j,RsGe RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_NAME,pulse.mRefGroupName,"pulse.mRefGroupName") ; RsTypeSerializer::serial_process(j,ctx,pulse.mRefOrigMsgId,"pulse.mRefOrigMsgId") ; RsTypeSerializer::serial_process(j,ctx,pulse.mRefAuthorId,"pulse.mRefAuthorId") ; - RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_NAME,pulse.mRefAuthorName,"pulse.mRefAuthorName") ; RsTypeSerializer::serial_process(j,ctx,pulse.mRefPublishTs,"pulse.mRefPublishTs") ; RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_MSG,pulse.mRefPulseText,"pulse.mRefPulseText") ; RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_UINT32_PARAM,pulse.mRefImageCount,"pulse.mRefImageCount") ; diff --git a/libretroshare/src/services/p3wire.cc b/libretroshare/src/services/p3wire.cc index 032d9df27..56ec04554 100644 --- a/libretroshare/src/services/p3wire.cc +++ b/libretroshare/src/services/p3wire.cc @@ -31,6 +31,23 @@ RsWire *rsWire = NULL; +uint32_t RsWirePulse::ImageCount() +{ + if (!mImage4.empty()) { + return 4; + } + if (!mImage3.empty()) { + return 3; + } + if (!mImage2.empty()) { + return 2; + } + if (!mImage1.empty()) { + return 1; + } + return 0; +} + p3Wire::p3Wire(RsGeneralDataService* gds, RsNetworkExchangeService* nes, RsGixs *gixs) :RsGenExchange(gds, nes, new RsGxsWireSerialiser(), RS_SERVICE_GXS_TYPE_WIRE, gixs, wireAuthenPolicy()), RsWire(static_cast(*this)), mWireMtx("WireMtx") @@ -629,6 +646,10 @@ bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGro responsePulse.mPulseType = WIRE_PULSE_TYPE_RESPONSE | reply_type; responsePulse.mSentiment = pPulse->mSentiment; responsePulse.mPulseText = pPulse->mPulseText; + responsePulse.mImage1 = pPulse->mImage1; + responsePulse.mImage2 = pPulse->mImage2; + responsePulse.mImage3 = pPulse->mImage3; + responsePulse.mImage4 = pPulse->mImage4; // mRefs refer to parent post. responsePulse.mRefGroupId = replyToPulse->mMeta.mGroupId; @@ -637,6 +658,7 @@ bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGro responsePulse.mRefAuthorId = replyToPulse->mMeta.mAuthorId; responsePulse.mRefPublishTs = replyToPulse->mMeta.mPublishTs; responsePulse.mRefPulseText = replyToPulse->mPulseText; + responsePulse.mRefImageCount = replyToPulse->ImageCount(); std::cerr << "p3Wire::createReplyPulse() create Response Pulse"; std::cerr << std::endl; @@ -720,6 +742,7 @@ bool p3Wire::createReplyPulse(RsGxsGroupId grpId, RsGxsMessageId msgId, RsGxsGro refPulse.mRefAuthorId = replyWithGroup.mMeta.mAuthorId; refPulse.mRefPublishTs = createdResponsePulse->mMeta.mPublishTs; refPulse.mRefPulseText = createdResponsePulse->mPulseText; + refPulse.mRefImageCount = createdResponsePulse->ImageCount(); // publish Ref Msg. if (!createPulse(token, refPulse)) @@ -1181,13 +1204,6 @@ bool p3Wire::extractGroupIds(RsWirePulseConstSPtr pPulse, std::set bool p3Wire::updateGroupPtrs(RsWirePulseSPtr pPulse, const std::map &groups) { - /* don't bother with Refs... though we could */ - /* do this recursively */ - if (pPulse->mPulseType & WIRE_PULSE_TYPE_REFERENCE) { - /* skipping */ - return true; - } - std::map::const_iterator git; git = groups.find(pPulse->mMeta.mGroupId); if (git == groups.end()) { @@ -1197,6 +1213,23 @@ bool p3Wire::updateGroupPtrs(RsWirePulseSPtr pPulse, const std::mapmGroupPtr = git->second; + /* if Refs, GroupId refers to parent, so GroupPtr is parent's group + * It should already be in groups lists - if its not... */ + if (pPulse->mPulseType & WIRE_PULSE_TYPE_REFERENCE) { + // if REF is in list, fill in (unlikely but try anyway) + // unlikely, as we are not adding RefGroupId, as can potentially fail to look up. + // need additional flag OKAY_IF_NONEXISTENT or similar. + // no error if its not there. + std::map::const_iterator rgit; + rgit = groups.find(pPulse->mRefGroupId); + if (rgit != groups.end()) { + pPulse->mRefGroupPtr = rgit->second; + } + + // no children for REF pulse, so can return now. + return true; + } + /* recursively apply to children */ std::list::iterator it; for (it = pPulse->mReplies.begin(); it != pPulse->mReplies.end(); it++) diff --git a/retroshare-gui/src/gui/TheWire/PulseMessage.cpp b/retroshare-gui/src/gui/TheWire/PulseMessage.cpp index cd666a408..0cf986b86 100644 --- a/retroshare-gui/src/gui/TheWire/PulseMessage.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseMessage.cpp @@ -104,3 +104,34 @@ void PulseMessage::setMessage(QString msg) textBrowser->setPlainText(msg); } +void PulseMessage::setRefImageCount(uint32_t count) +{ + QString msg = "Follow to see Image"; + label_image1->setText(msg); + label_image2->setText(msg); + label_image3->setText(msg); + label_image4->setText(msg); + + label_image1->setVisible(false); + label_image2->setVisible(false); + label_image3->setVisible(false); + label_image4->setVisible(false); + + switch(count) { + case 4: + label_image4->setVisible(true); + case 3: + label_image3->setVisible(true); + case 2: + label_image2->setVisible(true); + case 1: + label_image1->setVisible(true); + default: + break; + } + + if (count < 1) { + frame_expand->setVisible(false); + } +} + diff --git a/retroshare-gui/src/gui/TheWire/PulseMessage.h b/retroshare-gui/src/gui/TheWire/PulseMessage.h index b39eedc2c..7e94a23db 100644 --- a/retroshare-gui/src/gui/TheWire/PulseMessage.h +++ b/retroshare-gui/src/gui/TheWire/PulseMessage.h @@ -34,6 +34,7 @@ public: void setup(RsWirePulseSPtr pulse); void setMessage(QString msg); + void setRefImageCount(uint32_t count); }; #endif diff --git a/retroshare-gui/src/gui/TheWire/PulseReply.cpp b/retroshare-gui/src/gui/TheWire/PulseReply.cpp index baa960d27..76ce49d90 100644 --- a/retroshare-gui/src/gui/TheWire/PulseReply.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseReply.cpp @@ -85,7 +85,7 @@ void PulseReply::setAuthorString(QString name) void PulseReply::setRefMessage(QString msg, uint32_t image_count) { widget_message->setMessage(msg); - //, image_count); + widget_message->setRefImageCount(image_count); } void PulseReply::setMessage(RsWirePulseSPtr pulse) diff --git a/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp b/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp index fe84df5b9..1395883bf 100644 --- a/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp @@ -226,6 +226,32 @@ void PulseDataItem::showPulse() if (mPulse->mPulseType & WIRE_PULSE_TYPE_REFERENCE) { + + // Group + bool headshotOkay = false; + if (mPulse->mRefGroupPtr) { + if (mPulse->mRefGroupPtr->mHeadshot.mData) + { + QPixmap pixmap; + if (GxsIdDetails::loadPixmapFromData( + mPulse->mRefGroupPtr->mHeadshot.mData, + mPulse->mRefGroupPtr->mHeadshot.mSize, + pixmap,GxsIdDetails::ORIGINAL)) + { + headshotOkay = true; + pixmap = pixmap.scaled(50,50); + setHeadshot(pixmap); + } + } + } + + if (!headshotOkay) + { + // default. + QPixmap pixmap = QPixmap(":/icons/png/posted.png").scaled(50,50); + setHeadshot(pixmap); + } + // Group setGroupName(mPulse->mRefGroupName); setAuthor(mPulse->mRefAuthorId.toStdString()); @@ -235,15 +261,15 @@ void PulseDataItem::showPulse() setDate(mPulse->mRefPublishTs); // References (unknown for a REFERENCE) - // should show FOLLOW button instead. - // setLikes(mPulse->mLikes.size()); - // setReplies(mPulse->mReplies.size()); - // setRepublishes(mPulse->mRepublishes.size()); - + // show FOLLOW button instead. showResponseStats(false); // - setReference(mPulse->mPulseType & WIRE_PULSE_RESPONSE_MASK, mPulse->mMeta.mGroupId, "GroupName TODO"); + if (mPulse->mGroupPtr) { + setReference(mPulse->mPulseType & WIRE_PULSE_RESPONSE_MASK, mPulse->mMeta.mGroupId, mPulse->mGroupPtr->mMeta.mGroupName); + } else { + setReference(mPulse->mPulseType & WIRE_PULSE_RESPONSE_MASK, mPulse->mMeta.mGroupId, "REF GROUP MISSING"); + } } else // ORIG / RESPONSE. From 6cf61001b8548b93c7a068567963f22b2449072b Mon Sep 17 00:00:00 2001 From: hunbernd Date: Sun, 24 May 2020 18:24:58 +0200 Subject: [PATCH 08/95] Make it possible to use only 1 thread for building --- build_scripts/Windows-msys2/build/build.bat | 2 +- build_scripts/Windows-msys2/build/env-base.bat | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/build_scripts/Windows-msys2/build/build.bat b/build_scripts/Windows-msys2/build/build.bat index 8ca2f6f1f..4dafe0d6d 100644 --- a/build_scripts/Windows-msys2/build/build.bat +++ b/build_scripts/Windows-msys2/build/build.bat @@ -69,7 +69,7 @@ echo. title Build - %SourceName%-%RsBuildConfig% [make] -%EnvMSYS2Cmd% "make -j %NUMBER_OF_PROCESSORS%" +%EnvMSYS2Cmd% "make -j %CoreCount%" :: Webui if "%ParamWebui%"=="1" ( diff --git a/build_scripts/Windows-msys2/build/env-base.bat b/build_scripts/Windows-msys2/build/env-base.bat index 8f80e8681..2543eee7b 100644 --- a/build_scripts/Windows-msys2/build/env-base.bat +++ b/build_scripts/Windows-msys2/build/env-base.bat @@ -7,6 +7,7 @@ set ParamAutologin=0 set ParamPlugins=0 set ParamTor=0 set ParamWebui=0 +set CoreCount=%NUMBER_OF_PROCESSORS% set RS_QMAKE_CONFIG= :parameter_loop @@ -28,6 +29,8 @@ if "%~1" NEQ "" ( set ParamTor=1 ) else if "%%~a"=="webui" ( set ParamWebui=1 + ) else if "%%~a"=="singlethread" ( + set CoreCount=1 ) else if "%%~a"=="CONFIG+" ( set RS_QMAKE_CONFIG=%RS_QMAKE_CONFIG% %1 ) else ( @@ -86,7 +89,7 @@ exit /B 0 :usage echo. -echo Usage: 32^|64 release^|debug [version autologin plugins webui] +echo Usage: 32^|64 release^|debug [version autologin plugins webui singlethread] echo. echo Mandatory parameter echo 32^|64 32-bit or 64-bit Version @@ -96,6 +99,7 @@ echo Optional parameter (need clean when changed) echo autologin Build with autologin echo plugins Build plugins echo webui Enable JsonAPI and pack webui files +echo singlethread Use only 1 thread for building echo. echo Parameter for pack echo tor Pack tor version From bcd8f4b0de35aae26be614355b5bb85e51869e37 Mon Sep 17 00:00:00 2001 From: drbob Date: Tue, 26 May 2020 18:09:50 +1000 Subject: [PATCH 09/95] use Extra Widget for Group creation --- .../src/gui/TheWire/WireGroupDialog.cpp | 30 +++++-- .../src/gui/TheWire/WireGroupDialog.h | 5 ++ .../src/gui/TheWire/WireGroupExtra.cpp | 83 +++++++++++++++++++ .../src/gui/TheWire/WireGroupExtra.h | 54 ++++++++++++ .../src/gui/TheWire/WireGroupExtra.ui | 68 +++++++++++++++ retroshare-gui/src/retroshare-gui.pro | 3 + 6 files changed, 235 insertions(+), 8 deletions(-) create mode 100644 retroshare-gui/src/gui/TheWire/WireGroupExtra.cpp create mode 100644 retroshare-gui/src/gui/TheWire/WireGroupExtra.h create mode 100644 retroshare-gui/src/gui/TheWire/WireGroupExtra.ui diff --git a/retroshare-gui/src/gui/TheWire/WireGroupDialog.cpp b/retroshare-gui/src/gui/TheWire/WireGroupDialog.cpp index e8d388734..210a05b92 100644 --- a/retroshare-gui/src/gui/TheWire/WireGroupDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/WireGroupDialog.cpp @@ -19,6 +19,8 @@ *******************************************************************************/ #include +#include "WireGroupExtra.h" + #include "WireGroupDialog.h" #include "gui/gxs/GxsIdDetails.h" @@ -27,7 +29,7 @@ const uint32_t WireCreateEnabledFlags = ( GXS_GROUP_FLAGS_NAME | GXS_GROUP_FLAGS_ICON | - GXS_GROUP_FLAGS_DESCRIPTION | + // GXS_GROUP_FLAGS_DESCRIPTION | GXS_GROUP_FLAGS_DISTRIBUTION | // GXS_GROUP_FLAGS_PUBLISHSIGN | // GXS_GROUP_FLAGS_SHAREKEYS | // disabled because the UI doesn't handle it yet. @@ -85,6 +87,9 @@ void WireGroupDialog::initUi() setUiText(UITYPE_ADD_ADMINS_CHECKBOX, tr("Add Wire Admins")); setUiText(UITYPE_CONTACTS_DOCK, tr("Select Wire Admins")); + + mExtra = new WireGroupExtra(this); + injectExtraWidget(mExtra); } QPixmap WireGroupDialog::serviceImage() @@ -95,11 +100,6 @@ QPixmap WireGroupDialog::serviceImage() void WireGroupDialog::prepareWireGroup(RsWireGroup &group, const RsGroupMetaData &meta) { group.mMeta = meta; - - // To Add. - group.mTagline = "a Tagline"; - group.mLocation = "here"; - QPixmap pixmap = getLogo(); if (!pixmap.isNull()) { @@ -110,12 +110,26 @@ void WireGroupDialog::prepareWireGroup(RsWireGroup &group, const RsGroupMetaData pixmap.save(&buffer, "PNG"); // writes image into ba in PNG format group.mHeadshot.copy((uint8_t *) ba.data(), ba.size()); - group.mMasthead.copy((uint8_t *) ba.data(), ba.size()); } else { group.mHeadshot.clear(); - group.mMasthead.clear(); } + // from Extra Widget. + group.mTagline = mExtra->getTagline(); + group.mLocation = mExtra->getLocation(); + pixmap = mExtra->getMasthead(); + + if (!pixmap.isNull()) { + QByteArray ba; + QBuffer buffer(&ba); + + buffer.open(QIODevice::WriteOnly); + pixmap.save(&buffer, "JPG"); + + group.mMasthead.copy((uint8_t *) ba.data(), ba.size()); + } else { + group.mMasthead.clear(); + } } bool WireGroupDialog::service_createGroup(RsGroupMetaData &meta) diff --git a/retroshare-gui/src/gui/TheWire/WireGroupDialog.h b/retroshare-gui/src/gui/TheWire/WireGroupDialog.h index b34d2d0dc..ca3f59e73 100644 --- a/retroshare-gui/src/gui/TheWire/WireGroupDialog.h +++ b/retroshare-gui/src/gui/TheWire/WireGroupDialog.h @@ -22,8 +22,11 @@ #define _WIRE_GROUP_DIALOG_H #include "gui/gxs/GxsGroupDialog.h" + #include +class WireGroupExtra; + class WireGroupDialog : public GxsGroupDialog { Q_OBJECT @@ -42,6 +45,8 @@ protected: private: void prepareWireGroup(RsWireGroup &group, const RsGroupMetaData &meta); + + WireGroupExtra *mExtra; }; #endif diff --git a/retroshare-gui/src/gui/TheWire/WireGroupExtra.cpp b/retroshare-gui/src/gui/TheWire/WireGroupExtra.cpp new file mode 100644 index 000000000..b6a1c5440 --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/WireGroupExtra.cpp @@ -0,0 +1,83 @@ +/******************************************************************************* + * retroshare-gui/src/gui/TheWire/WireGroupExtra.cpp * + * * + * Copyright (C) 2020 by Robert Fernie * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#include "WireGroupExtra.h" +#include "util/misc.h" + +WireGroupExtra::WireGroupExtra(QWidget *parent) : + QWidget(NULL) +{ + ui.setupUi(this); + setUp(); +} + +WireGroupExtra::~WireGroupExtra() +{ +} + +void WireGroupExtra::setUp() +{ + connect(ui.pushButton_masthead, SIGNAL(clicked() ), this , SLOT(addMasthead())); +} + + +void WireGroupExtra::addMasthead() +{ + QPixmap img = misc::getOpenThumbnailedPicture(this, tr("Load Masthead"), 400, 100); + + if (img.isNull()) + return; + + setMasthead(img); +} + + +void WireGroupExtra::setTagline(const std::string &str) +{ + ui.lineEdit_Tagline->setText(QString::fromStdString(str)); +} + +void WireGroupExtra::setLocation(const std::string &str) +{ + ui.lineEdit_Location->setText(QString::fromStdString(str)); +} + +void WireGroupExtra::setMasthead(const QPixmap &pixmap) +{ + mMasthead = pixmap; + ui.label_masthead->setPixmap(mMasthead); +} + +std::string WireGroupExtra::getTagline() +{ + return ui.lineEdit_Tagline->text().toStdString(); +} + +std::string WireGroupExtra::getLocation() +{ + return ui.lineEdit_Location->text().toStdString(); +} + +QPixmap WireGroupExtra::getMasthead() +{ + return mMasthead; +} + + diff --git a/retroshare-gui/src/gui/TheWire/WireGroupExtra.h b/retroshare-gui/src/gui/TheWire/WireGroupExtra.h new file mode 100644 index 000000000..ce606feb3 --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/WireGroupExtra.h @@ -0,0 +1,54 @@ +/******************************************************************************* + * retroshare-gui/src/gui/TheWire/WireGroupExtra.h * + * * + * Copyright (C) 2020 by Robert Fernie * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#ifndef WIRE_GROUP_EXTRA_H +#define WIRE_GROUP_EXTRA_H + +#include +#include "ui_WireGroupExtra.h" + +class WireGroupExtra : public QWidget +{ + Q_OBJECT + +public: + explicit WireGroupExtra(QWidget *parent = 0); + virtual ~WireGroupExtra(); + + void setMasthead(const QPixmap &pixmap); + QPixmap getMasthead(); + + void setTagline(const std::string &str); + void setLocation(const std::string &str); + + std::string getTagline(); + std::string getLocation(); + +private slots: + void addMasthead(); + +private: + void setUp(); +private: + QPixmap mMasthead; + Ui::WireGroupExtra ui; +}; + +#endif // WIRE_GROUP_EXTRA_H diff --git a/retroshare-gui/src/gui/TheWire/WireGroupExtra.ui b/retroshare-gui/src/gui/TheWire/WireGroupExtra.ui new file mode 100644 index 000000000..fb1da5e73 --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/WireGroupExtra.ui @@ -0,0 +1,68 @@ + + + WireGroupExtra + + + + 0 + 0 + 516 + 199 + + + + + 0 + 0 + + + + Form + + + + + + Masthead + + + + + + + MastHead background Image + + + + + + + Select Image + + + + + + + Tagline: + + + + + + + + + + Location: + + + + + + + + + + + diff --git a/retroshare-gui/src/retroshare-gui.pro b/retroshare-gui/src/retroshare-gui.pro index 53ba27470..42f737005 100644 --- a/retroshare-gui/src/retroshare-gui.pro +++ b/retroshare-gui/src/retroshare-gui.pro @@ -1226,6 +1226,7 @@ gxsthewire { gui/TheWire/WireDialog.h \ gui/TheWire/WireGroupItem.h \ gui/TheWire/WireGroupDialog.h \ + gui/TheWire/WireGroupExtra.h \ gui/TheWire/PulseAddDialog.h \ gui/TheWire/PulseViewItem.h \ gui/TheWire/PulseTopLevel.h \ @@ -1237,6 +1238,7 @@ gxsthewire { FORMS += gui/TheWire/PulseItem.ui \ gui/TheWire/PulseDetails.ui \ gui/TheWire/WireGroupItem.ui \ + gui/TheWire/WireGroupExtra.ui \ gui/TheWire/WireDialog.ui \ gui/TheWire/PulseAddDialog.ui \ gui/TheWire/PulseTopLevel.ui \ @@ -1250,6 +1252,7 @@ gxsthewire { gui/TheWire/WireDialog.cpp \ gui/TheWire/WireGroupItem.cpp \ gui/TheWire/WireGroupDialog.cpp \ + gui/TheWire/WireGroupExtra.cpp \ gui/TheWire/PulseAddDialog.cpp \ gui/TheWire/PulseViewItem.cpp \ gui/TheWire/PulseTopLevel.cpp \ From 589bb65324e9af5643f0208d798e306392978521 Mon Sep 17 00:00:00 2001 From: drbob Date: Tue, 26 May 2020 18:31:55 +1000 Subject: [PATCH 10/95] Update display of WireGroup --- libretroshare/src/retroshare/rswire.h | 2 + libretroshare/src/services/p3wire.cc | 19 +++++++ .../src/gui/TheWire/PulseViewGroup.cpp | 51 ++++++++++++++++++- .../src/gui/TheWire/PulseViewGroup.ui | 4 +- 4 files changed, 72 insertions(+), 4 deletions(-) diff --git a/libretroshare/src/retroshare/rswire.h b/libretroshare/src/retroshare/rswire.h index 66fd7ba9a..03625719f 100644 --- a/libretroshare/src/retroshare/rswire.h +++ b/libretroshare/src/retroshare/rswire.h @@ -42,6 +42,8 @@ typedef std::shared_ptr RsWireGroupConstSPtr; class RsWireGroup: public RsGxsGenericGroupData { public: + RsWireGroup(); + std::string mTagline; std::string mLocation; diff --git a/libretroshare/src/services/p3wire.cc b/libretroshare/src/services/p3wire.cc index 56ec04554..4a8719415 100644 --- a/libretroshare/src/services/p3wire.cc +++ b/libretroshare/src/services/p3wire.cc @@ -30,6 +30,12 @@ RsWire *rsWire = NULL; +RsWireGroup::RsWireGroup() + :mGroupPulses(0),mGroupRepublishes(0),mGroupLikes(0),mGroupReplies(0) + ,mRefMentions(0),mRefRepublishes(0),mRefLikes(0),mRefReplies(0) +{ + return; +} uint32_t RsWirePulse::ImageCount() { @@ -878,6 +884,19 @@ bool p3Wire::getPulsesForGroups(const std::list &groupIds, std::li return false; } + + std::cerr << "p3Wire::getPulsesForGroups() size = " << pulsePtrs.size(); + std::cerr << std::endl; + { + std::list::iterator it; + for (it = pulsePtrs.begin(); it != pulsePtrs.end(); it++) + { + std::cerr << "p3Wire::getPulsesForGroups() Flags: "; + std::cerr << (*it)->mPulseType << " Msg: " << (*it)->mPulseText; + std::cerr << std::endl; + } + } + std::cerr << "p3Wire::getPulsesForGroups() size = " << pulsePtrs.size(); std::cerr << " sorting and trimming"; std::cerr << std::endl; diff --git a/retroshare-gui/src/gui/TheWire/PulseViewGroup.cpp b/retroshare-gui/src/gui/TheWire/PulseViewGroup.cpp index 38ead4b84..715bc8ff6 100644 --- a/retroshare-gui/src/gui/TheWire/PulseViewGroup.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseViewGroup.cpp @@ -25,6 +25,7 @@ #include "PulseViewGroup.h" +#include "gui/gxs/GxsIdDetails.h" #include "util/DateTime.h" /** Constructor */ @@ -40,8 +41,54 @@ PulseViewGroup::PulseViewGroup(PulseViewHolder *holder, RsWireGroupSPtr group) void PulseViewGroup::setup() { if (mGroup) { - label_groupName->setText(QString::fromStdString(mGroup->mMeta.mGroupName)); - label_authorName->setText(QString::fromStdString(mGroup->mMeta.mAuthorId.toStdString())); + label_groupName->setText("@" + QString::fromStdString(mGroup->mMeta.mGroupName)); + label_authorName->setText(BoldString(QString::fromStdString(mGroup->mMeta.mAuthorId.toStdString()))); + label_date->setText(DateTime::formatDateTime(mGroup->mMeta.mPublishTs)); + label_tagline->setText(QString::fromStdString(mGroup->mTagline)); + label_location->setText(QString::fromStdString(mGroup->mLocation)); + + // need to draw mGroup->mMasthead, as background to headshot. + // TODO frame_headerBackground->setBackground() + + if (mGroup->mHeadshot.mData) + { + QPixmap pixmap; + if (GxsIdDetails::loadPixmapFromData( + mGroup->mHeadshot.mData, + mGroup->mHeadshot.mSize, + pixmap,GxsIdDetails::ORIGINAL)) + { + pixmap = pixmap.scaled(50,50); + label_headshot->setPixmap(pixmap); + } + } + else + { + // default. + QPixmap pixmap = QPixmap(":/icons/png/posted.png").scaled(50,50); + label_headshot->setPixmap(pixmap); + } + + if (mGroup->mMeta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED) + { + uint32_t pulses = mGroup->mGroupPulses + mGroup->mGroupReplies; + uint32_t replies = mGroup->mRefReplies; + uint32_t republishes = mGroup->mRefRepublishes; + uint32_t likes = mGroup->mRefLikes; + + label_extra_pulses->setText(BoldString(ToNumberUnits(pulses))); + label_extra_replies->setText(BoldString(ToNumberUnits(replies))); + label_extra_republishes->setText(BoldString(ToNumberUnits(republishes))); + label_extra_likes->setText(BoldString(ToNumberUnits(likes))); + + // hide follow. + widget_actions->setVisible(false); + } + else + { + // hide stats. + widget_replies->setVisible(false); + } } } diff --git a/retroshare-gui/src/gui/TheWire/PulseViewGroup.ui b/retroshare-gui/src/gui/TheWire/PulseViewGroup.ui index 3a4d3e688..6dc0a25cf 100644 --- a/retroshare-gui/src/gui/TheWire/PulseViewGroup.ui +++ b/retroshare-gui/src/gui/TheWire/PulseViewGroup.ui @@ -245,7 +245,7 @@ border-radius: 10px} - + 0 @@ -277,7 +277,7 @@ border-radius: 10px} - + 0 From df0ed8e77ebd58af9ce42aec3a2f94fe517e9a07 Mon Sep 17 00:00:00 2001 From: defnax Date: Thu, 28 May 2020 22:15:44 +0200 Subject: [PATCH 11/95] Added to display the headshot images on the group item --- .../src/gui/TheWire/TheWire_images.qrc | 9 +++++--- .../src/gui/TheWire/WireGroupItem.cpp | 20 ++++++++++++++++++ .../src/gui/TheWire/WireGroupItem.ui | 9 +++++++- .../src/gui/TheWire/images/like.png | Bin 0 -> 1841 bytes .../src/gui/TheWire/images/reply.png | Bin 0 -> 3168 bytes .../src/gui/TheWire/images/retweet.png | Bin 0 -> 2041 bytes 6 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 retroshare-gui/src/gui/TheWire/images/like.png create mode 100644 retroshare-gui/src/gui/TheWire/images/reply.png create mode 100644 retroshare-gui/src/gui/TheWire/images/retweet.png diff --git a/retroshare-gui/src/gui/TheWire/TheWire_images.qrc b/retroshare-gui/src/gui/TheWire/TheWire_images.qrc index f6cf0b441..b26e6b7da 100644 --- a/retroshare-gui/src/gui/TheWire/TheWire_images.qrc +++ b/retroshare-gui/src/gui/TheWire/TheWire_images.qrc @@ -1,5 +1,8 @@ - - images/compose.png - + + images/compose.png + images/like.png + images/reply.png + images/retweet.png + diff --git a/retroshare-gui/src/gui/TheWire/WireGroupItem.cpp b/retroshare-gui/src/gui/TheWire/WireGroupItem.cpp index c3843c497..5c7a00fea 100644 --- a/retroshare-gui/src/gui/TheWire/WireGroupItem.cpp +++ b/retroshare-gui/src/gui/TheWire/WireGroupItem.cpp @@ -51,6 +51,25 @@ void WireGroupItem::setup() label_authorId->setId(mGroup.mMeta.mAuthorId); frame_details->setVisible(false); + if (mGroup.mHeadshot.mData ) + { + QPixmap pixmap; + if (GxsIdDetails::loadPixmapFromData( + mGroup.mHeadshot.mData, + mGroup.mHeadshot.mSize, + pixmap,GxsIdDetails::ORIGINAL)) + { + pixmap = pixmap.scaled(32,32); + label_headshot->setPixmap(pixmap); + } + } + else + { + // default. + QPixmap pixmap = QPixmap(":/icons/wire.png").scaled(32,32); + label_headshot->setPixmap(pixmap); + } + RsIdentityDetails idDetails ; rsIdentity->getIdDetails(mGroup.mMeta.mAuthorId,idDetails); @@ -59,6 +78,7 @@ void WireGroupItem::setup() if(idDetails.mAvatar.mSize == 0 || !GxsIdDetails::loadPixmapFromData(idDetails.mAvatar.mData, idDetails.mAvatar.mSize, pixmap,GxsIdDetails::SMALL)) pixmap = GxsIdDetails::makeDefaultIcon(mGroup.mMeta.mAuthorId,GxsIdDetails::SMALL); + pixmap = pixmap.scaled(24,24); label_avatar->setPixmap(pixmap); connect(toolButton_show, SIGNAL(clicked()), this, SLOT(show())); diff --git a/retroshare-gui/src/gui/TheWire/WireGroupItem.ui b/retroshare-gui/src/gui/TheWire/WireGroupItem.ui index b0d53f4c6..eeb793614 100644 --- a/retroshare-gui/src/gui/TheWire/WireGroupItem.ui +++ b/retroshare-gui/src/gui/TheWire/WireGroupItem.ui @@ -38,7 +38,7 @@ - + 32 @@ -102,6 +102,13 @@ QFrame::Raised + + + + Avatar + + + diff --git a/retroshare-gui/src/gui/TheWire/images/like.png b/retroshare-gui/src/gui/TheWire/images/like.png new file mode 100644 index 0000000000000000000000000000000000000000..cd0cd99efd9b05ec20fd5bdc60fa74fdb6619eb5 GIT binary patch literal 1841 zcmZ`&eK=HE96opM+!?0KglvgvCzPbI6P1j18Ox%U6{_LU?uemw$TW$*mYdQi($~t& zkTzP`zOb9pY9>5=D2Xv+C`&b!kW{Si?75?!ZU5N&oO{mi_q*@=p7(dobN2`MdmGVa z&;S5NzCNCTaK(w&0EKg3`{5zDkfV8iJOGLhO&SfyV9tv03G@SC+Z>474Ztvg?*L#k z2Y^li0NfJ*OcTq?S1bhpc^mL;uonb?qH%CS1G3d*xf+E-Mhucv19D-i(Wi}MnBwD@ zY$DZw94%3oszLTWeGKWXB$?KzdM0q1P z@(?8gH5eZ!bZ`av6EG%M!|^XSS4Cj*AClk<%}n@|67~QTB+NrK0#C_q!m=l9Lk~@` z0*QL(4Fp))1hShakR-W=P&?TMQy9P*%YiL?;KGz3>bWR%d#Z^H+n1@p@sCAMT6|{lFxn;&8}0kU~_*`mLc95ySZ-5ye;I&Qi-ZKqUP(nh0#ui zqLBF`&@Zxfxwj|ShcSI%Vkq_r*#rQ+ns|}p_H+waq{jRDc~Nzk#b;)WV*b7y0MI~R zPhRkrmRHh&AXDB{+}R@&&plvZm1km?Vv=sKf^2;tolH8w!wT%QQ@pydsn&}dwcBqD z?4@;9TV5@>)?DHI^wGe(`$=s!PH_%d-uu$wQ=6O`@jb1`O>LOD*sV47S>5g3Zux9} zA!~3Ndr$I`EPhX2C~aOzR!CRf#!5>GbJcLx3m(aSe&35}Hp8dH1;Qku*}CGE65Ptq z?Mf40_XUNy?A)8I@_teY`^_ziz)HAka3w0Hi`czct2;)*b9N*@0cp_{@d^z{I~{nr zt@OqNMZJCVMJEt(tmZv9kTxbOvKcv;K6WXjM9~u4eerO&^K@MCCiZYwTd3$Q7IU=A z*%B{pR4?zhU?@W_FYg~oJTYWHBXW4rNucgN_HuPX_VBa&c~(Jg`I4}%voVj(-^q2M z4oF8_q8?ly^V?R2HQLrv+9zLUmAYxqCFgLJG2nhfWjEswk`S*q6{IbGj-&48;!8P| zjJ^CZhrG!Ki4O)Jb3{tx8c?vOhT-jMj+W0wGwO$sjKtCki;h#13^ed^%Dem-j5*D?3 zEUC)yN;*?abrno@$=lVx(=*ETF}5%6oJ8LM|utLX)N#YUtx z42i8A{b?u+v8yEInp^;JibCA(IxsOd>rHbK1ZFA}N1c@4y(?RQ)fq;Et+T3M(ClBuqCIm_pFY2m_p{h;zP}o=c9z{4vTku5Ur|*t zMNQk=wZ`%Nz_#&D3x_F%S^S&#$_o1mN8J0?4f-(Mj~z+)D%sDaK6*m$@Z$h})kY&T&p2H@12{xJD%%ZTzaI_Kx(-EYAGxS2Z``Gsh(f z=}+z&jqbLthd>C|E$dl21A>6B Lm%rx)4?)U59Q7=l literal 0 HcmV?d00001 diff --git a/retroshare-gui/src/gui/TheWire/images/reply.png b/retroshare-gui/src/gui/TheWire/images/reply.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f5fdf627136182b7040d37e2c6954d5323257a GIT binary patch literal 3168 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 Q6o4ROL$jmL58H+P3(g|UGynhq literal 0 HcmV?d00001 diff --git a/retroshare-gui/src/gui/TheWire/images/retweet.png b/retroshare-gui/src/gui/TheWire/images/retweet.png new file mode 100644 index 0000000000000000000000000000000000000000..e5272b6ba8a80144bf255936527276f39002b085 GIT binary patch literal 2041 zcmZ`(30PBC8ogwJurF$iGAK)=EC$1(NLb^55EO(E>9C3Hi=-^34I%005c{FLx%KbC8RGh4;5p#UJ2=i=+F{0k~GE{xJd%*M?DEOdkL;Od;+h0CEIB z1Hji*0A3sffK~y(`V`SkeLCkGXdmk%AV4zwI z1douQL5!;!MTjB^xHPe8~l@1?4Fzgk+Qo5SK3lL3=5Uq&n{1+Wm!&a=Gh!~WOV4yf+ zeh6`kmO!nd@oHPp9Ra~8dM*;QoD@{T#*VG-2=$MMpeG2cBYv<#q=Yhr2~i6A6qHNx zurw@JjWi9u9qnd`c5u4RVfqGuFZM(n@Z6-wiv7}onD=nxsAkGrap87M#+!dcCjG`# z(zsTNQ~&2r7TN>KyWd4?^*5jC{hm_vGd{JuiTt~qrq*?p#DDrps@kze|B6{BhtS3q zxTxItuC*mgIC%R+!-wU+o~jhh+wI7&+S<5KGM8Oe{S9_ys-pO;?XySrj>&O#wIRO_ zy}Y^Z?rfhfyGG~E%&jAnPkhb?d^GtwO5$oBd%RH#lBhKmFv>%8uzjsK)bnVl4tUUuX7ceOSq3G>KD{w|18F)=ZZKJeTYH%!$7x(RK8}Q2oFJFPFni<#`nisCCB; z$P{7EpXMj=Bbl*h&HFoUyOaltP7@ZmEts`yGu}+U8*W@OK5@)rS-V;HPj>0=>^Jwc zjGocnY_#T1c^CP;+2gvgsBgxtomwAu)i%B^?QVKj9H~y3HoEqM8dshB9YeKYoRGgg z@+>Jsc#*h7dlD)ZQ?N>LbOT>z$!Q)NeI~?VyY~6~ z$aNQ$SNIyXS-5KiuK46v zM@?WkJ=OJOewdDpO!ah`S4uHkoi#&jtc?jxGvyFgLcIgR+yrhZ;~VCp-+XzIE7};m zyZq-Kp4O{D%d^smEf{)P-A9WFwwX%z%AJ=t4$SIW88>bFeUhqfc`NbIlF#m=M}XcV zJvDiS^D%6*8vc_dF6Un1PWZn3uU}3!4t%=DJ$ef4I+?`{BwV=b@M2?bdC-(2Snr%J zWd@sv5*=xeJGO=Dr|~vv@J3b4T(D#-P4i7!b){v+x~XT_ds9xToK9GD!8)Z$vS#?5{fW+45o>Z|D`bN&LKtzA7%tt2M}ni>@HhF^HrpW@4>lW>>Y zhDgSS1)h1{ZVaL?&wy@A#w?`sF9lg&?Q2WIDgT!3ge*IlHzjI5unTvAGEQ1%9+ZHH8m$+Ass2yirwMe!|I%rb#uzfzkA@Tba3$aQd z$ns9IVcd%^U(ER}65qX#YD_=fsnTi1*PSwXyhY}Gz-T!~;1i1>owpNQZ$CM^b})Q8 zEeNXk$^DVD(9S#FBD*S__{akI(Xt=_QQF@ literal 0 HcmV?d00001 From 5a7b9e416cbf4fbadde931d02502661fb87fd217 Mon Sep 17 00:00:00 2001 From: hunbernd Date: Fri, 29 May 2020 23:06:21 +0200 Subject: [PATCH 12/95] Added missing doxygen dependency --- build_scripts/Windows-msys2/build/build.bat | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/build_scripts/Windows-msys2/build/build.bat b/build_scripts/Windows-msys2/build/build.bat index 4dafe0d6d..6dc9d8503 100644 --- a/build_scripts/Windows-msys2/build/build.bat +++ b/build_scripts/Windows-msys2/build/build.bat @@ -18,7 +18,10 @@ if errorlevel 2 exit /B 2 if errorlevel 1 goto error_env :: Install needed things -%EnvMSYS2Cmd% "pacman --noconfirm --needed -S make git mingw-w64-%RsMSYS2Architecture%-toolchain mingw-w64-%RsMSYS2Architecture%-qt5 mingw-w64-%RsMSYS2Architecture%-miniupnpc mingw-w64-%RsMSYS2Architecture%-sqlcipher mingw-w64-%RsMSYS2Architecture%-xapian-core mingw-w64-%RsMSYS2Architecture%-cmake mingw-w64-%RsMSYS2Architecture%-rapidjson" +%EnvMSYS2Cmd% "pacman --noconfirm --needed -S make git mingw-w64-%RsMSYS2Architecture%-toolchain mingw-w64-%RsMSYS2Architecture%-qt5 mingw-w64-%RsMSYS2Architecture%-miniupnpc mingw-w64-%RsMSYS2Architecture%-sqlcipher mingw-w64-%RsMSYS2Architecture%-xapian-core mingw-w64-%RsMSYS2Architecture%-cmake" + +:: Webui +if "%ParamWebui%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-doxygen mingw-w64-%RsMSYS2Architecture%-rapidjson" :: Plugins if "%ParamPlugins%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-speex mingw-w64-%RsMSYS2Architecture%-speexdsp mingw-w64-%RsMSYS2Architecture%-curl mingw-w64-%RsMSYS2Architecture%-libxslt mingw-w64-%RsMSYS2Architecture%-opencv mingw-w64-%RsMSYS2Architecture%-ffmpeg" From cd751f12d4cb22703e2551d3ec7e9faf60cc4a45 Mon Sep 17 00:00:00 2001 From: hunbernd Date: Sat, 30 May 2020 02:16:59 +0200 Subject: [PATCH 13/95] Clang support --- build_scripts/Windows-msys2/build/build.bat | 9 ++++++++- build_scripts/Windows-msys2/build/env-base.bat | 10 +++++++++- libbitdht/src/util/bdnet.cc | 6 ------ libbitdht/src/util/bdnet.h | 1 - libretroshare/src/libretroshare.pro | 8 +++++--- libretroshare/src/use_libretroshare.pri | 6 +++--- openpgpsdk/src/openpgpsdk.pro | 2 +- retroshare-gui/src/retroshare-gui.pro | 5 +++-- retroshare-service/src/retroshare-service.pro | 2 +- retroshare.pri | 6 +++++- 10 files changed, 35 insertions(+), 20 deletions(-) diff --git a/build_scripts/Windows-msys2/build/build.bat b/build_scripts/Windows-msys2/build/build.bat index 6dc9d8503..c83583180 100644 --- a/build_scripts/Windows-msys2/build/build.bat +++ b/build_scripts/Windows-msys2/build/build.bat @@ -26,6 +26,9 @@ if "%ParamWebui%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-% :: Plugins if "%ParamPlugins%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-speex mingw-w64-%RsMSYS2Architecture%-speexdsp mingw-w64-%RsMSYS2Architecture%-curl mingw-w64-%RsMSYS2Architecture%-libxslt mingw-w64-%RsMSYS2Architecture%-opencv mingw-w64-%RsMSYS2Architecture%-ffmpeg" +:: Clang +if "%ParamClang%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-clang" + :: Initialize environment call "%~dp0env.bat" %* if errorlevel 2 exit /B 2 @@ -63,7 +66,11 @@ echo Qt %QtVersion% >> buildinfo.txt call "%ToolsPath%\msys2-path.bat" "%SourcePath%" MSYS2SourcePath call "%ToolsPath%\msys2-path.bat" "%EnvMSYS2Path%" MSYS2EnvMSYS2Path -%EnvMSYS2Cmd% "qmake "%MSYS2SourcePath%/RetroShare.pro" -r -spec win32-g++ %RS_QMAKE_CONFIG%" +if "%ParamClang%"=="1" ( + %EnvMSYS2Cmd% "qmake "%MSYS2SourcePath%/RetroShare.pro" -r -spec win32-clang-g++ %RS_QMAKE_CONFIG%" +) else ( + %EnvMSYS2Cmd% "qmake "%MSYS2SourcePath%/RetroShare.pro" -r -spec win32-g++ %RS_QMAKE_CONFIG%" +) if errorlevel 1 goto error echo. diff --git a/build_scripts/Windows-msys2/build/env-base.bat b/build_scripts/Windows-msys2/build/env-base.bat index 2543eee7b..6f910649c 100644 --- a/build_scripts/Windows-msys2/build/env-base.bat +++ b/build_scripts/Windows-msys2/build/env-base.bat @@ -7,6 +7,7 @@ set ParamAutologin=0 set ParamPlugins=0 set ParamTor=0 set ParamWebui=0 +set ParamClang=0 set CoreCount=%NUMBER_OF_PROCESSORS% set RS_QMAKE_CONFIG= @@ -31,6 +32,8 @@ if "%~1" NEQ "" ( set ParamWebui=1 ) else if "%%~a"=="singlethread" ( set CoreCount=1 + ) else if "%%~a"=="clang" ( + set ParamClang=1 ) else if "%%~a"=="CONFIG+" ( set RS_QMAKE_CONFIG=%RS_QMAKE_CONFIG% %1 ) else ( @@ -61,6 +64,10 @@ if "%Param64%"=="1" ( set RsMSYS2Architecture=x86_64 ) +if "%ParamClang%"=="1" ( + set RsArchitecture=%RsArchitecture%-Clang +) + if "%RsBit%"=="" goto :usage if "%ParamRelease%"=="1" ( @@ -89,7 +96,7 @@ exit /B 0 :usage echo. -echo Usage: 32^|64 release^|debug [version autologin plugins webui singlethread] +echo Usage: 32^|64 release^|debug [autologin plugins webui singlethread clang] echo. echo Mandatory parameter echo 32^|64 32-bit or 64-bit Version @@ -100,6 +107,7 @@ echo autologin Build with autologin echo plugins Build plugins echo webui Enable JsonAPI and pack webui files echo singlethread Use only 1 thread for building +echo clang Use clang compiler instead of GCC echo. echo Parameter for pack echo tor Pack tor version diff --git a/libbitdht/src/util/bdnet.cc b/libbitdht/src/util/bdnet.cc index 4c5f681a6..ba8c33553 100644 --- a/libbitdht/src/util/bdnet.cc +++ b/libbitdht/src/util/bdnet.cc @@ -285,12 +285,6 @@ int sleep(unsigned int sec) } #endif -int usleep(unsigned int usec) -{ - Sleep(usec / 1000); - return 0; -} - /********************************** WINDOWS/UNIX SPECIFIC PART ******************/ #else // UNIX diff --git a/libbitdht/src/util/bdnet.h b/libbitdht/src/util/bdnet.h index 639a2ed1a..89ecfa710 100644 --- a/libbitdht/src/util/bdnet.h +++ b/libbitdht/src/util/bdnet.h @@ -159,7 +159,6 @@ int bdnet_w2u_errno(int error); #ifndef __MINGW64_VERSION_MAJOR int sleep(unsigned int sec); #endif -int usleep(unsigned int usec); #endif // END of WINDOWS defines. /********************************** WINDOWS/UNIX SPECIFIC PART ******************/ diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 3f9dde680..29d317dbf 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -237,7 +237,7 @@ win32-x-g++ { } ################################# Windows ########################################## -win32-g++ { +win32-g++|win32-clang-g++ { QMAKE_CC = $${QMAKE_CXX} OBJECTS_DIR = temp/obj MOC_DIR = temp/moc @@ -843,7 +843,7 @@ rs_jsonapi { no_rs_cross_compiling { DUMMYRESTBEDINPUT = FORCE CMAKE_GENERATOR_OVERRIDE="" - win32-g++:CMAKE_GENERATOR_OVERRIDE="-G \"MSYS Makefiles\"" + win32-g++|win32-clang-g++:CMAKE_GENERATOR_OVERRIDE="-G \"MSYS Makefiles\"" genrestbedlib.name = Generating librestbed. genrestbedlib.input = DUMMYRESTBEDINPUT genrestbedlib.output = $$clean_path($${RESTBED_BUILD_PATH}/librestbed.a) @@ -860,6 +860,7 @@ rs_jsonapi { mkdir -p $${RESTBED_BUILD_PATH} && cd $${RESTBED_BUILD_PATH} && \ cmake \ -DCMAKE_CXX_COMPILER=$$QMAKE_CXX \ + \"-DCMAKE_CXX_FLAGS=$${QMAKE_CXXFLAGS}\" \ $${CMAKE_GENERATOR_OVERRIDE} -DBUILD_SSL=OFF \ -DCMAKE_INSTALL_PREFIX=. -B. \ -H$$shell_path($${RESTBED_SRC_PATH}) && \ @@ -940,7 +941,7 @@ rs_broadcast_discovery { no_rs_cross_compiling { DUMMYQMAKECOMPILERINPUT = FORCE CMAKE_GENERATOR_OVERRIDE="" - win32-g++:CMAKE_GENERATOR_OVERRIDE="-G \"MSYS Makefiles\"" + win32-g++|win32-clang-g++:CMAKE_GENERATOR_OVERRIDE="-G \"MSYS Makefiles\"" udpdiscoverycpplib.name = Generating libudp-discovery.a. udpdiscoverycpplib.input = DUMMYQMAKECOMPILERINPUT udpdiscoverycpplib.output = $$clean_path($${UDP_DISCOVERY_BUILD_PATH}/libudp-discovery.a) @@ -954,6 +955,7 @@ rs_broadcast_discovery { cd $${UDP_DISCOVERY_BUILD_PATH} && \ cmake -DCMAKE_C_COMPILER=$$fixQmakeCC($$QMAKE_CC) \ -DCMAKE_CXX_COMPILER=$$QMAKE_CXX \ + \"-DCMAKE_CXX_FLAGS=$${QMAKE_CXXFLAGS}\" \ $${CMAKE_GENERATOR_OVERRIDE} \ -DBUILD_EXAMPLE=OFF -DBUILD_TOOL=OFF \ -DCMAKE_INSTALL_PREFIX=. -B. \ diff --git a/libretroshare/src/use_libretroshare.pri b/libretroshare/src/use_libretroshare.pri index 681805a7f..b8343ed36 100644 --- a/libretroshare/src/use_libretroshare.pri +++ b/libretroshare/src/use_libretroshare.pri @@ -46,7 +46,7 @@ rs_jsonapi { LIBS *= -L$$clean_path($${RESTBED_BUILD_PATH}/) -lrestbed } else:sLibs *= restbed - win32-g++:dLibs *= wsock32 + win32-g++|win32-clang-g++:dLibs *= wsock32 } linux-* { @@ -55,7 +55,7 @@ linux-* { rs_deep_channels_index | rs_deep_files_index { mLibs += xapian - win32-g++:mLibs += rpcrt4 + win32-g++|win32-clang-g++:mLibs += rpcrt4 } rs_deep_files_index_ogg { @@ -81,7 +81,7 @@ rs_broadcast_discovery { LIBS *= -L$$clean_path($${UDP_DISCOVERY_BUILD_PATH}) -ludp-discovery } else:sLibs *= udp-discovery - win32-g++:dLibs *= wsock32 + win32-g++|win32-clang-g++:dLibs *= wsock32 } static { diff --git a/openpgpsdk/src/openpgpsdk.pro b/openpgpsdk/src/openpgpsdk.pro index fa117381a..66341d0a3 100644 --- a/openpgpsdk/src/openpgpsdk.pro +++ b/openpgpsdk/src/openpgpsdk.pro @@ -21,7 +21,7 @@ linux-* { OBJECTS_DIR = temp/linux/obj } -win32-g++ { +win32-g++|win32-clang-g++ { HEADERS += openpgpsdk/opsstring.h SOURCES += openpgpsdk/opsstring.c diff --git a/retroshare-gui/src/retroshare-gui.pro b/retroshare-gui/src/retroshare-gui.pro index a5d6838ae..9ff9f7ba2 100644 --- a/retroshare-gui/src/retroshare-gui.pro +++ b/retroshare-gui/src/retroshare-gui.pro @@ -59,7 +59,7 @@ rs_gui_cmark { DUMMYCMARKINPUT = FORCE CMAKE_GENERATOR_OVERRIDE="" - win32-g++:CMAKE_GENERATOR_OVERRIDE="-G \"MSYS Makefiles\"" + win32-g++|win32-clang-g++:CMAKE_GENERATOR_OVERRIDE="-G \"MSYS Makefiles\"" gencmarklib.name = Generating libcmark. gencmarklib.input = DUMMYCMARKINPUT gencmarklib.output = $$clean_path($${CMARK_BUILD_PATH}/src/libcmark.a) @@ -73,6 +73,7 @@ rs_gui_cmark { mkdir -p $${CMARK_BUILD_PATH} && cd $${CMARK_BUILD_PATH} && \ cmake \ -DCMAKE_CXX_COMPILER=$$QMAKE_CXX \ + \"-DCMAKE_CXX_FLAGS=$${QMAKE_CXXFLAGS}\" \ $${CMAKE_GENERATOR_OVERRIDE} \ -DCMAKE_INSTALL_PREFIX=. \ -B. \ @@ -209,7 +210,7 @@ win32-x-g++ { #################################### Windows ##################################### -win32-g++ { +win32-g++|win32-clang-g++ { CONFIG(debug, debug|release) { # show console output CONFIG += console diff --git a/retroshare-service/src/retroshare-service.pro b/retroshare-service/src/retroshare-service.pro index 75cb0b581..454d2d216 100644 --- a/retroshare-service/src/retroshare-service.pro +++ b/retroshare-service/src/retroshare-service.pro @@ -81,7 +81,7 @@ macx { INCLUDEPATH += . $$INC_DIR } -win32-g++ { +win32-g++|win32-clang-g++ { CONFIG(debug, debug|release) { # show console output CONFIG += console diff --git a/retroshare.pri b/retroshare.pri index 6bccc1f5a..802a3cd75 100644 --- a/retroshare.pri +++ b/retroshare.pri @@ -631,7 +631,7 @@ android-* { RS_THREAD_LIB = } -win32-g++ { +win32-g++|win32-clang-g++ { !isEmpty(EXTERNAL_LIB_DIR) { message(Use pre-compiled libraries in $${EXTERNAL_LIB_DIR}.) PREFIX = $$system_path($$EXTERNAL_LIB_DIR) @@ -683,6 +683,10 @@ win32-g++ { message(***retroshare.pri:Win32 PREFIX $$PREFIX INCLUDEPATH $$INCLUDEPATH QMAKE_LIBDIR $$QMAKE_LIBDIR DEFINES $$DEFINES) } +win32-clang-g++ { + QMAKE_CXXFLAGS += -femulated-tls +} + macx-* { rs_macos10.8 { message(***retroshare.pri: Set Target and SDK to MacOS 10.8 ) From 2aca157b56d3a0b1fe16c0ee207fba3f29ab1826 Mon Sep 17 00:00:00 2001 From: hunbernd Date: Sat, 30 May 2020 02:17:43 +0200 Subject: [PATCH 14/95] Fixed missing include with the latest Qt version --- retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp | 1 + retroshare-gui/src/gui/gxs/GxsIdDetails.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp index 14413963f..e0df64ba7 100644 --- a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp +++ b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include "gui/common/RSElidedItemDelegate.h" diff --git a/retroshare-gui/src/gui/gxs/GxsIdDetails.cpp b/retroshare-gui/src/gui/gxs/GxsIdDetails.cpp index 22469575f..cecf27a09 100644 --- a/retroshare-gui/src/gui/gxs/GxsIdDetails.cpp +++ b/retroshare-gui/src/gui/gxs/GxsIdDetails.cpp @@ -33,6 +33,7 @@ #include #include +#include /* Images for tag icons */ #define IMAGE_LOADING ":/images/folder-draft.png" From 00102701df4e222dc8b11144b3511a5935a3e579 Mon Sep 17 00:00:00 2001 From: hunbernd Date: Sat, 30 May 2020 02:18:21 +0200 Subject: [PATCH 15/95] Added script to start clean build environment --- build_scripts/Windows-msys2/start-clean-env.bat | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 build_scripts/Windows-msys2/start-clean-env.bat diff --git a/build_scripts/Windows-msys2/start-clean-env.bat b/build_scripts/Windows-msys2/start-clean-env.bat new file mode 100644 index 000000000..1c6d46295 --- /dev/null +++ b/build_scripts/Windows-msys2/start-clean-env.bat @@ -0,0 +1,7 @@ +setlocal + +set path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0 +cd build\ +cmd + +endlocal From 7dda728ef0e738fc3813fd26657ad78e3e8513b6 Mon Sep 17 00:00:00 2001 From: hunbernd Date: Sun, 31 May 2020 02:09:42 +0200 Subject: [PATCH 16/95] Fix: include commit hash even when the HEAD=tag Only consider tags starts with "v" --- retroshare.pri | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retroshare.pri b/retroshare.pri index 802a3cd75..09030de8a 100644 --- a/retroshare.pri +++ b/retroshare.pri @@ -425,7 +425,7 @@ defined in command line") DEFINES += RS_MINI_VERSION=$${RS_MINI_VERSION} DEFINES += RS_EXTRA_VERSION=\\\"$${RS_EXTRA_VERSION}\\\" } else { - RS_GIT_DESCRIBE = $$system(git describe) + RS_GIT_DESCRIBE = $$system(git describe --long --match v*.*.*) contains(RS_GIT_DESCRIBE, ^v\d+\.\d+\.\d+.*) { RS_GIT_DESCRIBE_SPLIT = $$split(RS_GIT_DESCRIBE, v) RS_GIT_DESCRIBE_SPLIT = $$split(RS_GIT_DESCRIBE_SPLIT, .) From 3dd5945186f1b7a8ff1070bd2bb09c49d62c42cd Mon Sep 17 00:00:00 2001 From: hunbernd Date: Mon, 1 Jun 2020 00:53:31 +0200 Subject: [PATCH 17/95] Deep channel and file indexing support --- build_scripts/Windows-msys2/build/build.bat | 5 ++++- build_scripts/Windows-msys2/build/env-base.bat | 10 +++++++++- retroshare.pri | 8 ++++---- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/build_scripts/Windows-msys2/build/build.bat b/build_scripts/Windows-msys2/build/build.bat index c83583180..51eb804a0 100644 --- a/build_scripts/Windows-msys2/build/build.bat +++ b/build_scripts/Windows-msys2/build/build.bat @@ -18,7 +18,7 @@ if errorlevel 2 exit /B 2 if errorlevel 1 goto error_env :: Install needed things -%EnvMSYS2Cmd% "pacman --noconfirm --needed -S make git mingw-w64-%RsMSYS2Architecture%-toolchain mingw-w64-%RsMSYS2Architecture%-qt5 mingw-w64-%RsMSYS2Architecture%-miniupnpc mingw-w64-%RsMSYS2Architecture%-sqlcipher mingw-w64-%RsMSYS2Architecture%-xapian-core mingw-w64-%RsMSYS2Architecture%-cmake" +%EnvMSYS2Cmd% "pacman --noconfirm --needed -S make git mingw-w64-%RsMSYS2Architecture%-toolchain mingw-w64-%RsMSYS2Architecture%-qt5 mingw-w64-%RsMSYS2Architecture%-miniupnpc mingw-w64-%RsMSYS2Architecture%-sqlcipher mingw-w64-%RsMSYS2Architecture%-cmake" :: Webui if "%ParamWebui%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-doxygen mingw-w64-%RsMSYS2Architecture%-rapidjson" @@ -29,6 +29,9 @@ if "%ParamPlugins%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64 :: Clang if "%ParamClang%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-clang" +:: Indexing +if "%ParamIndexing%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-xapian-core mingw-w64-%RsMSYS2Architecture%-libvorbis mingw-w64-%RsMSYS2Architecture%-flac mingw-w64-%RsMSYS2Architecture%-taglib" + :: Initialize environment call "%~dp0env.bat" %* if errorlevel 2 exit /B 2 diff --git a/build_scripts/Windows-msys2/build/env-base.bat b/build_scripts/Windows-msys2/build/env-base.bat index 6f910649c..27f4efcf0 100644 --- a/build_scripts/Windows-msys2/build/env-base.bat +++ b/build_scripts/Windows-msys2/build/env-base.bat @@ -8,6 +8,7 @@ set ParamPlugins=0 set ParamTor=0 set ParamWebui=0 set ParamClang=0 +set ParamIndexing=0 set CoreCount=%NUMBER_OF_PROCESSORS% set RS_QMAKE_CONFIG= @@ -34,6 +35,8 @@ if "%~1" NEQ "" ( set CoreCount=1 ) else if "%%~a"=="clang" ( set ParamClang=1 + ) else if "%%~a"=="indexing" ( + set ParamIndexing=1 ) else if "%%~a"=="CONFIG+" ( set RS_QMAKE_CONFIG=%RS_QMAKE_CONFIG% %1 ) else ( @@ -92,11 +95,15 @@ if "%ParamWebui%"=="1" ( set RS_QMAKE_CONFIG=%RS_QMAKE_CONFIG% "CONFIG+=rs_jsonapi" "CONFIG+=rs_webui" ) +if "%ParamIndexing%"=="1" ( + set RS_QMAKE_CONFIG=%RS_QMAKE_CONFIG% "CONFIG+=rs_deep_channels_index" "CONFIG+=rs_deep_files_index" "CONFIG+=rs_deep_files_index_ogg" "CONFIG+=rs_deep_files_index_flac" "CONFIG+=rs_deep_files_index_taglib" +) + exit /B 0 :usage echo. -echo Usage: 32^|64 release^|debug [autologin plugins webui singlethread clang] +echo Usage: 32^|64 release^|debug [autologin plugins webui singlethread clang indexing] echo. echo Mandatory parameter echo 32^|64 32-bit or 64-bit Version @@ -108,6 +115,7 @@ echo plugins Build plugins echo webui Enable JsonAPI and pack webui files echo singlethread Use only 1 thread for building echo clang Use clang compiler instead of GCC +echo indexing Build with deep channel and file indexing support echo. echo Parameter for pack echo tor Pack tor version diff --git a/retroshare.pri b/retroshare.pri index 09030de8a..2f693086c 100644 --- a/retroshare.pri +++ b/retroshare.pri @@ -141,12 +141,12 @@ CONFIG *= no_rs_jsonapi rs_jsonapi:CONFIG -= no_rs_jsonapi # To enable channel indexing append the following assignation to qmake command -# line "CONFIG+=rs_deep_channel_index" -CONFIG *= no_rs_deep_channel_index -rs_deep_channel_index:CONFIG -= no_rs_deep_channel_index +# line "CONFIG+=rs_deep_channels_index" +CONFIG *= no_rs_deep_channels_index +rs_deep_channels_index:CONFIG -= no_rs_deep_channels_index # To enable deep files indexing append the following assignation to qmake -# command line "CONFIG+=rs_files_index" +# command line "CONFIG+=rs_deep_files_index" CONFIG *= no_rs_deep_files_index rs_deep_files_index:CONFIG -= no_rs_deep_files_index From b6f1c23ae97f875dd43946fafc8e10ca4e7fda55 Mon Sep 17 00:00:00 2001 From: hunbernd Date: Mon, 1 Jun 2020 14:01:36 +0200 Subject: [PATCH 18/95] Skip updating --- build_scripts/Windows-msys2/build/build.bat | 22 ++++++++++--------- .../Windows-msys2/build/env-base.bat | 6 ++++- build_scripts/Windows-msys2/build/pack.bat | 6 +++-- build_scripts/Windows-msys2/tools/webui.bat | 4 +++- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/build_scripts/Windows-msys2/build/build.bat b/build_scripts/Windows-msys2/build/build.bat index 51eb804a0..74bfc6791 100644 --- a/build_scripts/Windows-msys2/build/build.bat +++ b/build_scripts/Windows-msys2/build/build.bat @@ -17,20 +17,22 @@ call "%~dp0env-base.bat" %* if errorlevel 2 exit /B 2 if errorlevel 1 goto error_env -:: Install needed things -%EnvMSYS2Cmd% "pacman --noconfirm --needed -S make git mingw-w64-%RsMSYS2Architecture%-toolchain mingw-w64-%RsMSYS2Architecture%-qt5 mingw-w64-%RsMSYS2Architecture%-miniupnpc mingw-w64-%RsMSYS2Architecture%-sqlcipher mingw-w64-%RsMSYS2Architecture%-cmake" +if not "%ParamNoupdate%"=="1" ( + :: Install needed things + %EnvMSYS2Cmd% "pacman --noconfirm --needed -S make git mingw-w64-%RsMSYS2Architecture%-toolchain mingw-w64-%RsMSYS2Architecture%-qt5 mingw-w64-%RsMSYS2Architecture%-miniupnpc mingw-w64-%RsMSYS2Architecture%-sqlcipher mingw-w64-%RsMSYS2Architecture%-cmake" -:: Webui -if "%ParamWebui%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-doxygen mingw-w64-%RsMSYS2Architecture%-rapidjson" + :: Webui + if "%ParamWebui%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-doxygen mingw-w64-%RsMSYS2Architecture%-rapidjson" -:: Plugins -if "%ParamPlugins%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-speex mingw-w64-%RsMSYS2Architecture%-speexdsp mingw-w64-%RsMSYS2Architecture%-curl mingw-w64-%RsMSYS2Architecture%-libxslt mingw-w64-%RsMSYS2Architecture%-opencv mingw-w64-%RsMSYS2Architecture%-ffmpeg" + :: Plugins + if "%ParamPlugins%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-speex mingw-w64-%RsMSYS2Architecture%-speexdsp mingw-w64-%RsMSYS2Architecture%-curl mingw-w64-%RsMSYS2Architecture%-libxslt mingw-w64-%RsMSYS2Architecture%-opencv mingw-w64-%RsMSYS2Architecture%-ffmpeg" -:: Clang -if "%ParamClang%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-clang" + :: Clang + if "%ParamClang%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-clang" -:: Indexing -if "%ParamIndexing%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-xapian-core mingw-w64-%RsMSYS2Architecture%-libvorbis mingw-w64-%RsMSYS2Architecture%-flac mingw-w64-%RsMSYS2Architecture%-taglib" + :: Indexing + if "%ParamIndexing%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-xapian-core mingw-w64-%RsMSYS2Architecture%-libvorbis mingw-w64-%RsMSYS2Architecture%-flac mingw-w64-%RsMSYS2Architecture%-taglib" +) :: Initialize environment call "%~dp0env.bat" %* diff --git a/build_scripts/Windows-msys2/build/env-base.bat b/build_scripts/Windows-msys2/build/env-base.bat index 27f4efcf0..f4d36b1cc 100644 --- a/build_scripts/Windows-msys2/build/env-base.bat +++ b/build_scripts/Windows-msys2/build/env-base.bat @@ -9,6 +9,7 @@ set ParamTor=0 set ParamWebui=0 set ParamClang=0 set ParamIndexing=0 +set ParamNoupdate=0 set CoreCount=%NUMBER_OF_PROCESSORS% set RS_QMAKE_CONFIG= @@ -37,6 +38,8 @@ if "%~1" NEQ "" ( set ParamClang=1 ) else if "%%~a"=="indexing" ( set ParamIndexing=1 + ) else if "%%~a"=="noupdate" ( + set ParamNoupdate=1 ) else if "%%~a"=="CONFIG+" ( set RS_QMAKE_CONFIG=%RS_QMAKE_CONFIG% %1 ) else ( @@ -103,7 +106,7 @@ exit /B 0 :usage echo. -echo Usage: 32^|64 release^|debug [autologin plugins webui singlethread clang indexing] +echo Usage: 32^|64 release^|debug [autologin plugins webui singlethread clang indexing noupdate] echo. echo Mandatory parameter echo 32^|64 32-bit or 64-bit Version @@ -116,6 +119,7 @@ echo webui Enable JsonAPI and pack webui files echo singlethread Use only 1 thread for building echo clang Use clang compiler instead of GCC echo indexing Build with deep channel and file indexing support +echo noupdate Skip updating the libraries echo. echo Parameter for pack echo tor Pack tor version diff --git a/build_scripts/Windows-msys2/build/pack.bat b/build_scripts/Windows-msys2/build/pack.bat index e759b7980..10d426e57 100644 --- a/build_scripts/Windows-msys2/build/pack.bat +++ b/build_scripts/Windows-msys2/build/pack.bat @@ -17,8 +17,10 @@ call "%~dp0env.bat" %* if errorlevel 2 exit /B 2 if errorlevel 1 goto error_env -:: Install ntldd -%EnvMSYS2Cmd% "pacman --noconfirm --needed -S make git mingw-w64-%RsMSYS2Architecture%-ntldd-git" +if not "%ParamNoupdate%"=="1" ( + :: Install ntldd + %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-ntldd-git" +) :: Remove deploy path if exist "%RsDeployPath%" rmdir /S /Q "%RsDeployPath%" diff --git a/build_scripts/Windows-msys2/tools/webui.bat b/build_scripts/Windows-msys2/tools/webui.bat index f39da666a..b7af01e53 100644 --- a/build_scripts/Windows-msys2/tools/webui.bat +++ b/build_scripts/Windows-msys2/tools/webui.bat @@ -7,7 +7,9 @@ title Build webui if not exist "%RsWebuiPath%" ( echo Checking out webui source into %RsWebuiPath% - %EnvMSYS2Cmd% "pacman --noconfirm --needed -S git" + if not "%ParamNoupdate%"=="1" ( + %EnvMSYS2Cmd% "pacman --noconfirm --needed -S git" + ) git clone https://github.com/RetroShare/RSNewWebUI.git "%RsWebuiPath%" ) else ( echo Webui source found at %RsWebuiPath% From d2a3f1e8d0c82fe2237c2ddc93c64ac320f5d9ae Mon Sep 17 00:00:00 2001 From: hunbernd Date: Mon, 1 Jun 2020 15:28:12 +0200 Subject: [PATCH 19/95] Changed default configuration: 64 -plugins +nativedialogs Changed msys2 download version Added x64 or x86 into the pack filename --- build_scripts/Windows-msys2/build-tor.bat | 4 ++-- build_scripts/Windows-msys2/build.bat | 4 ++-- build_scripts/Windows-msys2/build/pack.bat | 4 ++-- build_scripts/Windows-msys2/env/tools/prepare-msys2.bat | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build_scripts/Windows-msys2/build-tor.bat b/build_scripts/Windows-msys2/build-tor.bat index 2f81e098c..aa2b4ea06 100644 --- a/build_scripts/Windows-msys2/build-tor.bat +++ b/build_scripts/Windows-msys2/build-tor.bat @@ -9,11 +9,11 @@ call "%EnvPath%\env.bat" if errorlevel 1 goto error_env %cecho% info "Build %SourceName%" -call "%~dp0build\build.bat" 32 release tor autologin plugins +call "%~dp0build\build.bat" 64 release tor autologin "CONFIG+=rs_use_native_dialogs" if errorlevel 1 %cecho% error "Failed to build %SourceName%." & exit /B %ERRORLEVEL% %cecho% info "Pack %SourceName%" -call "%~dp0build\pack.bat" 32 release tor +call "%~dp0build\pack.bat" 64 release tor autologin "CONFIG+=rs_use_native_dialogs" if errorlevel 1 %cecho% error "Failed to pack %SourceName%." & exit /B %ERRORLEVEL% exit /B 0 diff --git a/build_scripts/Windows-msys2/build.bat b/build_scripts/Windows-msys2/build.bat index 42c4b557d..529a1350f 100644 --- a/build_scripts/Windows-msys2/build.bat +++ b/build_scripts/Windows-msys2/build.bat @@ -9,11 +9,11 @@ call "%EnvPath%\env.bat" if errorlevel 1 goto error_env %cecho% info "Build %SourceName%" -call "%~dp0build\build.bat" 32 release autologin plugins +call "%~dp0build\build.bat" 64 release autologin "CONFIG+=rs_use_native_dialogs" if errorlevel 1 %cecho% error "Failed to build %SourceName%." & exit /B %ERRORLEVEL% %cecho% info "Pack %SourceName%" -call "%~dp0build\pack.bat" 32 release +call "%~dp0build\pack.bat" 64 release autologin "CONFIG+=rs_use_native_dialogs" if errorlevel 1 %cecho% error "Failed to pack %SourceName%." & exit /B %ERRORLEVEL% exit /B 0 diff --git a/build_scripts/Windows-msys2/build/pack.bat b/build_scripts/Windows-msys2/build/pack.bat index 10d426e57..ceae42ae3 100644 --- a/build_scripts/Windows-msys2/build/pack.bat +++ b/build_scripts/Windows-msys2/build/pack.bat @@ -74,9 +74,9 @@ if "%QtMainVersion%"=="4" set QtMainVersion2=4 if "%QtMainVersion%"=="5" set QtMainVersion1=5 if "%RsBuildConfig%" NEQ "release" ( - set Archive=%RsPackPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsVersion.Extra%-Qt-%QtVersion%-msys2%RsType%%RsArchiveAdd%-%RsBuildConfig%.7z + set Archive=%RsPackPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsVersion.Extra%-%RsArchitecture%-msys2%RsType%%RsArchiveAdd%-%RsBuildConfig%.7z ) else ( - set Archive=%RsPackPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsVersion.Extra%-Qt-%QtVersion%-msys2%RsType%%RsArchiveAdd%.7z + set Archive=%RsPackPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsVersion.Extra%-%RsArchitecture%-msys2%RsType%%RsArchiveAdd%.7z ) if exist "%Archive%" del /Q "%Archive%" diff --git a/build_scripts/Windows-msys2/env/tools/prepare-msys2.bat b/build_scripts/Windows-msys2/env/tools/prepare-msys2.bat index ddf8b00a6..f055a19c4 100644 --- a/build_scripts/Windows-msys2/env/tools/prepare-msys2.bat +++ b/build_scripts/Windows-msys2/env/tools/prepare-msys2.bat @@ -25,7 +25,7 @@ if exist "%EnvMSYS2Path%\msys%MSYS2Base%\usr\bin\pacman.exe" ( ) ) -set MSYS2Install=msys2-base-%MSYS2Architecture%-20180531.tar.xz +set MSYS2Install=msys2-base-%MSYS2Architecture%-20190524.tar.xz set MSYS2Url=http://sourceforge.net/projects/msys2/files/Base/%MSYS2Architecture%/%MSYS2Install%/download %cecho% info "Remove previous MSYS2 version" From fdead2e4912dfb101d88b7e99314b61f3e74e421 Mon Sep 17 00:00:00 2001 From: hunbernd Date: Mon, 1 Jun 2020 22:11:23 +0200 Subject: [PATCH 20/95] Generate changelog.txt --- build_scripts/Windows-msys2/build/build.bat | 3 +- build_scripts/Windows-msys2/build/git-log.bat | 137 ++++-------------- build_scripts/Windows-msys2/build/pack.bat | 4 +- 3 files changed, 34 insertions(+), 110 deletions(-) diff --git a/build_scripts/Windows-msys2/build/build.bat b/build_scripts/Windows-msys2/build/build.bat index 74bfc6791..b07562b7c 100644 --- a/build_scripts/Windows-msys2/build/build.bat +++ b/build_scripts/Windows-msys2/build/build.bat @@ -7,8 +7,6 @@ call "%~dp0..\env.bat" if errorlevel 1 goto error_env call "%EnvPath%\env.bat" if errorlevel 1 goto error_env -call "%EnvPath%\env.bat" -if errorlevel 1 goto error_env call "%EnvPath%\env-msys2.bat" if errorlevel 1 goto error_env @@ -85,6 +83,7 @@ echo. title Build - %SourceName%-%RsBuildConfig% [make] %EnvMSYS2Cmd% "make -j %CoreCount%" +if errorlevel 1 goto error :: Webui if "%ParamWebui%"=="1" ( diff --git a/build_scripts/Windows-msys2/build/git-log.bat b/build_scripts/Windows-msys2/build/git-log.bat index 010ff190b..f221bc871 100644 --- a/build_scripts/Windows-msys2/build/git-log.bat +++ b/build_scripts/Windows-msys2/build/git-log.bat @@ -1,118 +1,43 @@ @echo off +setlocal enabledelayedexpansion -setlocal - -set NoAsk= -if "%~2"=="no-ask" set NoAsk=1 - -:: Initialize environment -call "%~dp0..\env.bat" -if errorlevel 1 goto error_env -call "%EnvPath%\env.bat" -if errorlevel 1 goto error_env -call "%EnvPath%\env-msys2.bat" -if errorlevel 1 goto error_env - -call "%~dp0env.bat" %* -if errorlevel 2 exit /B 2 -if errorlevel 1 goto error_env - -:: Check git executable -set GitPath= -call "%ToolsPath%\find-in-path.bat" GitPath git.exe -if "%GitPath%"=="" echo Git executable not found in PATH.& exit /B 1 - -:: Get compiled revision -set GetRsVersion=%SourcePath%\build_scripts\Windows-msys2\tools\get-rs-version.bat -if not exist "%GetRsVersion%" ( - echo File not found - echo %GetRsVersion% +if "%~2"=="" ( + echo. + echo Parameter error. + echo Usage git-log sourcepath outputfile exit /B 1 ) -call "%GetRsVersion%" RS_REVISION_STRING RsRevision -if "%RsRevision%"=="" echo Revision not found.& exit /B 1 +set logfile=%~2 +copy nul %logfile% > nul -:: Get compiled version -call "%GetRsVersion%" RS_REVISION_STRING RsRevision -if "%RsRevision%"=="" echo Revision not found.& exit /B 1 +pushd %~1 -call "%GetRsVersion%" RS_MAJOR_VERSION RsMajorVersion -if "%RsMajorVersion%"=="" echo Major version not found.& exit /B 1 - -call "%GetRsVersion%" RS_MINOR_VERSION RsMinorVersion -if "%RsMinorVersion%"=="" echo Minor version not found.& exit /B 1 - -call "%GetRsVersion%" RS_BUILD_NUMBER RsBuildNumber -if "%RsBuildNumber%"=="" echo Build number not found.& exit /B 1 - -call "%GetRsVersion%" RS_BUILD_NUMBER_ADD RsBuildNumberAdd - -set RsVersion=%RsMajorVersion%.%RsMinorVersion%.%RsBuildNumber%%RsBuildNumberAdd% - -:: Check WMIC is available -wmic.exe alias /? >nul 2>&1 || echo WMIC is not available.&& exit /B 1 - -:: Use WMIC to retrieve date in format YYYYMMDD -set RsDate= -for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set RsDate=%%I -set RsDate=%RsDate:~0,4%%RsDate:~4,2%%RsDate:~6,2% - -:: Get last revision -set RsLastRefFile=%BuildPath%\Qt-%QtVersion%%RsType%-%RsBuildConfig%-LastRef.txt -set RsLastRef= -if exist "%RsLastRefFile%" set /P RsLastRef=<"%RsLastRefFile%" - -if "%NoAsk%"=="1" goto no_ask_for_last_revision -if not "%RsLastRef%"=="" echo Last Revision was %RsLastRef% -set /P RsLastRefInput=Last Revision: -if "%RsLastRefInput%" NEQ "" set RsLastRef=%RsLastRefInput% -:no_ask_for_last_revision - -:: Get current revision -pushd "%SourcePath%" -call "%ToolsPath%\get-git-ref.bat" RsRef -popd - -if errorlevel 1 exit /B 1 -if "%RsRef%"=="" echo Cannot get git revision.& exit /B 1 - -echo. -echo Creating log from %RsLastRef% -echo to %RsRef% - -if "%NoAsk%"=="1" goto no_confirm -choice /M "Do you want to proceed?" -if %errorlevel%==2 exit /B 1 -:no_confirm - -if "%RsBuildConfig%" NEQ "release" ( - set RsGitLog=%DeployPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsRevision%-Qt-%QtVersion%%RsType%-msys2%RsArchiveAdd%-%RsBuildConfig%.txt -) else ( - set RsGitLog=%DeployPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsRevision%-Qt-%QtVersion%%RsType%-msys2%RsArchiveAdd%.txt -) - -title %SourceName%-%RsBuildConfig% [git log] - -pushd "%SourcePath%" -if "%RsLastRef%"=="" ( - git log %RsRef% >"%RsGitLog%" -) else ( - if "%RsLastRef%"=="%RsRef%" ( - git log %RsRef% --max-count=1 >"%RsGitLog%" +set last=HEAD +for /f %%t in ('git tag --sort=-taggerdate --merged ^| findstr v') do ( + echo generating changelog for !last!..%%t + echo ----------------------------------------------- >> %logfile% + if !last! neq HEAD ( + git tag -n !last! >> %logfile% ) else ( - git log %RsLastRef%..%RsRef% >"%RsGitLog%" + echo HEAD >> %logfile% ) + rem echo !last! ---^> %%t >> %logfile% + echo ----------------------------------------------- >> %logfile% + echo. >> %logfile% + git log %%t..!last! --no-merges "--pretty=format:%%h %%ai %%<(10,trunc)%%an %%s" >> %logfile% + echo. >> %logfile% + echo. >> %logfile% + set last=%%t ) + +echo generating changelog for %last% +echo ----------------------------------------------- >> %logfile% +git tag -n %last% >> %logfile% +echo ----------------------------------------------- >> %logfile% +echo. >> %logfile% +git log %last% --no-merges "--pretty=format:%%h %%ai %%<(10,trunc)%%an %%s" >> %logfile% + popd -title %COMSPEC% - -echo %RsRef%>"%RsLastRefFile%" - -exit /B %ERRORLEVEL% - -:error_env -echo Failed to initialize environment. -endlocal -exit /B 1 +endlocal enabledelayedexpansion \ No newline at end of file diff --git a/build_scripts/Windows-msys2/build/pack.bat b/build_scripts/Windows-msys2/build/pack.bat index ceae42ae3..07f3b0114 100644 --- a/build_scripts/Windows-msys2/build/pack.bat +++ b/build_scripts/Windows-msys2/build/pack.bat @@ -162,8 +162,8 @@ if "%QtMainVersion%"=="5" ( echo copy bdboot.txt copy "%SourcePath%\libbitdht\src\bitdht\bdboot.txt" "%RsDeployPath%" %Quite% -echo copy changelog.txt -copy "%SourcePath%\retroshare-gui\src\changelog.txt" "%RsDeployPath%" %Quite% +echo generate changelog.txt +call call "%~dp0\git-log.bat" "%SourcePath%" "%RsDeployPath%\changelog.txt" echo copy buildinfo.txt copy "%RsBuildPath%\buildinfo.txt" "%RsDeployPath%" %Quite% From 4f6356d7dd4aa7d83f14ccc31c32ae8011da3452 Mon Sep 17 00:00:00 2001 From: hunbernd Date: Sat, 6 Jun 2020 17:59:11 +0200 Subject: [PATCH 21/95] Added .gitignore for env-mod.bat Added variable for clang --- build_scripts/Windows-msys2/.gitignore | 1 + build_scripts/Windows-msys2/build/build.bat | 1 + build_scripts/Windows-msys2/build/env-base.bat | 4 +++- build_scripts/Windows-msys2/build/env.bat | 4 ++-- build_scripts/Windows-msys2/build/pack.bat | 4 ++++ 5 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 build_scripts/Windows-msys2/.gitignore diff --git a/build_scripts/Windows-msys2/.gitignore b/build_scripts/Windows-msys2/.gitignore new file mode 100644 index 000000000..a7b500b79 --- /dev/null +++ b/build_scripts/Windows-msys2/.gitignore @@ -0,0 +1 @@ +/build/env-mod.bat \ No newline at end of file diff --git a/build_scripts/Windows-msys2/build/build.bat b/build_scripts/Windows-msys2/build/build.bat index b07562b7c..0921bd65c 100644 --- a/build_scripts/Windows-msys2/build/build.bat +++ b/build_scripts/Windows-msys2/build/build.bat @@ -66,6 +66,7 @@ echo %RS_QMAKE_CONFIG% > buildinfo.txt echo %RsBuildConfig% >> buildinfo.txt echo %RsArchitecture% >> buildinfo.txt echo Qt %QtVersion% >> buildinfo.txt +echo %RsCompiler% >> buildinfo.txt call "%ToolsPath%\msys2-path.bat" "%SourcePath%" MSYS2SourcePath call "%ToolsPath%\msys2-path.bat" "%EnvMSYS2Path%" MSYS2EnvMSYS2Path diff --git a/build_scripts/Windows-msys2/build/env-base.bat b/build_scripts/Windows-msys2/build/env-base.bat index f4d36b1cc..aeead45a5 100644 --- a/build_scripts/Windows-msys2/build/env-base.bat +++ b/build_scripts/Windows-msys2/build/env-base.bat @@ -71,7 +71,9 @@ if "%Param64%"=="1" ( ) if "%ParamClang%"=="1" ( - set RsArchitecture=%RsArchitecture%-Clang + set RsCompiler=Clang +) else ( + set RsCompiler=GCC ) if "%RsBit%"=="" goto :usage diff --git a/build_scripts/Windows-msys2/build/env.bat b/build_scripts/Windows-msys2/build/env.bat index 8443d6218..bfe2afeba 100644 --- a/build_scripts/Windows-msys2/build/env.bat +++ b/build_scripts/Windows-msys2/build/env.bat @@ -16,8 +16,8 @@ if "%QtVersion%"=="" %cecho% error "Cannot get Qt version." & exit /B 1 set RsMinGWPath=%EnvMSYS2BasePath%\mingw%RsBit% -set RsBuildPath=%BuildPath%\Qt-%QtVersion%-%RsArchitecture%-%RsBuildConfig% -set RsDeployPath=%DeployPath%\Qt-%QtVersion%%RsType%-%RsArchitecture%-%RsBuildConfig% +set RsBuildPath=%BuildPath%\Qt-%QtVersion%-%RsArchitecture%-%RsCompiler%-%RsBuildConfig% +set RsDeployPath=%DeployPath%\Qt-%QtVersion%%RsType%-%RsArchitecture%-%RsCompiler%-%RsBuildConfig% set RsPackPath=%DeployPath% set RsArchiveAdd= set RsWebuiPath=%RootPath%\%SourceName%-webui diff --git a/build_scripts/Windows-msys2/build/pack.bat b/build_scripts/Windows-msys2/build/pack.bat index 07f3b0114..013a48bb2 100644 --- a/build_scripts/Windows-msys2/build/pack.bat +++ b/build_scripts/Windows-msys2/build/pack.bat @@ -98,6 +98,7 @@ mkdir "%RsDeployPath%\qss" mkdir "%RsDeployPath%\stylesheets" mkdir "%RsDeployPath%\sounds" mkdir "%RsDeployPath%\translations" +mkdir "%RsDeployPath%\license" copy nul "%RsDeployPath%\portable" %Quite% @@ -148,6 +149,9 @@ rmdir /S /Q "%RsDeployPath%\stylesheets\__MACOSX__Bubble" %Quite% echo copy sounds xcopy /S "%SourcePath%\retroshare-gui\src\sounds" "%RsDeployPath%\sounds" %Quite% +echo copy license +xcopy /S "%SourcePath%\retroshare-gui\src\license" "%RsDeployPath%\license" %Quite% + echo copy translation copy "%SourcePath%\retroshare-gui\src\translations\qt_tr.qm" "%RsDeployPath%\translations" %Quite% copy "%QtSharePath%\translations\qt_*.qm" "%RsDeployPath%\translations" %Quite% From 2f3a8a981577cfbb5f26e9ff4aabd6aa51317ccc Mon Sep 17 00:00:00 2001 From: hunbernd Date: Sat, 6 Jun 2020 18:00:18 +0200 Subject: [PATCH 22/95] Added scripts to build installer --- .../Windows-msys2/build/build-installer.bat | 67 +++ .../Windows-msys2/installer/HeaderImage.bmp | Bin 0 -> 25820 bytes .../installer/HeaderImageEmpty.bmp | Bin 0 -> 25818 bytes .../Windows-msys2/installer/ifexist.nsh | 15 + .../Windows-msys2/installer/lang/ca_ES.nsh | 29 ++ .../Windows-msys2/installer/lang/de.nsh | 29 ++ .../Windows-msys2/installer/lang/en.nsh | 29 ++ .../Windows-msys2/installer/lang/es.nsh | 29 ++ .../Windows-msys2/installer/lang/fr.nsh | 29 ++ .../Windows-msys2/installer/lang/pl.nsh | 29 ++ .../Windows-msys2/installer/lang/ru.nsh | 29 ++ .../Windows-msys2/installer/lang/tr.nsh | 29 ++ .../Windows-msys2/installer/lang/ts/ca_ES.ts | 205 ++++++++ .../installer/lang/ts/convert_from_ts.bat | 27 ++ .../installer/lang/ts/convert_from_ts.xsl | 20 + .../installer/lang/ts/convert_to_ts.bat | 50 ++ .../Windows-msys2/installer/lang/ts/de.ts | 205 ++++++++ .../Windows-msys2/installer/lang/ts/en.ts | 186 ++++++++ .../Windows-msys2/installer/lang/ts/es.ts | 205 ++++++++ .../Windows-msys2/installer/lang/ts/fr.ts | 205 ++++++++ .../Windows-msys2/installer/lang/ts/pl.ts | 205 ++++++++ .../Windows-msys2/installer/lang/ts/ru.ts | 205 ++++++++ .../Windows-msys2/installer/lang/ts/tr.ts | 205 ++++++++ .../installer/lang/ts/xsltproc.exe | Bin 0 -> 3809270 bytes .../Windows-msys2/installer/lang/ts/zh_CN.ts | 205 ++++++++ .../Windows-msys2/installer/lang/zh_CN.nsh | 29 ++ .../installer/retroshare-Qt5.nsi | 437 ++++++++++++++++++ 27 files changed, 2703 insertions(+) create mode 100644 build_scripts/Windows-msys2/build/build-installer.bat create mode 100644 build_scripts/Windows-msys2/installer/HeaderImage.bmp create mode 100644 build_scripts/Windows-msys2/installer/HeaderImageEmpty.bmp create mode 100644 build_scripts/Windows-msys2/installer/ifexist.nsh create mode 100644 build_scripts/Windows-msys2/installer/lang/ca_ES.nsh create mode 100644 build_scripts/Windows-msys2/installer/lang/de.nsh create mode 100644 build_scripts/Windows-msys2/installer/lang/en.nsh create mode 100644 build_scripts/Windows-msys2/installer/lang/es.nsh create mode 100644 build_scripts/Windows-msys2/installer/lang/fr.nsh create mode 100644 build_scripts/Windows-msys2/installer/lang/pl.nsh create mode 100644 build_scripts/Windows-msys2/installer/lang/ru.nsh create mode 100644 build_scripts/Windows-msys2/installer/lang/tr.nsh create mode 100644 build_scripts/Windows-msys2/installer/lang/ts/ca_ES.ts create mode 100644 build_scripts/Windows-msys2/installer/lang/ts/convert_from_ts.bat create mode 100644 build_scripts/Windows-msys2/installer/lang/ts/convert_from_ts.xsl create mode 100644 build_scripts/Windows-msys2/installer/lang/ts/convert_to_ts.bat create mode 100644 build_scripts/Windows-msys2/installer/lang/ts/de.ts create mode 100644 build_scripts/Windows-msys2/installer/lang/ts/en.ts create mode 100644 build_scripts/Windows-msys2/installer/lang/ts/es.ts create mode 100644 build_scripts/Windows-msys2/installer/lang/ts/fr.ts create mode 100644 build_scripts/Windows-msys2/installer/lang/ts/pl.ts create mode 100644 build_scripts/Windows-msys2/installer/lang/ts/ru.ts create mode 100644 build_scripts/Windows-msys2/installer/lang/ts/tr.ts create mode 100644 build_scripts/Windows-msys2/installer/lang/ts/xsltproc.exe create mode 100644 build_scripts/Windows-msys2/installer/lang/ts/zh_CN.ts create mode 100644 build_scripts/Windows-msys2/installer/lang/zh_CN.nsh create mode 100644 build_scripts/Windows-msys2/installer/retroshare-Qt5.nsi diff --git a/build_scripts/Windows-msys2/build/build-installer.bat b/build_scripts/Windows-msys2/build/build-installer.bat new file mode 100644 index 000000000..192b2d025 --- /dev/null +++ b/build_scripts/Windows-msys2/build/build-installer.bat @@ -0,0 +1,67 @@ +@echo off + +setlocal + +:: Initialize environment +call "%~dp0..\env.bat" +if errorlevel 1 goto error_env +call "%EnvPath%\env.bat" +if errorlevel 1 goto error_env +call "%EnvPath%\env-msys2.bat" +if errorlevel 1 goto error_env + +:: Initialize environment +call "%~dp0env.bat" %* +if errorlevel 2 exit /B 2 +if errorlevel 1 goto error_env + +if not "%ParamNoupdate%"=="1" ( + :: Install NSIS + %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-nsis" +) + +:: Check deployment +if not exist "%RsDeployPath%\retroshare.exe" echo Project is not deployed. Run pack.bat first! & goto error + +:: Get compiled revision +set GetRsVersion=%SourcePath%\build_scripts\Windows-msys2\tools\get-rs-version.bat +if not exist "%GetRsVersion%" ( + %cecho% error "File not found" + echo %GetRsVersion% + goto error +) + +:: Get compiled version +call "%GetRsVersion%" "%RsDeployPath%\retroshare.exe" RsVersion +if errorlevel 1 %cecho% error "Revision not found."& goto error +if "%RsVersion.Extra%"=="" %cecho% error "Extra number not found".& goto error + +:: Build defines for script +set NSIS_PARAM= + +set NSIS_PARAM=%NSIS_PARAM% /DDEPLOYDIR="%RsDeployPath%" +set NSIS_PARAM=%NSIS_PARAM% /DOUTDIR="%RsPackPath%" +set NSIS_PARAM=%NSIS_PARAM% /DINSTALLERADD="%RsArchiveAdd%" +set NSIS_PARAM=%NSIS_PARAM% /DARCHITECTURE="%RsArchitecture%" +set NSIS_PARAM=%NSIS_PARAM% /DREVISION=%RsVersion.Extra% + +set QtMainVersion=%QtVersion:~0,1% + +:: Create installer +echo %path% +rem makensis %NSIS_PARAM% "%SourcePath%\build_scripts\Windows-msys2\installer\retroshare-Qt%QtMainVersion%.nsi" +rem pushd "%SourcePath%\build_scripts\Windows-msys2\installer" +rem %EnvMSYS2Cmd% "makensis $0 retroshare-Qt%QtMainVersion%.nsi" "%NSIS_PARAM%" +rem popd +"%RsMinGWPath%\bin\makensis" %NSIS_PARAM% "%SourcePath%\build_scripts\Windows-msys2\installer\retroshare-Qt%QtMainVersion%.nsi" + +exit /B %ERRORLEVEL% + +:error +endlocal +exit /B 1 + +:error_env +echo Failed to initialize environment. +endlocal +exit /B 1 diff --git a/build_scripts/Windows-msys2/installer/HeaderImage.bmp b/build_scripts/Windows-msys2/installer/HeaderImage.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5c55265cd00556f727fceed0d7f862ef24b61f84 GIT binary patch literal 25820 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 literal 0 HcmV?d00001 diff --git a/build_scripts/Windows-msys2/installer/HeaderImageEmpty.bmp b/build_scripts/Windows-msys2/installer/HeaderImageEmpty.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f0f0f1b32dc1ca932f1fa77f27108f69b9334de3 GIT binary patch literal 25818 zcmd^HTbEpCadn>amZ$uL{DQ2N*SzOn*>>{d$RYgs_%TKyZr|av(AjxvLE-Vs=asZ`u_YcZvN#{ z`uS7*{S*AYg5N*G?;kw%$N2lyQ{Tt`|D!*&U;PLC`Ku!xd>=Z}`Rk)ye#bf==GT4Z zX!n_8ooA1ApIhoYx77W}Qum`v-RF;YKZfr__v6RApE%Kd;bix3PWJGV4`|@9$3Y`}CRK-=FDy=1lLiXM3ML*ZYTa{m-B4|Kqv-Kb`M?;X?19FZ927q5q|e z{eQXG|H>tPFE97Mw%q^va{u2h5Agl_mBBZz4*uiH;6JYo{)^x6Ti1vGeSP@t8^iD3 z7<~8U@O!t0Ke#pg;jQ8StPFp&GW_xF;wQI@pWZ2cx?22fwRmH#cw=?+=34RAdhz!9 z=ok3z7Qebz{QBPLHyfjO?~i_afAoL%N56YezW-o! zd3tMnW~)5AJwE?rVYrEC;z3Rq(b@NGe>q)iJsqSi+g zPY3#j)xofuj_^$m@Qo+a@${hLH=Xc1nBqI&Pr~r1!3ZQfPao}k7~iqZGsn8m5i7oaQMxH;f;YX9DeV{@cTC%!`D^{!1&{p;p@T> z0RCJU9$G67t&QGVAH8!I0P_140K7MPccXkS!|*U+ERSvmhL42dqw>sld3LKj2Mo8z z7X;(-&iL|91sJdHj<4;Ff#J>l>XyFSPpUgls?|>A81{hSWTQ6$fcQ2ADpFYyD0U%g~?NDNVjub>oBhrsZv)#2dPYhH)nVJW6MEMBuZTwxu)ey8}^o#N+r zivJ~m1?uq4_0ijR9Y$bib@<-K=(iiC>Tm=AS%<=K33W&e%Trt9(_4UXObj18hL=!^ zJL4<6)z#ff7>=zDS5Sw*utN;-u?~CHy)H4lZvf6>I2DGIy@KC?OG9fFI78Dz4Uotcs$i1dMQ8FA=@c> zX%~(3CF`Y*q3ZCgVQ9UypL*$+y`4rKUKWN|Sc>1cA`Gt$REL9C*-Kf6h9T?l=J1Cr z#cOJ(R)??O8G0S66jLunDgF|5c(?d98mYdlmkLAcrH_aqK45reYm7#kFue45Y#6c* z_kbaKDKTUn28MuftutBgPVTY})k|55)x#!++rw$hmLw9eHwL$B8+*ccFKA95!PYdPBjnNOEC}8PFaWSr7XplPIuEh zL@BbD0>krZ9]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 literal 0 HcmV?d00001 diff --git a/build_scripts/Windows-msys2/installer/ifexist.nsh b/build_scripts/Windows-msys2/installer/ifexist.nsh new file mode 100644 index 000000000..3f391c898 --- /dev/null +++ b/build_scripts/Windows-msys2/installer/ifexist.nsh @@ -0,0 +1,15 @@ +; See http://nsis.sourceforge.net/Check_if_a_file_exists_at_compile_time for documentation +!macro !defineifexist _VAR_NAME _FILE_NAME + !tempfile _TEMPFILE + !ifdef NSIS_WIN32_MAKENSIS + ; Windows - cmd.exe + !system 'if exist "${_FILE_NAME}" echo !define ${_VAR_NAME} > "${_TEMPFILE}"' + !else + ; Posix - sh + !system 'if [ -e "${_FILE_NAME}" ]; then echo "!define ${_VAR_NAME}" > "${_TEMPFILE}"; fi' + !endif + !include '${_TEMPFILE}' + !delfile '${_TEMPFILE}' + !undef _TEMPFILE +!macroend +!define !defineifexist "!insertmacro !defineifexist" \ No newline at end of file diff --git a/build_scripts/Windows-msys2/installer/lang/ca_ES.nsh b/build_scripts/Windows-msys2/installer/lang/ca_ES.nsh new file mode 100644 index 000000000..acb11b5a4 --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/ca_ES.nsh @@ -0,0 +1,29 @@ +!insertmacro LANG_STRING Section_Main "${APPNAME}" +!insertmacro LANG_STRING Section_Main_Desc "Instal·la ${APPNAME} i els components necessaris." +!insertmacro LANG_STRING Section_Data "Pells" +!insertmacro LANG_STRING Section_Data_Desc "Instal·la pells." +!insertmacro LANG_STRING Section_Shortcuts "Icones d'accés directe" +!insertmacro LANG_STRING Section_Shortcuts_Desc "Afegir icones d'accés directe." +!insertmacro LANG_STRING Section_StartMenu "Icona del menú d'inici" +!insertmacro LANG_STRING Section_StartMenu_Desc "Afegir icona en el menú d'inici" +!insertmacro LANG_STRING Section_Desktop "Icona d'escriptori" +!insertmacro LANG_STRING Section_Desktop_Desc "Afegir icona a l'escriptori" +!insertmacro LANG_STRING Section_QuickLaunch "Icona de la barra ràpida d'accés" +!insertmacro LANG_STRING Section_QuickLaunch_Desc "Afegir icona a la barra ràpida d'accés" +!insertmacro LANG_STRING Section_Plugins "Complements opcionals" +!insertmacro LANG_STRING Section_Plugins_Desc "Components opcionals per afegir funcionalitat." +!insertmacro LANG_STRING Section_Plugin_FeedReader "LectorFonts" +!insertmacro LANG_STRING Section_Plugin_FeedReader_Desc "Instal·lar complement LectorFonts." +!insertmacro LANG_STRING Section_Plugin_LinksCloud "NúvolEnllaços" +!insertmacro LANG_STRING Section_Plugin_LinksCloud_Desc "Instal·lar complement NúvolEnllaços." +!insertmacro LANG_STRING Section_Plugin_VOIP "VeuIP" +!insertmacro LANG_STRING Section_Plugin_VOIP_Desc "Instal·lar complement VeuIP." +!insertmacro LANG_STRING Section_AutoStart "Posada en marxa automàtica" +!insertmacro LANG_STRING Section_AutoStart_Desc "Autoengegar al arrencar." +!insertmacro LANG_STRING Page_InstallMode "Mode instal·lació" +!insertmacro LANG_STRING Page_InstallMode_Desc "Escull com vols instal·lar ${APPNAME}." +!insertmacro LANG_STRING Page_InstallMode_Standard "Instal·lació e&stàndard" +!insertmacro LANG_STRING Page_InstallMode_Standard_Desc "Instal·la ${APPNAME} per la sessió d'usuari actual." +!insertmacro LANG_STRING Page_InstallMode_Portable "Instal·lació &portable." +!insertmacro LANG_STRING Page_InstallMode_Portable_Desc "En mode portable les dades de configuració s'emmagatzemen a la carpeta d'aplicació i no s'escriu informació al registre del sistema." +!insertmacro LANG_STRING Link_Uninstall "Desinstal·lar." diff --git a/build_scripts/Windows-msys2/installer/lang/de.nsh b/build_scripts/Windows-msys2/installer/lang/de.nsh new file mode 100644 index 000000000..c5323f523 --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/de.nsh @@ -0,0 +1,29 @@ +!insertmacro LANG_STRING Section_Main "${APPNAME}" +!insertmacro LANG_STRING Section_Main_Desc "Installiert ${APPNAME} und die benötigten Komponenten." +!insertmacro LANG_STRING Section_Data "Skins" +!insertmacro LANG_STRING Section_Data_Desc "Skins installieren." +!insertmacro LANG_STRING Section_Shortcuts "Verknüpfungssymbole" +!insertmacro LANG_STRING Section_Shortcuts_Desc "Verküpfungssymbole hinzufügen." +!insertmacro LANG_STRING Section_StartMenu "Startmenüsymbol" +!insertmacro LANG_STRING Section_StartMenu_Desc "Fügt Symbol zum Startmenü hinzu." +!insertmacro LANG_STRING Section_Desktop "Desktopsymbol" +!insertmacro LANG_STRING Section_Desktop_Desc "Fügt Symbol zum Desktop hinzu." +!insertmacro LANG_STRING Section_QuickLaunch "Schnellstartsymbol" +!insertmacro LANG_STRING Section_QuickLaunch_Desc "Fügt Symbol zur Schnellstartleiste hinzu." +!insertmacro LANG_STRING Section_Plugins "Optionale Plug-ins" +!insertmacro LANG_STRING Section_Plugins_Desc "Optionale Plug-ins zum Erweitern der Funktionalität." +!insertmacro LANG_STRING Section_Plugin_FeedReader "FeedReader" +!insertmacro LANG_STRING Section_Plugin_FeedReader_Desc "Installiert das Plug-in Feedreader." +!insertmacro LANG_STRING Section_Plugin_LinksCloud "Verknüpfungswolke" +!insertmacro LANG_STRING Section_Plugin_LinksCloud_Desc "Installiert das Plug-in Verknüpfungswolke." +!insertmacro LANG_STRING Section_Plugin_VOIP "VOIP" +!insertmacro LANG_STRING Section_Plugin_VOIP_Desc "Installiert das Plug-in VOIP" +!insertmacro LANG_STRING Section_AutoStart "Automatischer Programmstart" +!insertmacro LANG_STRING Section_AutoStart_Desc "Beim Start automatisch ausführen." +!insertmacro LANG_STRING Page_InstallMode "Installationsmodus" +!insertmacro LANG_STRING Page_InstallMode_Desc "Wähle wie du ${APPNAME} installieren willst." +!insertmacro LANG_STRING Page_InstallMode_Standard "&Standardinstallation" +!insertmacro LANG_STRING Page_InstallMode_Standard_Desc "Installiere ${APPNAME} für den derzeitigen Benutzer dieses Geräts." +!insertmacro LANG_STRING Page_InstallMode_Portable "&Portable Installation" +!insertmacro LANG_STRING Page_InstallMode_Portable_Desc "Im portablen Modus werden alle Konfigurationsdaten im Verzeichnis der Anwendung gespeichert und keine Informationen in der Registry abgelegt." +!insertmacro LANG_STRING Link_Uninstall "Deinstallieren" diff --git a/build_scripts/Windows-msys2/installer/lang/en.nsh b/build_scripts/Windows-msys2/installer/lang/en.nsh new file mode 100644 index 000000000..a1bbc783c --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/en.nsh @@ -0,0 +1,29 @@ +!insertmacro LANG_STRING Section_Main "${APPNAME}" +!insertmacro LANG_STRING Section_Main_Desc "Installs ${APPNAME} and required components." +!insertmacro LANG_STRING Section_Data "Skins" +!insertmacro LANG_STRING Section_Data_Desc "Installs skins." +!insertmacro LANG_STRING Section_Shortcuts "Shortcut icons" +!insertmacro LANG_STRING Section_Shortcuts_Desc "Adds shortcut icons." +!insertmacro LANG_STRING Section_StartMenu "Start Menu icon" +!insertmacro LANG_STRING Section_StartMenu_Desc "Adds icon to start menu." +!insertmacro LANG_STRING Section_Desktop "Desktop icon" +!insertmacro LANG_STRING Section_Desktop_Desc "Adds icon to desktop." +!insertmacro LANG_STRING Section_QuickLaunch "Quick Launch icon" +!insertmacro LANG_STRING Section_QuickLaunch_Desc "Adds icon to Quick Launch toolbar." +!insertmacro LANG_STRING Section_Plugins "Optional plugins" +!insertmacro LANG_STRING Section_Plugins_Desc "Optional plugins to extend functionality." +!insertmacro LANG_STRING Section_Plugin_FeedReader "FeedReader" +!insertmacro LANG_STRING Section_Plugin_FeedReader_Desc "Installs plugin FeedReader." +!insertmacro LANG_STRING Section_Plugin_VOIP "VOIP" +!insertmacro LANG_STRING Section_Plugin_VOIP_Desc "Installs plugin VOIP." +;!insertmacro LANG_STRING Section_Link "File Association" +;!insertmacro LANG_STRING Section_Link_Desc "Associate ${APPNAME} with .pqi file extension." +!insertmacro LANG_STRING Section_AutoStart "Auto Startup" +!insertmacro LANG_STRING Section_AutoStart_Desc "Auto-Run at startup." +!insertmacro LANG_STRING Page_InstallMode "Installation Mode" +!insertmacro LANG_STRING Page_InstallMode_Desc "Choose how you want to install ${APPNAME}." +!insertmacro LANG_STRING Page_InstallMode_Standard "&Standard installation" +!insertmacro LANG_STRING Page_InstallMode_Standard_Desc "Install ${APPNAME} for the current user of this machine." +!insertmacro LANG_STRING Page_InstallMode_Portable "&Portable installation" +!insertmacro LANG_STRING Page_InstallMode_Portable_Desc "In portable mode all configuration data is stored in the application folder and no information is written to the registry." +!insertmacro LANG_STRING Link_Uninstall "Uninstall" \ No newline at end of file diff --git a/build_scripts/Windows-msys2/installer/lang/es.nsh b/build_scripts/Windows-msys2/installer/lang/es.nsh new file mode 100644 index 000000000..68900ec62 --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/es.nsh @@ -0,0 +1,29 @@ +!insertmacro LANG_STRING Section_Main "${APPNAME}" +!insertmacro LANG_STRING Section_Main_Desc "Instala ${APPNAME} y los componentes requeridos." +!insertmacro LANG_STRING Section_Data "Coberturas (skins)" +!insertmacro LANG_STRING Section_Data_Desc "Instalar coberturas" +!insertmacro LANG_STRING Section_Shortcuts "Iconos de accesos directos" +!insertmacro LANG_STRING Section_Shortcuts_Desc "Añade iconos de accesos directos." +!insertmacro LANG_STRING Section_StartMenu "Icono de menú de inicio" +!insertmacro LANG_STRING Section_StartMenu_Desc "Añade icono al menú de inicio." +!insertmacro LANG_STRING Section_Desktop "Icono del escritorio" +!insertmacro LANG_STRING Section_Desktop_Desc "Añade icono al escritorio" +!insertmacro LANG_STRING Section_QuickLaunch "Icono de inicio rápido" +!insertmacro LANG_STRING Section_QuickLaunch_Desc "Añade icono a la Barra de Inicio Rápido" +!insertmacro LANG_STRING Section_Plugins "Complementos opcionales" +!insertmacro LANG_STRING Section_Plugins_Desc "Complementos opcionales para expandir la funcionalidad." +!insertmacro LANG_STRING Section_Plugin_FeedReader "FeedReader" +!insertmacro LANG_STRING Section_Plugin_FeedReader_Desc "Instala el complemento FeedReader." +!insertmacro LANG_STRING Section_Plugin_LinksCloud "LinksCloud" +!insertmacro LANG_STRING Section_Plugin_LinksCloud_Desc "Instala el complemento LinksCloud." +!insertmacro LANG_STRING Section_Plugin_VOIP "VOIP" +!insertmacro LANG_STRING Section_Plugin_VOIP_Desc "Instala el complemento VOIP" +!insertmacro LANG_STRING Section_AutoStart "Auto iniciar" +!insertmacro LANG_STRING Section_AutoStart_Desc "Auto-ejecutar al incio." +!insertmacro LANG_STRING Page_InstallMode "Modo de instalación" +!insertmacro LANG_STRING Page_InstallMode_Desc "Elija cómo quiere instalar ${APPNAME}." +!insertmacro LANG_STRING Page_InstallMode_Standard "Instalación &Estándar" +!insertmacro LANG_STRING Page_InstallMode_Standard_Desc "Instalar ${APPNAME} para el usuario actual de esta máquina." +!insertmacro LANG_STRING Page_InstallMode_Portable "Instalación &Portable" +!insertmacro LANG_STRING Page_InstallMode_Portable_Desc "En modo portable, todos los datos de configuración se almacenan en la carpeta de la aplicación y no se escribe ninguna información en el registro." +!insertmacro LANG_STRING Link_Uninstall "Desinstalar" diff --git a/build_scripts/Windows-msys2/installer/lang/fr.nsh b/build_scripts/Windows-msys2/installer/lang/fr.nsh new file mode 100644 index 000000000..d4c797833 --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/fr.nsh @@ -0,0 +1,29 @@ +!insertmacro LANG_STRING Section_Main "${APPNAME}" +!insertmacro LANG_STRING Section_Main_Desc "Installe ${APPNAME} et les composants requis." +!insertmacro LANG_STRING Section_Data "Habillages" +!insertmacro LANG_STRING Section_Data_Desc "Installe des habillages." +!insertmacro LANG_STRING Section_Shortcuts "Icônes de raccourci" +!insertmacro LANG_STRING Section_Shortcuts_Desc "Ajoute les icônes de raccourci." +!insertmacro LANG_STRING Section_StartMenu "Icône de menu démarrage" +!insertmacro LANG_STRING Section_StartMenu_Desc "Ajoute l'icône au menu démarrer." +!insertmacro LANG_STRING Section_Desktop "Icônes de bureau" +!insertmacro LANG_STRING Section_Desktop_Desc "Ajoute l'icône sur le bureau." +!insertmacro LANG_STRING Section_QuickLaunch "Icône de lancement rapide" +!insertmacro LANG_STRING Section_QuickLaunch_Desc "Ajoute une icône à la barre d'outils de lancement rapide." +!insertmacro LANG_STRING Section_Plugins "Plug-ins optionnels" +!insertmacro LANG_STRING Section_Plugins_Desc "Plug-ins optionnels destinés à étendre les fonctionnalités." +!insertmacro LANG_STRING Section_Plugin_FeedReader "FeedReader" +!insertmacro LANG_STRING Section_Plugin_FeedReader_Desc "Installe le plug-in FeedReader." +!insertmacro LANG_STRING Section_Plugin_LinksCloud "LinksCloud" +!insertmacro LANG_STRING Section_Plugin_LinksCloud_Desc "Installe le plug-in LinksCloud." +!insertmacro LANG_STRING Section_Plugin_VOIP "VOIP" +!insertmacro LANG_STRING Section_Plugin_VOIP_Desc "Installe le plug-in VOIP." +!insertmacro LANG_STRING Section_AutoStart "Démarrage automatique" +!insertmacro LANG_STRING Section_AutoStart_Desc "Démarrage automatique au démarrage." +!insertmacro LANG_STRING Page_InstallMode "Mode d'installation" +!insertmacro LANG_STRING Page_InstallMode_Desc "Choisissez comment vous voulez installer ${APPNAME}." +!insertmacro LANG_STRING Page_InstallMode_Standard "&Installation standard" +!insertmacro LANG_STRING Page_InstallMode_Standard_Desc "Installer ${APPNAME} pour l'utilisateur actuel de cette machine." +!insertmacro LANG_STRING Page_InstallMode_Portable "&Installation portable" +!insertmacro LANG_STRING Page_InstallMode_Portable_Desc "En mode portable toutes les données de configuration sont stockées dans le dossier de l'application et aucune information n'est écrite dans la base de registre." +!insertmacro LANG_STRING Link_Uninstall "Désinstaller" diff --git a/build_scripts/Windows-msys2/installer/lang/pl.nsh b/build_scripts/Windows-msys2/installer/lang/pl.nsh new file mode 100644 index 000000000..9f6d4305e --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/pl.nsh @@ -0,0 +1,29 @@ +!insertmacro LANG_STRING Section_Main "${APPNAME}" +!insertmacro LANG_STRING Section_Main_Desc "Instaluje ${APPNAME} oraz wymagane komponenty." +!insertmacro LANG_STRING Section_Data "Skórki" +!insertmacro LANG_STRING Section_Data_Desc "Instaluje skórki." +!insertmacro LANG_STRING Section_Shortcuts "Ikony skrótów" +!insertmacro LANG_STRING Section_Shortcuts_Desc "Dodaje skróty ikon." +!insertmacro LANG_STRING Section_StartMenu "Start Menu icon" +!insertmacro LANG_STRING Section_StartMenu_Desc "Dodaje ikonę do menu start." +!insertmacro LANG_STRING Section_Desktop "Ikona na pulpicie" +!insertmacro LANG_STRING Section_Desktop_Desc "Dodawanie ikony na pulpicie" +!insertmacro LANG_STRING Section_QuickLaunch "Ikona szybkiego uruchamiania" +!insertmacro LANG_STRING Section_QuickLaunch_Desc "Dodaje ikonę do paska Szybkiego Uruchamiania." +!insertmacro LANG_STRING Section_Plugins "Wtyczki opcjonalne" +!insertmacro LANG_STRING Section_Plugins_Desc "Wtyczki opcjonalne rozszerzające funkcjonalność." +!insertmacro LANG_STRING Section_Plugin_FeedReader "FeedReader" +!insertmacro LANG_STRING Section_Plugin_FeedReader_Desc "Instaluje wtyczki FeedReader" +!insertmacro LANG_STRING Section_Plugin_LinksCloud "LinksCloud" +!insertmacro LANG_STRING Section_Plugin_LinksCloud_Desc "Instaluje wtyczki LinksCloud." +!insertmacro LANG_STRING Section_Plugin_VOIP "VOIP" +!insertmacro LANG_STRING Section_Plugin_VOIP_Desc "Instaluje wtyczki VOIP." +!insertmacro LANG_STRING Section_AutoStart "Auto Startup" +!insertmacro LANG_STRING Section_AutoStart_Desc "Automatyczne uruchamianie przy starcie." +!insertmacro LANG_STRING Page_InstallMode "Tryb instalacji" +!insertmacro LANG_STRING Page_InstallMode_Desc "Wybierz jak chcesz zainstalować ${APPNAME}." +!insertmacro LANG_STRING Page_InstallMode_Standard "&Standardowa instalacja" +!insertmacro LANG_STRING Page_InstallMode_Standard_Desc "Zainstaluj ${APPNAME} dla bieżącego użytkownika tej maszyny." +!insertmacro LANG_STRING Page_InstallMode_Portable "&Portable installation" +!insertmacro LANG_STRING Page_InstallMode_Portable_Desc "W trybie przenośnym wszystkie dane konfiguracyjne są przechowywane w folderze aplikacji i nie są zapisywane w rejestrze." +!insertmacro LANG_STRING Link_Uninstall "Odinstaluj" diff --git a/build_scripts/Windows-msys2/installer/lang/ru.nsh b/build_scripts/Windows-msys2/installer/lang/ru.nsh new file mode 100644 index 000000000..09c578cb8 --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/ru.nsh @@ -0,0 +1,29 @@ +!insertmacro LANG_STRING Section_Main "${APPNAME}" +!insertmacro LANG_STRING Section_Main_Desc "Установка ${APPNAME} и необходимых компонентов." +!insertmacro LANG_STRING Section_Data "Оболочки" +!insertmacro LANG_STRING Section_Data_Desc "Установка оболочек." +!insertmacro LANG_STRING Section_Shortcuts "Ярлыки" +!insertmacro LANG_STRING Section_Shortcuts_Desc "Добавление ярлыков." +!insertmacro LANG_STRING Section_StartMenu "Ярлык в меню Пуск" +!insertmacro LANG_STRING Section_StartMenu_Desc "Добавление ярлыка в меню Пуск." +!insertmacro LANG_STRING Section_Desktop "Ярлык на рабочем столе" +!insertmacro LANG_STRING Section_Desktop_Desc "Добавление ярлыка на рабочий стол." +!insertmacro LANG_STRING Section_QuickLaunch "Ярлык в панели быстрого запуска" +!insertmacro LANG_STRING Section_QuickLaunch_Desc "Добавление ярлыка на панель быстрого запуска." +!insertmacro LANG_STRING Section_Plugins "Дополнительные плагины" +!insertmacro LANG_STRING Section_Plugins_Desc "Дополнительные плагины для расширения функциональности." +!insertmacro LANG_STRING Section_Plugin_FeedReader "FeedReader – RSS-агрегатор" +!insertmacro LANG_STRING Section_Plugin_FeedReader_Desc "Установка плагина FeedReader." +!insertmacro LANG_STRING Section_Plugin_LinksCloud "LinksCloud – Облако ссылок" +!insertmacro LANG_STRING Section_Plugin_LinksCloud_Desc "Установка плагина LinksCloud." +!insertmacro LANG_STRING Section_Plugin_VOIP "VoIP" +!insertmacro LANG_STRING Section_Plugin_VOIP_Desc "Установка плагина VoIP." +!insertmacro LANG_STRING Section_AutoStart "Автозапуск" +!insertmacro LANG_STRING Section_AutoStart_Desc "Автозапуск при загрузке системы." +!insertmacro LANG_STRING Page_InstallMode "Режим установки" +!insertmacro LANG_STRING Page_InstallMode_Desc "Выберите метод установки ${APPNAME}." +!insertmacro LANG_STRING Page_InstallMode_Standard "Стандартная установка" +!insertmacro LANG_STRING Page_InstallMode_Standard_Desc "Установка ${APPNAME} для текущего пользователя компьютера." +!insertmacro LANG_STRING Page_InstallMode_Portable "Портативная установка" +!insertmacro LANG_STRING Page_InstallMode_Portable_Desc "В режиме портативной установки все конфигурационные файлы сохраняются в папку приложения и в системный реестр не записывается никакой информации." +!insertmacro LANG_STRING Link_Uninstall "Удаление программы" diff --git a/build_scripts/Windows-msys2/installer/lang/tr.nsh b/build_scripts/Windows-msys2/installer/lang/tr.nsh new file mode 100644 index 000000000..f893ac076 --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/tr.nsh @@ -0,0 +1,29 @@ +!insertmacro LANG_STRING Section_Main "${APPNAME}" +!insertmacro LANG_STRING Section_Main_Desc "${APPNAME} ve gerekli bileşenleri kurar." +!insertmacro LANG_STRING Section_Data "Temalar" +!insertmacro LANG_STRING Section_Data_Desc "Tema yükleyin." +!insertmacro LANG_STRING Section_Shortcuts "Kısayol simgeleri" +!insertmacro LANG_STRING Section_Shortcuts_Desc "Kısayol simgesi ekleyin." +!insertmacro LANG_STRING Section_StartMenu "Başlat Menüsü simgesi" +!insertmacro LANG_STRING Section_StartMenu_Desc "Başlat menüsüne simge ekleyin." +!insertmacro LANG_STRING Section_Desktop "Masaüstü simgesi" +!insertmacro LANG_STRING Section_Desktop_Desc "Masaüstüne simge ekleyin." +!insertmacro LANG_STRING Section_QuickLaunch "Hızlı Başlat simgesi" +!insertmacro LANG_STRING Section_QuickLaunch_Desc "Hızlı Başlat araç çubuğuna simge ekleyin." +!insertmacro LANG_STRING Section_Plugins "İsteğe bağlı eklentiler" +!insertmacro LANG_STRING Section_Plugins_Desc "İşlevselliği artırmak için isteğe bağlı eklentiler." +!insertmacro LANG_STRING Section_Plugin_FeedReader "AkışOkuyucu" +!insertmacro LANG_STRING Section_Plugin_FeedReader_Desc "AkışOkuyucu eklentisini yükleyin." +!insertmacro LANG_STRING Section_Plugin_LinksCloud "BağlantıBulutu" +!insertmacro LANG_STRING Section_Plugin_LinksCloud_Desc "BağlantıBulutu eklentisini yükleyin." +!insertmacro LANG_STRING Section_Plugin_VOIP "VOIP" +!insertmacro LANG_STRING Section_Plugin_VOIP_Desc "VOIP eklentisini yükleyin." +!insertmacro LANG_STRING Section_AutoStart "Otomatik Başlat" +!insertmacro LANG_STRING Section_AutoStart_Desc "Açılışta otomatik başlatın." +!insertmacro LANG_STRING Page_InstallMode "Kurulum Yöntemi" +!insertmacro LANG_STRING Page_InstallMode_Desc "${APPNAME} kurulum şeklini seçin" +!insertmacro LANG_STRING Page_InstallMode_Standard "&Normal kurulum" +!insertmacro LANG_STRING Page_InstallMode_Standard_Desc "${APPNAME} yalnızca şimdiki kullanıcı için kurulsun." +!insertmacro LANG_STRING Page_InstallMode_Portable "&Taşınabilir kurulum" +!insertmacro LANG_STRING Page_InstallMode_Portable_Desc "Taşınabilir kipte tüm ayarlar uygulama klasörüne depolanır ve kayıt defterine hiçbir bilgi yazılmaz." +!insertmacro LANG_STRING Link_Uninstall "Kaldırın" diff --git a/build_scripts/Windows-msys2/installer/lang/ts/ca_ES.ts b/build_scripts/Windows-msys2/installer/lang/ts/ca_ES.ts new file mode 100644 index 000000000..add40b909 --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/ts/ca_ES.ts @@ -0,0 +1,205 @@ + + + Section_Main + + ${APPNAME} + ${APPNAME} + + + + Section_Main_Desc + + Installs ${APPNAME} and required components. + Instal·la ${APPNAME} i els components necessaris. + + + + Section_Data + + Skins + Pells + + + + Section_Data_Desc + + Installs skins. + Instal·la pells. + + + + Section_Shortcuts + + Shortcut icons + Icones d'accés directe + + + + Section_Shortcuts_Desc + + Adds shortcut icons. + Afegir icones d'accés directe. + + + + Section_StartMenu + + Start Menu icon + Icona del menú d'inici + + + + Section_StartMenu_Desc + + Adds icon to start menu. + Afegir icona en el menú d'inici + + + + Section_Desktop + + Desktop icon + Icona d'escriptori + + + + Section_Desktop_Desc + + Adds icon to desktop. + Afegir icona a l'escriptori + + + + Section_QuickLaunch + + Quick Launch icon + Icona de la barra ràpida d'accés + + + + Section_QuickLaunch_Desc + + Adds icon to Quick Launch toolbar. + Afegir icona a la barra ràpida d'accés + + + + Section_Plugins + + Optional plugins + Complements opcionals + + + + Section_Plugins_Desc + + Optional plugins to extend functionality. + Components opcionals per afegir funcionalitat. + + + + Section_Plugin_FeedReader + + FeedReader + LectorFonts + + + + Section_Plugin_FeedReader_Desc + + Installs plugin FeedReader. + Instal·lar complement LectorFonts. + + + + Section_Plugin_LinksCloud + + LinksCloud + NúvolEnllaços + + + + Section_Plugin_LinksCloud_Desc + + Installs plugin LinksCloud. + Instal·lar complement NúvolEnllaços. + + + + Section_Plugin_VOIP + + VOIP + VeuIP + + + + Section_Plugin_VOIP_Desc + + Installs plugin VOIP. + Instal·lar complement VeuIP. + + + + Section_AutoStart + + Auto Startup + Posada en marxa automàtica + + + + Section_AutoStart_Desc + + Auto-Run at startup. + Autoengegar al arrencar. + + + + Page_InstallMode + + Installation Mode + Mode instal·lació + + + + Page_InstallMode_Desc + + Choose how you want to install ${APPNAME}. + Escull com vols instal·lar ${APPNAME}. + + + + Page_InstallMode_Standard + + &Standard installation + Instal·lació e&stàndard + + + + Page_InstallMode_Standard_Desc + + Install ${APPNAME} for the current user of this machine. + Instal·la ${APPNAME} per la sessió d'usuari actual. + + + + Page_InstallMode_Portable + + &Portable installation + Instal·lació &portable. + + + + Page_InstallMode_Portable_Desc + + In portable mode all configuration data is stored in the application folder and no information is written to the registry. + En mode portable les dades de configuració s'emmagatzemen a la carpeta d'aplicació i no s'escriu informació al registre del sistema. + + + + Link_Uninstall + + Uninstall + Desinstal·lar. + + + \ No newline at end of file diff --git a/build_scripts/Windows-msys2/installer/lang/ts/convert_from_ts.bat b/build_scripts/Windows-msys2/installer/lang/ts/convert_from_ts.bat new file mode 100644 index 000000000..d514256e1 --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/ts/convert_from_ts.bat @@ -0,0 +1,27 @@ +@echo off + +:: Very simple conversion from *.ts to *.nsh using xslt + +pushd "%~dp0" + +if "%1"=="" ( + for %%F in (*.ts) do if "%%F" NEQ "en.ts" call :convert %%~nF + goto :exit +) + +call :convert %1 + +:exit +popd + +goto :EOF + +:convert +if not exist "%~1.ts" ( + echo File "%~1.ts" not found. + goto :EOF +) + +echo %~1 + +"%~dp0xsltproc.exe" --output "%~dp0..\%~1.nsh" "%~dp0convert_from_ts.xsl" "%~1.ts" diff --git a/build_scripts/Windows-msys2/installer/lang/ts/convert_from_ts.xsl b/build_scripts/Windows-msys2/installer/lang/ts/convert_from_ts.xsl new file mode 100644 index 000000000..a376fe691 --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/ts/convert_from_ts.xsl @@ -0,0 +1,20 @@ + + + + + + + + !insertmacro LANG_STRING + + " + + + + + " + + + + \ No newline at end of file diff --git a/build_scripts/Windows-msys2/installer/lang/ts/convert_to_ts.bat b/build_scripts/Windows-msys2/installer/lang/ts/convert_to_ts.bat new file mode 100644 index 000000000..9235d6bab --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/ts/convert_to_ts.bat @@ -0,0 +1,50 @@ +@echo off + +:: Very simple conversion from *.nsh to *.ts + +setlocal + +set Language=en +if "%1" NEQ "" set Language=%1 + +set InputFile=%~dp0..\%Language%.nsh +set OutputFile=%~dp0%Language%.ts + +if not exist "%InputFile%" ( + echo File %InputFile% not found. + goto :exit +) + +echo ^ >"%OutputFile%" +echo ^ >>"%OutputFile%" +echo ^ >>"%OutputFile%" + +for /F "tokens=1,2,3,*" %%A in (%InputFile%) do if "%%A"=="!insertmacro" call :context %%C %%D + +echo ^ >>"%OutputFile%" + +:exit +endlocal +goto :EOF + +:context + +setlocal EnableDelayedExpansion + +:: Simple replace of & to & +set Text=%2 +set Text=%Text:&=^&% +set Text=%Text:~1,-1% + +echo !Text! + +echo ^ >>"%OutputFile%" +echo ^%~1^ >>"%OutputFile%" +echo ^ >>"%OutputFile%" +echo ^!Text!^ >>"%OutputFile%" +echo ^^ >>"%OutputFile%" +echo ^ >>"%OutputFile%" +echo ^ >>"%OutputFile%" + +endlocal +goto :EOF diff --git a/build_scripts/Windows-msys2/installer/lang/ts/de.ts b/build_scripts/Windows-msys2/installer/lang/ts/de.ts new file mode 100644 index 000000000..4469c6818 --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/ts/de.ts @@ -0,0 +1,205 @@ + + + Section_Main + + ${APPNAME} + ${APPNAME} + + + + Section_Main_Desc + + Installs ${APPNAME} and required components. + Installiert ${APPNAME} und die benötigten Komponenten. + + + + Section_Data + + Skins + Skins + + + + Section_Data_Desc + + Installs skins. + Skins installieren. + + + + Section_Shortcuts + + Shortcut icons + Verknüpfungssymbole + + + + Section_Shortcuts_Desc + + Adds shortcut icons. + Verküpfungssymbole hinzufügen. + + + + Section_StartMenu + + Start Menu icon + Startmenüsymbol + + + + Section_StartMenu_Desc + + Adds icon to start menu. + Fügt Symbol zum Startmenü hinzu. + + + + Section_Desktop + + Desktop icon + Desktopsymbol + + + + Section_Desktop_Desc + + Adds icon to desktop. + Fügt Symbol zum Desktop hinzu. + + + + Section_QuickLaunch + + Quick Launch icon + Schnellstartsymbol + + + + Section_QuickLaunch_Desc + + Adds icon to Quick Launch toolbar. + Fügt Symbol zur Schnellstartleiste hinzu. + + + + Section_Plugins + + Optional plugins + Optionale Plug-ins + + + + Section_Plugins_Desc + + Optional plugins to extend functionality. + Optionale Plug-ins zum Erweitern der Funktionalität. + + + + Section_Plugin_FeedReader + + FeedReader + FeedReader + + + + Section_Plugin_FeedReader_Desc + + Installs plugin FeedReader. + Installiert das Plug-in Feedreader. + + + + Section_Plugin_LinksCloud + + LinksCloud + Verknüpfungswolke + + + + Section_Plugin_LinksCloud_Desc + + Installs plugin LinksCloud. + Installiert das Plug-in Verknüpfungswolke. + + + + Section_Plugin_VOIP + + VOIP + VOIP + + + + Section_Plugin_VOIP_Desc + + Installs plugin VOIP. + Installiert das Plug-in VOIP + + + + Section_AutoStart + + Auto Startup + Automatischer Programmstart + + + + Section_AutoStart_Desc + + Auto-Run at startup. + Beim Start automatisch ausführen. + + + + Page_InstallMode + + Installation Mode + Installationsmodus + + + + Page_InstallMode_Desc + + Choose how you want to install ${APPNAME}. + Wähle wie du ${APPNAME} installieren willst. + + + + Page_InstallMode_Standard + + &Standard installation + &Standardinstallation + + + + Page_InstallMode_Standard_Desc + + Install ${APPNAME} for the current user of this machine. + Installiere ${APPNAME} für den derzeitigen Benutzer dieses Geräts. + + + + Page_InstallMode_Portable + + &Portable installation + &Portable Installation + + + + Page_InstallMode_Portable_Desc + + In portable mode all configuration data is stored in the application folder and no information is written to the registry. + Im portablen Modus werden alle Konfigurationsdaten im Verzeichnis der Anwendung gespeichert und keine Informationen in der Registry abgelegt. + + + + Link_Uninstall + + Uninstall + Deinstallieren + + + \ No newline at end of file diff --git a/build_scripts/Windows-msys2/installer/lang/ts/en.ts b/build_scripts/Windows-msys2/installer/lang/ts/en.ts new file mode 100644 index 000000000..800157426 --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/ts/en.ts @@ -0,0 +1,186 @@ + + + + + Section_Main_Desc + + Installs ${APPNAME} and required components. + + + + + Section_Data + + Skins + + + + + Section_Data_Desc + + Installs skins. + + + + + Section_Shortcuts + + Shortcut icons + + + + + Section_Shortcuts_Desc + + Adds shortcut icons. + + + + + Section_StartMenu + + Start Menu icon + + + + + Section_StartMenu_Desc + + Adds icon to start menu. + + + + + Section_Desktop + + Desktop icon + + + + + Section_Desktop_Desc + + Adds icon to desktop. + + + + + Section_QuickLaunch + + Quick Launch icon + + + + + Section_QuickLaunch_Desc + + Adds icon to Quick Launch toolbar. + + + + + Section_Plugins + + Optional plugins + + + + + Section_Plugins_Desc + + Optional plugins to extend functionality. + + + + + Section_Plugin_FeedReader + + FeedReader + + + + + Section_Plugin_FeedReader_Desc + + Installs plugin FeedReader. + + + + + Section_Plugin_VOIP + + VOIP + + + + + Section_Plugin_VOIP_Desc + + Installs plugin VOIP. + + + + + Section_AutoStart + + Auto Startup + + + + + Section_AutoStart_Desc + + Auto-Run at startup. + + + + + Page_InstallMode + + Installation Mode + + + + + Page_InstallMode_Desc + + Choose how you want to install ${APPNAME}. + + + + + Page_InstallMode_Standard + + &Standard installation + + + + + Page_InstallMode_Standard_Desc + + Install ${APPNAME} for the current user of this machine. + + + + + Page_InstallMode_Portable + + &Portable installation + + + + + Page_InstallMode_Portable_Desc + + In portable mode all configuration data is stored in the application folder and no information is written to the registry. + + + + + Link_Uninstall + + Uninstall + + + + diff --git a/build_scripts/Windows-msys2/installer/lang/ts/es.ts b/build_scripts/Windows-msys2/installer/lang/ts/es.ts new file mode 100644 index 000000000..dab920294 --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/ts/es.ts @@ -0,0 +1,205 @@ + + + Section_Main + + ${APPNAME} + ${APPNAME} + + + + Section_Main_Desc + + Installs ${APPNAME} and required components. + Instala ${APPNAME} y los componentes requeridos. + + + + Section_Data + + Skins + Coberturas (skins) + + + + Section_Data_Desc + + Installs skins. + Instalar coberturas + + + + Section_Shortcuts + + Shortcut icons + Iconos de accesos directos + + + + Section_Shortcuts_Desc + + Adds shortcut icons. + Añade iconos de accesos directos. + + + + Section_StartMenu + + Start Menu icon + Icono de menú de inicio + + + + Section_StartMenu_Desc + + Adds icon to start menu. + Añade icono al menú de inicio. + + + + Section_Desktop + + Desktop icon + Icono del escritorio + + + + Section_Desktop_Desc + + Adds icon to desktop. + Añade icono al escritorio + + + + Section_QuickLaunch + + Quick Launch icon + Icono de inicio rápido + + + + Section_QuickLaunch_Desc + + Adds icon to Quick Launch toolbar. + Añade icono a la Barra de Inicio Rápido + + + + Section_Plugins + + Optional plugins + Complementos opcionales + + + + Section_Plugins_Desc + + Optional plugins to extend functionality. + Complementos opcionales para expandir la funcionalidad. + + + + Section_Plugin_FeedReader + + FeedReader + FeedReader + + + + Section_Plugin_FeedReader_Desc + + Installs plugin FeedReader. + Instala el complemento FeedReader. + + + + Section_Plugin_LinksCloud + + LinksCloud + LinksCloud + + + + Section_Plugin_LinksCloud_Desc + + Installs plugin LinksCloud. + Instala el complemento LinksCloud. + + + + Section_Plugin_VOIP + + VOIP + VOIP + + + + Section_Plugin_VOIP_Desc + + Installs plugin VOIP. + Instala el complemento VOIP + + + + Section_AutoStart + + Auto Startup + Auto iniciar + + + + Section_AutoStart_Desc + + Auto-Run at startup. + Auto-ejecutar al incio. + + + + Page_InstallMode + + Installation Mode + Modo de instalación + + + + Page_InstallMode_Desc + + Choose how you want to install ${APPNAME}. + Elija cómo quiere instalar ${APPNAME}. + + + + Page_InstallMode_Standard + + &Standard installation + Instalación &Estándar + + + + Page_InstallMode_Standard_Desc + + Install ${APPNAME} for the current user of this machine. + Instalar ${APPNAME} para el usuario actual de esta máquina. + + + + Page_InstallMode_Portable + + &Portable installation + Instalación &Portable + + + + Page_InstallMode_Portable_Desc + + In portable mode all configuration data is stored in the application folder and no information is written to the registry. + En modo portable, todos los datos de configuración se almacenan en la carpeta de la aplicación y no se escribe ninguna información en el registro. + + + + Link_Uninstall + + Uninstall + Desinstalar + + + \ No newline at end of file diff --git a/build_scripts/Windows-msys2/installer/lang/ts/fr.ts b/build_scripts/Windows-msys2/installer/lang/ts/fr.ts new file mode 100644 index 000000000..6ba710f7d --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/ts/fr.ts @@ -0,0 +1,205 @@ + + + Section_Main + + ${APPNAME} + ${APPNAME} + + + + Section_Main_Desc + + Installs ${APPNAME} and required components. + Installe ${APPNAME} et les composants requis. + + + + Section_Data + + Skins + Habillages + + + + Section_Data_Desc + + Installs skins. + Installe des habillages. + + + + Section_Shortcuts + + Shortcut icons + Icônes de raccourci + + + + Section_Shortcuts_Desc + + Adds shortcut icons. + Ajoute les icônes de raccourci. + + + + Section_StartMenu + + Start Menu icon + Icône de menu démarrage + + + + Section_StartMenu_Desc + + Adds icon to start menu. + Ajoute l'icône au menu démarrer. + + + + Section_Desktop + + Desktop icon + Icônes de bureau + + + + Section_Desktop_Desc + + Adds icon to desktop. + Ajoute l'icône sur le bureau. + + + + Section_QuickLaunch + + Quick Launch icon + Icône de lancement rapide + + + + Section_QuickLaunch_Desc + + Adds icon to Quick Launch toolbar. + Ajoute une icône à la barre d'outils de lancement rapide. + + + + Section_Plugins + + Optional plugins + Plug-ins optionnels + + + + Section_Plugins_Desc + + Optional plugins to extend functionality. + Plug-ins optionnels destinés à étendre les fonctionnalités. + + + + Section_Plugin_FeedReader + + FeedReader + FeedReader + + + + Section_Plugin_FeedReader_Desc + + Installs plugin FeedReader. + Installe le plug-in FeedReader. + + + + Section_Plugin_LinksCloud + + LinksCloud + LinksCloud + + + + Section_Plugin_LinksCloud_Desc + + Installs plugin LinksCloud. + Installe le plug-in LinksCloud. + + + + Section_Plugin_VOIP + + VOIP + VOIP + + + + Section_Plugin_VOIP_Desc + + Installs plugin VOIP. + Installe le plug-in VOIP. + + + + Section_AutoStart + + Auto Startup + Démarrage automatique + + + + Section_AutoStart_Desc + + Auto-Run at startup. + Démarrage automatique au démarrage. + + + + Page_InstallMode + + Installation Mode + Mode d'installation + + + + Page_InstallMode_Desc + + Choose how you want to install ${APPNAME}. + Choisissez comment vous voulez installer ${APPNAME}. + + + + Page_InstallMode_Standard + + &Standard installation + &Installation standard + + + + Page_InstallMode_Standard_Desc + + Install ${APPNAME} for the current user of this machine. + Installer ${APPNAME} pour l'utilisateur actuel de cette machine. + + + + Page_InstallMode_Portable + + &Portable installation + &Installation portable + + + + Page_InstallMode_Portable_Desc + + In portable mode all configuration data is stored in the application folder and no information is written to the registry. + En mode portable toutes les données de configuration sont stockées dans le dossier de l'application et aucune information n'est écrite dans la base de registre. + + + + Link_Uninstall + + Uninstall + Désinstaller + + + \ No newline at end of file diff --git a/build_scripts/Windows-msys2/installer/lang/ts/pl.ts b/build_scripts/Windows-msys2/installer/lang/ts/pl.ts new file mode 100644 index 000000000..deb56164f --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/ts/pl.ts @@ -0,0 +1,205 @@ + + + Section_Main + + ${APPNAME} + ${APPNAME} + + + + Section_Main_Desc + + Installs ${APPNAME} and required components. + Instaluje ${APPNAME} oraz wymagane komponenty. + + + + Section_Data + + Skins + Skórki + + + + Section_Data_Desc + + Installs skins. + Instaluje skórki. + + + + Section_Shortcuts + + Shortcut icons + Ikony skrótów + + + + Section_Shortcuts_Desc + + Adds shortcut icons. + Dodaje skróty ikon. + + + + Section_StartMenu + + Start Menu icon + + + + + Section_StartMenu_Desc + + Adds icon to start menu. + Dodaje ikonę do menu start. + + + + Section_Desktop + + Desktop icon + Ikona na pulpicie + + + + Section_Desktop_Desc + + Adds icon to desktop. + Dodawanie ikony na pulpicie + + + + Section_QuickLaunch + + Quick Launch icon + Ikona szybkiego uruchamiania + + + + Section_QuickLaunch_Desc + + Adds icon to Quick Launch toolbar. + Dodaje ikonę do paska Szybkiego Uruchamiania. + + + + Section_Plugins + + Optional plugins + Wtyczki opcjonalne + + + + Section_Plugins_Desc + + Optional plugins to extend functionality. + Wtyczki opcjonalne rozszerzające funkcjonalność. + + + + Section_Plugin_FeedReader + + FeedReader + FeedReader + + + + Section_Plugin_FeedReader_Desc + + Installs plugin FeedReader. + Instaluje wtyczki FeedReader + + + + Section_Plugin_LinksCloud + + LinksCloud + + + + + Section_Plugin_LinksCloud_Desc + + Installs plugin LinksCloud. + Instaluje wtyczki LinksCloud. + + + + Section_Plugin_VOIP + + VOIP + VOIP + + + + Section_Plugin_VOIP_Desc + + Installs plugin VOIP. + Instaluje wtyczki VOIP. + + + + Section_AutoStart + + Auto Startup + + + + + Section_AutoStart_Desc + + Auto-Run at startup. + Automatyczne uruchamianie przy starcie. + + + + Page_InstallMode + + Installation Mode + Tryb instalacji + + + + Page_InstallMode_Desc + + Choose how you want to install ${APPNAME}. + Wybierz jak chcesz zainstalować ${APPNAME}. + + + + Page_InstallMode_Standard + + &Standard installation + &Standardowa instalacja + + + + Page_InstallMode_Standard_Desc + + Install ${APPNAME} for the current user of this machine. + Zainstaluj ${APPNAME} dla bieżącego użytkownika tej maszyny. + + + + Page_InstallMode_Portable + + &Portable installation + + + + + Page_InstallMode_Portable_Desc + + In portable mode all configuration data is stored in the application folder and no information is written to the registry. + W trybie przenośnym wszystkie dane konfiguracyjne są przechowywane w folderze aplikacji i nie są zapisywane w rejestrze. + + + + Link_Uninstall + + Uninstall + Odinstaluj + + + \ No newline at end of file diff --git a/build_scripts/Windows-msys2/installer/lang/ts/ru.ts b/build_scripts/Windows-msys2/installer/lang/ts/ru.ts new file mode 100644 index 000000000..3c29f3955 --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/ts/ru.ts @@ -0,0 +1,205 @@ + + + Section_Main + + ${APPNAME} + ${APPNAME} + + + + Section_Main_Desc + + Installs ${APPNAME} and required components. + Установка ${APPNAME} и необходимых компонентов. + + + + Section_Data + + Skins + Оболочки + + + + Section_Data_Desc + + Installs skins. + Установка оболочек. + + + + Section_Shortcuts + + Shortcut icons + Ярлыки + + + + Section_Shortcuts_Desc + + Adds shortcut icons. + Добавление ярлыков. + + + + Section_StartMenu + + Start Menu icon + Ярлык в меню Пуск + + + + Section_StartMenu_Desc + + Adds icon to start menu. + Добавление ярлыка в меню Пуск. + + + + Section_Desktop + + Desktop icon + Ярлык на рабочем столе + + + + Section_Desktop_Desc + + Adds icon to desktop. + Добавление ярлыка на рабочий стол. + + + + Section_QuickLaunch + + Quick Launch icon + Ярлык в панели быстрого запуска + + + + Section_QuickLaunch_Desc + + Adds icon to Quick Launch toolbar. + Добавление ярлыка на панель быстрого запуска. + + + + Section_Plugins + + Optional plugins + Дополнительные плагины + + + + Section_Plugins_Desc + + Optional plugins to extend functionality. + Дополнительные плагины для расширения функциональности. + + + + Section_Plugin_FeedReader + + FeedReader + FeedReader – RSS-агрегатор + + + + Section_Plugin_FeedReader_Desc + + Installs plugin FeedReader. + Установка плагина FeedReader. + + + + Section_Plugin_LinksCloud + + LinksCloud + LinksCloud – Облако ссылок + + + + Section_Plugin_LinksCloud_Desc + + Installs plugin LinksCloud. + Установка плагина LinksCloud. + + + + Section_Plugin_VOIP + + VOIP + VoIP + + + + Section_Plugin_VOIP_Desc + + Installs plugin VOIP. + Установка плагина VoIP. + + + + Section_AutoStart + + Auto Startup + Автозапуск + + + + Section_AutoStart_Desc + + Auto-Run at startup. + Автозапуск при загрузке системы. + + + + Page_InstallMode + + Installation Mode + Режим установки + + + + Page_InstallMode_Desc + + Choose how you want to install ${APPNAME}. + Выберите метод установки ${APPNAME}. + + + + Page_InstallMode_Standard + + &Standard installation + Стандартная установка + + + + Page_InstallMode_Standard_Desc + + Install ${APPNAME} for the current user of this machine. + Установка ${APPNAME} для текущего пользователя компьютера. + + + + Page_InstallMode_Portable + + &Portable installation + Портативная установка + + + + Page_InstallMode_Portable_Desc + + In portable mode all configuration data is stored in the application folder and no information is written to the registry. + В режиме портативной установки все конфигурационные файлы сохраняются в папку приложения и в системный реестр не записывается никакой информации. + + + + Link_Uninstall + + Uninstall + Удаление программы + + + \ No newline at end of file diff --git a/build_scripts/Windows-msys2/installer/lang/ts/tr.ts b/build_scripts/Windows-msys2/installer/lang/ts/tr.ts new file mode 100644 index 000000000..d67961d59 --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/ts/tr.ts @@ -0,0 +1,205 @@ + + + Section_Main + + ${APPNAME} + ${APPNAME} + + + + Section_Main_Desc + + Installs ${APPNAME} and required components. + ${APPNAME} ve gerekli bileşenleri kurar. + + + + Section_Data + + Skins + Temalar + + + + Section_Data_Desc + + Installs skins. + Tema yükleyin. + + + + Section_Shortcuts + + Shortcut icons + Kısayol simgeleri + + + + Section_Shortcuts_Desc + + Adds shortcut icons. + Kısayol simgesi ekleyin. + + + + Section_StartMenu + + Start Menu icon + Başlat Menüsü simgesi + + + + Section_StartMenu_Desc + + Adds icon to start menu. + Başlat menüsüne simge ekleyin. + + + + Section_Desktop + + Desktop icon + Masaüstü simgesi + + + + Section_Desktop_Desc + + Adds icon to desktop. + Masaüstüne simge ekleyin. + + + + Section_QuickLaunch + + Quick Launch icon + Hızlı Başlat simgesi + + + + Section_QuickLaunch_Desc + + Adds icon to Quick Launch toolbar. + Hızlı Başlat araç çubuğuna simge ekleyin. + + + + Section_Plugins + + Optional plugins + İsteğe bağlı eklentiler + + + + Section_Plugins_Desc + + Optional plugins to extend functionality. + İşlevselliği artırmak için isteğe bağlı eklentiler. + + + + Section_Plugin_FeedReader + + FeedReader + AkışOkuyucu + + + + Section_Plugin_FeedReader_Desc + + Installs plugin FeedReader. + AkışOkuyucu eklentisini yükleyin. + + + + Section_Plugin_LinksCloud + + LinksCloud + BağlantıBulutu + + + + Section_Plugin_LinksCloud_Desc + + Installs plugin LinksCloud. + BağlantıBulutu eklentisini yükleyin. + + + + Section_Plugin_VOIP + + VOIP + VOIP + + + + Section_Plugin_VOIP_Desc + + Installs plugin VOIP. + VOIP eklentisini yükleyin. + + + + Section_AutoStart + + Auto Startup + Otomatik Başlat + + + + Section_AutoStart_Desc + + Auto-Run at startup. + Açılışta otomatik başlatın. + + + + Page_InstallMode + + Installation Mode + Kurulum Yöntemi + + + + Page_InstallMode_Desc + + Choose how you want to install ${APPNAME}. + ${APPNAME} kurulum şeklini seçin + + + + Page_InstallMode_Standard + + &Standard installation + &Normal kurulum + + + + Page_InstallMode_Standard_Desc + + Install ${APPNAME} for the current user of this machine. + ${APPNAME} yalnızca şimdiki kullanıcı için kurulsun. + + + + Page_InstallMode_Portable + + &Portable installation + &Taşınabilir kurulum + + + + Page_InstallMode_Portable_Desc + + In portable mode all configuration data is stored in the application folder and no information is written to the registry. + Taşınabilir kipte tüm ayarlar uygulama klasörüne depolanır ve kayıt defterine hiçbir bilgi yazılmaz. + + + + Link_Uninstall + + Uninstall + Kaldırın + + + \ No newline at end of file diff --git a/build_scripts/Windows-msys2/installer/lang/ts/xsltproc.exe b/build_scripts/Windows-msys2/installer/lang/ts/xsltproc.exe new file mode 100644 index 0000000000000000000000000000000000000000..79c2508926a2e3848452de028f9096118631e566 GIT binary patch literal 3809270 zcmdSC4|r6?^*6qO009FVG-y=Rs8ORv2#N}V->%47YC)rr7Asazu!yJ>cM)5_Xm%~@ z5{-XrEw!PbMoTTNw8ltngxFxEHXyZVu|^wpw;S8oMyr;Z_wzYt=I*_l-H3g^&+mDE zJP+Bq^XJT&bIzP|=FH5!Grm^u8|d@-^6|g7*XL`(FaHJPZ~uR4P(0$O<`KTlLw|R4 zQ{MF79X)H|)i;zbS$h39md?Aj^vZeHU3Yz`^oj+gOT*WdUVUBZ)C*^pUVHug1!IN} zA68~SR|S2(>3K!I$f4aA`$nAUyZtbqufsPu?|{4k6MW-~e7?hqeZF#^ujW8Bz@x8< ze*&5wpm^sYhxp6CmNVtyyT3V0#^v*sYF##FQ~Z;khJ$=39fgOMgM52NNOtx=?I?dZ zd(r<*?wHVm9*ry)wTd?^0D}72!(A4(`;4SY{Z_3#52Ax6ptpV=`fZJ5lkQ^x!ba0qU*A@1`vE##K&W;|b5e$=0T_v&0K8gnm#{DT4-WT_c`!Mc1`!0;`#&gfE!_U%7p9Su|w*0aJ{EXWbn^l&d z=sBgxSNl<3=v&d2&1{>Aph0p_xgVqKSQ&G(&sFF=I0-gy4m_b{>9TUviM z_}mh@^z0+>6Mi0mI0wdk7z?3~deg@u^zpbU>TORwc=r9MoZ4x6Z6b29si;2}^`js9 zBg=q9;xH? zs6fd9D5?7;TKMX=h_Ha3Gi$rb(5bH|;7hzP24w2WPdxl*zc117hTqo~{77mCKLR>M z>*mg>B4P8F%;XRX>w-P_DQNQPGuok(b?s|r`apvD>*u3(d{pN)Jnr&G*8x!NCmo@q zqyk5`jz#f6Wh}oeaV1)6-P%uDLgkrts#xa>sFNCA@BWuKR@$+rSW)8H*ZscQ&hEth z_)UC#G9VJof^`c*7 zkm9|g+A)Ac)2Aq?+sql^bIK{Pru+eSd3<2XL!LPhf;ixU z!Cr`ssOUhdU0LAsN2yhkFXGR-xuKa*1YcNnga}`4OMt_fZ-#RLSe)E|YQ!zrlN#77 zNZ;<8TpA+wNSqZ)aTvjZbYY|=bf6ZNhK8D2;kS^O6f6i$j~~G<H*?*U!=t!JspTT1gq_u&=%|j){1tQ zAm1(Rqb;kBOdS*tb_4UV;UP!_V!^K7V7FvNTEd;RD~o)gQqVEZUJsE(JTNO3?383% zU={(dD~FU(1+8W;qxh7K^u4=c!H(LM9lp?&wJSS)p#v0Lb!V(<*1C295jv-KWuY%L zC|+Hd8r1w95S|>uGblQ!iO=!jR13Aw1)#VoCI)2Sjf&8Q*MUgnMb zsqHF{kJ<#$UDtp=MshJ7s(WJX&vgvQYp*MglKig3a~%UYYe#Kns|}`A)5|liDEe3O zxlabiwmO z)uXd$OL&N?t{D_+Jb+HUselxc{bkouD!Rc|$%@bDj!iEsFuYB?78aSI9H1%HI~d3T znog#z>rer%URR}wL5X%~c1q`nfX+R1a``KR(MgxBgSkfyl@B%h1`toIM~m8(UA~+A zZG&onG~LDIYp~(A!Jx#qQDxl{8IV6Z6K?Ukfb{2&`~a2Pg5AU|S<5t7UGz;(MIjnl z3k(9V?=pQm`P6pw5GhA;3zF+LDelL{NBOF%eCt~9NFgVVDlLh(_YFb&g4EHut2}-w zX;lC{BDhTqcKg>{4`O=}`Ry@8BvHFEftmFW4uoB5PYL4oVnv?MQgs++a9dy@$F|Og zF+mxfmF9i|t%`wX5r)i_MUJ6w`GpKUH6Fm&0<~pH(SNJkv=voIU=EzbaG~;MDEdi_ zve^T|!!#R?EGQ}i7yuv2GOog~DRhV=I7~48Lo)pdNOGzWPY2DzQv)YFI0gcoR5}Fe zuhSPUOAl2H8W7Gu0hKA}Pk#iX^c4Jwb@j@-B1~wu?mB9SFZmD)Dz#v=fl|r}fWX$Z z+XnfP{}Gf69tJ1qUjcYkDKo(>2}6bU@Q33y>bK z=_;nnHNArA(VA{zx=7OJbXeWx7k#YnkrQ^lqkiYufh>q_=B&D$`pu zUBmPyO*b*ULDM}Ko2l*0ro|{Kv zSH|(5_1~D92buWSAm4g=VyHTD6xOD1e~4yN%Sth|e96-gS3>ntcp?MY4GQvS0YNsO za3t2%@Kuk@r~@DP6o2$pEd4TDe#Nx>^a!?uJDdUeGE@F%DGwKk!VRpa+D$&31>OQv z{|SW`$b`4hl;4q~zi*oI>$E@5T7~rGD2I*6^Cio(bpCDAcwCOoSDEsWIXb`1l)pck z#0XF81u@(MVCU~$JlMCMK8oY0L}8XQYt=3S3t1~!lTk``-D&!XNk5^f?$#{7+mv6e znuf`_^6HbaFQDF$2v(UE?tD;nNr-5MDZT{aTQNz@pu#`Z-;ix z#CkbOW1!$Yhi4bH8dH9Ql!s3+UPT!GBHci0`sAsAtB>>fcx;w#Vg^h_j&ANY<%QZ! z(Yhr79$3%6$(P~bWTL&+)ZcqpcC;TgSCo^(W_mx80PFw(vFyJpN7o1&&_kczOr zWr5sjTHc)la+fJzs*sDsVG69TBD{%N;C*1~PssuAQ&WD7g-7o?u%3UDNkm99M_zD^ z3g|ydvX8vTl<$&qaJoS#$-l|(Wr267ssE!K@Qya+w_12E{JxY0-btqZ#W~=OGv%i$ zJj@#!k-1~f^CdrlLzp?-iKhC%9N?yy^1mEHa)d9Tx+q+5j;IT`-h?MM>#Jwyi7K&W z&@4{bq>M7eke#xlP?nsR1+nR-<3-YOUz=2I%FkECj&>vF?)=%w=)jkygUbzop*cFZ z)|4j?mXV*)N5r}4X0Jshfj;Dz#$Ip7>Nb@^16d2|<) z>nT})$4uihasa=_lpn0XgHYxVAuI9Ws3JNb<7-!xjrWB;=617ba#{*~J`K)cK;wzT zl*NO6$wtlaxFN5Z7C!^fY|ccdDZfj~F@ZW{0`YHhb{2SlH}&V`fcL2>KS$w>Ue_(~ z_!r}&x0L7}2{W+|QHD%zj99FbeNYbAhne!Xi$w;CB#0MS-%eaNW`TEtss9V9-42(h3FHCmHJVa!smQ5BA0Egen?4rZuYeiQ< zn<+?5X?n`Q*gZEpjI|bqRCK|pH3gP~lRcbU7eFK%d}VGWI2l;aj5N0{VdO$Wy&8nK z+sGF17sie@oUVHgOV7q9ot1S*f|lLwVS*Q!eS zIhtpq$|zHQx0Hv6ubV6Cihomc+~evK;5nWx5z=aWn^6X{wru!2q=oh_`C}M_`qZKI zse|iN2i2#F>akUr8djegQm-)}D+$<@@vmute~!42NMl>R=o`Smat3GsYeWEjp!I+N zq9X^1FN;jX|Cl)#nd0;yYq&&;YIYQ@XGvnw>jQj=WpfZL;&22GcJlBqk@t0R4|MT5 zEsN%~a{X<8cCuNyzEsM?Lphq{zcFw($tcuT6i&?n$cn;&Za_cJ0?4i-lOqJ9KxRjF z9r=Qmmu8mRb>w4GZZQ5*mX55iU6TWl^|j}^0rA{OW{=jRIWq?!>(LzI2E@o}CLrsi z{B3x4W>_cXB`G&UyDkeLYY!jJ0m$0Jr~(>R3$6}GmSurtt<ODd{a7-*{RWDOiEv}8Gq1T`u(53V`x*$$^f>^7dqPw7TE=OF2gTPtyF)7bYdP* zzUT=FCHVY|=CQ0Fui>sEsA0B*-~#%RSE3E4IAXH~{HH^PVA0P#BdIXO zR6ud5XtWA?U@?=Hd+ z*JdITEB<5xV4)(dEss(UFlAwQ)K~;FeP6|&hMs}g0Ngmpw~kz_ZJl=M*I(GCXFd=~ zEk=Ai9w_1(6REa95#xl|e%8Lj$0i!rIniJqc3V zg{>~&S{QA)*=+4D)r`6-*+Mg8LHVj91dI};a2mR)%O4PDbM%nH<{~IcuUSc8s+n5Y zTG{7rt=Vm?jq3aCCNrx9#5KInzzK|=6f9gdQ`%yeoyE3iZr5PbIvyyS6f9bWEh{FY zEz5BtLXIM|Kar=j9c_ogy?cQl-eC8v^w|t8qXQjUNoqKnwFP7&2>y)4H8r_^q+FPs zmmQNT#ixAY)|)q5%=*Vfi7c218jeh_fJ|R5Xs*bR=@lTgORnl`3}I`Spk%MdZ(_m= zB4NqxIV2mqTFTbtg6IlJ_Vt>wlD)zu*(+RUaooBWLhX8o@Eu`84fehXSyu7QL>e5x2Wzz)KRM@x?lA1=|zDVBAX%o^8=Z{xw zB~PanBh^Hf1A&QK{c9dD0}BK!YXdIU23)KSOwHgc5p>j>r{=WGnrU42ZEBGU*I#Q6l9cb0J1$*%0OP!*F#X%VaH1gWxJ}8MWju8-$lUXz+R+Jhc$IFmE zc~Y?F=Iv62$?(}s0%5k9>=mXeMUJ`9aBV&iNvITPoPE2m#sABe z^)0YCGAq|PDO6rx4r{O3P73FK*3sy|U*oQHZ#y)Z9Ev#^Mx}5glskS!mD0#?#Hh)i zMB)Q;9zS&?tFX1LVzk~P1B!rbkJVCwU!(!`I8wSmRg%E@nN)zMv~VIL*cA_yAcI@f ztN}fb1e8YN%m%1Xb8t$tcyvn6W$gNNF!mt3eBoxo3-GL@az#${L9^iiUpM{&5dIh# z-J*$PsDHM3Jf+dQ%PLmRio{_TVtHo>R0!&mKwZ)qy5RnO;T{@55Wo)J(q}v5Lv3*@ z=tdH;y{*OZVpO$xMZQEBu1UPQD|Ty_(55S1!vrQxWC>bwOf>|=`Um|B=X+RnhaqFl zcBvYIjYB);V)UK^O;UX~tB=|a{;%uQIBtIab?PwevcsdNh~dFrcZt6NR>0o~mz!}0 zSU<}+JN^l06Yc;I?P?1Y0*I!H=(tLrT4Hm0qDxOtWbG762%W-khD#IUw#oc^Ypb1q z(mx%XK>S zf50xpe28C>17_6GyTW+ZFmt$ijNm;VV_ReGJ3I1tVvnM{Q<+&`FU?Vh z38C)G&k1!S{1KT^tIN-`79~fi*b|{a*2e0s ziGnmkp^m&KbppC;6SRQ?o43^v8~&3A4x0anRbVzn-GsH?9y~>8I(QH`CWYi*^d0(P zGV@Nt9fEYLs`*S$o83HT*c4meby~17-$H>%#4nx|tD*o9qW=u&hfVj(c|>@7A|+Ek zq`&~x?Z9kAfc@~iQ@&}kB7yS{!S33X-8czmCRam-^q8uVZde#N!QE|vd`bzjEUFR z;dme)(81aq#ni25I> z$+zBhl0UC-l8-#3Bo}+ZYWLvqAdwJ5z>GWp22u3t{oNEbQj{vlnk1?sG-Q+RPyA@2 zCzKt7=&&CCf}AWKO#a&wxRvs7pb`IP@`jiT0VR&$3*<$Ec+|AV;}R76Ru#&jbO0>$ zg$vLkdASNzynZtXf{b_o>k@zT-|_^9c#9;8>2n*?h~issv&BtX41cM%Wj^}bxu7RL zTzo;E$|p1^30dIcfVWP=3eckPBM?Rrc5JyJ$$z>WQ%=}=xL+<#5Ccp|2UAW?7|dd< zb>rukQ(4?iZ0m|g(sY{B!3;><{V}MF#-72%%u`{UKrl9Gn?K+;&;sY1#>5a@dS{>* zC9Rn5A7ew|i2+1mhy)BpK}-=fX{B9Z+9$)&>0zW8&Lvx`Lp1?OA15gAA?~Z~$iuyd zqvFFI7s4Eu2jTKduUCoMDUtyv8Z^ctJuHjW8Zwdp%z5LwFAz5{0y7=6%^$V44OfG> z+>X41x&-8p?3GpkmM_~izq5~Y5RPXr8ckqB$})<1Fo&E?{Qk(HG;|XM7u5Gh?sQtm zr%}pWjj&QC*KD;wJVE#p_M{3c)}Pb`#aCo-@xz$`&4lDxcL|PKC}Oaal|({ zQu^oB18AfolA}s{rO651B<7@m;8NG^Z|4>J(|I{NzgOt&?)>F9WXNJx(En8F6Dy={ zMNq_<$NR-e@AgQvd#0H*1voX9^K~l34&>p)q7)*ZGm68Vfv_u*Z7$jCwh|AD2rmbQ zfPyCTLv{uLh-8*Sc1+%HY#xL#KYW2RCn!@dX_s*^tY(t^*zhJr8 z&Xpwm5ADpb_FNa}(2dT6oqG#(?qva4Z$YNcaauu;#ybxd#4$NR{L+FD-sGOaShks2 zdV!U3nZp4*v8g`-Cjg^z=IjafaX;ql;fKqd#cCMMWzK?)3aqT(Is4XOZ0L`u(Kqwx zi+1J+-=GMG8y88G z38ZhJ$~I-YOZLib5PDDk$W&?E<&kH!ptVp7rD@7@@_9qQ(9Mc9*cW!;KQN4oB^;M1 zE#OlyaVuRc$)a}54?}G*U$um5v_}Hz&lv4D;WTixKM*8}f%;b9r0i5o(N8G}{J7;u zX}n6-?&4?AHq&*nlh7`J|MVvpH71H6q)~*7!Gjeol%}S-Ek;w0|HBYkp^>&2i_-Gs zTEW0_WF+jIxUsO7U0^R}?Mk&}MYcO(`Jofl=1_%5ThqlvH--$WyNT$*urC{XTx>*I z)RJ+WPn20CD!rReme;*}FE9jZ7jJvm!X zLu-g=TVM_Z5veYt0VmMxSnYP3r4vnTNFa`1l1r_A_!sL2At<7>f|=J=i*vSWaatWJ zt%_w&q8K8D(Q{4i812K}7DGYzN#{RrK zxDKWPI)kw%JTyd$V$62ARkS%LzD2-Sn#lZgI&oXH5B@Ha&DAMDyX)CG070Tc*r650 z?vAidwT(O>U}d&B2D-S@7KF3OwMsXClJgDCxUCmi+0g{3kBKkCNal zA;sZaxT}=BL)t_RG}gYUnNQ6fOr$p_S^&{%>dm+*n0sb zb-MJ(TSrp6^qaZ#*qAqs(T1J1;HN;D8=z$34uXI@PqM?l@LXD$EP9` zX%>+otYdMRbTDO=Y{6I{SVbZ>Po#S(H}{y$Jg2F!%9y?rSJJ#+&eaiB@{qQmENo|E3Cd7 z1gHb5l%6XCp~hxbKQ2?0V+|c|VfMHH-m3t`i6p?(#TGHh1Hs6>Ff$`k8wm}Ia417; z7J+hIG?>9e3NsRm1>{M@3rx^5MN*uTXaciU6js7I_Yz6KbTo2g{rcNQs*&lKt7$of zW8~}B$nny-=m)N4{Z=BwXC&3fh2kj00h{IFH+GF35s&O!h8}z0rAj-|2~8>2m;A_TgJ6xx&0MLja8L}@c6Kkp{kQDY){8&PbWzk*o!iU zS3{-DABmtt#iT~M)}0U$*BT2G=onTzYt==KX;vSb4gO=N$S92!6KiNRyNl1FvIpY0 zUTUzuYr-&Vnp>gHcdfEU`M*O46sItDfUdnALOAtoK^bgs$wm?IE!W$XM$vMTT19&l zjtM4tq(a)3Tcxb?*In_$zoFv0n8c{4lbod)ll*zOYf0=w^jqoMT>1Y1m6Xu;ASKec zR8YXo9UA_Ijs#lmGEG5zO2ZdPnv#jdK1Rh&rDBYq{&W$45yk_aCMB$!42BGE|^IGju}}U=?aT2(Jmwj8TNwse1_pY98fGi6=(%DfzB(?5cZPoGp14r zF1}JoNdD1asY(Wgf1b2NNR8*U5xV4AX~fw&vy1+hv1Uz;l_rkCUz<~>pZ!Nz^*m_c zPHQOa9HX?0i8r%9%PhMPv&?B`Wd=t2U|HpfeGkFdVb~akHRV5ah6agEQvZrMgNxH` zT%1LcB&Fvzmo25Mf)cl3o?b4>bxQM>Y^kHy$7#_CvY~)xR2eR(*R3NC@RP=<17Ad9 z-TvrOiS^rU`Dtyzy+98O0MQ}FEfF^XZ$}v5kNgn+2Q4@!?{NQj;Ga-6w}wo@c1o|a>|pdwEN*Y%EKy2(YFF-o zmf`g-R;>~82;=aW&#@Ti;=Dg#0o8$OfHBXhl5CYua`yOMXi zn|#h;?%m&E&cx-TSkMe}GuNW zzr&3134}NyC&b}|2<;2Pp&bc_rF5FN*E$c3ERwgE<|0^sAxV!=bYu!ePHJ^fsY% zc*Gt>=xdsif|6KO2{&ibl05F6!I7esn@uRf{y@%cNx1>h367LU!^8dIl`W`L?IIK7hNT+pCHdZ{04Wwi*jc-=5-Ep&v6???4 z>0B8SKG!Y9%bf?SkFT;jJ&>vbkHVQ{xssYL>5skjX<6@jiF<}aDdW?0bo)S&RivZ7nJRjfh?2T9Lo*x# z-8l8?Sbs#$9e5prB~Ve6?On+~3tJRieg?R$>WX;WAb(^dbG_gi9B|GqH8kP?FPFVr zf;67amLNPTFPC>4fIIiw{`LV;xXe9$p}L`|vC_g3{en+gX+sHw@XN9 z=0x_j!#_u8r`(An0?Cxcf=?2Xabssi1sjSEqW;J&whjGVi|qAw+NIGnD6X*7Od(9? zfC>F~-TTFSE$gjkk0%dAvB`Q#dGA_*q z$kLPrcC+sWTjGGKO%xz5a3j{RC32K^P+|q@XmsTJwhIK8x!%N)lI;9zh;>)BySL4SezWIQhusnu8)bFkfIy`KZd;%n3b#wEg6xSFQ zXm|Fkd#URLd#U@Zdl^>sqz>M{$s$2IC5>MW=7#(}= zxi<&Y6%HfCN7@tRV7pFquuhJ+RFw(WTvr&#f_M!@hs)c0WGGl;&SLByiw(2fOszyx zC~7jCRy_3%{-GPpL4uKzkC5<`Fhe4mbh=R=R%JAsRF%kTT5?D~+DQogVx}T2(JBUJ6HQBpYi%|f-8v3zbpzle?-Qu)z=Zfd2;^MM zf;5v8%rU(}cqqcL;C5uTNg9u6(~iFI7f3^n`VK))yH;y`m*+AZq?a-#*= zpIb%{POPjCh)xTF+^E@2>2eFvW*74cU!{QiqYq=DoqSLt9!eYp>#w#`O{V6h_GvuD zdWJlyHEa~_t5^e<@#}VDt|0b}y&k|qv>9Sd!eqo`zK`=aSO=vj-SNP9Rwz*I&NC5KlsXFL_gZu^Fa^HA6ovgnSs&(kde*_D+DknA(d%GuG|=)l0U%T|B0d!Z z0A;d>_&qJ))w9w7>?Jv9c|HeiYSOg%Y&AsQc*Mu0M&rRfc)>h{j8-a(>iH)QGl+D! z)RbsR31Xph(L`5T(ZU>s-0^!9&S*a8(3;#sqpOw{PA;>RPn-ahN!L6$_0KfQO|>{0 z=8xO~1mvtoYK{n3jg4UreUey;O`tqjfxekH@i$CGb@8s@MJ2ZCLeKm}qO z=JKD3c0u@i=xM=WnT}E7s2*1Y`i!X}uI=o96rh^Kmp)0SE(1vV}dA_MPxJB9cGnpby@R^d2BUvv9t9SKN zDMAArRO0yorsyu+YV(T;XvP+4f-BuEtDwxl#S$ooNx?0vK({T5YKsficb_8-HuIuN za5KFf&dMS@!aWKPZ42_~iw`f+mhR9oykOID3g<#L`NENuyqZ`XrDza4%I=eWXj@i@m^%nsH<$Khpd2=aFQ z5ocKa-kV@4I74)kpi@*;5edRY3~K{fN=xDysH&M_R-hzWP=H>?)&i?Bl^dM28!{IKSejBh#qFC;ms$kj<^Ji%L6;$j4!>3YBU>e(}5dnD7sR^>m&Lx z(USMuejuO#&9jJ3KYXzLcpcEC_-$J!0KbSnHaK1U&V7^bm6y)MDC6UrojWMkY}{Oa}}QD z3W`qL?Jnv*iIXTP&|o_cS8cCdx!o83rToosv~%n~Mdy@Z19%4}S%JW%PJNMXop|1^1fe`5wCjfp23L z;Y`J=_sAlAkB`gpy@CRAfXH6g*q0#I3gDB1?cw_fySm-A*ymh;ET1l&>cr@v{_K!b zCng@OX9(wp@2EyPDU<<1-p{<)lTVI~&tF6mbBh$8MAmK6FjhZ?Qqv06I^#mC} zY@jD~477kTAUwTjX?OB_Bo88Su^@scCB87YO)UWSWl@iRz}lE_Ac1JrGvpb^ zWpcOu9@?s{GvO9lWuZZIIiR&gSKu#(0m?@7r(S=^OJuq%(PhOPH*b}EMN%{s7c%uL zLc&834{-r2iV<)7rqcMks%zI=&l@6+emEoU@uAUKyPAu?UFB;!5r5z+8J~t!vBdlM zc`j!fYgabHv5&J4X)q>dgYDWN$<2o5(@;%(1xJZ}bFk{3cQN7&oF)<`Lwn7$k!rd% zXBP|7IEALfgN+o}|6EL$64rwbj79$179!umOjOxbg$uamb|>2~)X-wa7Cu2c%}t2z zRu>_nz+M~VCd99`L27PutPd5g86;ep+QjD8S_5%-rEcP{Fd&X_IL&b!Jc3s`8Xfcwn*8NC-FQJwl7ru8jD?=Qg#H=t4j#tbLV*qLg{! z6%)-gZ6zW{Yg0>8=JoCpK$FQ84l>H*>Wc8CP3iF66+eJ-=`5`JUSIS-Vc?rBW;#Bg?>cdNGEM;ZqE&{1N)s1{HZX z9sNq_I97izASGd#poX_Y_5A`VJ?yN|&AReOd7Q}MGn%g^!#zdc(W1kfuj^B^Sc(wP z^ssAged^l=gqb=wuw_;+|0*o?%qVaWQe{9c{JTa#$O@)Vw#dCMx=H1XjTrrna(K zR;J$dlQdHgx3nb}Gni`0%(*T@Z+fTSv7V04gnCs84gdmdbKkMh~G(dpSq^L!1b(V*L3=e89^7l;^p>>O0~b-0k>}m%B@Ha`%^+HM5Pi z6nJIl?vp?MZ^t^l-?4sm3&t8;UAuBM+`?sPg(hz>8ih@2Y`NisMeo7+F%!Pn$QEn( zBcIB~*Xmew3B)PM_h-f>8PFWYrsSC?_CuXcx?owMlODEghm#&2YO!g2zcKO(I@jk| za1FmCxh5W5!%sVg$|M1p2oWM@a=|jh`Is1H6T`#p@#;0&`oygUic!3mLIRi_oCmVOkr(6vKU`- zwW=Sr8^QLrAbQ0lz|>^ikwo>xKdxf5Q+E2oe^ku4^p5hoxY8Ql z7FO3(c343(6_YXo*i8UG69BtwSMK(OcUu5^+M)|BfC{c{Yia-tFh)8LF{wc?dkAKc zfRXdI;g>9!y*8$YAz;Z%Zv#VM3gJUGl~a{trKyDc(?jTJ3vL$t(G&|=dJ$;K6k>;L z+QD9X7I5?(vY`EAEx6>5oQU9b6E71f`!=##@Dol=e{?v@XkcAsCu&*bQS=5^%)TT@ zhy;T?EH2|j_eaFdL?^|C+iyP-t$2lY1o}G|F65ZD zJ-}eQ8U304^>8A3$XMsCB^fxmbaydx?|=lKn2<4j)K)u{y<#)dsDXohSD^ znj0%{t}QSfG=b;0*~h7~nL}>C+lb@U^|2{f+aR7JJg%-sT6Uj{`rRYD<I)Dz5% zZ;*0pYgev?+}s4hIv1GMB1i{$oq!m&gzLB&a55iw_)D@(P?$pIR$NPe=v-~$Rtc(N z%du0YRrDOHb7{?qbQ+%2Q`K5Vm&X33^GtL<?5rf0g2iQh*RrX}f+ zM5oH8knqUw;$$~DQIT38^Y`+8=I{HbX6>fpv%7ife%lQht}pD_E=Y^pjCVK)_Q>%u zDufLuqpg`rYir(vN(`Jwg(vs9(%QP)tF61;+S)v%wRJbaY?(_i-LfeLZQX}>`!T9F z@3W(7dJhvV_xjVfIn#v-Eo$!J-1Iod>v||V;ls1|lDA1w=wQ`tZ2|GD5ar_3!rOdh z-XoU;?BmgLt1EO77WIr{e5?v1G4H4NfVO$T0rs70ASb=4nZ{~K@T6YFL^c#(!d^1M z17>^i6tv|%c>*kyF4Y;5O~iU@7gqjC+AySW6T-6*tBv>N)JdX{1J zAJB*ej*-^&?^tv!z|e3Vi+r4jZLn_4Dn!cd4g9Aw50Pi zfMI><5r!y`nN3wxWc9w#VMYV}5Vx2!J{Vzk$PgXH-d7nZG#Qv?cVoL6Fib{T3+Lpl zvmJE|OoZUEZHUk_rVv6XJ({53d7NAj(2dRm{ogs5k9hm|&Cca29&PFG956Pl(+5ua z+^nj1Xx-1o4na5vPWpg&%z{v)9m&C#6d0&XY(!LiZ4iZV?q|o5>_6_LIReKB0Q{(Ds49$ET{Ekb3_e zn!k6@tVR#Q(X2t^I}s^Q2LCTQde`ZQho2!sJfp2Wa_8UWwNJd0_EZQGnC05=pT3D( z9^FYCw4&*8xZ*wHPp)KMB>Kqojp#6hvz+|hw>o<#@BUOeN#RcO=jovkG7hkaKle|@ zW3h|Lbq4XkWEdJ6hHHqSK|E;+O;%(!i38KDU}i|=0k6>OfS~k1P}0+pt_lSP!3HP> zzVm3k(1`h@SX`dE)!v83;+%ve^FyK-Rsi?xis5CPBTZe(>bma+@7MSj?+N)Z^(~}f zP|D65kSIpP(NwL z<2;1oj}#jhl`5!HR%6qU9sLcO$QEhS{bWg2S^j7vm)E+`lDmUzb5dX@Hl>me!tVq_ z@R#W5S`F`7f}r8}$ZpI{*}vbB6UZ6>5pm+U>Z*5;sqyOFmORgc$~aJFO#$KKmi2KQ zlfE!pUL;lLUE0>0Mx3%$anJj!!ZINORaS<$y=kl!M?mR6179WK%}Pu|w(qBAqt=vl z9o)w~cC-aGxrF8+>_I1Q6ic9T&|wD}-$*&=5N6FH4|R_m9IXN^50U&T2_%FxjqTjj zBIV{O=nrtRY-gSHV{%iSRjiN`0sw1OOkdI)W77>pxj>Q6(XXkecfHpVoX#%@o>$*= zCOZ+$EX&~sQnF$a5t*HHyiZ_vHhCl0vunN0FVW`1bqyTck-P)wn73K#-BP>CWX&g(0FynrlIe-mf1c7S35{3vs|ed1xdb2|eEF>;K`C}kfBn{>^BonS5Q~PKeUJfwNTrp|75oED__9emnjg(2f zqKR3D^ zeqE3TvUWRoZLnSSMPNH^V6Y28yHi3XO}CT#G9#qs-Rl2~uUIbvBfvojqa4L|T6;gu z5Z-|UIZYeUMa}~+7!_fJvooRyFQ}+NQqnhxP;FeFhTb=~c5$Wg)AcJSqL8I0u^oefqfFHuNxhS9Km zp|HHQ&7L6?A4E^A41lYlCpZ2LG1s#zmGyz@Y+K|`e%GOh8dg`N{?Z+R#-TPHKm!|WCnpHKTnT|Z3>E)rA4 zO+sR_oa#kl0-X-j;c>it8A~ZgP`^pEA}&6Hi+E)47uE1>4hDPin#&2uU`|_LvZl zSYkr{{gEd#o}vDnay8_kkRiTLo(G2Jd!F<8x(H#8mJgsC;Cdd)`QmyW&h01Ha{<31 z;(8w9j~*vDDEDm1ezLF;i_hdcE;cl zNj<6AWB1Ld)YzUZ)}@m>8gayW*m>hjSvMiAZ7=SlHv;w^5Ds~kc=X2i4KsJ95a+eX z^!?r_Cn4!4gItb)zjHLns7p*-1cA~^wmn2#)nzT@P1Pm8{GsYHEU9);m+-!fx@`BV z%gs4ycRpO_Bwxwpj1*H|CWwi~99M(x-3k+HC$GXRh!{&n5cqrpEs4B24tlajG(@K) zpfD4XfWm}>gd!+R%vL0zFgutq3KOF#rT1tQCYIz-4R}8X56kN z@*f_e9PJk9d#Nzd3-n~ZB%pgC`pAKv1l^H9oCpdN38+vg%-z1w3bQbsGlhV3_fG_} z6ywe=kRPn^2;{?{AQpHckO+Q*fasKBskU0ykm?GGlXrUqZv^e}g)39nQE(UM?5EDt z4?m8S7F}#ZIF5qlq1U@})~O_^O$Htua zzK(E7>Qc&b=*#j}tZ9_tP*7eHiNlFSalT#-*Uzy82gSgJqF8-{rt7MftAj6l&=?$* zMDP`?99(ZcHd6?UEAaUvJT|G5q(f5nu0nfG1SbQ*q)Hix$5z(isEp=fHr{paOV*&O z5S(o&^L^GMCroy>BSO_qRpWL+?BvS57_w4pkknH%R?oe*x#T4$SS8JL$!P~~J?t)^ zB1i?q!yWj?5?&@L1|KFd#mR++401UO>ZY6+{4xd%uzLgKr8lzzPvmS6WrMMz2ot{03~h$K z&voWNrc&cM9k)^=iXLq~@-|1Q>8jBmIa6#LpP;sqd@G%RZvk-t3ULvV%e*_l!+%*h zoY!oap+~ZlXhqN2A5r3}4}{weSm6OK9+)H2VYE1bxX~Zth0t*mJpgyrl!eX66EPpE`4# zI(hYiNeKufgNwdqPJd7ajC61bGNTJ&X$D}j2=|H?ss3Ew6?z6AI;Y_BGjNm#5c@ng zW7BKlxbHZ_SRkvf1L?!q)h=XZ#@x~+8{ z)^?L5U|V-c0@k)&60pB}BrzS=9T8}fB}}U%(5i(AHJKPqlf$iU70&>P7I+4H5i0LabjqSBjL2B0 z_%)l6!0x<`wvz_w(T9dW1aJ~!X|jUrA(-!y@8q%^FGXa;&YSlI!U8}@{sCuX*mhRV zws(8lCO4pgi+Jgq_tuM30{SC2vZD934iR)Brat*~c56P{_&c1$kt>XwA+b{hJY*F+ zD+j_upx8nSHYU#oU)q9=q(E{U(s5k2l}i5aTt@|&A8lH#dz6|#P+voL+pt@dHrBk2 zIN)YhDm?t3AJ>C3=RN}N*V?i1W-0>9=oIfyXtXaE#N%ibTrLH;VugYdzFhD^mjHNO z_{`bUnE86a?M4I;-y>q`PiV(-=VPOfFPToy%?js%Dp%)bW}KkMid8(gkz-%8lJ6Ll zb^7v3##GXezJT zjoc;=h(&CURZXXxshfJ8BCvd-D8C?2=)DCUg1)$8Mkj}>SmCh~UT)-QZshF<>RC1C z54dDs?lO{Rgn9!CWQ>tzt|}1dZ`en%^OxYs*m<;c+xcsEQDoqKu!h=t)NpM51yaml zy%8g^^#@crAyLj&M1;0TtO%EWnlAvMgtZQgVWtZzZ=rt&C;$`gEXd(2G{)|Y&gU7D zU{CU5TW`N8H3N4zT$DOm8e<4hB_2xcL#Ik99_kbfQ3aIhwvR%oxA2smQs?eeO0}>? zUrLopaVDkSyx{Xts-s=zFBUI7BUV8?x&0u!L$j2qc+9*^lw2jlH%gv|pS;wRfl^d- zCTy?{6R!StU?BXb{S?#*15{ZEmk&Xxla#fqht$Ctz)r!mk^na*3#=MUT3c`fA*P@% zH^&2Ly1|LgH43OkSqLk84&)tiBugLisJLku8 z8S}iAFoB0ldxS5r!`7~*i-&TMgzSbU8oA{oh;NNX{3Q{p!<)wmaFjYlOQcAy7E`|(2UUK9$vr327r3`nFkx< zOCEvIA###uKRSR|Q+fcNFpN(J;0?p@w1OxNxSZC4?e_Vj^DGCT97F;`h(>}TRElA2 zCQ^z(jkB{0)fqcPsE*1aREJ9u-h%{HBX7@&=(!&Q+aJ|!3We{F{0RCYdmp=ARE1l^ z8gHuzxPH6iEdin*Tv^;tz6dW7(gxZ}sp{fDgOeobQdw4ejz5&*lco_gR2b2mD z`Jz;ifOdgWK?2$ZN(Bjx@dAM!NQs2I_Si5lMpnv^nN=DTIdnZ9bsFMP!n}K&FfURj z%xh?%M>J#)bJuE4PFdfYcNp~W9cVPr`H&>)mPI&#MwGDNgFe77^a09{&@eC(Pz=xz zNN5-s2{k}z`g!NG($71e+wFY5$`TKgte5Y%uo|PjK6M82^1@@)!f>Sr;&7o*;CPvW zau_K0v0JxvHKMWz&z81eD_a_YqA2n6LWMr_8LA`VqxjM~iRhr0{D?tmR}wdZptQCa zv$i3p5S_FPLi9&WKiF(%cVUZH1V75zx+{#<-;>rVKi$r(hTM5&5qofMS=^Gj!e1J9 z%c9B`fFgz=3YVe>VFaf-KoF5fj|+vbZisAli;zN&kpK_~a#%)kHi5A8IfcTQ&6rsZsnsVlYcXdF8Sgd$7T7;j$A6W56vv+@;*A|b z4Yvbz{_|>w;L7{V@&+{=C+cKVJQl_7CC!f5tY{6^GoNXnc2IlVw!z>AbG#!JmKDHQ z(74ENcv`-OJl&Cnr|&EU>(7zF!1w=r-TK|#@_nK70t|)d1&|ajFCc?5m954L&_$n{ zDx;(b*IeMLtDY>V3)Z;Q<?HcKn>141hbS-0IEe+4glyJ#5FWSEm!9&9_I?8MMM&>-n#jA4N1sZ3IJ>+M<&I& zT0qaLzLD5%R{+r3zy&#->3tO_cMc^(CXGohr|QHt^ z?`w(I1fWgbXl^5Y!`Q%r%01LubtF@_pveNp znKX&rd>*HiM>+dkqff437mgV~UA@RT#f6qYuZN#-!x{k{4y67=vYd>1>tIpsgDGZU z0P``4FxYN!0AzdQx@#C6lH~eYMu)o5E5G}|y}@v!L>vKkP#8$~B{T5NHF z#tdT+1yAux@VgsGGMuKF=sv;k03s7%e~ASOS?~s6zSq8Q-J!B`_7WD;LjCA+XPNFS zRlJ@-sSMfc890ZsLU$NbW|{1kzDI=Iuw8pe0sNyN!^m{=Mh=WtB}O6352*lo@bUDJ zQ0|43oju0z%V^eCBMU({3lCP-3DKBQk=&wV3@TD@FJzBD%8CsoBm1$)x z$D|Ab{QMXmkdp`v-zD5A-~HbIpFYz?_C zKX2C+3J_!pyH6C$?WD`8CsHi8%j?YkDD8Hb7isg}H;mE>^o({);kqZ=iOKz>ob7hd z>fzEf`@^Z22RL55sUwJ^9yLg!DO_vwfY;8jwS*G3NNe%F!ia05HQv@nhfZ#rV?D*A zGU$~lbKhFdI7Fl!mSwmsuD$LtZ<`{vSkWxjc1&UajQz>&@afV{&xhci_9p1)``}2q z?rCo#F@CT`oRuiAv%2nSOW7@27U6dw!2)b8k?(Q7r!hPv9(({D9~Q4(i@PwfTm<{%Naf967!KPogGAHN4)H``H?Wf{uNDj}MLpP_rr44~ z{s_{!QH?F?2h~ADHGMN&P~Frl{@3NoOmJKfhP(l#jb9ViX}8z+*X@D*b*r{Ig9@YX z%u0pJ7DD9|XjdQwc}fB*KBL|EyoKdqAC4KFK;&<}IyWUmV9cFxTudDq56W9(*KEy) zwrPk>q3VEZC@&xr=7jJqhCD{gc0*Dr61rOs75W)se^8ti|KG6BFwpJ~A6@xwS~IKNxuYn@8#7M}cX!Kw&^u8Qn+sSd1V;msEXeohHh!+81ryusDb5gJ|eKDU;{^$<` za9S%vLF&bPw|*|itz;-{s3UW5{3Se(PWc%7zEZGDEukc_v2R}^_QX~=HMg>{WH7?g|i-; zyLn*(Vw-ywb6wIvY*lH~6=7w(EnHH(9vVRk{ux`>upEMbnYh8)>zT;2&NZf?a~Q4) z3froV3?0#U1=v@~WzbDnnm8?La<^E97BYyD@(EQiL&kOuKIn;|q|U5Q*^iowSAcRE z-;-E^Wob4Z&6+S0=aM?`qvj>P!aDpKW=cSd#yGt=dkwN|Ryh-FL)Rz>#{|N>?S6!I zAQV<3w)OshZ2hV}ZRM^$KE#UmnPM@H&&ryWK5e#$f#l*d;IjVzJCKsxQ@!ES!cz{F zQ5QU=w9ns0Gs{D=+U_YCOc_QG{+Hqhs|xZ90+@v|E&nigrSQ^rFjl@A&`E$U@5MTC z8|K2dAa1Fz$N~e45S~qdJ?O>{jNNDo=m&_la$zT@aDfZ0fTvb5YyAd0azfc|K0SLi zeLYL$aY^6N1o^9?RVwSe6|1ZDd4 zut#jI;_S7Sv(}JDZLMRn*SeUsitn?vDzn$BV6BPsrWm{?WUn=twJy5X!V-6`FZLbK zsZT%reOqfvc391yqrX?q#j5^|sc$?6t0At+pT8T32PSHI21yeAw2yK6|ZW zSnIFNw$`%jwf5m^_0x|v*;+Seuk{LRox0i9x;1;PO{{gDGe!m@v&h8lto6VTEUZ{| zSo2w{x8fYbM}A8t3#|WPt;O$KZu1j2S!$JdYw<1OS!(?Q7fM{Pc(No*tsUN4cV)-^ z5pON-_-BDtrgKWC{m9<^TBR$pIV9ecaBtDI38e}v0mJ@KF~HbC@p z9#l|V9HsDAB+0Py^yW<%hd#Potyg~{%NqDrXhIdEOE0a8N9ZNyIv;&|`%;)Nm^*jv zqPqlemfBCDHvL!UC8Gc)Zy41WuqYXPbgfM4Y`{q1Z~%KmyZDfg|8eKjYm(*t`kJ|1 z0Qi^(Y-ppi0ACZh(RnbRb*txK(qDFyfw(^ICdh-``9#xv z->uKcj!7J(BWpd;j%=1^WT`I*GBO%coLHInk{9ax#~GM8p!dp0?q@!eASx|wMOuOo?!jUKt#DfE0j$W5PfTxzwfc@hgNaQe+ z{MWaMX#vx=FIS;mDD5+Ls$g9^KH~)mIJ9jLQ{b{MaaTiuZ++uUGkuBoMh~z)Psuvw z&~W_~pE++E#3%mKc1$TqZX%r7L^wiOc?%@gSp0CoP=08IiD4m*3W?#NAx&(WD((#y z$T2PCMq0wZ5da3q@^xhw!8Ob;V+5wR-T03F$nWt8yKRSreWe2IW;b1>>`ff?Bp2H~ zu_*;j3r$v`%_?kKWU@Z~xv4d}X|c(A$7Yo_U1zdhwpnFBqx6SWzQl7jr@U#2sq}=+ zs%Tnjvc7M#ikdfFivp+^sG^bfmL8u)=*ece&+jf` zAeLACQN#tVyNEuLDJsnZZu?#6At1^vw&!Y zpG-5{k@D$oDG#3vU0fJ}px{@65!B77;RH9=RKqW3M(RXXVQX6jz}eyXSNJ(kntwHK z@{6(*%#g9~qKOQu9~tY1xl=QEF;%E90HNTwo4eke;KmLfM!iUB1)SlY*ueQuBDX z$eB=@e5hf^v8{E}^2nRj^3*P+)-|bL%^p~F4H6T#`q$(Eie#{aVVb{bjW(%K%!lFB z_D-YNR%h#(!n0F9<62LmNgXC&zQ!ghju8ju^`ots?>0k`UBH06Zcp$}-b<$H=4$G4 z0$DB4aNx;qa^w3W)~e(vO-GKiHrBXdFL!#);3oyUZ@wqVFZDQCb@BnsSUqVIA6}7b z)Yv}<45DZpED*u$O^!{R!Qqx9-YxyiQQPlIgYjwVkqgv`|KE~<0}|0lJ5ofXHtk52 zr?4##g`KZco?5JgRO0TrYR(Q3w6s9hb{UJ=Xe5kMftUh-(E5~Wih%w-lA*MM_{9<= zj}@0Co|Jhh%K6!ZFo^YVV3@pO@-KrW8qH**ObbAzQA}K}pI>LP@>U5sGx_0cCwarG z4v-|`3l*%Y6#LyA>WlG%|!Ttr9EUN2kP|Yp_D}|<%8)q2^W8ntA z`5^^90j)CEfLrA_$%S^E+8uC~s3r=3T;h_^qTGh@N6hbJL-dz*yn3Fj3k?S%$`3r! zxP5_$FznruI6_IwzKlOQ zQM^?!6^C{ZvBeqb=ul+IZQ*gA*C07ZZSFOlV`Bol1zqx)GbC`(7hZ9f>l63WG#>KW z5EVUtABjuI;R5%RUno?njO-)eIeyg9tP6lrWdnA`glefCx3)TBV}^u)NS_bG1Ra*wOm_ZK8IcxG`m{j z^-rA+VvvOxeHb&A0jAebOJ)eYJ$t-}>0~SZkYWBP0#m-`UBDhKZTRHo?{m_GE1O^O z=6^%;OPc@W&A(9c@o_mr4ty2{=U<4Ogrqv8w%LjEgrqM1l2I{d2%7XTESgNGN*#z0 z6Kc2Lt>;>~053VvFjUj0fSpAaZke8@d*~DaUITy-jO>bB5wB;Rrs4Nw1v$nIQpGEW z*)UXC(KI?cq|Ps=k@M@@2~R*x7Xv=UX>H&N<$%-b%ON$s)D_Jqd+WUBse>v$ZZ11S zuaw%^i2nK)b4Z0<`gF)FX}UN&_Q!j$7xBr!KA@Okdl#{y2oRG2EXW+dp_$eCjNy`; zV>om_$8clzF^+=3k{DU1CWeLn zq>14n_!ubS*HN};Q&<{)8YO`ZZTpHRB=plLObq3oE)&B-I7h&Qd>RGy_u{)KIP7E$ z-c%TWV1XQ>cs_yaJ0q(1dM=fgZPS=yCRpv(|+O&<<-x8WhWeYj8G$#RpXwhM0x;+?Bg z^R3lC87Y_5KS~}!Ek@6pW@g9uj`N7I9Dwjgx&)6d9gw(>Kk0Hddill=7Kw41O-jmU zdFFn}FQ!;@eq?WdWE!aC8YvOe^m5YaAbcKqRG$;_r4HmTTgaJ0l04OvaLheCbEI)R z`GpMrogpF~aYf7-NBWyy$xf7;f(}vW65-G>R6%+b#AhQakT3XUqni@h0af+^RGI;( z)B~ur>EGD_y^FV47&aMgxWaF=jQE^lLeOV>+p+0~-F+=U z5Z?@Kvgs{oli~G!uI9-GD-{aX*s_B4M-CO+hxWRRkk2zs&5q%DX$*B9SD{{Z4RO!^ zSorufAL>Ba_t6lKnG*T78P7|KeNNUG`&=wK9aF#`(Ti4Hu&l{)X_N@i%JOYaYFc5R z)wIGst7(OO7Sl@mj0ElTKGA$o{N1$Ai2ik3`;3IzXC}lxGa>ew39-+ppP+qCSo^%; zyR^?R+X+u6KH$mIYy?M{~?Rl;aQYGNJW%c_;UPTc+l+E(Z> z^a35va8lvV31mi(+rAB6m9}pQDL4@C*1e&Y*LL$49xtEPYtrgbInKoU!F zVLRVaT^f2H)=D@A`YEw@&)J2HP9!ZG%wj?x;mFme#j*{A=dR*>68=MjCoViXyo=Ku@mSuvJQ z(kaK6r)HUMSOST7ifo$xz@Gd=?swcrai;{Z+da5z8P-o}=g10AHwa*999`rUFcrf8 zW$m;5Y)3z;_NfHs*|pE8v;JG{bIpqXpJ<=s@7X`?v)HmXQ~UhlcDMGy9PwpppF#*! zruK=G=3ecy`lkP7?eot+<Wagoh`{1-sIgr*9f?8slJ@-sP(gPA+bk+* z)g+G!Vyz4nG)HSl6x4ui{(n&smEQFkis<*NKSL2+Fz_=J(J5M?k0RPgNyxf7`0g2> zrHFLlChC&TQR2nd_~E$a=B0?48tN_bhX%A4=jHz!MTDij*@2$jrZ0KdAYkVpB1(7Y zb)-a)=(<;k{-iMB0SX%ORT?+nSz+$PtzmqyY`aXE;i%gt_XR0?BA0XI?^hhT41ZaY zba>Cneq8OO?+BBQZQiFeb?pH7wFtT%w*^{LL!9?1w6MSATe2=}k>lVkq-0wqkIPDO z-!vWvmwFB^2osBe-i|SE0{|(2QP!K+?qs7h>DDIlMx{=( zWtCcjxQwn9t`yF*j8#?gLZ>{)`-&3rs!BZb z&U!-btXE=VOyrVUL^I^4WQ#`SH$1j$g ztTAW(4ndvC&m!CN@V!{b_BYv&t2k4(k1VHb_aGb7R1g##E~Y?ZN1z7+&HFzXHKmq! zMl_j^ZyIpEwCfgFVZ+qgLqKTc^YgiFwiYbsnTPNK+Q5{YGLXesf``6 zLQ#xh4t-*XEwyMN36sKg0RYTshb!&4n!Od%My7bQ7}JQCyzugW?{06wchx>%MI(xD z+sTd&{0NJ4@2TAJs`?Lx8dOBclIZ)KS6#^-k-{#!7G7*0F(-SHv*ZarGRWhP{Es|g zB-qUl&$f%#ilxSV6dzp5CWHNjQ-Pv7@tI!xqOpodpIB%zWcuSqDEqM*GjRo9>C!E4 zCz!)1mt~|JnEP{$F!@|5;AE0e-twIN|8{`tRO%k6+Q?UQ%3k8OMC)@ zC}2n$L1BuS5HKVmV6q_7j|Ne|x+q`_cZz`ZZ3hACvI5qH{k{RZi1F^Zagz(L9mV_TYD z0z0U;h`QDY*cIG==qhF3nP|8`-5a0C zak)4oeWp!s=pZ}sKsMIt1Ip5&x`Lo1y^7cSo*mTboT8emnsjp>yerF#viw9&qSC;- zx>FaM_o&D?XhhVz>LQbN$J8xT-O2-i0nHFZQ{t6-C@~@y6=(7bI`A%Q;X$a21gu_{ zc~5PioT3f3CwMNN4p6fpyU~t)6b>9h+IB|!QrI`*a_D2w9wP<7uuDuWw9+uK=#N0K zHW92Aejpa9@kQxX9KA)ZRs1>JB)(2ZU=)zx-*RaQpBMz%5rIEzl4{-Izg*U(P_|oS z{DwR=WM@AJQ^cpx6!8sCF|I0Rf-^;Y;zvv~;}NDv$1~KTb6@K^y0t)7b|}9P>=2G} z_?8icqJ>d9)tM zpu-B=m3yv~@3(8~_f0b*Hl;yHsbNbquX?(($-@1%%rp3A7R?s^yBZS>Z9cOs+RyP; zxaK_sK2gtZs6g$*4Y3p&U>;TZJwM6tVNcT!Q0&tllG zRy0h6Uhb~|TI(OSo+J4lG+6pvY{sP)y4L9-Fy=w15>I^8I3wfaX1n6Icg_yy8Z#JzjC9gDnb39mcATDq7Y0u}*Yq3L=|51j+^5QAryJ*NTB@z%zq_j;kkP zS1!S!rO^ne+qoZ`ViqBT>*~_dZ7miHzFD+YzFzQ+eqJPeZ_abny#Bm1Uw9Wd>)`Iz zH95UZt_lMn7vV{UgLWd(@HM=q2jhxKr{RhE6O;kRc+jSD&?kedH{04{lmQXgoqCi0 zIBqR&nO~SK8*sJ(M)DZaQ{LHqG~-|#m6fnjcp$z?_sg~(A5u&J9#qO2^hAz;UOn3upFVNy}icgLy!{n*huK?Qo)8ST0hp-og6)ZO?6ooESZ|DD$m#=au3FI5`_RV!>N1ONsGR51^9Kk+mJkO16bu110)0?C+$!a93jj3S}3t zBBHH5HVrf6+ePh48Ycp<8lGGY$wce}rVkQWCA<(<00yJb2A0V&1RMT2OTKQ(H`-&th_w9y$HZ9a!wCSJj;w9!jF{yxapbOJmzHo;hsK|(1 z{|%Bjb!N*x@$Z+|_hZ13r2P z7*%?aTt+R3+8RkAr=aTnYy6mA4e7=PW9Y6-x9{Mun3^8yNGFN6Lo(jrahQ~j(9*_t4 zmlw!xVhkDueBzrB$6A&+EU!de!4f}Oj}p^a;){7Djw@JV?=>jFg%YiE@=EMdu*6~< z7?b%6tVZj}c_rREzfe1#d>JJkW{CxPB_1zWViayM%UsD4m*tgcELh@aS&Y|bvV@Hm zqij2=V2KqNDrIf$}Vos9%Fu1zl~lu*$!xTlodv zoV7yCHQKFA|2nyqsQ(Ug*jy)a1ggHfl2bdj9tKPVK1eE4QthcZ0g+imnI0=}?$G(7 zfUF@PWQ-s}gO`5%4Ljv7KV^5WH#po69OI=LTq(khr@V(b>!4Z#3ih@mAH)pCHd^-* zSQX^8Q%;c#qZ3X37$*p3xCd5b(gP zA7{p*e_6pSE%iP-zk+yTd z)y2cO0X+`1;1Ep^D@CVHbrjXEx)Hu^4S)Y8kbg~eGx-ULcoD2HK?CI+V; z8+bMf4I_)jJxKuZnv7o|?JZgVHeNGsW>ZG4uTfr6G%8G6CUYB%18kh~?QiI)uG#_W z`mV2wCjm>tekPh}ii+kz-`*TO%xr6R2rNR*NGRZ}4t{6bGha3DiE{{J_1L8qtXR$3 zg|MNPL}u+_v)Z@pVe{Ho>|sRh8hfZsG+au{P~DY8i7OHfXW3g_+hDw3oM@Qi--qD+ ztVBaK-s`HnO0!VH&r{){iH7;=dU6Zz$(x#p_HL-e=eVx=A34<^c2}V4`ZmqHTwiiX z^*>T?stBGE4gJKPdoH@8%Qm^CBmDuq1;|wtJbPMiqJ{v4mb)p1QV+@5)cJBS#kFZ97paitCl|(r~nU zNtW`>w%Q>hLY0Yzy?q*|of~%XZ`gzaVfSyCIZHH92a^&P7j@38bAO> zmo-ZE?C*!rD}+7kX4PSz{;3Yp=xUrk(?iB2aUAj*4>>zo#m69o#`_z3oKQ_WK?K<*q>aroGmV!Qr(^UHIU=Rbr-{|*5qUt%l_iuly$de?`hWze1B`? zu;4cP2>OQseRvo2O4KGv^|eQmoVM!a(3p?}qoPlIn_TaDrB&+%+w?rUcdT%rMUld) z?@*63CeMP6(S2x5|BE*0f)KH7f7}IhiKz~P*Zw?19<|eqvsHa#a$MVA{b5V2tZ7_V z=g(HzNd9MX^W$8Vf=9QWhK$~upz~L|jfS%5ZQ;99wc$=W|MyHtw@#nMn1s>eQa3`p zIRV~Sr(7<>wzV%YQ95fM2l=xu=#p#?33XGX8I3(44@pcD1@Z3b^KAV0j){PU)ApcG zuSEkegM3n%N-suRs!VDh3Kw%F>TSIq-{LvDPc`U%Aqa!hfX8uybjL$nv_%*&-m`Ta z&Wj7k!mPlJaWF;qPb=X9zTT|Xtch^UfruqWB;2r}Op`5>7Xl02LIg9zrS!I>!t6jp z22NmjVGd1{->m#+(FBT&)e4FF4!vQl1Bv0crr8zIrB=qr+BUlm8%xhFLtB} z;N(f%=9`71_pMtfakLzx&nzv;{8I?^W)MmyanHg2?9QU9nUf%85;7Kh92nzwt5-Pe~Se$}Q^Gd~%-1Wl%Xe8cDC zZ1s(dT7nQs$(nG z)m6Tk&It8b>Dw^>4TA!eJPaSQSPxU)Q8L7;RRT(n?eFK{_>+JnaR3StgA<9%C7hd3&xEIMYp1HmQ74k{eAE_W6FJ3@59zMu5B@XFCdZBolgus@@lYvHvLsgipuFwV2_0cuE74kqVECv#SGD=3QNrT$aTpT7BDg20Q?UQuJcEp-U>8$ zpTaBrL4M6%)r?CFAT&J8gw7>)h|mj;_PB?ZCm>fE1TBP>>E-EXCs6GdLVS9Y zgD{3Gt*h>t?@vLab%8@~#>qR3!BQ9d%;ocaKi}pg-Zw0=>ieMOjNQ#$1m`fe=0^jO`7syx=<^#13qIU=j zAnFInuxAuTkkfxpapPD4K;H+TEaD)&`HZ;=Nfea9Bp$$f07f+#?^BV*R9ua;(*QAx zX|3`@BFr_gJscd1In-tx9DuX3-6)H$j0ljl#RD=^w%|uvS_UbGiXw*NhLRL$t?@Gw zS~%tuRl^er4oM~K(^2>o?1>-ZPBZ|8dh~1*vgZ&PyL^XW7N#%)=!NGo?SjoWNQ+6Cdp?;$J z(1`_6m5W*y?E8o@89jpI;g;}{XrzlW`8_civ#$qljLBXzjEBGc96Y=x5QT-QuLnFl zBf`TIB0QX#&%>kvXyy&$=mCjIApVXmUwPlDhp}=?l|cI=W8ZtQEEF`eTHqmecs*t5k0vo89f^XN!d~^5*dnQxo<7dZl_M512KFc3{$7gWViAV*mcBT_! z$31bdCuMp#lnZBp3dsdbg0*FOb0wXo!ZbLw*PDnO#l+w!lo*}U#F0!V@FOe`g$^Ia zCcnWKKQ#S;QoEC|wwWa^Cx@x&U>_!Yji*7LH2UIbjQ6#`Uqe5O>fqyb>0vJ1Gq_*=c?P)T zpQnMH{&_Mu;kSC-AeE5ItmC3_4Ift$^Gb0*#`C)Ay6AZ|**a%k$Yyu_Gqd2V`0|*(Okr zvDUDpcC7gChu`PEuhI7EsvrXbUIH;BwGHB&ItsND>u4J*GIUjfPiA#9*GB40AzXl3 z7;1oTx<=C)5Kw;N?7oxe1E0p2=qX}{+tHk6S#ULgt?IIHGhOvomyVium%`^H^&_fZ zy>4pt+QbbD5N0E>c)hz6W)6bx^F4`iwraqj?g%Gv$d^b=uHXXj$xYRr*6CldNG$o-r zEp>}qQ0g^(G}&+GZr()wAM~kR@}Ib|4R1cQYA5b=i79Y73=X{Oj{1fq6qi^vRkvU* zFsf@v`!}7V#GO088Mmyaq;)p_po|BC;G)cD#PfL$caJsAX=$7e8C4N9Xl;OUMb4KNh5lV6Pnw{4UL&tfW8G#D)!5L$!=tVuMu%QtScr@`Fn2o1)d zZ6%<=19{o@i)D+@0QKe3;IYCq*b8d|MFUl1D*>ifS0rv&r}MHQL6{7b_(hnz2Rhfr zhDB%q2Gyz;W7+kPAbujc{o10xDmHJq5;D8faM^~&r&hhY z3vS1GVFS!*29r6Ev~HN&%)46V+fB86VXsw1hpHt&j)aS#^m-DSlLG+XUU~M_%o|-xx~rG;CDkxh{q$!j`>*!u#4T+c z33;+KptM6gyGTr-{e|bAQ+*RAnO8+n+)!#)~4ol!T1)d&|sQ)M;Ik-9&kT8)EZKpnB?Yv2Y zkbe+=ZF^%>?vODqP=EesA-T)T_A|@2iE@`${Gzb9kc-M4GUv&iecQO)ZLI9)lsn=d zl{@!dK<;W*7L+>{2<6TdcXD^zVNUMWAjAN<(|QRk>A^B$3Wp5gw_pgPYf7}{2Z66p zj=6)SyJG%H3@Ul|vP@Aos>SK<-E}#RWW&IVxYd6@0uQb5=HO%~gX@ zp;}4r2jAcb!7u4DR}fm(8~r5TTsdZUH=WkiT)subg}0JnHOk!EIM^vz7BR{|8KC`V zhoX+nf`HeshG$J7FqGmr8-o2Mw>CkutdKNGN{RcV}oad9c zVRH@Sx?{ZpBYlaR-o|wu-m7^$VgMr@O&9c?UJW;c@8~^6SOc1R#z)ZiSD+->f}HG; zb94GrT#*yI5PVMB29TxN#gust9|6c@%vtZb1K0Vop~Kl3T4NTy;!*IKg+`>)odUSo z?U!b^Ej&GPO*=hFeIP4 zSH853b<4-{8?b`EhhX~xS|o0T<1-$S+uvrlK!g8s9}QGsh1F#+jfiZBAaK7uR`u{n z!S*dRHLN$R7V>cz+r)%m`FvzQilca5xL&(sYq$I>zWQG2g{gGI@`k28^rR?1YHsGs zsvq7rx)``L2jb3~ z27RkbxSZ4oHX?I#Tea(~*L=VdOvGPy-LI!J|7df=~Pi zCk>BSIM$_U61ZFtU>si4#lvg5fRhf5$S;ROBf9+IHC-i%hQlE~j_$Yp4J1g(fr2de zAo?WP8pAFic`*eGNbwQwIi-rThv|LpqcCfhGWC*#8Bq?o!dVpTZAvb51^Gzl5Cs)e z{ct%8D(szl33eTaYsrtsNUaKTx^7jN!6B1yU&~oXAliHL4rG+kZ1^ZwdDmB4`Qe-jZ7%?XfI{ zLyGW7p^Qv0tBqyCgNZ&ik8|7rCpTYLmef&^ox1giBI8}`#6?DH3z&VXrdWb@dfWcC zzCmg!d~6aeDJ0HWQa(jx?}}xi?7d7Mt@g_{+m$}&U%}#++Fe^|(Adr(qS|txj35kJ zA8WB|&|y^EibFM~;?Hy~yR)DWshk^ocz>;u>B*#AzX|IdpZ?QYs{ResOg$b5`Y4nb zto1L}C)#=-69P}1mxbvj6K5VKoxEZiab`K<9P{CT#QDLb9O6W&a?p!Lm2D~AMmte! zXZyZ!a`a+w=E$+fUkj0AVF6kBKOo2KyNi)yYTtn5xZ!{S$T9V~!sOW9zHgiyZ({G4 zBgb}c#mK?MpwKHfvlUEnv44nY%+VT?p#OlzXkN0A#`FZ%`luhqsL-Qx1JwZ>_|E~U z@GV?HLE9E+48yhQg{z5jI-BsbHs{y}x2=Nxj++9M3YmVCIx+kkHg@6>y&nKiwI>3- ze9~qL4r}LCc@w;3=3&ZrV9Ofk*|N*Aa345_I5>;F0m#4+L3&!DqDnb2QuJLo04j=t zEcL^#Qrm`87g>l~$`MIPc3ApQ{2X!3$A5!Qan%Rueeu?~s^w3!&#d@&X4QX&HFmDr zu#1JW>e@@qvtPCb-u4i9-~4qB_BefPXuIMFuQ(uCdLgcHo_Noeyr&si`7eDHXr_X> z`O1(_6NcHVeNwaa-G9G(OSGqF8Nuy^D>*TS9kiyol2M_O0UuU%4dwU`v#dQR%2u?V zbN1P1H+KH}-Bte?9BJC1>OSGW7jg$%!!VkK(~Ko6eI3;sSXW2&C;Z9o)sF>YgOqq>T?MeRzQFc>djW{3#W2JBI-2Di5q+Na7mV_38PQjkgMEy8Sad^qI zHNrWPC%x;np4^8PPH(DS?e$Tkv^8uZJF}jq z^P7&J)Lgk0O~o1&oHn(3&DAUWF>zkK8f{&4N2J+jLBj$-4jHs_L)gxvpQA#x6Oqi7 z@a}x>F4>?CJ3Bpdgj^1=0a$kWP#MRW7Bj(&anLXxIXNQ4=52*%;dH>&Mk^uTa{FnfVX!z?u9HT^AEs^Ma!v*3?a z5K;i!1$1XN&F=K^R2RD-pATS74f9-?%TPuqi0vX2shNgsMV6yxf~7-`b?k?rT+^J@ z5Jd`qr2_$BYBmI5GuQxU6Q(gYf);GgA5a$~O~48K>P+0ky}=O!b++36F!R2HyvjI9 z8qnBKLp;BC0{*`7Q$D{wbTaAo>}%EQL*kt$0Jjssk2VINAPJ4|UsqW#d7pvs`}s;8 z`Or|2Pu^A=2LMv*rrGV7cB%r2IB_~Epj)NUt)jX5cBFxd4|^)shE%-k_Yvc7l2_xU zMDhxOG?haCny*rjQhb~l>KQCXOo@IUitU3=v@v52{hWgTs0zm0XD8kO3IDd?eLO5F4c1U;Z@;)WG? zr3&5|vh^92fm>jv`bwOI${f#yIqpLaXQZ;{$1RjJWekE$iC_2XxfFueGS0)m`j8Dht9L^wEpS77%?)k&7~G}td`Ro~*R=HG9b7MG^SpfUnG2YZ?W#U5b6jhC ztueaQ#}9jkfr6!!@aJ#~a+A>l+DwzpRCxb55?>+*}nc^s{qveK9xJs1|zVIl0E=-!mWhVE}IT#Ytig zU}qiEaB$p@@)gg+z^KdxBu<*69i%!C!JU-y6{gy0F^HfqZG#+TNBj86p85H)iv?~U zwlmN#qYDA^gHIHRT`wSX$gc+gwf~UG3 zOa;32`a^16U=yYR;pa~SVMt?pNz0b8N@O0chkk9kp40d?&%xSzoEwgV ztd$@EmxtQ&^6}KbBzWwpgI|R)Jp*2a3v5xAotcHDeHNGu68-j95p4;AAfv?bU{8g$ z2X3w-Ls@zmLIbkpj+U4PEgyRMX`leiSksaPz@@*7A^{dxSk1V~L$5WZ_Kw*mdoQzh ztXHx3a(hQO-`-vMp_td2R@Z~hS%NwCwJl5PdP$b5au(*eoBuj{l$_)*x z#bg9|$>C}Y|a!|<>OhL07;@I&~{-h>eg zcisnQDDx{wKNX-jD5bDJH##sUnsxQ{IKlv)bZiYT$4^%bh1UzY33v|T6FHRGeFVEp zn=zb|K3tOk_7)}Zy5i^`1oUm{-i|5~)aRhb3=d%C?kN1_!Y-Ve`6;024V_mhEC20| zjAJM2mx{!gP-67s7-mV1La1`z6c(ZK8Jl9T!fro%v3)UzU?G8}HG|fErZU_yQ$eKCq6g6&MC7VojXg`V=aPb{h^-_rbLE&&kG4B4)OHDd1!?70|+O5 za^T3Sw?WmWJzFhxpGx?t0Lw1kB4k;VNu~GaTT-V5-$6yjq(dbxML9BI2jj?fXgMjs z>YaK{h4&vQ&09vaLezyY282j7tW-vlOPV^dIF9di1jHD&-Vq~nqr-#Ug2Uq%TrTT4 zfvEIGIFXESqNaG|7l)NMzUDcBBa#_77k@70*MJ!tIUD5b-_AKp1pT1jbXb9w@EaeAqo2X+9IuqpmC zOqM@T&N|E^Q4k&kbT2sAobM>aRbA|Za+0iL^>)VI!ftk)_62}NEDPhp`iQ{w@OISs zzUlhofoO8e05o|TPOQ-c=RxR{z6$-~By2ci_)vj^*!57^$b(1Xtu5*vjB}m=X`4OK z^NVg<4!>Fkz-`X}w@P79#&w23$>HW&z7a5z(Wb_ zJtH;Cxw#pxcR>usZrH=oaHpO(&Gxx(m4UXd%N6;xiU?QrMc@QnGxSMwmz7;XcQsMZ z2=TJHcwuYK+pMfaDU=}BMGgPAy!s%|54Pa?tG<$y3=0bV86?1(iT#2cV+%l8^{+UT zISxwg)@D+5h+6 z3_Br{huWlq8@`7Rb(f?~P;sU?-*_+kP!!%yLo`R7t6urYI(RjLhmb~C`Sqo)@`*v3 z%WRFoE+y`|F3^~J2ABECToX*dt=-n3c>73}u17v=N081VTV+3)zA}Up9(oU33OR-b zx`@v|AjeK(QhUV&I@sno=0{GT#l6fEEaAnfa(EzC%rDPpMPFPXWgt?<~)KaCg84 z85a5sghWdl8yUizWS=QLmfgQw9kwa0L*uR}cD98Tni){%gOW0|>Wa$^vK)tdP$xS; z6lA*y-gl9YJxRv_#JB}%(aou9D3)jNNFgAKo`7iO;tQifNth2T&0Jz0#4ic*yXa-x zaJ~S>;+uI%a7|g_5W<468LY;!gop6Bmq^2Y^8wi|BgL5vc&DY@4lgoIS;X+2jf{WA zCZfEjtTLP^uQgscHVU8YO>ii>wizCFVG{Vgua}ao2RXf)M7k->wdOmJ55IQB6brL{ z0bl;}KGApMqcfs1J`tMiOlOdLwQ~0bdT_?D&m`l+oTyU19d&3J2N2gTF7K@lwJ$j0(S1qrStIqaNISWWME<{z^5Ldq4pMM!@EhQfr9!`X#s^s% zGAI4=W^&|*Yy6zWWN&!0QOZsvh)GMan#?95Bt$&In%u;Th71>cwwk<`C!_KP8t(h{ zt-LWwgEGrGSnw%M$#~pf(6Jrx-{HRV3yx8F9^&Mz9WSjyi+T4XLb;?3cEY7LciOo$ zdorG+YVeR5tb!mgJRg_v^zV_!0pxB3E3vcdbDiZ0YJXItmfirvw_y{Z)}G8zRt6I2 zP-z;?bO{wky3O?3oUxrB7tHpgaIX5HK`rB9JzM+EJKTt2#xOwXSFkL=KgfK%Pzr|T z4ruMPAj9h)=RlL=yaig;F_awPzaVodpal^K2187UpnP6j(dj{MU|HvTDyTQbsLCc- zFl==Vx^&qnjSf?R6ugB>m-C}faXF6;>YoT?mFP)poeD-S@|x+AJJ0`Dy~yc@2D2eK z5^Il>tAI=Nb4MZcNP>cGFiXmtU%_7KIH5D(iiQ^0o+TyO9kK(uOb&ouS{&H=cjCbA z1Te_(Ka-Umw@ zo|AnrCqDo51tJs;p+H1vw*0{2)L(c<>?q_cH2t)F+m51EV3fR)|tz{R$bcqf)>B8K(0t)w%z*ca3c2{q0&xsbIGt-P7J z8Q~}8&9@dG|23|8k3%$K*5bo#jiYJg|K(BHzPoO6l#mfRRMuI-}oMs znJjtr+7KGQ)sXZUEOm(g!H}$DD5aMF0wDhcmpq+|cXX3;l<6aMPRsdmnM=v*=#Bys zO5A8i_Z)0`fX;lN6Vnq{K_StNb#yQP)76(Ry2&@=>?%PWG2S1N$r0V_iv#;-R~*ONj;sbaUgV(W?&+a1OHniCtc z@6B3DAF@@)XtZyz_cY%BvGX)^_V}`eM%*iMh&u@YG}w)_O$gOwaj2;)G=o(w39BN` z5ufJUs7dxft4i`hrqa>uxf+u zl$UZQi{`9gP6Rv9^Pd3kMY-n}&HdJc$UU~@24tXQzx-WJ_=8+5ZGMTg_#zz6XQ$04f{)lZQ_)Tx?xb#9~mX!e|D}HeO;S`GU{p`2w{zko*K7ZZe zlFuLiy}!Se_P*tLNAtZJkm3fsH(|ILOD(_g+bUnS;9Fs?!8kom?RP{dlk33oOL_*n zz2$Qw^hrPakN*DjoA2Y#E3hQ#whgca%s^%N5#kKXX5s~|_B1^J^+29~&}1m5UvjyS z81%1?{Ehu9%kp0U@xk|y*MmO~;5&x$jsMc;etl3$df2RB790Ubgyr|*B`&pCoInfX z!#S*JE$D-R7xDbn>k!#et}yXzS5Zt=1!ie|nEN{Bj%I}=+rk|lUxg(W1m30W($$lZ z-GvfTBbhepVOFfPLka2_ew-G59LEB_jbCFZ^rRaw7#f9k=0p)+T^pfBGsi;XL~N_) zj1c6X*ZX?v!;fwF7}WDI1CpwTAad%tBwEi{)>9U#=fM!<1wlQl!;f>L^?aB0+|2e6 zL{2@MN9%b4-1YYb`O^|AG^C3Ts1+{U!_AQJxDXrR9wi1I49b?5{M7iYo-fw_4qskm zvQic!vj##XFAPKX+DpwJ;~`25_-I#dCdW*9%C48e@ZHwA=(ZHEZ|C+6q3j>jx|fiE zM;FANzNnFRBeV2L-_a;;qT8WYN}4xp$z}SBr@;6u|W1W{HMAgkj=r zzeRONgIT^$nSM_ZiVkqvma}pS?j-831?5c&z9}A%%9MhO^%jwWGktQPX43}d_K)r^ zf?H-+fr_aSXb1hEuFX^13o6v8_r+=K?4>S6W()g!jnAvV3ZKaJDss-=a*6aM>ACsw z*v#yKL8V|AtCtqL9KQHXFN$FoDTi-6=X+6r3`@1fnYFekv%dGkA_OUTXH1k$K6W@5 zi?n?Nm1Zhj4mX{=DE(RJ0J4uk&*BAT`(kyQwR;F00R*k2$FCa$Dq#BLkF~I$4y!Hd zW2;9dzOB2=N*m^(&i<~}rU3Ye zgzpRP2-17e(AN8Z5WIKs{r0yAGGO6@e4!*8CMVmEXO%Zxy^S^`Xg(svz|~ z6o=MXDqom-H1=mIm9{NNN=hTvORH zexq2P04#~s^a^QC1$&*lN$~?k0GLQm$%?^{0^IdI3VBMh3tJD#%eLX&Xf_f1 zID_rgafZqi>Pa`;PHptyBY_#32fvn$&&bqVQ`Pc~jkd4$$F6-^^p?~y*=pbA9`WE{ z?8Bmnk8$n0CNJBlShh&}M*H^NP_%uceES4`W9>_}{A#1^yX7I*KJlJw*Bt*=dBi7q z{(U7AVa#OLzUT6?O^#*zZ0(zTo8zCrZ>)V2T3*>``yPY6lYEYo42^>#VO=Z4avTlT zf%9NqDZLYUt|#PXBAX>6(DE09?Zk{fTrR^>S2qDmmeMdHxd6SzxYoBt2pG>6KwvM- zmV46m-oUFi!V(c+R7-fkZQI0s3BJ_#8cD*qI&$V-xk?MXH$|>+9frn(0}B1ezXF!jbOp7OIq| zeGV~0%OhsTC_e=_f^r2YKNOoDM8|0&4h}?2nK?sNr6ZXodxx(OrBy?BZc z=T^LuIOr`rFLy)S-Y;LRzrtn5-LWK2kMBl$nrmjY+;21)pf4YBKft2w^qE==I17yZ zAByY4MVmMRO)My=OP6MB6CbKRq2;xWR(n!RZzm>oV-Kclnqn6FD?qUrYP7R z2*W06##tbpGy@WwsJ9c2frykuL4qPmGUe1wSCT0W1(XEGi$t~K;i8Q^@5UmuDr3IDyNX+(!_pck$6$>}SvIJ_`W0)juf#z9aRh>2Jg-;0|T35suD7^Pb`9 zPgqrX&fJOeR|02lNztkga#h!kDcHFcUYG4U?>7Rvu5*NPc5gLaNmtyo1a^WW5$obk9-<+$JLqc$mU-(^+LHu|w*f;ZV! z{aLv`TDwq2cYwcCtt!1%`PWf;9c8aAjBo&Hc$o#365Mx{v#PzI(`?SW;RrxU2Qv%% zxka(R5)N)bsm;);g9emAVn}DI`dRfv$HS`F&fA9 z4qqCXgXCSCCP&=}YJIQ5_kCJGOdGHr(GCF(& zGMtA!52y9b0v%n{3}p*M&7MV!PR6JPo}LYQ<@{|-kFH;2Z4L*$iTd9N?Hn6;3O3V{ zIC(Y@Ze?^p`&dyn@BeM0Sb$UNzc`dVf+nN4D1i6BZxkO&XgENsV-l)Oj(t7~U=wAKH zVng1oze#fTHeOq=%6pry<0#uo9m`ThyW-zq)h8s03bur0pa6Tf9*-h1Sw=$Ommj@| zf{ePZ!^bSgp=9JzzFCD|E{f)PR~nkr7g^4ei{?Ds<-B&uCV;I(X7BJ|SP4&|3XG^g zNg&D@LO26j^kQaM!|44mSD{v5VCV2Ij?FKw`0N#|+1FKo*pjQ@^rFo@KCB>7&vm#h z^O+aY1a+Xom%XIH(8QMW;@^A!tnZ^*YUAJ6>3bLsUZ{<-f$>CU&=@QfwUu#qTxM@(?3n)ZQdW~)3oPtTqM|>^lPi_-d zo2ajbNoyJQs~Gv7T`Na}4sCfQk_tEejcW&Nd=9ql#jwphO$N@2V{nvVa1Jq;TNH!S zJ`)D$97(5qdc~N1OVQf?0iSoHPE$MEQIP6)T^2GMY9~2e2)UD5-3}VSGz{f$M2?4f zL&a#JvGwJm6-tARG zBK-@!7ivX$Sj+F;3~SN2?f=jPcm{zx^~H1nEM{u)pUsyB9!!4kI04FM*pGEyiF0DM z$1AZP5n?|)#6D4viAFUxzXdbr0*&UHc`a#jdluXmxPbsA`;K4Iqks!D4EURX6_3%s zb}9R#FyfAuE>xSN4*MgISf)Hz1!MfEtI`Yf3fq-$!(W!nZECo@$QXaikamA~Bjo(1 z$XDRLY;;(i2rD@|tYqL}^~7Hnvk_NZ;wXHEh;;^ZPy?$2QKB%hPFcLE11k{!3^OfK zx#2%6!Y3P6Gpj}pClsyv4S27zho56uy-~W34C%V%UjpWRUb^o3jly)ju4v;1yT)yN zz?wtXM;_iZx;|L6>Tkp7|9_(^%>bPkbOXOyzln4$ZV{fn$kBCyDYuu`^+g-^V>qAY z&HKXv@@B;fhk;J|$$)eX!ayZ0#Z+ZqSM_HI1cd#}lYyn?7V$_w^RTnjl_6nIdyRy3 zaiE)Ac8z1$v-(vV8gBM#xQWFXpJljt3IdDjqup>53qUq$xVhtnBw;jclc;}RXy*i7 zvJY9tyr2t)o6(@lw4$_r8ZKr*8!pP}ZZZ=YOcR#Xo*?PL;}G6W2!$F)`TXWC+8d?S zs*8%&baL^U04TVN?B;0bH0X#!{%$m!uuaI{#jivZ=l?@E;Y!32MFz)T%)f3Df2W>L zwnh8rBH@HBu<2n_!U^k&QvI*+H3#6Y4<}UorkFC`>jBV5^>gBUF32Z;k_94L2w`yG z4gJc(i{||fHXNtpv~8+_pKAD5BO%_wp#56iU>Qj2v@-QfWZ9MZU#G(xjcE1p{*{Y2 z8jix7WgG6l+w}GZL@!iID?{JKn|vty6j^S&u!94tM13c7oM}XfB%iEgp2x&NA_lRt z&*%P$I7h#%f|HgRNf?*p!5C>UrnW9dQVZ)SJPg_X&$&?V?*Y^&5yx(A%7gmkGa3oz zVD|irxiFqZ=qB?`!nh?5#y1PXXv%}}3HtfW!G!VsJQxQTgmF|JjLhEv12>bEv@Xko z@z38CYRiy37@v^Jj}XRvc`zO^7>Bexgrwr$^kaFf>;D&ko-ICVd%ZXW=~jf7!K!x2FW z+H#{{*r|nTB^CzjG_G141Jh#*nKj!NSOci4XP~LfY{G9bNpbjR~xALG4E{NIId6@kXqwmab5glSuXv5+Rl8kP=N!!ZSGxHhkbI_f!Y z)hcNn)S63&eXNF!8K495n7kvZ$utnC?FNaW{Ysk%vkMHGme|Ef@ZCS41XhSex$po=v~VYciAXeQGxk#$3QnJt<)KIHPn=ZUY3LM?steC^fq{{d ztz6GpU?#cC9~1QqCA%#JN~wyhYMVR-x2WKP#cNl{45n>+0=)Lo*&+S(r`;C}65NGt zP@BK;GlmySA48!m&X13_XNwl!9z%m_)--Z$jrspIlk&pDOYQCrziDS2V1}D^w1K%D zgrG%2iejPqEgi$3^w+-bH!z>bEG&&*SQ_f6LhHL;o^$5-diV<(9hK3Q=e`bYa{ZnE zY>Qs29EkW@-XGo*sM|HZQqb7!0X!NL1`}^mjis`Acoe z>FC`9aPR&Fo_nVgy$Vn_hkIX3<#2Cj_%h;N{KWX-{&Sh1l6&RHUY!g&4^I>&f3pTGc;Q-yB^Lf5wkzC$F9@iV<3eFvP_ZYMKD+1LI6SuJ>#A|DT6uOyyl40H9}lVS zPvQKd@?^FWiT*3D*!>HXJE(3{q&j!hAPs`gKJ8Q<8(f~b2j2k29ROYs8~Xh)bAG(L zFY0Kl)}dNg&r*$9oW$u$p32KKqPZ`Qt=aKB*qVd34Tp)r2G9 z%#P|VVC%2nQu~54!m&#pXE2T`@n@PYgprAzl)wp=ir^IR;IxRLk884xC#-Ur4;m?R zGwfqFay<|G0vBh(m1&x@zHvGjBZG3V|4_*b*RcMDI}1l+hMv!E+U=VM(0HRzl`dtY z+HX&@-D|Ii@P#%zBQRK8KPFfJn#QGPnfDcy?8exPCA)E7+mPx?UA_E%@LYBoWWasj z{IXYq=MlBf;Tio*b}@PcD|c$@JUm-F)v_0~Z7t1vh_9X_#Dc|6V?Y@+sz3+VJl_Y0 zd*DVCcA(xsNLWcgQs2AT6IDjZl==!Nrs8T^@8YJIr+>S@~>|x%DDLsE1oAU*1Coec~BpC7XB`5(v5ul}&kSF^&hp3+I{va(lc`;Ew|zVRBpzZAf%w z(IX-#dl8RkNZbPP#!LZvQyhx0-x{dsm-L}D;)H(f=kl@-vYe4k>&I9ECTal!*b-?i zIN0eHo`BW^&EbL3iv4PwmTHP1T05R=3{$wGtiW1KM)BbkgDfQ(bb)pVj_U^e?Fxa@ zZ0C_@xY<>)t9fXjzo8O{p>4N3rPjJ8rhH2R*I>z`YT`WKl3?HFIhJsQBONAX0y`ig z4|66YIU~*z&)DCG?T8X0(Ew3}@#`U@nnn*IwRDA4!&H1HT@nq~t2y9nJ08GDJAI8W zO(kPXmgw6qF?A05w91uEow-CWxE;U__&3H%lcq5n6rKVGu#^wt^T_G)K0A{0XbG&# zj$IC*#Uj3+9qi0aF$%n8fEoYq$vmT%o~EQ&bdO6yQOaar*3n-Kqw+=Naxy=#m!-IR zLF;@(e1oAt8Wfmv=+hon8eOT#8PPvPeqP?1PTcq{ zl?$Z+TIgOvDcH@VfIxBjYV;WO`Cbq#P1TlyKw|&xh1tJiULN~1*b5^3WMlj+kjGUg zXv1wn+mwXe?&b>5Z{#Jxv~=>M@G!HH_qU55=eCW~xvUKZVnhXb$CPRx^n)9%* z{~CJ3T9q|&#~4})QNZ(jrjYeKWgy6ejg?47rYa`XKz8svM$gkkgi#!NIBPXtw{5o7 zEp97GUCtW4#%+w&6){?`jM6$;3Z*LVE==Jso*Jca<~vZnrs}pP+r3A;lNANi;cnNtwzG){O($-Yn!aEYsN{7@eY$0`>d&LuG4gN%kiTd48UG{&` z&S?%D9cEz4cFyOgd_!{fDY14wq`+JYPx?*Vc&CrjLGf2-7YKDUU^UzB_>%pJlzWEi zffeVTIiz#shiyWrnvlfNV7_(CWIyt4mTh>+e*bACQ9l z&-K#nSGGibpNxAsZ3+Z$wL3d`wOs_(k<>0#$W%viCi|(5>W8W1nV+dt3xGDwdDwaQ zxJ9^b@mdi78YQl^El#z^;c8($4&la1dn~O5V)i(=cA|gWtQP&GeH~G|gMTbz;M2Yi zPc)1ZY`83IdDX+>cHQaGPK(}n2^Ij7VxuEsKk4i2q}!P>g&A7U%R3A6@{YMNUcN4? z-)=IC)duZo2H0Bvfcu^-6`Skth`cveuds|H4c*Q3am$7Qh0g4xj_MU8A(Np6r99jo z5V0tr6A%8t1TaypId%jQ@9e1Na2E5uouI32XAV^tQLj8RxtCWJh>4lWrrDiXc^4>3 zr&koo5FDCLFGjPPSmnyP#VbovunKF5{Fuc=Uf&Y+tA#xz52aR8@gjvUx*Z3~W4dCk z`M4`t_~~zwBaWe$k83Jz=tJeaFm^2+EX3h3u(ZbsS)4a-k0*FvvlB4-U+l1M1zlQy z^#!v3Ormu2jdbS9M=Xub-S<~NOyhw&1s+b^Gy^@KABTf} zwD8R}@KbPfi&=X}SDJc&U+fcwEyV*yt?HcTbjdX1OSddGXs}LS@Bn8UdW?rPFxg~T z=r>ziV)FXRMZ>_?HVJSW$<>Ju>R0R9Yfp7i0N4c_kO{?QmxC85 zS11}&f|t;Wj`cmL%GAt^8TJXkb>0*Ug5|y0q&yAyFn!rw*{Q(vp*mx)Jcxf_?uoQP zZadHoqjIfpxO;1Q59SQFM)u3p^;o#ZB1eiqT>TzHIZIvqm179+RQ^E?MT>g)K;Lk# z+GMY&GJM0iJI9X_!<-fYtB&Molmn?e1gh>;V5)zwDLuwcO3Kdn(Yniz40ewCTM%Zl zz)}-@^szN;Z?cBmdUX!Cb*51*JpyhR%_p*eNDvM@R0#{N!~zyB_!q>+{M`xg(t%Jf z@}PlV2wo6lAvo`3D1&^2DhWtdmwGID5XEBI_yKTWF9DPz=v&+A+Yzfb3A1?of&Hbcq@h2szccLJrYr#!+aC-YQ`^mE7vLbjb zI6w*7hNsQ^aB~}%s;iBFDfCJ`f*0X`qCR&yScYRHmxFy~kGEQM|9aIuZk>X3*%bj* zdeGNFscrNkKM@(LsE-p#mE?SSB?~Em`CiGI<6z^yATQWXnnR5X%{?>& zhSj7{ArG-589|vNMw_6Jt$%GU2_LLw!zp`Z9fAq4NI(U$QbB)GxPmu63Tcv4!Igz7 zAWZ&K1)|7CD!8h61=|;@fH3(lG7qHy*B3($dmr741pI5#&cC8l+S+;pFSS0UrW`#F z%tc@JTtDGB5mn_(IL>&o_=MvJv;CA6Pv`E7pd?tRan-f+Egc=*+?}N&(IA#OG9d4N%4%o_zuOyGydWk!&yA@ugBLc zhZ$NJFGLffGn==bO$QU-tMGk(Rt^F!WUmb0D5?qCU!^SLkOc+q9&63695rg34tyQTj=O7-5&AJuzjtX|_F!&a2W##O7{9Nb*K zIb~xj7lJc{@PS5xeW=aKCK~<$!i!^d?UjDK#4M2^$|K0)OvwT=uezn9dL{9Wk(VDb zIJ?kVgMeNeu_+uN!?C9_B${C&J~idBan#RT>kv4Ci-ZLdiTY{auZxkYm2(viLMn$o3hMV&^KzMhNE}fXJf}|m|qX&c?*XRLZ z$F+KxtPmygApW?HxG>6y0WB;ps6W%Bv=*q?8?CC1)n+Ql*u?`B5U;BudP`RTdzGH7 z*T?+pG>+=KI+By|ff+iI)9lF{c{W-Nn$Y-E-R}qEv9V?X;b?A5v5%|gDi9Im`XI;! z5Z#SS4MZ2C4^VIXu2vK9uvQ~*JYWRQrfEzL{P2KL`ZQsWy`}-BIZLK0lYix49Dxr^ z<&dY!S;m~na;PR70ApoSbL4Qo$9?*d>L=WULS`wnRp-s)6iNvQ4j~`uJ|x|TM8nz2 zWmiv>iAoBrP?^#f{Bc-G=4dHBB#G0Jl^Cf07qzFqaF(Jnnema-L_M)2>zrKm;aM`H zXkVI>---GS%7ge#+V_h!>Mp_X6BLsMg^^T)zbsyJ0s%tz9L+%*Xc(mfR=k1;Lcj6QBnF>7%kV2lkHq^@ ziZTc3fX!NI1z;WYfQWNj)5vv-nuCw<#Lxhlqy1%$Iz=Uxg*k!=LLe1--yStV?uD^S zm>?Esojbop-gH_-axWMkm4%sTm%j&Xo=?7Ecs1Xu=%#6cMe3GmfaV zi=h7XFElPKC8BkOg+Gn& zEsb(_P$Q@cvbM-h`JI8WH5K%sGrK~WSua2c$&N_*`>!5elHqt>%O+rG6ZLje zMGp*;T%O8A!wo^Yncu6;MTa3qgw~vOTIB@>19@!LRS+Oy@Rn1vd;<(_psF`GRRvv5 z7t|~7`#)R)frSegapJU#TTs9JT^u09XTn0Odu+YLYj9&(946t2kLfciww`F1iSMm1 z_Z%(}NS={%Q_G}_+#Q0!4pVoMfS-^*0>ZYg+xKlo$J$bo;r8#H%To^`S zNQqHvUfy6xd63Tw0mOdjQGQ;(%E?@!VV(HV8-{UcJgPEp*yo54nOFrwyFje4Yy;>* z4}t;jhs~Pxy_jDW8G(+#LB!Atd4))Ls`|5*7hMnX0uB~n2C|h7WJ}JMr|^qdV52q% zVuiUa6Dv&DK#nU}k=Lq3!-1eO!U?FsH&QcR@b+=g9NYrz>2~(0iZa-7s$;@va>*8g z!9>B1$$gSxdK6BIlP%`SEYmwKjdsHpTMr=nBhSSfutS7*JBkG61pJGx=OgD}I7tI7 z>M36pcvax?YLsk-8P)7$K=19RQRK?qf)$um(BQnL)6mhcK(rIiuz5@0` z#B8h_lYVa)XN1<(EnZiW+8@PypFI(E`aT;lB6@w&A-F!Qx(!&Aa7uF>{6~0VQ7ya8 z4>ZqUHxS43F0Im7%V~7K0arf48Aa=RXNs{pc?Jwy!*@_EgrE{X>C+Z*?Ri<_^fS0L z7L%0bVEkL_EM=z)!>jMnE95K>Tqnox;wN z6lU21U+}u3eC|J3ti5n0ZV ziTM|>HK(a+JV)L(_v;Yk8Nf)o;MJg=Y3vSx7EQkEuLgpC<2Tqiv0^ta$rYO zgMde;IYsabSevvzS8>`dCqvfMEnZVnI|+rzq*gR4LfhgxwEUnTkTl;1lCZ3`hoq6_ z&X%3ao{C->5w;=l+fZ4r=D{K#`t-p~lt=se?*k6htxSQo>`2(zpcF>+KMswkZjb#x ztM=GUuXYr;TMlWG2BOzBvO(JAtL%j7A2(iBM&v7;u@AE>F5@_Ypc29+)0(6G@s(yd zgJtw>aToEYp;<@Ixd7$0K6O)pEs)sLyrOBPPldojd?p0Qgl42lRS?d*!cAD@NDB4#puH1lb? z0|OA)AlLo+c@bC>P#2aBE;9hb-Z_kw!8%Cc}^CUp!%NWhU zKm&S&1PonVUo8*eoWiv3+|RW#J06Hw^EHn6R73SXT37(XT#Cp834aSWnRp$J#=~ql zUuga#q7pj?^p8g2@5C@A^CwXcLd_O^J)jB*{TWD9=Sjrg2mm3WQJ!uCo(Ad@Dvc?U zR1Ymh8$WHrcw94F-kf{}9Dd+&$g$guO2eh;1Z}Ei{SdJ$rPNksE^>x5+;V;aX4O>|s=MA4P{^qA8I)5u=QWq-vtR61^3voTwjx zr+~(Z2HyT+Wc1zFz36w90ra*og6_0#3n}MR!+S&D-3Rj8DxyJNNop17E?VGB7HCuf z5(YB8bsUBBN`Qi!GQtQiZpX^o0|J*f&4tI+*EEwohxHji0MaoEz)PA^eT}s^{&^nG z=65SPBL;0W;`~97sjhwEsi*%hXm;VR3({-?P_>q!_D3h-L@( zBYankW*7h8&@7EmL;;%VgeOWFO}@kHk5cU}1^&pbq){GGQ?3OW<+iaH7PR~sT zz5+0EV+i!q?q#Fy)F+@a<$WeuYfwa#t8FWd}6*A>qwj~ z%pqs6g$+WD2Er+1tS;^h3F@ObEeE-|X)@99kT~LC(5uqCPkDV4 znJwn93yT-`gy>%=R9zwEo>w^ceatPn`y5oh)*}i6VIeov2z~UJW+!uQFdTITfBVje zlE$YS*VVO;3C7yeH^?8{C1_n3B)pCUjK=;rQi0bi@0)hz_ON#N>f`eL@>!>ZlLv^j zlVflTG(GhAH-e#DZ4r-rMF`%HykH_UK<}uQzsFt>Lh`GN3CrSyGk{omJ4$-FBcfMRZc8biCLDjcpcKNlzHagQlGG7|+gkuGqKw4hb*#hn zV4LG$4T8LSzkC(65v~RVHmI5ugB&3LR=LKYC5(m z(>GiugOi$4ihi@ZBz2XT3au^2D&pO_9BLf{kvvmmynlv=W0Ea%{OV;2I$|Q#a?(f~ z?%VatV`JnxeKuogP__CbRWr6nIm3m=oSbC<7ONkyBYqcXHCuU69Lgv_$sin&$1s<@ z_s%l3UsExuab!YeM?P~M6XuRVH-D=L>ipO)*4S_>LBJIE@a>Ij5a5a-tC^s$aww*i z=F_o4@sgofX?{7z)m@Mesqc*9)xNnqHoTxXp_Q3MF7%>3U>v z%nuj>Jq7nujPoy(0Xry6B6NiwaXQD_J`oxO!z&FRiALPKp z0(kISYf4d#TY^hLpd#$@xDpIKbg(;dD{OLM)OtF;r^&7{Q-|Te3pg377W=8X6E|&- z$i8MQ;E`z4SpOkZ%XJ$23iZF^17$zN{ytDJGY(EwPOBHW3$Kl{rQE159OvM)DT+y7 z5zcm1MLEmL6ZM@kctYR;AdvZu-UY51JJYlT1P#hf5dTcn|5fAV?GlbEn$Kff2i||)12FXNRX+G?H6`#0;neXggZeZ&>U8;MT_vG9$2Ku7_KMoZO%NKRtQG8yNL_v;I7eT!;DSRr}^Z} z`QQvHh=dZmNu-t?DG*rvreiNMHg($uBZv;5x!O%+r_3*mr`s=yLbx1VMtH< zFsBaE|YBL&Ux@YkGww!`{ZwuweH2Cxxh8XJDPfu#rv}X&_eI%NNOio0(Opzl7_TY#1aE=(B=pgQlbUy8#O(WYeMYF8S7Ic^1!Uhs5a(E}0o}n|M zWtUQndME}muCRYnlqIW!@6=11RNA$r-Jqq9o*Zk*DM^@)I)ln7ArQRRTcej&aoAxo z@0|kxWpM!80{|yO(61*UAG_ESY4!%Xo(Ro)4@1V$0hm?s)EANJ8qhz{O(CJbnh_jl zC!aWocZmyEw>l-NJ8^jP2Z|v*X3h3FkeM8 ztp(iyP+Uj^jA~J@?6SLjH&GEgfWq; zvClD3xtQJmC{%0|FTYcW#T*)OFfo$ex4S&XSUMMvMvbkRX8k&s_MS+FG?F|Q3K647 z{6uh=oyZ^I{M#Xk%jU=uTL-;I4GEz{*-zB^*p`MfL}o)i6yw7Rkni{Xl$3*-hVui} z%2tRVEZG>%^11Ls2my{iNaA7G&0?=0D9}ZWFD8Sydbb87LxR>Y0(PPXAGhL5T5?Ob zNR`-bBlcv)?7%&YZb``(Xp?{uV1aGaa~l$Nc754-kgDYDdhDyc<&UlU`>u9;65CEa z^fcfx3ejZ8V-c(bD$q7-uk*lGwdP^Mckn_A2qAO^Uc_QXg3w}$MC-IQ)ZBEMuXg>Y zRkdr)$bDmBU7(S%PA0J8Y#>Kuvay_;!0K;%?dmVzMi%@1Li4=?felPX)>>~Wv@27r z4j(GrUcFC;M$hF}7MO+utk|)k26ESBXvk~3U8j6ZxIgtuYu*X%dx z#6L0Lz7jPe)oeN2(a^#3Wn|!#?u^D_l+;)B2aD>yQa&i5Zk*~-+D11X=*kMc1hX`V{jCr8Z=V*`~jKlZ98LKXzEy#p^n|1I;8Wh zPHOQ@mzmBdf;kOvtZj6LseP=0y)6Um=Y|r0p~pETqU?dWFP7~k?;zMUX3I-T-`#a! zvhP+T`)=N4(swDQE;olIpcT;v-xk+8BgcZ+SPN@Q+OgqM7Vb=()~n+WpUw7a$3HyT z@lTwQ?D%8XrDxQeL!gZr3`Lh4OlGt0CBuFMiUVS@Hw(5llJ3m8%vd|zf*&5N@n35uS#};o- z@`jl@>NC`FPp+*)Bu_V{2#IW&HHgLd^Bcz+5TiHd~uEnp}+B_*)ne8KUiF^^U%E4OB7$PwBQ z!^*@>rdSZgENRM2+W7`l(O=Swd15fCG7D+H_Nwz~FftN2zy#f_j3mC*`+0wSHf#O` z4JR1zdmS*dEj`4$I<8|uurnfrLY{e|D|G2dSQf#=(k{Pwu{R#xo!wglg>Vr$RdioLW^ zG!b_k*@(v@(9eXqqbc3w1BXpR61e_gtWAPvoxkmp9wt*EtV2rf-@e{o&$%(Ppf2qJ z^6lNNgao8l008W^d?R2tf88I`<<8pMm~P;_dkoT$SHiep590|7h~0^OjovaTz@mK@ z9(~gZNhV%+B5L~r4Tzlz7x%;DHV@d0#f`ClIm`HFWUs^?$5IFY$@5>}LXvo$ z80q5i;fcEF9%y4aFXbS^vQ&nOgv?8y$~ULKAc8+f7S|^USKv?Q%nL5o5CTc?NQV$S zD}0jk)=8LXMJXDfJ1yx^;oFYkoBO)rOX>n4+cl>-_#Tr1-+sODRYZWA3lY9qM5Ixt z5?jV0b|;QzPC5y6Ta%gM);vk230slQQMgy|BosU#51ccTTh(zA(EXhCvm^dXK$m6) zeP9OAuldu1COp~Yml@>SPo&58#ta~Z7O>^U^$u6kotvm}DWn2CK1ZtOi%u-jsT@1J zMfOJNpaicd7xiUUF%H}$zbIEp`4akFJHUpPI){>gRGkS#=(D?^Lb&<(1nrBLV&_F` zmx<8lXNbv;F3}lhSUK}xa8!HePtm>EO^9{AAC|*6V?amVf|KMwafB| z!0O5f>z`SG^#zFDFyak6SCv`Ky{8G+FxP@cFS4E2#n!!F=OjeE4};8fo5uuF0BEw# z(vtMqr|fU|i&K!Hp3D!G3OVXPBSl?|0V?U6K8@)9NbCSpj|*?kQez*Tx*fbPmg-eE z0Pk)rpvm!u)G<`34&LIJay58NvLNwR?L@rWw~zNi1Z~IfkS=8E5rboQT1Y|It%#I| z_QKBECge$6CL%f=R2hbj$b*?;?@Yy&JKu`Il-!vaNwo*6#6D^Y`}E#+{?5nX zj9nh>-r=&*$#`Ac#;#t^in8bARRr}I*BY+p!OnyNiOwhxYrxr=fHieUeLg}LPX)Uq z^boGtyahg9(s8tK5GBUae>7j{!Z+=^VlRcxx1zy?buybpgHSvLLMvha>4;!AGE<)< zM9K)0hv08|G=1?qVA$wW1W$zONN^3|>Y*kww8@*c$RGKcMG!uxVsOQ5;z58LfB+p> z7%1#?63Dv@OJBd56m-}~#2CW|Ob^={3+PMu85>5mB*#ehcEF@O-vy~toYym#v;#Nd z3T;UlUT$+^2udx#6i-)j_f&p$Q$IY<=IR5U`;&0kaxXaQr4tyldApBbSqUuTA@Out zhN!MjVTgYT?t}n87wfebH%c>bd|N)37uh0>m=u^7oNNc=SbR@_whnH@N+2huozC|9 z@tU(Yh<#ij{t8`ZK@1}Z%Qk-m{%r&dp%cMMAP=0dO{aaoZ+5ug55J+RBOU=nDFDBs zKfJ_>Bls(EG?8jo3OKGyMOr}aamBt2xg!JgFn45J<$M*Th^=yVFq9BeAu?5R;M4vGiL#t#Q=rxW~MFr0*aaj!}MZZ$j9uE0(ZVR;$tjf9K*^CIY~0D5}5)5 zvPxwL^B5A<*!qQhhVddjI?Nv39LQz6;y1WU`XfQ744w8sMJ4}4Ato^7JLiT*VTMnT z-ZMr%6Lb0O%z-Y}&m8Q?p1k-VQ=6XBBSCABF$dgRYm$9sl!eI-YwOET1;|05ak+@0 zkl*0dc|7s*M;1vVR1U;|btK`L(N+?Af+6u9Lq`DwX^)1GV_=n-qx*^EcO{^T0Eui; zj9gQsSda8_%sJrY8A`#D$qE+(@dlSo7bpIjs-zG>!zD_QxnM9}VDedU5CZ{oA7XS& zTe78Rf@GY5X#l#DeJ&Ga2>?jP2@xGOeS+9BNS`TWkqnhN(NoLp5s5Q6RPiha{gf}q zIq=!Vg;fK|uyz{qbo6UZ+NCm_{CYpSfUy=WhVNT`I?s|jGv_)l+}=_ubJ8n3J0KY7 zD3io>kR_Ua>k}t9g`iC!;Rak1Lh7dWE>jeqUAWXG63oPUvoMIllPf0MXB=lC4d&q$ zGi{l(aO*b6^0&mz*c$zV_u#{vA=B)t%z>LG3mn1X1TTR+5JEx&CVJD05ED<5KIYLC~ z4Ej&wS274p0nHuyJIn%KK%6$)U)T&X1HZ;e=~mg(Jt|xFv&hsNGaNYdF-gGLNly26 zCJ7sbxzs>Ot9muk8ZSl@1g8pHt!*4pAlZiPmRvBAae1~B5mlB#VgEnvxO|zwJlzNi z&r&&ER1OV;JVJJA>oq1#o~(WwiY^MN&*m$tZg^C%(1FHD+9DkD1669M2KRso!t4<6 zff#>C6FZVaxg$Tew7^E+v!PDq1QQEwW!d!pzW7MZ!XTH|#APa<* z%FRj@oWG#!xHCsS0@{hij|l;gm~ zhEg*h4xQ9UB`=g&XDEXoAGj?#;`0wAFeFjZced9|HmXoyhADez;!16%xF%?TbN+7K z6J`8HA0v_-Dl|?>&SYe=4=0Kc%4Bp?Y?0&*X{0$!9Ce`9(fId=_3Q{)l>;$xe_0k)?UjG9d*BP4?mgy+(A4h|hgxdSTvxxj2svR^gFCrhsol zTIqif1;mV@hB#sb13r(mDcur-+$|8Fwy5OuQeXPf?yo zgn@eE2u^y9S zU_v55(psfw@LkHXG47s`K^C5c5fDGl(1<-s%9+lQK^!71Gfc|BSO*XDWjp>Za9wsVTgGOdBi+74qfsH`H`GE`YA38aP9aT!$BKRR40YthkE7}#f262DBE ztb2h<65@Zc`U?A7ji%y}o3!%1nrfs=Q#rA9hqa2P!b}k`q2x<=7QR^SdpMQKMxxWi zx-A!i3RwZayv^<7FT8Ldl^(iYhg_4?MieBAGdNli z9z*q2oGzxL+O(V|8~fVcr|ra;*>ES?7|C#_eN(ngHBl{dCZq-_=OsBTfnTU2VkMUB zU;Z(Kk6d7NUl|2wSJ5eAs|gHiX!p7z=?yGG5mN6flF$G|7UU$(=X8UHq?igg*S9AD z_U1tH6Y#fa&^muhvrRBUcj7=vhyI3FNlIn277U;L2#~{_or1i81i=kfb8$Q%UIC1B z*(i%$e0a*i6Y4hp=wiu$Fpe&>Y!ZJ%DAA=wpg-`$B75=)V&)GwnhdmH;t$x|$it&+ zx~x5sgCQE{B6s7vFRmxQDkSa@7f9IN$p=75oM$mhemvLt2&D|Dn6U!+Y(OnaVQYtF zD@YU9vlSFR!ZZ~=eKP(CPNV5@-`$EC6!r%(99O?P=AxM1%P4}U5xRnrGn zh;@G`YeXh= zMKL1uiO^FUG0Gk5V8eA$TPQO+bEHtNuJW@2uqcl+FMs4onVIKSCy&^fL0ioqJ{BE_ zQjJTAWMqdH)V0&Gcx~9XHRug_xKu;}74+ij6X>&|2wL z6@HWtqbs;W^c6Z!dwiS>5AE7)uE67w76sPE;I4ud`};S1UJe9qD{gh z1VW6{IQZN;VT_A|5{eEF0K%=*co@W!7Wpuk-c3FX3AMCao0{5$ru(phYScat=fH>sI|6;9 z1bvR@o0Wq{rs)09@dMF z_jJzd9KXE7&dX`GnjZ6`-Oxbg#5NAiWK@H8%uD4CmYkAEflNh~nJO>P~x7i4u0|Rj(uU%sQ4ftTk^wC@ z;K&T&$zvJT+hqYJDjhDQUs4yge+t-?fTRX7R>ezS@&j*W5P9X3m~gBaG*yR11Y4S| z=M*G`st0$7J}{zn4GAP-!le0ol1W;w_Sw`v;NU-YqoXVoTq>L`xel{=Ur0LIUu|I| zV2_iM(2nj!>^P2X1VI&Hhf3mEO@sK-eA)Ixmgn=lNAK#IgZN5Ysg>81fhK0Yb48S} zwk(kuPJ97LK@$%n4Nv6R(Q)d1&{HD+DjHunbE*N6ay`qc9HLIx6b&+xHJ`nQq&AmU zFomQ+;z^2*SR9erVz??M!F?L9ID_z|@0I7cryCalzG?0Zdc<+;zFpU9BkX29LdEEe z=0Lk9cJN1S1Z=6o6YYk*FeE_~|U#?7YcYFD=$Ec}mjpN{5ClQCyu7>^mC)HevwHYeG9v2GJ6fG6^GM z)7XVTZz2ZD4uOZ8=eRIV-5=o@*D~6RDa5X#^2s)!gowtqA5%VMMy4^pZ5i=7k@##z zOr>Qo=2NV6^lmbz9K}~-EabLjqSa0S(r^MkD-HtS8LTd%X@>)DZbinD>)yh0n;9Qi ztmn=6$$9{gI_K(ev4W@p+G?T(K1W?HBTWk>_LqZh%E&9dUZs4kTh5+0g-AtVCBwmm zrtCDB%pko&2JfIg(^+!4k~zwDr6u#uACb)Bux3mHMs@^}VpYuGfR>xJiB60Bm9KGB z-)vjlDJ_QC(XhlJo-EPbbbt^~WNAf4;@!~--WAa*-s&xWq!u62u=gh59#|WXLZ}+~ z!rR^qA%|VTYYrK4D&r|U_v4KVF6 zGIeld0$mv$jL=@}`R58KRI52HrG;|0OqMbw`r98l2WGR0)1p7iAAVgr2hl8Oq`bMB zbKL$yvJ)C!XPW_O?}KC&31=S>#i*=r0t-{8ySvQYKt4K$N78eG6N2CaK^t2@1?Ej( zGN2`8jTT!U*pPg!Ld@&dj5KL|6Rf+~&Zwa`LI*ZZeVYw}mOLGGT6<2z+(q&qevb@@ z#ed`!6F)2hvqYHl95*WMP3JA!AF)@Wm7dPdC<;c5DR7rD^aA`u1+Mnyp9LVq*m%() z8bk}eAW$B&Y4eieo0?{=xn(#&%h((K@byXLlJ{;ab~#fHnRyBiT9Vr%_{^)1^;-#9 z_+vMqu>hnNy7>CRQJe+HzqC)eixq|{h>ye~dB$H)HG`AY;0X(7RO#=EK%tD3q^~RH z)*C}kraR2eyt~CE7892kv-NU`O+5wIxS9146>X!(MJtcrLNSwRirzBWC0NDcarWh`RH8SfqD?hqODWAROR{2xrfG@#;p zn1FE|NY!1;c8Jw4xh7zG@sk}}^k@;+Qqg%W9Fs5;lEB$+^}6W7l-gxjnG-<+geE*t zq~2x%57J-`t=s90NA^pay5T3KWEUvPV#}O2`r?!OnUF00BGa8WVQ&H!rZT{PJ4@j6 zL?wkwuL7TVRy?Mpe56Q#E3To>Ez8HlkYzsfbFs)nPqWXV%l-&Mjh$=EOPLSu%lV+a zV$z6GfoKyMg&Y5Tk~I@86F$Sl3>l22Y2zjH#OY}+Jg>xe4!k!GY#_RFWd_58nyTAN zp;k?5rMA}8incJw!|(yfo&~Uem!r_*S^r-a1(Qy!BPJl;?|<$PF# z{_tH)>5@lkk?O5u{o$YCAzmX{;a&>fJY^PsZWuJ>BNPnIPFyqPBPL%oW!BF4IVW+! zlp;SKPLrP-MoyVE1aATPVIiOr9G{pxrD7-^4w`a4e?}(8OljX85BtauvT=bun3otn zC9ePv1E=Km_~Hu)-n_ipNCzJ3BHj2q;Gf8^?tqs$jCZ09 zzWCipgjh@p6x>?4MT%{De^c!3_k}N$iwyjDy&x&`GU9_sL)r1nONtq zzMNB7+XAj4*roW(w%XPGD`Q&O#MRfqLyQA{upNpAHp%xahCCI4JFtsm6wW_9*59{f zK+8K7K2!BpR+}CAa?7SI?eDeE>j=!-RvH|$rA?;#jXqy-DR~QN%#CUjm#}>RMFEYC zY#ZX+^!&R>nH7!jXGQL;+Q?=+Z2CR_zH?8TJo8gD!sq^+mJP^CV!JNMB zo^l}FRfAp_tI128g=aRPF7hdgvkjj-O0%XL-7S>>*mNcY;0gdfO6xgm%`t_ObU5m- zLktC!8t;C!Ti{I!9_mZV3Pf&#Ub*g&zYy6G5bO*ve@10upvAvmz1y`sX0?T}yN2gWs) zw82ha;+idi`c1KS<6F+HmjYch0xWM(N9AJ6m7i|}SLQ5&Q+pBl5m>nC%7yQoTeIoP zMbSV_e^}|T89Hk60B>`s3*ZPiMFc}TV=#g#R9aOl7DtDxiL)McLcL3*eO=PN?!>_c z|G6Ly@Sjf#3CV>r2cy`QK-ZQ5ZIC`Tqsw{Q^oolA01^LCgM4U5Ht&bvg{FdPt>9Pao|M{j}SZGj@EfI*50X^|@F^&xnkk=v)Wjs|ZXA0jwU8qSi6)Ip}e zb6VheZ-EtBK($8~Iy6deilrd)yx1dL=rkkM%LDGl!E$4p2i%Vzs-T8H1MIS;ctf{u zMuO+|1n zyNqB2ktXvJ%?u;6vp|O? zKOGWq^9Ulkp2?9Gfv?xs&lrWSr|UZ@9Ws z112OUWh_2ai({zec-VCMsp51v|H>R%_Yt*0GN8EO0ZSoa_abxEVS4ubHkrA+Pjb$2 zGXCa1l5=fep60QPLdPyc$AZ~H$M7HdQEiYanC+de5jCqvz(5%NyUgZZ9#o4QeRee6V!dLZ+ zX|g0R&8^MZj&7NCpYX)sbD7{1`lSowGbD+}raN@$uA6}nfh19C&dJ+eH9hxAHE{|O z_ zmxHdpJpz~Tq|rWA@p!GqO77Xfyi_Fj$5q^$dcHj0Ty-Eah%T#rojgKfv)lfB&5A60s@Sxp#vVPWXi|Z4aSGpy$u-o|; z?U96Fy510=KCzdIi*(V#w|LmDch9AY2fVhJ;$uO#D=`+up(OT|VX05@ZN1xS0OCK_ zO}r(O97gbcn|qLx`b$l=Ax94jvNxwkqsnW)l58)Y{9ef zASC0b@1Uu^Ah}XC)m2ijKfFn2OQ6`KKvxx30Wd@96I6?Lb^b zE7etGL3C?XH`v4}J+K@6iw;3N9TlJrli~G}rN;dR=NZGOaHa+yR5i+O_o2AS-sFkv zX0E)l(SeRt?frQ#G~%B)FRx`tc)ntQJ5s6;m6cytmQ9~Ee_RNF9?pU-g;T^hB#I`B{T*_Yz=@2 zK0{GTL%u}pfBa383qR>|t!FMef`CtMMp%nJLoPakm@6Z!OOY#ak<$QD^X9+HL7FGQ z4Hdn*h<|4wur4QB2Dcl$*}&Db7I$_Q;&{gbc(u7+ZdN>m4c=xAz-^RrxlRXe$n!6J zkgg4i0tFgO23+&vV)R__w0ceH*?QS$@&a)a(n7UOcX7@QBcs`oHZY~9o&5olH$uL_ zXVT67j%@M>e~HEda=(52TKu8!IdltiNSGzS;aY)6tx#RtiLy>F+-ql9D!N+o7n2gD z#S>T4Cy!i=w1U@#X?QwSpM+HW=z{XrV1aU24-_OfGN8evr?y+>{P#~3nhawOuistf zD{vv^_bzmW6!J$NGRTuMgZ$xNxn76+!_J~Vz77e_Wq3X?#_f!B4B-K&V{X7FA?;9x zFF9|!1`$c+yyXX9bjm?l3aEd}queNdpGP{zMI z!O>M%G@3!(M-K6sgt99}Z^^DB<2Y{wL%|9-f8y#1gj*;{E4K-F^aSyxM{cqrfTbiA zfld*D5QH7uUBDJM`wIt=aXd!F@XQUebG*9e{|$OO7Xfe(jK72wD`yC`K`XQpD`#2} zT<4CQ{V~VN8S+EUkl)A|av3>en#viU1Xq4^LAg?)K+a+=ITNoS2+3YPL2wR2&SEKY zX1s^sD)WtB$0ZHAAASDFA?U|&gjv4D$hQt8ObQgvfjAqQNV)zomeX}^1P!yhX?&{MxMAQ?f-YwLNceE44sq zyMa(Ub@JbEdIe6zS|1!@2T!+xVh1=%1PMp`1jjv_1JoK16#R0z3(vJ2XxP&E5-1FT zpPC0akWf^FoPgsG&%)Rq+xlygMRx7_!-&*0-|LpFL)^Eu7%uq-*@SXjM1yjNcw;Gz z{iiM&mhXy^x(z(R;11^{0+N3q?)eT7Hm@!sP%(aht~tb}&aS&lXygM3*NWo^Qb7XU zL-&$3jx!D9GLX`E0A*U2C5X+868YX_8DL+iM$5Z7^wrg^eH`?gjsY+& zvZEYiVVb=nEKNZc)&|>H7ZE@r(Lh%OD+#%ZbOF3c7+QPl@IWnAu)jLWb(t99asXxLF_}sLCU6xOj!tNy>#Lh-bJxO+yY&4 zw@t3u5^6SYYfHYl4(4T6{rolT)%Lm%=%g+%L8Y7y0`AQ3igN%V`F#k^9T~zL5s$_y z&ok*%CIxb$+*!rDDNOHZ{+p0xHhZWJJI<%a^wTNw3FDHh)X()3><^SG z@_f2pKVgoBPw4orQfJF2#s67p60%4?bn2X-S+Hp+Z$arE2u>QT*sJxB*Ib%EQwrw2 zT)IaV&)x(C>CX;?FFs&{LI|%i5X^cic2u%>Oth93&#G7SAVg=Nlu^W(bYh_CNnm!- zorO6OS^$c6XJKNLTbmaTLS2dSJ@bsy=69}BY-%G{%ixq>8wui}Iq)#j(UYIhpB4JE zQh(OyPdk5J4t#`vACr}oE?h+17k5$ikjOU49LD?5S2kFg$c|x~9Sbw<2hs1^YQxA%P zS&Pv%z=fsw_bdFnOSlnO9t|w74Lng7m?!EHFQOY|2)GbVzS=+&@3p#V5croBpS2VF zBS=+5q^q;&RM;&0=421VF5CzZSd0p?ObCjIF1qq^+Y_g>i{N7aK^T)(g_gBV>rX)IM5@-P9Ut%Sq9v-zCNGjt1^V|IiBli7p|i-L0sh9TLxo-2kWz z66sX-0SZIMqow!&o#cFYMLzf=GtjA_d3zOn#C&JG8UzI1OpyxUvp>GT^Gb?vIwvLF zZ1|~^q&dG3H7mkXiEy9>Y^gDuz=4ii1dh}~z;GclEsQgmO&}M$a2~Fij&oCu!oNA^vuaW?7+GRx-<8YFxuF)qvrL@xpgbX;%6cB6@F4i$*g&EK0*i< zIjRQ3o|`yp#DRXCBpJi|F}9>`0iC*Bdi60@`w1S7wQNCP+2oOk8|eu=fuRBxTLz5f^8TtVg~hRE6xbYUF%^+gMVx}tDipdE=}I4GSNcvGob**cC;<#{%wAV{ zw>1np?)|n0ghS(NBQsGECRiNGc*MM12>s1(Fg zLG7(@odz*;Jf}Dp4bP4Sgp94=MdI`wg8bf-@H_yf$O|BjL4z_ttpe0&B~YD5OS%Sh z$0!5e42H+5p=MOXTN%c^bZrQsrcIw}2n3_vx=V2{FToi|Dvx7G#|0aWJdU9(k&32a z-`vibqTxDfAHN{5lavh6K{acY$(qRO-aHjCBumPkRMR%QaAC5D~EX)bA2Y9KI>XhuEr zg`t4gE5c-7Z9+2Qj^%pFWh|Tfkm%c*+L!x>+O{Kq&pxhF0^y*v6qw(9{-%+?)4>1$ zcWI6lDVk%2YK|3T*WImN&0$ojNOJDajOKvq>{E064X2=6&9UazMMhqBxfpW_R1rZS zu9f8y?4%Az0HGZjEog8eT*_N&aL`?`9L)efc+sl%0l>KDO~yoHcL4@( zq>h2CPuv~~-S;Q=HPPp24~l@(85NaCMSLoDo`jG1YW(IUoWl9T18rx@fyHFKEmUco zI5GMXkMtkAKNZU-vqqAbqvC{c$yFZ=pdr@~BC$1xva|qchCm}xK4o;};eg-5`xxh077Fy=8I{;av$Cf+>=6KG?fCyX4 z=z9d!(PQ!TLWXvNlX2Vj#R>Xgk)NxM1l#S8KZJY+4Q!3hdjc8jva@QZ;#Iz9$_~@QogJ@zW`{lJ&R&Snb14BLZS&uO%ZBYH z3rG5kfJsvNM^p69??d`;!T={~DseEW%hLFj4uXnE-SLk)r;@PVMg6M_f&Jva^5WdV=E|4sRdJ&1MsdWlRl=HrQ)g(E-DI+c!Dv})U zNRC3Rl@0YrJ~55-p^dOlKR?pdrHH6V3kz0|_EuY3% zJsq8a22f3Ef~YBZE#InY3L2Yos9CnEZugeSYLP<<`viiEUm&$!AWnjg7||J+Q1%G~ zOI%JCi;0t9fIwjSg5i_Xhord%f~NqRqO{9Qk31~2*-9)HPJ(TUaJLVlqH{Z0ED$Hb z0`Z`hhBHtFP8JKqNw7dL4)jG3n6guyEEY&%^_o0g$$%{3lG0AdzlgJlR9F0mR=NAjryVd6!3wG)q@fjFM%H7$pva=D*|BZ{(CxnLt4A$+$%QN8!S+nAoUAb*h+W{;hQMi}cCX zG&c@F3Tq`pLsvVAQ&kcrl@YEuz@9T)`Hp>flMfD_)v!^=`q-sioV9oBHR%tFb0#)QBc9Rz2Lt&Y;it~9Gjjk*1N)#$IH(Re}#KdmD^vB^Gr z0$dTEVRzA7VFfp_5W_yO1~+l_+{;~NP4=qxY-83~uRqNii9`sEN-=9TyUZGMvw>JA zxLz5cr7?Uc&9*j*RB2Wd5w793Or($bYFDj#zkglsV4j(BO153Ml)=ZC!Z;aJUhU~Y z+>2XemRuMp)P(8~(h=HM9ytNPSdB!orznJtWv%2G&--k}ud;3ooT}7eHEL2fFgR;< za&?;uc+7WQ=uluTbf}mie6k#mwckgJ zrp-daag`3F_9P?->jawxTh}Ms=T6tn39v`Ycwi&e-o$RLlUZOJJ60As(?(Nf%3}k} zVl?;nH|t3$a-js&75NJ;BJjEud+NY;@~?VMi%$c~=%VM%0&57U`%&6NZ6GsoNwU+! zi2N+(7MnDg!^3dqXfozRGD`}>o#TM|sHkDwiDf<*H;J7rR%@iQQULfw<7+M^DJ@yN z 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

Sw;W&i=gkjb=_)brXYcgyG{*t3m3c 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 mYJ&olzd{y_VkV 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%0Dy@~F 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�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

JH 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

f%|$m_O%&oC6F8lkBE%0$cgj;(}pY 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ν+)G6z5An{BC>CIn9bl4E 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
jFI@D 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

ja>^I5%@O?oPj)WC%CLd$Uq*r6C_$~!_|Uy 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�pc_G2GX5h;=_b@9*^yJiv7fPcj{RPuBA( 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 z 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 + + Section_Main + + ${APPNAME} + + + + + Section_Main_Desc + + Installs ${APPNAME} and required components. + + + + + Section_Data + + Skins + 皮肤 + + + + Section_Data_Desc + + Installs skins. + 安装皮肤 + + + + Section_Shortcuts + + Shortcut icons + 快捷方式图标 + + + + Section_Shortcuts_Desc + + Adds shortcut icons. + 添加快捷方式图标 + + + + Section_StartMenu + + Start Menu icon + 开始菜单图标 + + + + Section_StartMenu_Desc + + Adds icon to start menu. + 添加图标至开始菜单 + + + + Section_Desktop + + Desktop icon + 桌面图标 + + + + Section_Desktop_Desc + + Adds icon to desktop. + 添加图标至桌面 + + + + Section_QuickLaunch + + Quick Launch icon + 快速启动栏图标 + + + + Section_QuickLaunch_Desc + + Adds icon to Quick Launch toolbar. + 添加图标至快速启动栏 + + + + Section_Plugins + + Optional plugins + + + + + Section_Plugins_Desc + + Optional plugins to extend functionality. + + + + + Section_Plugin_FeedReader + + FeedReader + RSS订阅 + + + + Section_Plugin_FeedReader_Desc + + Installs plugin FeedReader. + 安装RSS订阅插件 + + + + Section_Plugin_LinksCloud + + LinksCloud + LinksCloud + + + + Section_Plugin_LinksCloud_Desc + + Installs plugin LinksCloud. + 安装插件LinksCloud + + + + Section_Plugin_VOIP + + VOIP + 语音 + + + + Section_Plugin_VOIP_Desc + + Installs plugin VOIP. + 安装语音插件 + + + + Section_AutoStart + + Auto Startup + + + + + Section_AutoStart_Desc + + Auto-Run at startup. + + + + + Page_InstallMode + + Installation Mode + 安装模式 + + + + Page_InstallMode_Desc + + Choose how you want to install ${APPNAME}. + + + + + Page_InstallMode_Standard + + &Standard installation + + + + + Page_InstallMode_Standard_Desc + + Install ${APPNAME} for the current user of this machine. + + + + + Page_InstallMode_Portable + + &Portable installation + + + + + Page_InstallMode_Portable_Desc + + In portable mode all configuration data is stored in the application folder and no information is written to the registry. + + + + + Link_Uninstall + + Uninstall + 卸载 + + + \ No newline at end of file diff --git a/build_scripts/Windows-msys2/installer/lang/zh_CN.nsh b/build_scripts/Windows-msys2/installer/lang/zh_CN.nsh new file mode 100644 index 000000000..1075f7a1a --- /dev/null +++ b/build_scripts/Windows-msys2/installer/lang/zh_CN.nsh @@ -0,0 +1,29 @@ +!insertmacro LANG_STRING Section_Main "${APPNAME}" +!insertmacro LANG_STRING Section_Main_Desc "Installs ${APPNAME} and required components." +!insertmacro LANG_STRING Section_Data "皮肤" +!insertmacro LANG_STRING Section_Data_Desc "安装皮肤" +!insertmacro LANG_STRING Section_Shortcuts "快捷方式图标" +!insertmacro LANG_STRING Section_Shortcuts_Desc "添加快捷方式图标" +!insertmacro LANG_STRING Section_StartMenu "开始菜单图标" +!insertmacro LANG_STRING Section_StartMenu_Desc "添加图标至开始菜单" +!insertmacro LANG_STRING Section_Desktop "桌面图标" +!insertmacro LANG_STRING Section_Desktop_Desc "添加图标至桌面" +!insertmacro LANG_STRING Section_QuickLaunch "快速启动栏图标" +!insertmacro LANG_STRING Section_QuickLaunch_Desc "添加图标至快速启动栏" +!insertmacro LANG_STRING Section_Plugins "Optional plugins" +!insertmacro LANG_STRING Section_Plugins_Desc "Optional plugins to extend functionality." +!insertmacro LANG_STRING Section_Plugin_FeedReader "RSS订阅" +!insertmacro LANG_STRING Section_Plugin_FeedReader_Desc "安装RSS订阅插件" +!insertmacro LANG_STRING Section_Plugin_LinksCloud "LinksCloud" +!insertmacro LANG_STRING Section_Plugin_LinksCloud_Desc "安装插件LinksCloud" +!insertmacro LANG_STRING Section_Plugin_VOIP "语音" +!insertmacro LANG_STRING Section_Plugin_VOIP_Desc "安装语音插件" +!insertmacro LANG_STRING Section_AutoStart "Auto Startup" +!insertmacro LANG_STRING Section_AutoStart_Desc "Auto-Run at startup." +!insertmacro LANG_STRING Page_InstallMode "安装模式" +!insertmacro LANG_STRING Page_InstallMode_Desc "Choose how you want to install ${APPNAME}." +!insertmacro LANG_STRING Page_InstallMode_Standard "&Standard installation" +!insertmacro LANG_STRING Page_InstallMode_Standard_Desc "Install ${APPNAME} for the current user of this machine." +!insertmacro LANG_STRING Page_InstallMode_Portable "&Portable installation" +!insertmacro LANG_STRING Page_InstallMode_Portable_Desc "In portable mode all configuration data is stored in the application folder and no information is written to the registry." +!insertmacro LANG_STRING Link_Uninstall "卸载" diff --git a/build_scripts/Windows-msys2/installer/retroshare-Qt5.nsi b/build_scripts/Windows-msys2/installer/retroshare-Qt5.nsi new file mode 100644 index 000000000..b36f62071 --- /dev/null +++ b/build_scripts/Windows-msys2/installer/retroshare-Qt5.nsi @@ -0,0 +1,437 @@ +; Script generated with the Venis Install Wizard & modified by defnax +; Reworked by Thunder +; Adapted to msys2 and 64 bit by anmo + +!include ifexist.nsh +!include x64.nsh + +# Needed defines +;!define REVISION "" +;!define DEPLOYDIR "" +;!define ARCHITECTURE "" + +# Optional defines +;!define OUTDIR "" +;!define INSTALLERADD "" + +# Check needed defines +!ifndef DEPLOYDIR +!error "DEPLOYDIR is not defined" +!endif +!ifndef ARCHITECTURE +!error "ARCHITECTURE is not defined" +!endif + +# Check optional defines +!ifdef OUTDIR +!define OUTDIR_ "${OUTDIR}\" +!else +!define OUTDIR "" +!define OUTDIR_ "" +!endif + +!ifndef INSTALLERADD +!define INSTALLERADD "" +!endif + +# Source directory +!define SOURCEDIR "..\..\.." + +# Get version from executable +!GetDllVersion "${DEPLOYDIR}\retroshare.exe" VERSION_ +!define VERSION ${VERSION_1}.${VERSION_2}.${VERSION_3} +;!define REVISION ${VERSION_4} + +# Check version +!ifndef REVISION +!error "REVISION is not defined" +!endif + +# Date +!define /date Date "%Y%m%d" + +# Application name and version +!define APPNAME "RetroShare" +!define APPNAMEANDVERSION "${APPNAME} ${VERSION}" +!define PUBLISHER "RetroShare Team" + +# Install path +!define INSTDIR_PORTABLE "$Desktop\${APPNAME}" + +!define DATADIR_NORMAL "$APPDATA\${APPNAME}" +!define DATADIR_PORTABLE "$INSTDIR\Data" + +# Main Install settings +Name "${APPNAMEANDVERSION}" +InstallDirRegKey HKLM "Software\${APPNAME}" "" +OutFile "${OUTDIR_}RetroShare-${VERSION}-${Date}-${REVISION}-${ARCHITECTURE}${INSTALLERADD}-setup.exe" +BrandingText "${APPNAMEANDVERSION}" +RequestExecutionlevel highest +# Use compression +SetCompressor /SOLID LZMA + +# Global variables +Var PortableMode +Var InstDirNormal +Var InstDirPortable +Var DataDir +Var StyleSheetDir + +# Modern interface settings +!include Sections.nsh +!include nsDialogs.nsh +!include "MUI.nsh" + +# Interface Settings +!define MUI_ABORTWARNING +!define MUI_HEADERIMAGE +!define MUI_HEADERIMAGE_BITMAP "${SOURCEDIR}\build_scripts\Windows-msys2\installer\HeaderImage.bmp" +;!define MUI_WELCOMEFINISHPAGE_BITMAP "...bmp" + +# MUI defines +!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico" +!define MUI_FINISHPAGE_NOAUTOCLOSE +!define MUI_LICENSEPAGE_RADIOBUTTONS +!define MUI_COMPONENTSPAGE_SMALLDESC +!define MUI_FINISHPAGE_LINK "Visit the RetroShare forum for the latest news and support" +!define MUI_FINISHPAGE_LINK_LOCATION "http://retroshare.sourceforge.net/forum/" +!define MUI_FINISHPAGE_RUN "$INSTDIR\retroshare.exe" +!define MUI_FINISHPAGE_SHOWREADME $INSTDIR\changelog.txt +!define MUI_FINISHPAGE_SHOWREADME_TEXT changelog.txt +!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED +!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\orange-uninstall.ico" +!define MUI_UNFINISHPAGE_NOAUTOCLOSE +;!define MUI_LANGDLL_REGISTRY_ROOT HKLM +;!define MUI_LANGDLL_REGISTRY_KEY ${REGKEY} +;!define MUI_LANGDLL_REGISTRY_VALUENAME InstallerLanguage + +# Defines the un-/installer logo of RetroShare +!insertmacro MUI_DEFAULT MUI_WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\orange.bmp" +!insertmacro MUI_DEFAULT MUI_UNWELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\orange-uninstall.bmp" + +# Installer pages +!insertmacro MUI_PAGE_WELCOME +!insertmacro MUI_PAGE_LICENSE "$(myLicenseData)" +Page Custom PortableModePageCreate PortableModePageLeave +!define MUI_PAGE_CUSTOMFUNCTION_LEAVE dir_leave +!insertmacro MUI_PAGE_DIRECTORY +!insertmacro MUI_PAGE_COMPONENTS +!insertmacro MUI_PAGE_INSTFILES +!insertmacro MUI_PAGE_FINISH +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES + +# Set languages (first is default language) +!insertmacro MUI_RESERVEFILE_LANGDLL + +# Installer languages +!define MUI_LANGDLL_ALLLANGUAGES + +# Translations +!macro LANG_LOAD LANGUAGE LANGCODE LANGID LICENCEFILE + !insertmacro MUI_LANGUAGE "${LANGUAGE}" +; !verbose off + !define LANG "${LANGUAGE}" + !include "lang\${LANGCODE}.nsh" + LangString LANGUAGEID "${LANG_${LANG}}" "1031" + LicenseLangString myLicenseData ${LANGCODE} ${LICENCEFILE} +; !verbose on + !undef LANG +!macroend + +!macro LANG_STRING NAME VALUE + LangString "${NAME}" "${LANG_${LANG}}" "${VALUE}" +!macroend + +!insertmacro LANG_LOAD "English" "en" "1033" "${SOURCEDIR}\retroshare-gui\src\license\license.txt" +!insertmacro LANG_LOAD "French" "fr" "1036" "${SOURCEDIR}\retroshare-gui\src\license\license-FR.txt" +!insertmacro LANG_LOAD "German" "de" "1031" "${SOURCEDIR}\retroshare-gui\src\license\license-GER.txt" +!insertmacro LANG_LOAD "Turkish" "tr" "1055" "${SOURCEDIR}\retroshare-gui\src\license\license-TR.txt" +!insertmacro LANG_LOAD "SimpChinese" "zh_CN" "2052" "${SOURCEDIR}\retroshare-gui\src\license\license.txt" +!insertmacro LANG_LOAD "Polish" "pl" "1045" "${SOURCEDIR}\retroshare-gui\src\license\license.txt" +!insertmacro LANG_LOAD "Spanish" "es" "1034" "${SOURCEDIR}\retroshare-gui\src\license\license.txt" +!insertmacro LANG_LOAD "Russian" "ru" "1049" "${SOURCEDIR}\retroshare-gui\src\license\license.txt" +!insertmacro LANG_LOAD "Catalan" "ca_ES" "1027" "${SOURCEDIR}\retroshare-gui\src\license\license.txt" + +LicenseData $(myLicenseData) + +# Main binaries +Section $(Section_Main) Section_Main + ;Set Section required + SectionIn RO + + ; Set Section properties + SetOverwrite on + + ; Clears previous error logs +; Delete "$INSTDIR\*.log" + + SetOutPath "$INSTDIR" + File /r /x Data /x stylesheets /x qss /x portable "${DEPLOYDIR}\*.*" +SectionEnd + +# Plugins +${!defineifexist} PLUGIN_FEEDREADER_EXISTS "${DEPLOYDIR}\Data\extensions6\FeedReader.dll" +${!defineifexist} PLUGIN_VOIP_EXISTS "${DEPLOYDIR}\Data\extensions6\VOIP.dll" + +!ifdef PLUGIN_FEEDREADER_EXISTS +!define /ifndef PLUGIN_EXISTS +!endif +!ifdef PLUGIN_VOIP_EXISTS +!define /ifndef PLUGIN_EXISTS +!endif + +!ifdef PLUGIN_EXISTS + SectionGroup $(Section_Plugins) Section_Plugins + !ifdef PLUGIN_FEEDREADER_EXISTS + Section $(Section_Plugin_FeedReader) Section_Plugin_FeedReader + SetOutPath "$DataDir\extensions6" + File "${DEPLOYDIR}\Data\extensions6\FeedReader.dll" + SectionEnd + !endif + + !ifdef PLUGIN_VOIP_EXISTS + Section $(Section_Plugin_VOIP) Section_Plugin_VOIP + SetOutPath "$DataDir\extensions6" + File "${DEPLOYDIR}\Data\extensions6\VOIP.dll" + SectionEnd + !endif + SectionGroupEnd +!endif + +# Data (Styles) +Section $(Section_Data) Section_Data + ; Set Section properties + SetOverwrite on + + ; Chat style + SetOutPath "$StyleSheetDir\stylesheets" + File /r "${DEPLOYDIR}\stylesheets\*.*" + + ; Stylesheets + SetOutPath "$INSTDIR\qss" + File /r "${DEPLOYDIR}\qss\*.*" +SectionEnd + +;Section $(Section_Link) Section_Link + ; Delete any existing keys + + ; Write the file association +; WriteRegStr HKCR .pqi "" retroshare +; WriteRegStr HKCR retroshare "" "PQI File" +; WriteRegBin HKCR retroshare EditFlags 00000100 +; WriteRegStr HKCR "retroshare\shell" "" open +; WriteRegStr HKCR "retroshare\shell\open\command" "" `"$INSTDIR\retroshare.exe" "%1"` +;SectionEnd + +# Shortcuts +SectionGroup $(Section_Shortcuts) Section_Shortcuts +Section $(Section_StartMenu) Section_StartMenu + SetOutPath "$INSTDIR" + CreateDirectory "$SMPROGRAMS\${APPNAME}" + CreateShortCut "$SMPROGRAMS\${APPNAME}\$(Link_Uninstall).lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0 + CreateShortCut "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk" "$INSTDIR\retroshare.exe" "" "$INSTDIR\retroshare.exe" 0 +SectionEnd + +Section $(Section_Desktop) Section_Desktop + CreateShortCut "$DESKTOP\${APPNAME}.lnk" "$INSTDIR\retroshare.exe" "" "$INSTDIR\retroshare.exe" 0 +SectionEnd + +Section $(Section_QuickLaunch) Section_QuickLaunch + CreateShortCut "$QUICKLAUNCH\${APPNAME}.lnk" "$INSTDIR\retroshare.exe" "" "$INSTDIR\retroshare.exe" 0 +SectionEnd +SectionGroupEnd + +Section $(Section_AutoStart) Section_AutoStart + WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "RetroShare" "$INSTDIR\retroshare.exe -m" +SectionEnd + +;Section $(Section_AutoStart) Section_AutoStart +; CreateShortCut "$SMSTARTUP\${APPNAME}.lnk" "$INSTDIR\retroshare.exe" "" "$INSTDIR\retroshare.exe -m" 0 +;SectionEnd + +Section -FinishSection + ${If} $PortableMode = 0 + WriteRegStr HKLM "Software\${APPNAME}" "" "$INSTDIR" + WriteRegStr HKLM "Software\${APPNAME}" "Version" "${VERSION}" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME}" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${VERSION}" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$INSTDIR\retroshare.exe" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "Publisher" "${PUBLISHER}" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" "1" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" "1" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$INSTDIR\uninstall.exe" + WriteUninstaller "$INSTDIR\uninstall.exe" + ${Else} + ; Create the file the application uses to detect portable mode + FileOpen $0 "$INSTDIR\portable" w + FileClose $0 + ${EndIf} +SectionEnd + +# Descriptions +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${Section_Main} $(Section_Main_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${Section_Data} $(Section_Data_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${Section_Shortcuts} $(Section_Shortcuts_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${Section_StartMenu} $(Section_StartMenu_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${Section_Desktop} $(Section_Desktop_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${Section_QuickLaunch} $(Section_QuickLaunch_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${Section_Plugins} $(Section_Plugins_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${Section_Plugin_FeedReader} $(Section_Plugin_FeedReader_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${Section_Plugin_VOIP} $(Section_Plugin_VOIP_Desc) +; !insertmacro MUI_DESCRIPTION_TEXT ${Section_Link} $(Section_Link_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${Section_AutoStart} $(Section_AutoStart_Desc) +!insertmacro MUI_FUNCTION_DESCRIPTION_END + +# Uninstall +Section "Uninstall" + ; Remove file association registry keys +; DeleteRegKey HKCR .pqi + DeleteRegKey HKCR RetroShare + + ; Remove program/uninstall regsitry keys + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" + DeleteRegKey HKLM SOFTWARE\${APPNAME} + + DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "RetroShare" + + ; Remove shortcuts, if any + Delete "$SMPROGRAMS\${APPNAME}\*.*" + + ; Remove desktop shortcut + Delete "$DESKTOP\${APPNAME}.lnk" + + ; Remove Quicklaunch shortcut + Delete "$QUICKLAUNCH\${APPNAME}.lnk" + + ; Remove Autstart + Delete "$SMSTARTUP\${APPNAME}.lnk" + + ; Remove directories used + RMDir "$SMPROGRAMS\${APPNAME}" + RMDir /r "$INSTDIR" + + ; Don't remove the directory, otherwise + ; we lose the XPGP keys. + ; Should make this an option though... + RMDir /r "${DATADIR_NORMAL}\extensions6" + RMDir /r "${DATADIR_NORMAL}\stylesheets" +SectionEnd + +Function .onInit +; source: https://stackoverflow.com/questions/19374453/nsis-installer-define-installer-and-system-x32-x64 + ${If} ${RunningX64} + ${If} ${ARCHITECTURE} == "x64" + StrCpy $InstDirNormal "$PROGRAMFILES64\${APPNAME}" + ${Else} + StrCpy $InstDirNormal "$PROGRAMFILES32\${APPNAME}" + ${Endif} + ${Else} + ${If} ${ARCHITECTURE} == "x64" + MessageBox MB_ICONSTOP "You cannot install the 64 bit version on a 32 bit system!" + Quit + ${Else} + StrCpy $InstDirNormal "$PROGRAMFILES\${APPNAME}" + ${Endif} + ${EndIf} + + StrCpy $InstDirPortable "${INSTDIR_PORTABLE}" + + StrCpy $PortableMode 0 + StrCpy $INSTDIR "$InstDirNormal" + StrCpy $DataDir "${DATADIR_NORMAL}" + + InitPluginsDir + Push $R1 + File /oname=$PLUGINSDIR\spltmp.bmp "${SOURCEDIR}\retroshare-gui\src\gui\images\logo\logo_splash.png" + advsplash::show 1200 1000 1000 -1 $PLUGINSDIR\spltmp + Pop $R1 + Pop $R1 + !insertmacro MUI_LANGDLL_DISPLAY +FunctionEnd + +# Installation mode + +Function RequireAdmin + UserInfo::GetAccountType + Pop $8 + ${If} $8 != "admin" + MessageBox MB_ICONSTOP "You need administrator rights to install ${APPNAME}" + SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED + Abort + ${EndIf} +FunctionEnd + +Function SetModeDestinationFromInstdir + ${If} $PortableMode = 0 + StrCpy $InstDirNormal $INSTDIR + ${Else} + StrCpy $InstDirPortable $INSTDIR + ${EndIf} +FunctionEnd + +Function PortableModePageCreate + Call SetModeDestinationFromInstdir ; If the user clicks BACK on the directory page we will remember their mode specific directory + !insertmacro MUI_HEADER_TEXT $(Page_InstallMode) $(Page_InstallMode_Desc) + nsDialogs::Create 1018 + Pop $0 + ${NSD_CreateRadioButton} 5u 25u -10u 8u $(Page_InstallMode_Standard) + Pop $1 + ${NSD_CreateLabel} 18u 40u -10u 24u $(Page_InstallMode_Standard_Desc) + Pop $0 + ${NSD_CreateRadioButton} 5u 75u -10u 8u $(Page_InstallMode_Portable) + Pop $2 + ${NSD_CreateLabel} 18u 90u -10u 24u $(Page_InstallMode_Portable_Desc) + Pop $0 + ${If} $PortableMode = 0 + SendMessage $1 ${BM_SETCHECK} ${BST_CHECKED} 0 + ${Else} + SendMessage $2 ${BM_SETCHECK} ${BST_CHECKED} 0 + ${EndIf} + nsDialogs::Show +FunctionEnd + +Function PortableModePageLeave + ${NSD_GetState} $1 $0 + ${If} $0 <> ${BST_UNCHECKED} + StrCpy $PortableMode 0 + StrCpy $INSTDIR $InstDirNormal + Call RequireAdmin + ; Enable sections + SectionSetText ${Section_Shortcuts} $(Section_Shortcuts) + SectionSetText ${Section_StartMenu} $(Section_StartMenu) + SectionSetText ${Section_Desktop} $(Section_Desktop) + SectionSetText ${Section_QuickLaunch} $(Section_QuickLaunch) + SectionSetText ${Section_AutoStart} $(Section_AutoStart) + !insertmacro SelectSection ${Section_Shortcuts} + !insertmacro SelectSection ${Section_AutoStart} + !insertmacro SelectSection ${Section_StartMenu} + !insertmacro SelectSection ${Section_Desktop} + !insertmacro SelectSection ${Section_QuickLaunch} + ${Else} + StrCpy $PortableMode 1 + StrCpy $INSTDIR $InstDirPortable + ; Disable sections + !insertmacro UnselectSection ${Section_Shortcuts} + !insertmacro UnselectSection ${Section_AutoStart} + !insertmacro UnselectSection ${Section_StartMenu} + !insertmacro UnselectSection ${Section_Desktop} + !insertmacro UnselectSection ${Section_QuickLaunch} + SectionSetText ${Section_Shortcuts} "" + SectionSetText ${Section_StartMenu} "" + SectionSetText ${Section_Desktop} "" + SectionSetText ${Section_QuickLaunch} "" + SectionSetText ${Section_AutoStart} "" + ${EndIf} +FunctionEnd + +Function dir_leave + ${If} $PortableMode = 0 + StrCpy $DataDir "${DATADIR_NORMAL}" + StrCpy $StyleSheetDir $DataDir + ${Else} + StrCpy $DataDir "${DATADIR_PORTABLE}" + StrCpy $StyleSheetDir $INSTDIR + ${EndIf} +FunctionEnd From 03b4c69ae96209dd2a601973d6a268a7f0d190eb Mon Sep 17 00:00:00 2001 From: hunbernd Date: Sat, 6 Jun 2020 23:50:04 +0200 Subject: [PATCH 23/95] Small fixes: - Documenting CONFIG+= - Changed back msys2 download to an older version, the current one had bugs --- build_scripts/Windows-msys2/build/build-webui.bat | 2 -- build_scripts/Windows-msys2/build/env-base.bat | 3 ++- build_scripts/Windows-msys2/env/tools/prepare-msys2.bat | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/build_scripts/Windows-msys2/build/build-webui.bat b/build_scripts/Windows-msys2/build/build-webui.bat index d561235c1..d226a9604 100644 --- a/build_scripts/Windows-msys2/build/build-webui.bat +++ b/build_scripts/Windows-msys2/build/build-webui.bat @@ -7,8 +7,6 @@ call "%~dp0..\env.bat" if errorlevel 1 goto error_env call "%EnvPath%\env.bat" if errorlevel 1 goto error_env -call "%EnvPath%\env.bat" -if errorlevel 1 goto error_env call "%EnvPath%\env-msys2.bat" if errorlevel 1 goto error_env diff --git a/build_scripts/Windows-msys2/build/env-base.bat b/build_scripts/Windows-msys2/build/env-base.bat index aeead45a5..9d9fa5379 100644 --- a/build_scripts/Windows-msys2/build/env-base.bat +++ b/build_scripts/Windows-msys2/build/env-base.bat @@ -108,7 +108,7 @@ exit /B 0 :usage echo. -echo Usage: 32^|64 release^|debug [autologin plugins webui singlethread clang indexing noupdate] +echo Usage: 32^|64 release^|debug [autologin plugins webui singlethread clang indexing noupdate] ["CONFIG+=..."] echo. echo Mandatory parameter echo 32^|64 32-bit or 64-bit Version @@ -122,6 +122,7 @@ echo singlethread Use only 1 thread for building echo clang Use clang compiler instead of GCC echo indexing Build with deep channel and file indexing support echo noupdate Skip updating the libraries +echo "CONFIG+=..." Enable some extra features, you can find the almost complete list in retroshare.pri echo. echo Parameter for pack echo tor Pack tor version diff --git a/build_scripts/Windows-msys2/env/tools/prepare-msys2.bat b/build_scripts/Windows-msys2/env/tools/prepare-msys2.bat index f055a19c4..ddf8b00a6 100644 --- a/build_scripts/Windows-msys2/env/tools/prepare-msys2.bat +++ b/build_scripts/Windows-msys2/env/tools/prepare-msys2.bat @@ -25,7 +25,7 @@ if exist "%EnvMSYS2Path%\msys%MSYS2Base%\usr\bin\pacman.exe" ( ) ) -set MSYS2Install=msys2-base-%MSYS2Architecture%-20190524.tar.xz +set MSYS2Install=msys2-base-%MSYS2Architecture%-20180531.tar.xz set MSYS2Url=http://sourceforge.net/projects/msys2/files/Base/%MSYS2Architecture%/%MSYS2Install%/download %cecho% info "Remove previous MSYS2 version" From a2ebf0b715ec445b5c3d541d203fa86accf0be1c Mon Sep 17 00:00:00 2001 From: hunbernd Date: Sun, 7 Jun 2020 00:39:01 +0200 Subject: [PATCH 24/95] Install tor if needed --- build_scripts/Windows-msys2/build/pack.bat | 26 +++++++++---------- .../installer/retroshare-Qt5.nsi | 10 ++++++- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/build_scripts/Windows-msys2/build/pack.bat b/build_scripts/Windows-msys2/build/pack.bat index 013a48bb2..4c12ed7c0 100644 --- a/build_scripts/Windows-msys2/build/pack.bat +++ b/build_scripts/Windows-msys2/build/pack.bat @@ -20,6 +20,11 @@ if errorlevel 1 goto error_env if not "%ParamNoupdate%"=="1" ( :: Install ntldd %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-ntldd-git" + + :: Install tor + if "%ParamTor%"=="1" ( + %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-tor" + ) ) :: Remove deploy path @@ -55,14 +60,6 @@ set RsDate= for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set RsDate=%%I set RsDate=%RsDate:~0,4%%RsDate:~4,2%%RsDate:~6,2% -if "%ParamTor%"=="1" ( - :: Check for tor executable - if not exist "%EnvDownloadPath%\tor\Tor\tor.exe" ( - %cecho% error "Tor binary not found. Please download Tor Expert Bundle from\nhttps://www.torproject.org/download/download.html.en\nand unpack to\n%EnvDownloadPath:\=\\%\\tor" - goto error - ) -) - set QtMainVersion=%QtVersion:~0,1% set QtSharePath=%RsMinGWPath%\share\qt%QtMainVersion%\ @@ -124,7 +121,7 @@ if "%QtMainVersion%"=="5" ( ) if exist "%QtSharePath%\plugins\styles\qwindowsvistastyle.dll" ( - echo Copy styles + echo copy styles mkdir "%RsDeployPath%\styles" %Quite% copy "%QtSharePath%\plugins\styles\qwindowsvistastyle.dll" "%RsDeployPath%\styles" %Quite% ) @@ -132,6 +129,12 @@ if exist "%QtSharePath%\plugins\styles\qwindowsvistastyle.dll" ( copy "%QtSharePath%\plugins\imageformats\*.dll" "%RsDeployPath%\imageformats" %Quite% del /Q "%RsDeployPath%\imageformats\*d?.dll" %Quite% +if "%ParamTor%"=="1" ( + echo copy tor + copy "%RsMinGWPath%\bin\tor.exe" "%RsDeployPath%" %Quite% + copy "%RsMinGWPath%\bin\tor-gencert.exe" "%RsDeployPath%" %Quite% +) + echo copy dependencies for /R "%RsDeployPath%" %%D in (*.dll, *.exe) do ( call :copy_dependencies "%%D" "%RsDeployPath%" @@ -183,11 +186,6 @@ if "%ParamWebui%"=="1" ( ) ) -if "%ParamTor%"=="1" ( - echo copy tor - echo n | copy /-y "%EnvDownloadPath%\tor\Tor\*.*" "%RsDeployPath%" %Quite% -) - rem pack files title Pack - %SourceName%%RsType%-%RsBuildConfig% [pack files] diff --git a/build_scripts/Windows-msys2/installer/retroshare-Qt5.nsi b/build_scripts/Windows-msys2/installer/retroshare-Qt5.nsi index b36f62071..b30300634 100644 --- a/build_scripts/Windows-msys2/installer/retroshare-Qt5.nsi +++ b/build_scripts/Windows-msys2/installer/retroshare-Qt5.nsi @@ -50,6 +50,14 @@ # Date !define /date Date "%Y%m%d" +# Detect tor +${!defineifexist} TOR_EXISTS "${DEPLOYDIR}\tor.exe" +!ifdef TOR_EXISTS +!define RSTYPE "-tor" +!else +!define RSTYPE "" +!endif + # Application name and version !define APPNAME "RetroShare" !define APPNAMEANDVERSION "${APPNAME} ${VERSION}" @@ -64,7 +72,7 @@ # Main Install settings Name "${APPNAMEANDVERSION}" InstallDirRegKey HKLM "Software\${APPNAME}" "" -OutFile "${OUTDIR_}RetroShare-${VERSION}-${Date}-${REVISION}-${ARCHITECTURE}${INSTALLERADD}-setup.exe" +OutFile "${OUTDIR_}RetroShare-${VERSION}-${Date}-${REVISION}-${ARCHITECTURE}${RSTYPE}${INSTALLERADD}-setup.exe" BrandingText "${APPNAMEANDVERSION}" RequestExecutionlevel highest # Use compression From 52cb17b020209eedbc39d626e0e1127061f75cd8 Mon Sep 17 00:00:00 2001 From: hunbernd Date: Sun, 7 Jun 2020 02:21:52 +0200 Subject: [PATCH 25/95] Fix missing dependency problem --- build_scripts/Windows-msys2/build/build.bat | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build_scripts/Windows-msys2/build/build.bat b/build_scripts/Windows-msys2/build/build.bat index 0921bd65c..4d366f28c 100644 --- a/build_scripts/Windows-msys2/build/build.bat +++ b/build_scripts/Windows-msys2/build/build.bat @@ -17,10 +17,10 @@ if errorlevel 1 goto error_env if not "%ParamNoupdate%"=="1" ( :: Install needed things - %EnvMSYS2Cmd% "pacman --noconfirm --needed -S make git mingw-w64-%RsMSYS2Architecture%-toolchain mingw-w64-%RsMSYS2Architecture%-qt5 mingw-w64-%RsMSYS2Architecture%-miniupnpc mingw-w64-%RsMSYS2Architecture%-sqlcipher mingw-w64-%RsMSYS2Architecture%-cmake" + %EnvMSYS2Cmd% "pacman --noconfirm --needed -S make git mingw-w64-%RsMSYS2Architecture%-toolchain mingw-w64-%RsMSYS2Architecture%-qt5 mingw-w64-%RsMSYS2Architecture%-miniupnpc mingw-w64-%RsMSYS2Architecture%-sqlcipher mingw-w64-%RsMSYS2Architecture%-cmake mingw-w64-%RsMSYS2Architecture%-rapidjson" :: Webui - if "%ParamWebui%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-doxygen mingw-w64-%RsMSYS2Architecture%-rapidjson" + if "%ParamWebui%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-doxygen" :: Plugins if "%ParamPlugins%"=="1" %EnvMSYS2Cmd% "pacman --noconfirm --needed -S mingw-w64-%RsMSYS2Architecture%-speex mingw-w64-%RsMSYS2Architecture%-speexdsp mingw-w64-%RsMSYS2Architecture%-curl mingw-w64-%RsMSYS2Architecture%-libxslt mingw-w64-%RsMSYS2Architecture%-opencv mingw-w64-%RsMSYS2Architecture%-ffmpeg" From 71242726ceb41d76bd2de301f1ffc5e5056da118 Mon Sep 17 00:00:00 2001 From: hunbernd Date: Sun, 7 Jun 2020 02:22:12 +0200 Subject: [PATCH 26/95] Added readme.md --- build_scripts/Windows-msys2/readme.md | 83 +++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 build_scripts/Windows-msys2/readme.md diff --git a/build_scripts/Windows-msys2/readme.md b/build_scripts/Windows-msys2/readme.md new file mode 100644 index 000000000..26ea3675e --- /dev/null +++ b/build_scripts/Windows-msys2/readme.md @@ -0,0 +1,83 @@ +# Compilation on Windows + +The preferred build method on Windows is by using MSYS2 which is a collection +of packages providing unix-like tools to build native Windows software. + +This guide contains information about how to setup your build environment in an automated way by scripts. +If you prefer to setup your environment manually, check this guide: +[WindowsMSys2_InstallGuide.md](WindowsMSys2_InstallGuide.md) + +You have to clone this repository (with [git for windows](https://gitforwindows.org/)) to a local folder, then start it in a terminal. + + +## Automatic building + +Run the following script: + + \build_scripts\Windows-msys2\build.bat + +It will install all neccessary tools to build RetrosShare, and build it with the default configuration. + +After the script is finished, you can find the resulting .7z package here: + + -msys2\deploy\ + +## Advanced building + +You can specifiy extra build options if you use the scripts under: + + \build_scripts\Windows-msys2\build\ + +You have to specify the build options after each command. + +Run the scripts in this order: +1. build.bat: builds RetroShare +2. pack.bat: makes a .7z archive with all the needed files to run the program +3. build-installer: makes a self extracting installer (optional) + +### Build options + +**Always delete the build artifacts folder if you enable or disable extra features after the build command: <sourcefolder>-msys2\deploy\builds** + +* Mandatory + * 32 or 64: 32 or 64 bit version + * release or debug: normally you would like to use the release option +* Extra features (optional) + * autologin: enable autologin + * plugins: build plugins + * webui: enable remoting features and pack webui files + * indexing: build with deep channel and file indexing support + * tor: include tor in the package + * "CONFIG+=..." enable other extra compile time features, you can find the almost complete list in file *<sourcefolder>\retroshare.pri* +* For fixing compile problems (optional) + * singlethread: use only 1 thread for building, slow but useful if you don't find the error message in the console + * clang: use clang compiler instead of GCC + * noupdate: skip the msys2 update step, sometimes some msys2 packages are broken, you can manually switch back to the older package, and this option will prevent updating to the broken version again + +Example: + +```batch +build.bat 64 release autologin webui "CONFIG+=rs_use_native_dialogs" "CONFIG+=rs_gui_cmark" +pack.bat 64 release autologin webui tor +build-installer.bat 64 release autologin +``` + +## Troubleshooting +* Run the command again, sometimes it works the second time, specially if it complains about *restbed* during bulding +* Delete the build artifacts: *<sourcefolder>-msys2\deploy\builds* +* Update msys2 manually: + 1. Open the terminal: *<sourcefolder>-msys2\msys2\msys64\msys2.exe* + 2. pacman -Sy + 3. pacman -Su + 4. Close the terminal + 5. Jump to 1. until it doesn't find more updates +* Start with a clean path environment variable, run *<sourcefolder>\build_scripts\Windows-msys2\start-clean-env.bat*, you will get a terminal with cleaned path + +## Updating webui + +The sripts don't update the webui source code automatically once it is schecked out. +You have to do it manually with your favourite git client. + +You can find the webui sorce code here: + + -webui From 721fad131e02ecf738080324893bb3e48fa2cbf6 Mon Sep 17 00:00:00 2001 From: Phenom Date: Fri, 3 Jul 2020 22:14:35 +0200 Subject: [PATCH 27/95] Update OBS submodule --- build_scripts/OBS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_scripts/OBS b/build_scripts/OBS index 879d5dfe8..b0d7ae39f 160000 --- a/build_scripts/OBS +++ b/build_scripts/OBS @@ -1 +1 @@ -Subproject commit 879d5dfe8dcd8995be753120cf1b8bab4dd2ec82 +Subproject commit b0d7ae39fe9d9192848bbf7b8902d2188da895c9 From 79fce47d7505d0ca076e34e313be622638bb5f65 Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 7 Jul 2020 19:45:53 +0200 Subject: [PATCH 28/95] added service mail in identity usage statistics --- retroshare-gui/src/gui/Identity/IdDialog.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/retroshare-gui/src/gui/Identity/IdDialog.cpp b/retroshare-gui/src/gui/Identity/IdDialog.cpp index d49e558ec..39cda6920 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdDialog.cpp @@ -1862,10 +1862,11 @@ QString IdDialog::createUsageString(const RsIdentityUsage& u) const { case RsServiceType::CHANNELS: service_name = tr("Channels") ;service_type = RetroShareLink::TYPE_CHANNEL ; break ; case RsServiceType::FORUMS: service_name = tr("Forums") ; service_type = RetroShareLink::TYPE_FORUM ; break ; - case RsServiceType::POSTED: service_name = tr("Posted") ; service_type = RetroShareLink::TYPE_POSTED ; break ; + case RsServiceType::POSTED: service_name = tr("Boards") ; service_type = RetroShareLink::TYPE_POSTED ; break ; case RsServiceType::CHAT: service_name = tr("Chat") ; service_type = RetroShareLink::TYPE_CHAT_ROOM ; break ; + case RsServiceType::MAIL: service_name = tr("Mail") ; service_type = RetroShareLink::TYPE_MESSAGE ; break ; default: - service_name = tr("Unknown"); service_type = RetroShareLink::TYPE_UNKNOWN ; + service_name = tr("Unknown (service=")+QString::number((int)u.mServiceId,16)+")"; service_type = RetroShareLink::TYPE_UNKNOWN ; } switch(u.mUsageCode) @@ -1888,7 +1889,7 @@ QString IdDialog::createUsageString(const RsIdentityUsage& u) const case RsIdentityUsage::MESSAGE_AUTHOR_KEEP_ALIVE: // Identities are stamped regularly by crawlign the set of messages for all groups. That helps keepign the useful identities in hand. { RetroShareLink l = RetroShareLink::createGxsMessageLink(service_type,u.mGrpId,u.mMsgId,tr("Message/vote/comment")); - return tr("%1 in %2 tab").arg(l.toHtml()).arg(service_name) ; + return tr("%1 in %2 service").arg(l.toHtml()).arg(service_name) ; } case RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION: // Chat lobby msgs are signed, so each time one comes, or a chat lobby event comes, a signature verificaiton happens. { From 57a1c4bf5d8d1a751a4bd3e4de623603574421dc Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 7 Jul 2020 23:01:20 +0200 Subject: [PATCH 29/95] attempt to improve the info about GXS id usage --- libretroshare/src/gxs/rsgenexchange.cc | 10 +++++-- libretroshare/src/retroshare/rsidentity.h | 8 ++++++ libretroshare/src/services/p3idservice.cc | 7 ++--- retroshare-gui/src/gui/Identity/IdDialog.cpp | 30 ++++++++++++++++---- 4 files changed, 43 insertions(+), 12 deletions(-) diff --git a/libretroshare/src/gxs/rsgenexchange.cc b/libretroshare/src/gxs/rsgenexchange.cc index e3ef41eb9..7da702925 100644 --- a/libretroshare/src/gxs/rsgenexchange.cc +++ b/libretroshare/src/gxs/rsgenexchange.cc @@ -680,7 +680,7 @@ int RsGenExchange::createMsgSignatures(RsTlvKeySignatureSet& signSet, RsTlvBinar if(GxsSecurity::getSignature((char*)msgData.bin_data, msgData.bin_len, authorKey, sign)) { id_ret = SIGN_SUCCESS; - mGixs->timeStampKey(msgMeta.mAuthorId,RsIdentityUsage(mServType,RsIdentityUsage::MESSAGE_AUTHOR_SIGNATURE_CREATION,msgMeta.mGroupId,msgMeta.mMsgId)) ; + mGixs->timeStampKey(msgMeta.mAuthorId,RsIdentityUsage(RsServiceType(mServType),RsIdentityUsage::MESSAGE_AUTHOR_SIGNATURE_CREATION,msgMeta.mGroupId,msgMeta.mMsgId,msgMeta.mParentId,msgMeta.mThreadId)) ; signSet.keySignSet[INDEX_AUTHEN_IDENTITY] = sign; } else @@ -905,7 +905,11 @@ int RsGenExchange::validateMsg(RsNxsMsg *msg, const uint32_t& grpFlag, const uin { RsTlvKeySignature sign = metaData.signSet.keySignSet[INDEX_AUTHEN_IDENTITY]; idValidate &= GxsSecurity::validateNxsMsg(*msg, sign, authorKey); - mGixs->timeStampKey(metaData.mAuthorId,RsIdentityUsage(mServType,RsIdentityUsage::MESSAGE_AUTHOR_SIGNATURE_VALIDATION,metaData.mGroupId,metaData.mMsgId)) ; + mGixs->timeStampKey(metaData.mAuthorId,RsIdentityUsage(RsServiceType(mServType),RsIdentityUsage::MESSAGE_AUTHOR_SIGNATURE_VALIDATION, + metaData.mGroupId, + metaData.mMsgId, + metaData.mParentId, + metaData.mThreadId)) ; } else { @@ -949,7 +953,7 @@ int RsGenExchange::validateMsg(RsNxsMsg *msg, const uint32_t& grpFlag, const uin { std::list peers; peers.push_back(msg->PeerId()); - mGixs->requestKey(metaData.mAuthorId, peers, RsIdentityUsage(serviceType(),RsIdentityUsage::MESSAGE_AUTHOR_SIGNATURE_VALIDATION,metaData.mGroupId,metaData.mMsgId)); + mGixs->requestKey(metaData.mAuthorId, peers, RsIdentityUsage((RsServiceType)serviceType(),RsIdentityUsage::MESSAGE_AUTHOR_SIGNATURE_VALIDATION,metaData.mGroupId,metaData.mMsgId,metaData.mParentId,metaData.mThreadId)); #ifdef GEN_EXCH_DEBUG std::cerr << ", Key missing. Retry later." << std::endl; diff --git a/libretroshare/src/retroshare/rsidentity.h b/libretroshare/src/retroshare/rsidentity.h index d1345461e..ef8a24826 100644 --- a/libretroshare/src/retroshare/rsidentity.h +++ b/libretroshare/src/retroshare/rsidentity.h @@ -259,6 +259,8 @@ struct RsIdentityUsage : RsSerializable RsIdentityUsage::UsageCode code, const RsGxsGroupId& gid = RsGxsGroupId(), const RsGxsMessageId& mid = RsGxsMessageId(), + const RsGxsMessageId& pid = RsGxsMessageId(), + const RsGxsMessageId& tid = RsGxsMessageId(), uint64_t additional_id=0, const std::string& comment = std::string() ); @@ -275,6 +277,12 @@ struct RsIdentityUsage : RsSerializable /// Message ID using the identity RsGxsMessageId mMsgId; + /// Reference message ID. Useful for votes/comments + RsGxsMessageId mParentId; + + /// Reference message ID. Useful for votes/comments + RsGxsMessageId mThreadId; + /// Some additional ID. Can be used for e.g. chat lobbies. uint64_t mAdditionalId; diff --git a/libretroshare/src/services/p3idservice.cc b/libretroshare/src/services/p3idservice.cc index 3ee089a97..a475f5861 100644 --- a/libretroshare/src/services/p3idservice.cc +++ b/libretroshare/src/services/p3idservice.cc @@ -4819,11 +4819,10 @@ void RsGxsIdGroup::serial_process( RS_SERIAL_PROCESS(mReputation); } -RsIdentityUsage::RsIdentityUsage( - RsServiceType service, RsIdentityUsage::UsageCode code, - const RsGxsGroupId& gid, const RsGxsMessageId& mid, +RsIdentityUsage::RsIdentityUsage(RsServiceType service, RsIdentityUsage::UsageCode code, + const RsGxsGroupId& gid, const RsGxsMessageId& mid, const RsGxsMessageId &pid, const RsGxsMessageId &tid, uint64_t additional_id, const std::string& comment ) : - mServiceId(service), mUsageCode(code), mGrpId(gid), mMsgId(mid), + mServiceId(service), mUsageCode(code), mGrpId(gid), mMsgId(mid),mParentId(pid),mThreadId(tid), mAdditionalId(additional_id), mComment(comment) { /* This is a hack, since it will hash also mHash, but because it is diff --git a/retroshare-gui/src/gui/Identity/IdDialog.cpp b/retroshare-gui/src/gui/Identity/IdDialog.cpp index 39cda6920..769b14a94 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdDialog.cpp @@ -1864,7 +1864,12 @@ QString IdDialog::createUsageString(const RsIdentityUsage& u) const case RsServiceType::FORUMS: service_name = tr("Forums") ; service_type = RetroShareLink::TYPE_FORUM ; break ; case RsServiceType::POSTED: service_name = tr("Boards") ; service_type = RetroShareLink::TYPE_POSTED ; break ; case RsServiceType::CHAT: service_name = tr("Chat") ; service_type = RetroShareLink::TYPE_CHAT_ROOM ; break ; - case RsServiceType::MAIL: service_name = tr("Mail") ; service_type = RetroShareLink::TYPE_MESSAGE ; break ; + case RsServiceType::GXS_TRANS: service_name = tr("GxsMail"); service_type = RetroShareLink::TYPE_MESSAGE ; break ; +#ifdef TODO + // We need a RS link for circles if we want to do that. + // + case RsServiceType::GXSCIRCLE: service_name = tr("GxsCircles"); service_type = RetroShareLink::TYPE_CIRCLES; break ; +#endif default: service_name = tr("Unknown (service=")+QString::number((int)u.mServiceId,16)+")"; service_type = RetroShareLink::TYPE_UNKNOWN ; } @@ -1886,9 +1891,17 @@ QString IdDialog::createUsageString(const RsIdentityUsage& u) const return tr("Group author for group %1 in service %2").arg(QString::fromStdString(u.mGrpId.toStdString())).arg(service_name); break ; case RsIdentityUsage::MESSAGE_AUTHOR_SIGNATURE_VALIDATION: - case RsIdentityUsage::MESSAGE_AUTHOR_KEEP_ALIVE: // Identities are stamped regularly by crawlign the set of messages for all groups. That helps keepign the useful identities in hand. + case RsIdentityUsage::MESSAGE_AUTHOR_KEEP_ALIVE: // Identities are stamped regularly by crawling the set of messages for all groups. That helps keepign the useful identities in hand. { - RetroShareLink l = RetroShareLink::createGxsMessageLink(service_type,u.mGrpId,u.mMsgId,tr("Message/vote/comment")); + RetroShareLink l; + + if(service_type == RetroShareLink::TYPE_CHANNEL && !u.mThreadId.isNull()) + l = RetroShareLink::createGxsMessageLink(service_type,u.mGrpId,u.mThreadId,tr("vote/comment")); + else if(service_type == RetroShareLink::TYPE_POSTED && !u.mThreadId.isNull()) + l = RetroShareLink::createGxsMessageLink(service_type,u.mGrpId,u.mThreadId,tr("vote")); + else + l = RetroShareLink::createGxsMessageLink(service_type,u.mGrpId,u.mMsgId,tr("Message")); + return tr("%1 in %2 service").arg(l.toHtml()).arg(service_name) ; } case RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION: // Chat lobby msgs are signed, so each time one comes, or a chat lobby event comes, a signature verificaiton happens. @@ -1925,11 +1938,18 @@ QString IdDialog::createUsageString(const RsIdentityUsage& u) const } case RsIdentityUsage::IDENTITY_GENERIC_SIGNATURE_CREATION: // Any signature made by that identity { - return tr("Generic signature."); + return tr("Generic signature creation (e.g. chat room message, global router,...)."); } case RsIdentityUsage::IDENTITY_GENERIC_ENCRYPTION: return tr("Generic encryption."); case RsIdentityUsage::IDENTITY_GENERIC_DECRYPTION: return tr("Generic decryption."); - case RsIdentityUsage::CIRCLE_MEMBERSHIP_CHECK: return tr("Membership verification in circle %1.").arg(QString::fromStdString(u.mGrpId.toStdString())); + case RsIdentityUsage::CIRCLE_MEMBERSHIP_CHECK: + { + RsGxsCircleDetails det; + if(rsGxsCircles->getCircleDetails(RsGxsCircleId(u.mGrpId),det)) + return tr("Membership verification in circle \"%1\" (%2).").arg(QString::fromUtf8(det.mCircleName.c_str())).arg(QString::fromStdString(u.mGrpId.toStdString())); + else + return tr("Membership verification in circle (ID=%1).").arg(QString::fromStdString(u.mGrpId.toStdString())); + } #warning TODO! csoler 2017-01-03: Add the different strings and translations here. default: From 6d665868e8edcab754989ad6f9f188b440282ebe Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 8 Jul 2020 12:56:40 +0200 Subject: [PATCH 30/95] fixed usage info statistics in identities --- libretroshare/src/chat/distributedchat.cc | 16 +++++- .../src/gossipdiscovery/p3gossipdiscovery.cc | 2 +- libretroshare/src/grouter/p3grouter.cc | 2 +- libretroshare/src/gxs/rsgenexchange.cc | 15 +++-- libretroshare/src/gxs/rsgxsutil.cc | 10 +++- libretroshare/src/gxstunnel/p3gxstunnel.cc | 2 +- libretroshare/src/retroshare/rsidentity.h | 29 +++++----- libretroshare/src/services/p3gxscircles.cc | 2 +- libretroshare/src/services/p3idservice.cc | 55 +++---------------- retroshare-gui/src/gui/Identity/IdDialog.cpp | 22 ++++++-- 10 files changed, 75 insertions(+), 80 deletions(-) diff --git a/libretroshare/src/chat/distributedchat.cc b/libretroshare/src/chat/distributedchat.cc index 3f5ecc74e..ca24cac1e 100644 --- a/libretroshare/src/chat/distributedchat.cc +++ b/libretroshare/src/chat/distributedchat.cc @@ -219,7 +219,13 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const // network pre-request key to allow message authentication. - mGixs->requestKey(obj->signature.keyId,peer_list,RsIdentityUsage(RS_SERVICE_TYPE_CHAT,RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION,RsGxsGroupId(),RsGxsMessageId(),obj->lobby_id)); + mGixs->requestKey(obj->signature.keyId,peer_list,RsIdentityUsage(RsServiceType::CHAT, + RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION, + RsGxsGroupId(), + RsGxsMessageId(), + RsGxsMessageId(), + RsGxsMessageId(), + obj->lobby_id)); uint32_t size = RsChatSerialiser(RsSerializationFlags::SIGNATURE) .size(dynamic_cast(obj)); @@ -238,7 +244,13 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const } uint32_t error_status ; - RsIdentityUsage use_info(RS_SERVICE_TYPE_CHAT,RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION,RsGxsGroupId(),RsGxsMessageId(),obj->lobby_id) ; + RsIdentityUsage use_info(RsServiceType::CHAT, + RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION, + RsGxsGroupId(), + RsGxsMessageId(), + RsGxsMessageId(), + RsGxsMessageId(), + obj->lobby_id) ; if(!mGixs->validateData(memory,size,obj->signature,false,use_info,error_status)) { diff --git a/libretroshare/src/gossipdiscovery/p3gossipdiscovery.cc b/libretroshare/src/gossipdiscovery/p3gossipdiscovery.cc index c4f80436a..fc1c17f85 100644 --- a/libretroshare/src/gossipdiscovery/p3gossipdiscovery.cc +++ b/libretroshare/src/gossipdiscovery/p3gossipdiscovery.cc @@ -450,7 +450,7 @@ void p3discovery2::recvIdentityList(const RsPeerId& pid,const std::list std::cerr << "p3discovery2::recvIdentityList(): from peer " << pid << ": " << ids.size() << " identities" << std::endl; #endif - RsIdentityUsage use_info(RS_SERVICE_TYPE_DISC,RsIdentityUsage::IDENTITY_DATA_UPDATE); + RsIdentityUsage use_info(RsServiceType::GOSSIP_DISCOVERY,RsIdentityUsage::IDENTITY_NEW_FROM_DISCOVERY); for(auto it(ids.begin());it!=ids.end();++it) { diff --git a/libretroshare/src/grouter/p3grouter.cc b/libretroshare/src/grouter/p3grouter.cc index d34a1349f..16148d508 100644 --- a/libretroshare/src/grouter/p3grouter.cc +++ b/libretroshare/src/grouter/p3grouter.cc @@ -2108,7 +2108,7 @@ bool p3GRouter::verifySignedDataItem(const RsGRouterAbstractMsgItem *item,const if(!signature_serializer.serialise(const_cast(item),data,&data_size)) throw std::runtime_error("Cannot serialise signed data."); - RsIdentityUsage use(RS_SERVICE_TYPE_GROUTER,info); + RsIdentityUsage use(RsServiceType::GROUTER,info); if(!mGixs->validateData( data, data_size, item->signature, true, use, error_status )) { diff --git a/libretroshare/src/gxs/rsgenexchange.cc b/libretroshare/src/gxs/rsgenexchange.cc index 7da702925..bd51875c8 100644 --- a/libretroshare/src/gxs/rsgenexchange.cc +++ b/libretroshare/src/gxs/rsgenexchange.cc @@ -512,7 +512,7 @@ int RsGenExchange::createGroupSignatures(RsTlvKeySignatureSet& signSet, RsTlvBin if(GxsSecurity::getSignature((char*)grpData.bin_data, grpData.bin_len, authorKey, sign)) { id_ret = SIGN_SUCCESS; - mGixs->timeStampKey(grpMeta.mAuthorId,RsIdentityUsage(mServType,RsIdentityUsage::GROUP_AUTHOR_SIGNATURE_CREATION,grpMeta.mGroupId)) ; + mGixs->timeStampKey(grpMeta.mAuthorId,RsIdentityUsage(RsServiceType(mServType),RsIdentityUsage::GROUP_AUTHOR_SIGNATURE_CREATION,grpMeta.mGroupId)) ; signSet.keySignSet[INDEX_AUTHEN_IDENTITY] = sign; } else @@ -953,7 +953,12 @@ int RsGenExchange::validateMsg(RsNxsMsg *msg, const uint32_t& grpFlag, const uin { std::list peers; peers.push_back(msg->PeerId()); - mGixs->requestKey(metaData.mAuthorId, peers, RsIdentityUsage((RsServiceType)serviceType(),RsIdentityUsage::MESSAGE_AUTHOR_SIGNATURE_VALIDATION,metaData.mGroupId,metaData.mMsgId,metaData.mParentId,metaData.mThreadId)); + mGixs->requestKey(metaData.mAuthorId, peers, RsIdentityUsage((RsServiceType)serviceType(), + RsIdentityUsage::MESSAGE_AUTHOR_SIGNATURE_VALIDATION, + metaData.mGroupId, + metaData.mMsgId, + metaData.mParentId, + metaData.mThreadId)); #ifdef GEN_EXCH_DEBUG std::cerr << ", Key missing. Retry later." << std::endl; @@ -1030,7 +1035,7 @@ int RsGenExchange::validateGrp(RsNxsGrp* grp) #ifdef GEN_EXCH_DEBUG std::cerr << " key ID validation result: " << idValidate << std::endl; #endif - mGixs->timeStampKey(metaData.mAuthorId,RsIdentityUsage(mServType,RsIdentityUsage::GROUP_AUTHOR_SIGNATURE_VALIDATION,metaData.mGroupId)); + mGixs->timeStampKey(metaData.mAuthorId,RsIdentityUsage(RsServiceType(mServType),RsIdentityUsage::GROUP_AUTHOR_SIGNATURE_VALIDATION,metaData.mGroupId)); } else { @@ -1048,7 +1053,7 @@ int RsGenExchange::validateGrp(RsNxsGrp* grp) #endif std::list peers; peers.push_back(grp->PeerId()); - mGixs->requestKey(metaData.mAuthorId, peers,RsIdentityUsage(mServType,RsIdentityUsage::GROUP_AUTHOR_SIGNATURE_VALIDATION,metaData.mGroupId)); + mGixs->requestKey(metaData.mAuthorId, peers,RsIdentityUsage(RsServiceType(mServType),RsIdentityUsage::GROUP_AUTHOR_SIGNATURE_VALIDATION,metaData.mGroupId)); return VALIDATE_FAIL_TRY_LATER; } } @@ -3350,7 +3355,7 @@ bool RsGenExchange::updateValid(const RsGxsGrpMetaData& oldGrpMeta, const RsNxsG // also check this is the latest published group bool latest = newGrp.metaData->mPublishTs > oldGrpMeta.mPublishTs; - mGixs->timeStampKey(newGrp.metaData->mAuthorId, RsIdentityUsage(mServType,RsIdentityUsage::GROUP_ADMIN_SIGNATURE_CREATION, oldGrpMeta.mGroupId)) ; + mGixs->timeStampKey(newGrp.metaData->mAuthorId, RsIdentityUsage(RsServiceType(mServType),RsIdentityUsage::GROUP_ADMIN_SIGNATURE_CREATION, oldGrpMeta.mGroupId)) ; return GxsSecurity::validateNxsGrp(newGrp, adminSign, keyMit->second) && latest; } diff --git a/libretroshare/src/gxs/rsgxsutil.cc b/libretroshare/src/gxs/rsgxsutil.cc index 951476403..79ae187bd 100644 --- a/libretroshare/src/gxs/rsgxsutil.cc +++ b/libretroshare/src/gxs/rsgxsutil.cc @@ -215,7 +215,8 @@ bool RsGxsIntegrityCheck::check() rsReputations->overallReputationLevel( grp->metaData->mAuthorId ) > RsReputationLevel::LOCALLY_NEGATIVE ) - used_gxs_ids.insert(std::make_pair(grp->metaData->mAuthorId, RsIdentityUsage(mGenExchangeClient->serviceType(), RsIdentityUsage::GROUP_AUTHOR_KEEP_ALIVE,grp->grpId))); + used_gxs_ids.insert(std::make_pair(grp->metaData->mAuthorId, RsIdentityUsage(RsServiceType(mGenExchangeClient->serviceType()), + RsIdentityUsage::GROUP_AUTHOR_KEEP_ALIVE,grp->grpId))); } } } @@ -404,7 +405,12 @@ bool RsGxsIntegrityCheck::check() rsReputations->overallReputationLevel( msg->metaData->mAuthorId ) > RsReputationLevel::LOCALLY_NEGATIVE ) - used_gxs_ids.insert(std::make_pair(msg->metaData->mAuthorId,RsIdentityUsage(mGenExchangeClient->serviceType(),RsIdentityUsage::MESSAGE_AUTHOR_KEEP_ALIVE,msg->metaData->mGroupId,msg->metaData->mMsgId))) ; + used_gxs_ids.insert(std::make_pair(msg->metaData->mAuthorId,RsIdentityUsage(RsServiceType(mGenExchangeClient->serviceType()), + RsIdentityUsage::MESSAGE_AUTHOR_KEEP_ALIVE, + msg->metaData->mGroupId, + msg->metaData->mMsgId, + msg->metaData->mParentId, + msg->metaData->mThreadId))) ; } } diff --git a/libretroshare/src/gxstunnel/p3gxstunnel.cc b/libretroshare/src/gxstunnel/p3gxstunnel.cc index 543817ffc..2909238ea 100644 --- a/libretroshare/src/gxstunnel/p3gxstunnel.cc +++ b/libretroshare/src/gxstunnel/p3gxstunnel.cc @@ -976,7 +976,7 @@ void p3GxsTunnelService::handleRecvDHPublicKey(RsGxsTunnelDHPublicKeyItem *item) std::cerr << "(SS) Signature was verified and it doesn't check! This is a security issue!" << std::endl; return ; } - mGixs->timeStampKey(item->signature.keyId,RsIdentityUsage(RS_SERVICE_TYPE_GXS_TUNNEL,RsIdentityUsage::GXS_TUNNEL_DH_SIGNATURE_CHECK)); + mGixs->timeStampKey(item->signature.keyId,RsIdentityUsage(RsServiceType::GXS_TUNNEL,RsIdentityUsage::GXS_TUNNEL_DH_SIGNATURE_CHECK)); #ifdef DEBUG_GXS_TUNNEL std::cerr << " Signature checks! Sender's ID = " << senders_id << std::endl; diff --git a/libretroshare/src/retroshare/rsidentity.h b/libretroshare/src/retroshare/rsidentity.h index ef8a24826..7fa23697a 100644 --- a/libretroshare/src/retroshare/rsidentity.h +++ b/libretroshare/src/retroshare/rsidentity.h @@ -234,33 +234,30 @@ struct RsIdentityUsage : RsSerializable GXS_TUNNEL_DH_SIGNATURE_CHECK = 0x0c, GXS_TUNNEL_DH_SIGNATURE_CREATION = 0x0d, + /// Identity received through GXS sync + IDENTITY_NEW_FROM_GXS_SYNC = 0x0e, /// Group update on that identity data. Can be avatar, name, etc. - IDENTITY_DATA_UPDATE = 0x0e, + IDENTITY_NEW_FROM_DISCOVERY = 0x0f, + /// Explicit request to friend + IDENTITY_NEW_FROM_EXPLICIT_REQUEST = 0x10, /// Any signature verified for that identity - IDENTITY_GENERIC_SIGNATURE_CHECK = 0x0f, + IDENTITY_GENERIC_SIGNATURE_CHECK = 0x11, /// Any signature made by that identity - IDENTITY_GENERIC_SIGNATURE_CREATION = 0x10, + IDENTITY_GENERIC_SIGNATURE_CREATION = 0x12, - IDENTITY_GENERIC_ENCRYPTION = 0x11, - IDENTITY_GENERIC_DECRYPTION = 0x12, - CIRCLE_MEMBERSHIP_CHECK = 0x13 + IDENTITY_GENERIC_ENCRYPTION = 0x13, + IDENTITY_GENERIC_DECRYPTION = 0x14, + CIRCLE_MEMBERSHIP_CHECK = 0x15 } ; - RS_DEPRECATED - RsIdentityUsage( uint16_t service, const RsIdentityUsage::UsageCode& code, - const RsGxsGroupId& gid = RsGxsGroupId(), - const RsGxsMessageId& mid = RsGxsMessageId(), - uint64_t additional_id=0, - const std::string& comment = std::string() ); - RsIdentityUsage( RsServiceType service, RsIdentityUsage::UsageCode code, const RsGxsGroupId& gid = RsGxsGroupId(), - const RsGxsMessageId& mid = RsGxsMessageId(), - const RsGxsMessageId& pid = RsGxsMessageId(), - const RsGxsMessageId& tid = RsGxsMessageId(), + const RsGxsMessageId& message_id = RsGxsMessageId(), + const RsGxsMessageId& parent_id = RsGxsMessageId(), + const RsGxsMessageId& thread_id = RsGxsMessageId(), uint64_t additional_id=0, const std::string& comment = std::string() ); diff --git a/libretroshare/src/services/p3gxscircles.cc b/libretroshare/src/services/p3gxscircles.cc index 58da554a1..e0d210f0f 100644 --- a/libretroshare/src/services/p3gxscircles.cc +++ b/libretroshare/src/services/p3gxscircles.cc @@ -1468,7 +1468,7 @@ bool p3GxsCircles::locked_processLoadingCacheEntry(RsGxsCircleCache& cache) rsPeers->getOnlineList(peers) ; } - mIdentities->requestKey(pit->first, peers,RsIdentityUsage(serviceType(),RsIdentityUsage::CIRCLE_MEMBERSHIP_CHECK,RsGxsGroupId(cache.mCircleId))); + mIdentities->requestKey(pit->first, peers,RsIdentityUsage(RsServiceType::GXSCIRCLE,RsIdentityUsage::CIRCLE_MEMBERSHIP_CHECK,RsGxsGroupId(cache.mCircleId))); all_ids_here = false; } diff --git a/libretroshare/src/services/p3idservice.cc b/libretroshare/src/services/p3idservice.cc index a475f5861..0f23883b8 100644 --- a/libretroshare/src/services/p3idservice.cc +++ b/libretroshare/src/services/p3idservice.cc @@ -641,7 +641,7 @@ void p3IdService::notifyChanges(std::vector &changes) rsEvents->postEvent(ev); // also time_stamp the key that this group represents - timeStampKey(RsGxsId(gid),RsIdentityUsage(serviceType(),RsIdentityUsage::IDENTITY_DATA_UPDATE)) ; + timeStampKey(RsGxsId(gid),RsIdentityUsage(RsServiceType(serviceType()),RsIdentityUsage::IDENTITY_NEW_FROM_GXS_SYNC)) ; should_subscribe = true; } break; @@ -654,7 +654,7 @@ void p3IdService::notifyChanges(std::vector &changes) rsEvents->postEvent(ev); // also time_stamp the key that this group represents - timeStampKey(RsGxsId(gid),RsIdentityUsage(serviceType(),RsIdentityUsage::IDENTITY_DATA_UPDATE)) ; + timeStampKey(RsGxsId(gid),RsIdentityUsage(RsServiceType(serviceType()),RsIdentityUsage::IDENTITY_NEW_FROM_GXS_SYNC)) ; should_subscribe = true; } break; @@ -1214,8 +1214,7 @@ bool p3IdService::requestIdentity( return false; } - RsIdentityUsage usageInfo( RsServiceType::GXSID, - RsIdentityUsage::IDENTITY_DATA_UPDATE ); + RsIdentityUsage usageInfo( RsServiceType::GXSID, RsIdentityUsage::IDENTITY_NEW_FROM_EXPLICIT_REQUEST ); return requestKey(id, askPeersList, usageInfo); } @@ -1360,7 +1359,7 @@ bool p3IdService::signData(const uint8_t *data,uint32_t data_size,const RsGxsId& return false ; } error_status = RS_GIXS_ERROR_NO_ERROR ; - timeStampKey(own_gxs_id,RsIdentityUsage(serviceType(),RsIdentityUsage::IDENTITY_GENERIC_SIGNATURE_CREATION)) ; + timeStampKey(own_gxs_id,RsIdentityUsage(RsServiceType(serviceType()),RsIdentityUsage::IDENTITY_GENERIC_SIGNATURE_CREATION)) ; return true ; } @@ -1433,7 +1432,7 @@ bool p3IdService::encryptData( const uint8_t *decrypted_data, return false ; } error_status = RS_GIXS_ERROR_NO_ERROR ; - timeStampKey(encryption_key_id,RsIdentityUsage(serviceType(),RsIdentityUsage::IDENTITY_GENERIC_ENCRYPTION)) ; + timeStampKey(encryption_key_id,RsIdentityUsage(RsServiceType::GXSID,RsIdentityUsage::IDENTITY_GENERIC_ENCRYPTION)) ; return true ; } @@ -1522,7 +1521,7 @@ bool p3IdService::encryptData( const uint8_t* decrypted_data, { timeStampKey( *it, RsIdentityUsage( - serviceType(), + RsServiceType::GXSID, RsIdentityUsage::IDENTITY_GENERIC_ENCRYPTION ) ); } @@ -1563,7 +1562,7 @@ bool p3IdService::decryptData( const uint8_t *encrypted_data, error_status = RS_GIXS_ERROR_NO_ERROR; timeStampKey( key_id, RsIdentityUsage( - serviceType(), + RsServiceType::GXSID, RsIdentityUsage::IDENTITY_GENERIC_DECRYPTION) ); return true ; @@ -1656,7 +1655,7 @@ bool p3IdService::decryptData( const uint8_t* encrypted_data, { timeStampKey( *it, RsIdentityUsage( - serviceType(), + RsServiceType::GXSID, RsIdentityUsage::IDENTITY_GENERIC_DECRYPTION ) ); } @@ -3223,7 +3222,7 @@ bool p3IdService::cachetest_handlerequest(uint32_t token) if (!haveKey(*vit)) { std::list nullpeers; - requestKey(*vit, nullpeers,RsIdentityUsage(serviceType(),RsIdentityUsage::UNKNOWN_USAGE)); + requestKey(*vit, nullpeers,RsIdentityUsage(RsServiceType::GXSID,RsIdentityUsage::UNKNOWN_USAGE)); #ifdef DEBUG_IDS std::cerr << "p3IdService::cachetest_request() Requested Key Id: " << *vit; @@ -4840,42 +4839,6 @@ RsIdentityUsage::RsIdentityUsage(RsServiceType service, RsIdentityUsage::UsageCo mHash = hs.hash(); } -RsIdentityUsage::RsIdentityUsage( - uint16_t service, const RsIdentityUsage::UsageCode& code, - const RsGxsGroupId& gid, const RsGxsMessageId& mid, - uint64_t additional_id,const std::string& comment ) : - mServiceId(static_cast(service)), mUsageCode(code), - mGrpId(gid), mMsgId(mid), mAdditionalId(additional_id), mComment(comment) -{ -#ifdef DEBUG_IDS - std::cerr << "New identity usage: " << std::endl; - std::cerr << " service=" << std::hex << service << std::endl; - std::cerr << " code =" << std::hex << code << std::endl; - std::cerr << " grpId =" << std::hex << gid << std::endl; - std::cerr << " msgId =" << std::hex << mid << std::endl; - std::cerr << " add id =" << std::hex << additional_id << std::endl; - std::cerr << " commnt =\"" << std::hex << comment << "\"" << std::endl; -#endif - - /* This is a hack, since it will hash also mHash, but because it is - * initialized to 0, and only computed in the constructor here, it should - * be ok. */ - librs::crypto::HashStream hs(librs::crypto::HashStream::SHA1) ; - - hs << (uint32_t)service ; // G10h4ck: Why uint32 if it's 16 bits? - hs << (uint8_t)code ; - hs << gid ; - hs << mid ; - hs << (uint64_t)additional_id ; - hs << comment ; - - mHash = hs.hash(); - -#ifdef DEBUG_IDS - std::cerr << " hash =\"" << std::hex << mHash << "\"" << std::endl; -#endif -} - RsIdentityUsage::RsIdentityUsage() : mServiceId(RsServiceType::NONE), mUsageCode(UNKNOWN_USAGE), mAdditionalId(0) {} diff --git a/retroshare-gui/src/gui/Identity/IdDialog.cpp b/retroshare-gui/src/gui/Identity/IdDialog.cpp index 769b14a94..d87f1d6e7 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdDialog.cpp @@ -1864,7 +1864,8 @@ QString IdDialog::createUsageString(const RsIdentityUsage& u) const case RsServiceType::FORUMS: service_name = tr("Forums") ; service_type = RetroShareLink::TYPE_FORUM ; break ; case RsServiceType::POSTED: service_name = tr("Boards") ; service_type = RetroShareLink::TYPE_POSTED ; break ; case RsServiceType::CHAT: service_name = tr("Chat") ; service_type = RetroShareLink::TYPE_CHAT_ROOM ; break ; - case RsServiceType::GXS_TRANS: service_name = tr("GxsMail"); service_type = RetroShareLink::TYPE_MESSAGE ; break ; + + case RsServiceType::GXS_TRANS: return tr("GxsMail author "); #ifdef TODO // We need a RS link for circles if we want to do that. // @@ -1895,10 +1896,17 @@ QString IdDialog::createUsageString(const RsIdentityUsage& u) const { RetroShareLink l; + std::cerr << "Signature validation/keep alive signature:" << std::endl; + std::cerr << " service ID = " << std::hex << (uint16_t)u.mServiceId << std::dec << std::endl; + std::cerr << " u.mGrpId = " << u.mGrpId << std::endl; + std::cerr << " u.mMsgId = " << u.mMsgId << std::endl; + std::cerr << " u.mParentId = " << u.mParentId << std::endl; + std::cerr << " u.mThreadId = " << u.mThreadId << std::endl; + if(service_type == RetroShareLink::TYPE_CHANNEL && !u.mThreadId.isNull()) - l = RetroShareLink::createGxsMessageLink(service_type,u.mGrpId,u.mThreadId,tr("vote/comment")); + l = RetroShareLink::createGxsMessageLink(service_type,u.mGrpId,u.mThreadId,tr("Vote/comment")); else if(service_type == RetroShareLink::TYPE_POSTED && !u.mThreadId.isNull()) - l = RetroShareLink::createGxsMessageLink(service_type,u.mGrpId,u.mThreadId,tr("vote")); + l = RetroShareLink::createGxsMessageLink(service_type,u.mGrpId,u.mThreadId,tr("Vote")); else l = RetroShareLink::createGxsMessageLink(service_type,u.mGrpId,u.mMsgId,tr("Message")); @@ -1928,9 +1936,13 @@ QString IdDialog::createUsageString(const RsIdentityUsage& u) const { return tr("Signature in distant tunnel system."); } - case RsIdentityUsage::IDENTITY_DATA_UPDATE: // Group update on that identity data. Can be avatar, name, etc. + case RsIdentityUsage::IDENTITY_NEW_FROM_GXS_SYNC: // Group update on that identity data. Can be avatar, name, etc. { - return tr("Update of identity data."); + return tr("Received from GXS sync."); + } + case RsIdentityUsage::IDENTITY_NEW_FROM_DISCOVERY: // Own friend sended his own ids + { + return tr("Friend node identity received through discovery."); } case RsIdentityUsage::IDENTITY_GENERIC_SIGNATURE_CHECK: // Any signature verified for that identity { From bac8e0be70e062ab385ea3d56475758a408e5fc0 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 8 Jul 2020 23:35:44 +0200 Subject: [PATCH 31/95] added widget for displaying info about identities. Not ready yet --- .../src/gui/statistics/Histogram.cpp | 51 +++++++++++++++++++ retroshare-gui/src/gui/statistics/Histogram.h | 43 ++++++++++++++++ .../src/gui/statistics/StatisticsWindow.cpp | 7 ++- .../src/gui/statistics/StatisticsWindow.h | 2 + retroshare-gui/src/retroshare-gui.pro | 5 ++ 5 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 retroshare-gui/src/gui/statistics/Histogram.cpp create mode 100644 retroshare-gui/src/gui/statistics/Histogram.h diff --git a/retroshare-gui/src/gui/statistics/Histogram.cpp b/retroshare-gui/src/gui/statistics/Histogram.cpp new file mode 100644 index 000000000..6c03e7aaa --- /dev/null +++ b/retroshare-gui/src/gui/statistics/Histogram.cpp @@ -0,0 +1,51 @@ +/******************************************************************************* + * gui/statistics/Histogram.cpp * + * * + * Copyright (c) 2020 Retroshare Team * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#include + +#include "Histogram.h" + +Histogram::Histogram(double start, double end, int bins) + : mStart(start),mEnd(end),mBins(bins,0) +{ + if(mEnd <= mStart) + std::cerr << "Null histogram created! Please check your parameters" << std::endl; +} + +void Histogram::draw(QPainter *painter) const +{ +} + +void Histogram::insert(double val) +{ + long int bin = (uint32_t)floor((val - mStart)/(mEnd - mStart) * mBins.size()); + + if(bin >= 0 && bin < mBins.size()) + ++mBins[bin]; +} + +std::ostream& operator<<(std::ostream& o,const Histogram& h) +{ + o << "Histogram: [" << h.mStart << "..." << h.mEnd << "] " << h.mBins.size() << " bins." << std::endl; + for(uint32_t i=0;i * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#include +#include + +class QPainter; + +class Histogram +{ + public: + Histogram(double start, double end, int bins); + + void draw(QPainter *painter) const ; + + void insert(double val); + + private: + double mStart; + double mEnd; + + std::vector mBins; + + friend std::ostream& operator<<(std::ostream& o,const Histogram& h); +}; + diff --git a/retroshare-gui/src/gui/statistics/StatisticsWindow.cpp b/retroshare-gui/src/gui/statistics/StatisticsWindow.cpp index bbda5101a..50c947822 100644 --- a/retroshare-gui/src/gui/statistics/StatisticsWindow.cpp +++ b/retroshare-gui/src/gui/statistics/StatisticsWindow.cpp @@ -37,6 +37,7 @@ #include #include +#include #include #include #include @@ -52,6 +53,7 @@ #define IMAGE_DHT ":/icons/DHT128.png" #define IMAGE_TURTLE ":/icons/turtle128.png" +#define IMAGE_IDENTITIES ":/icons/avatar_128.png" #define IMAGE_BWGRAPH ":/icons/bandwidth128.png" #define IMAGE_GLOBALROUTER ":/icons/GRouter128.png" #define IMAGE_GXSTRANSPORT ":/icons/transport128.png" @@ -143,6 +145,9 @@ void StatisticsWindow::initStackedPage() ui->stackPages->add(trsdlg = new TurtleRouterStatistics(ui->stackPages), action = createPageAction(QIcon(IMAGE_TURTLE), tr("Turtle Router"), grp)); + ui->stackPages->add(gxsiddlg = new GxsIdStatistics(ui->stackPages), + action = createPageAction(QIcon(IMAGE_IDENTITIES), tr("Identities"), grp)); + ui->stackPages->add(grsdlg = new GlobalRouterStatistics(ui->stackPages), action = createPageAction(QIcon(IMAGE_GLOBALROUTER), tr("Global Router"), grp)); @@ -150,7 +155,7 @@ void StatisticsWindow::initStackedPage() action = createPageAction(QIcon(IMAGE_GXSTRANSPORT), tr("Gxs Transport"), grp)); ui->stackPages->add(rttdlg = new RttStatistics(ui->stackPages), - action = createPageAction(QIcon(IMAGE_RTT), tr("RTT Statistics"), grp)); + action = createPageAction(QIcon(IMAGE_RTT), tr("RTT Statistics"), grp)); bool showdht = true; RsPeerDetails detail; diff --git a/retroshare-gui/src/gui/statistics/StatisticsWindow.h b/retroshare-gui/src/gui/statistics/StatisticsWindow.h index db2d75939..2450812d7 100644 --- a/retroshare-gui/src/gui/statistics/StatisticsWindow.h +++ b/retroshare-gui/src/gui/statistics/StatisticsWindow.h @@ -38,6 +38,7 @@ class TurtleRouterStatistics; class GlobalRouterStatistics; class GxsTransportStatistics; class RttStatistics; +class GxsIdStatistics; class StatisticsWindow : public QMainWindow { Q_OBJECT @@ -57,6 +58,7 @@ public: BwCtrlWindow *bwdlg; TurtleRouterStatistics *trsdlg; RttStatistics *rttdlg; + GxsIdStatistics *gxsiddlg; public slots: diff --git a/retroshare-gui/src/retroshare-gui.pro b/retroshare-gui/src/retroshare-gui.pro index bf76f36a2..b60edbce6 100644 --- a/retroshare-gui/src/retroshare-gui.pro +++ b/retroshare-gui/src/retroshare-gui.pro @@ -437,7 +437,9 @@ HEADERS += rshare.h \ gui/FileTransfer/BannedFilesDialog.h \ gui/statistics/TurtleRouterDialog.h \ gui/statistics/TurtleRouterStatistics.h \ + gui/statistics/GxsIdStatistics.h \ gui/statistics/dhtgraph.h \ + gui/statistics/Histogram.h \ gui/statistics/BandwidthGraphWindow.h \ gui/statistics/turtlegraph.h \ gui/statistics/BandwidthStatsWidget.h \ @@ -755,6 +757,7 @@ FORMS += gui/StartDialog.ui \ gui/statistics/DhtWindow.ui \ gui/statistics/TurtleRouterDialog.ui \ gui/statistics/TurtleRouterStatistics.ui \ + gui/statistics/GxsIdStatistics.ui \ gui/statistics/GlobalRouterStatistics.ui \ gui/statistics/GxsTransportStatistics.ui \ gui/statistics/StatisticsWindow.ui \ @@ -995,8 +998,10 @@ SOURCES += main.cpp \ gui/statistics/BandwidthGraphWindow.cpp \ gui/statistics/BandwidthStatsWidget.cpp \ gui/statistics/DhtWindow.cpp \ + gui/statistics/Histogram.cpp \ gui/statistics/TurtleRouterDialog.cpp \ gui/statistics/TurtleRouterStatistics.cpp \ + gui/statistics/GxsIdStatistics.cpp \ gui/statistics/GlobalRouterStatistics.cpp \ gui/statistics/GxsTransportStatistics.cpp \ gui/statistics/StatisticsWindow.cpp \ From fcf8c5734555a12f96262ffbb88d7e47c8a6d349 Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 9 Jul 2020 22:03:09 +0200 Subject: [PATCH 32/95] started display widget for GxsId statistics --- .../src/gui/statistics/GxsIdStatistics.cpp | 433 ++++++++++++++++++ .../src/gui/statistics/GxsIdStatistics.h | 85 ++++ .../src/gui/statistics/GxsIdStatistics.ui | 49 ++ 3 files changed, 567 insertions(+) create mode 100644 retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp create mode 100644 retroshare-gui/src/gui/statistics/GxsIdStatistics.h create mode 100644 retroshare-gui/src/gui/statistics/GxsIdStatistics.ui diff --git a/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp b/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp new file mode 100644 index 000000000..173b82506 --- /dev/null +++ b/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp @@ -0,0 +1,433 @@ +/******************************************************************************* + * gui/statistics/GlobalRouterStatistics.cpp * + * * + * Copyright (c) 2011 Retroshare Team * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include "GxsIdStatistics.h" + +#include "util/DateTime.h" +#include "util/QtVersion.h" +#include "util/misc.h" + +static QColor colorScale(float f) +{ + if(f == 0) + return QColor::fromHsv(0,0,192) ; + else + return QColor::fromHsv((int)((1.0-f)*280),200,255) ; +} + +GxsIdStatistics::GxsIdStatistics(QWidget *parent) + : RsAutoUpdatePage(4000,parent) +{ + setupUi(this) ; + + _stats_F->setWidget(_tst_CW = new GxsIdStatisticsWidget); + m_bProcessSettings = false; + + // load settings + processSettings(true); +} + +GxsIdStatistics::~GxsIdStatistics() +{ + // save settings + processSettings(false); +} + +void GxsIdStatistics::processSettings(bool bLoad) +{ + m_bProcessSettings = true; + + Settings->beginGroup(QString("GlobalRouterStatistics")); + + if (bLoad) { + // load settings + + // state of splitter + //splitter->restoreState(Settings->value("Splitter").toByteArray()); + } else { + // save settings + + // state of splitter + //Settings->setValue("Splitter", splitter->saveState()); + + } + + Settings->endGroup(); + + m_bProcessSettings = false; +} + +void GxsIdStatistics::updateDisplay() +{ + _tst_CW->updateContent() ; +} + +static QString getUsageStatisticsName(RsIdentityUsage::UsageCode code) +{ + switch(code) + { + default: + case RsIdentityUsage::UNKNOWN_USAGE : return QObject::tr("Unknown"); + case RsIdentityUsage::GROUP_ADMIN_SIGNATURE_CREATION : return QObject::tr("Group admin signature creation"); + case RsIdentityUsage::GROUP_ADMIN_SIGNATURE_VALIDATION : return QObject::tr("Group admin signature validation"); + case RsIdentityUsage::GROUP_AUTHOR_SIGNATURE_CREATION : return QObject::tr("Group author signature creation"); + case RsIdentityUsage::GROUP_AUTHOR_SIGNATURE_VALIDATION : return QObject::tr("Group author signature validation"); + case RsIdentityUsage::MESSAGE_AUTHOR_SIGNATURE_CREATION : return QObject::tr("Message author signature creation"); + case RsIdentityUsage::MESSAGE_AUTHOR_SIGNATURE_VALIDATION : return QObject::tr("Message author signature validation"); + case RsIdentityUsage::GROUP_AUTHOR_KEEP_ALIVE : return QObject::tr("Routine group author signature check."); + case RsIdentityUsage::MESSAGE_AUTHOR_KEEP_ALIVE : return QObject::tr("Routine message author signature check"); + case RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION : return QObject::tr("Chat room signature validation"); + case RsIdentityUsage::GLOBAL_ROUTER_SIGNATURE_CHECK : return QObject::tr("Global router message validation"); + case RsIdentityUsage::GLOBAL_ROUTER_SIGNATURE_CREATION : return QObject::tr("Global router message creation"); + case RsIdentityUsage::GXS_TUNNEL_DH_SIGNATURE_CHECK : return QObject::tr("DH Key exchange validation for GXS tunnel"); + case RsIdentityUsage::GXS_TUNNEL_DH_SIGNATURE_CREATION : return QObject::tr("DH Key exchange creation for GXS tunnel"); + case RsIdentityUsage::IDENTITY_NEW_FROM_GXS_SYNC : return QObject::tr("New identity from GXS sync"); + case RsIdentityUsage::IDENTITY_NEW_FROM_DISCOVERY : return QObject::tr("New friend identity from discovery"); + case RsIdentityUsage::IDENTITY_NEW_FROM_EXPLICIT_REQUEST : return QObject::tr("New identity requested from friend node"); + case RsIdentityUsage::IDENTITY_GENERIC_SIGNATURE_CHECK : return QObject::tr("Generic signature validation"); + case RsIdentityUsage::IDENTITY_GENERIC_SIGNATURE_CREATION : return QObject::tr("Generic signature creation"); + case RsIdentityUsage::IDENTITY_GENERIC_ENCRYPTION : return QObject::tr("Generic data decryption"); + case RsIdentityUsage::IDENTITY_GENERIC_DECRYPTION : return QObject::tr("Generic data encryption"); + case RsIdentityUsage::CIRCLE_MEMBERSHIP_CHECK : return QObject::tr("Circle membership checking"); + } +} + +void GxsIdStatisticsWidget::updateContent() +{ + // get the info, stats, histograms and pass them + + std::list ids; + rsIdentity->getIdentitiesSummaries(ids) ; + + time_t now = time(NULL); + + Histogram publish_date_hist(now - 5*365*86400,now,20); + Histogram last_used_hist(now - 15*86400,now,20); + uint32_t total_identities = 0; + std::map usage_map; + + for(auto& meta:ids) + { + RsIdentityDetails det; + + if(!rsIdentity->getIdDetails(RsGxsId(meta.mGroupId),det)) + continue; + + publish_date_hist.insert((double)meta.mPublishTs); + last_used_hist.insert((double)det.mLastUsageTS); + + for(auto it:det.mUseCases) + { + auto it2 = usage_map.find(it.first.mUsageCode); + if(it2 == usage_map.end()) + usage_map[it.first.mUsageCode] = 0 ; + + ++usage_map[it.first.mUsageCode]; + } + + ++total_identities; + } + + std::cerr << "Identities statistics:" << std::endl; + + std::cerr << " Usage map:" << std::endl; + for(auto it:usage_map) + std::cerr << std::hex << (int)it.first << " : " << std::dec << it.second << std::endl; + + std::cerr << " Total identities: " << total_identities << std::endl; + std::cerr << " Last used hist: " << std::endl; + std::cerr << last_used_hist << std::endl; + std::cerr << " Publish date hist: " << std::endl; + std::cerr << publish_date_hist << std::endl; + + // Now draw the info int the widget's pixmap + + float size = QFontMetricsF(font()).height() ; + float fact = size/14.0 ; + + QPixmap tmppixmap(mMaxWidth, mMaxHeight); + tmppixmap.fill(Qt::transparent); + setFixedHeight(mMaxHeight); + + QPainter painter(&tmppixmap); + painter.initFrom(this); + painter.setPen(QColor::fromRgb(0,0,0)) ; + + QFont times_f(font());//"Times") ; + QFont monospace_f("Monospace") ; + monospace_f.setStyleHint(QFont::TypeWriter) ; + monospace_f.setPointSize(font().pointSize()) ; + + QFontMetricsF fm_monospace(monospace_f) ; + QFontMetricsF fm_times(times_f) ; + + int cellx = fm_monospace.width(QString(" ")) ; + int celly = fm_monospace.height() ; + + // Display general statistics + + int ox=5*fact,oy=15*fact ; + + painter.setFont(times_f) ; + painter.drawText(ox,oy,tr("Total identities: ")+QString::number(total_identities)) ; oy += celly*2 ; + + painter.setFont(times_f) ; + painter.drawText(ox,oy,tr("Usage types: ")) ; oy += 2*celly ; + + for(auto it:usage_map) + { + painter.drawText(ox+2*cellx,oy, getUsageStatisticsName(it.first) + ": " + QString::number(it.second)) ; + oy += celly ; + } + oy += celly ; + + // Display per-service statistics + + painter.setFont(times_f) ; + painter.drawText(ox,oy,tr("Usage per service: ")) ; oy += celly; + painter.drawText(ox+2*cellx,oy,tr("[TODO]")) ; oy += celly*2 ; + + // Draw the creation time histogram + + painter.setFont(times_f) ; + painter.drawText(ox,oy,tr("Creation times: ")) ; oy += celly ; + painter.drawText(ox+2*cellx,oy,tr("[TODO]")) ; oy += celly*2 ; + + // Last used histogram + + painter.setFont(times_f) ; + painter.drawText(ox,oy,tr("Last usage: ")) ; oy += celly ; + painter.drawText(ox+2*cellx,oy,tr("[TODO]")) ; oy += celly*2 ; + + // set the pixmap + + pixmap = tmppixmap; + mMaxHeight = oy; +} + + +GxsIdStatisticsWidget::GxsIdStatisticsWidget(QWidget *parent) + : QWidget(parent) +{ + float size = QFontMetricsF(font()).height() ; + float fact = size/14.0 ; + + mMaxWidth = 400*fact ; + mMaxHeight = 0 ; + //mCurrentN = PARTIAL_VIEW_SIZE/2+1 ; +} + +#ifdef TODO +void GxsIdStatisticsWidget::updateContent() +{ + // 1 - get info + + // 2 - draw histograms + + float size = QFontMetricsF(font()).height() ; + float fact = size/14.0 ; + + // What do we need to draw? + // + // Routing matrix + // Key [][][][][][][][][][] + // + // -> each [] shows a square (one per friend node) that is the routing probabilities for all connected friends + // computed using the "computeRoutingProbabilitites()" method. + // + // Own key ids + // key service id description + // + // Data items + // Msg id Local origin Destination Time Status + // + QPixmap tmppixmap(maxWidth, maxHeight); + tmppixmap.fill(Qt::transparent); + setFixedHeight(maxHeight); + + QPainter painter(&tmppixmap); + painter.initFrom(this); + painter.setPen(QColor::fromRgb(0,0,0)) ; + + QFont times_f(font());//"Times") ; + QFont monospace_f("Monospace") ; + monospace_f.setStyleHint(QFont::TypeWriter) ; + monospace_f.setPointSize(font().pointSize()) ; + + QFontMetricsF fm_monospace(monospace_f) ; + QFontMetricsF fm_times(times_f) ; + + static const int cellx = fm_monospace.width(QString(" ")) ; + static const int celly = fm_monospace.height() ; + + maxHeight = 500*fact ; + + // std::cerr << "Drawing into pixmap of size " << maxWidth << "x" << maxHeight << std::endl; + // draw... + int ox=5*fact,oy=5*fact ; + + + painter.setFont(times_f) ; + painter.drawText(ox,oy+celly,tr("Managed keys")+":" + QString::number(matrix_info.published_keys.size())) ; oy += celly*2 ; + + painter.setFont(monospace_f) ; + for(std::map::const_iterator it(matrix_info.published_keys.begin());it!=matrix_info.published_keys.end();++it) + { + QString packet_string ; + packet_string += QString::fromStdString(it->second.authentication_key.toStdString()) ; + packet_string += tr(" : Service ID =")+" "+QString::number(it->second.service_id,16) ; + packet_string += " \""+QString::fromUtf8(it->second.description_string.c_str()) + "\"" ; + + painter.drawText(ox+2*cellx,oy+celly,packet_string ) ; oy += celly ; + } + oy += celly ; + + + std::map > tos ; + + // Now draw the matrix + + QString prob_string ; + painter.setFont(times_f) ; + QString Q = tr("Routing matrix (") ; + + painter.drawText(ox+0*cellx,oy+fm_times.height(),Q) ; + + // draw scale + + for(int i=0;i<100*fact;++i) + { + painter.setPen(colorScale(i/100.0/fact)) ; + painter.drawLine(ox+fm_times.width(Q)+i,oy+fm_times.height()*0.5,ox+fm_times.width(Q)+i,oy+fm_times.height()) ; + } + painter.setPen(QColor::fromRgb(0,0,0)) ; + + painter.drawText(ox+fm_times.width(Q) + 102*fact,oy+celly,")") ; + + oy += celly ; + oy += celly ; + + //static const int MaxKeySize = 20*fact ; + painter.setFont(monospace_f) ; + + int n=0; + QString ids; + std::vector current_probs ; + int current_oy = 0 ; + + mMinWheelZoneX = ox+2*cellx ; + mMinWheelZoneY = oy ; + + RsGxsId current_id ; + float current_width=0 ; + + for(std::map >::const_iterator it(matrix_info.per_friend_probabilities.begin());it!=matrix_info.per_friend_probabilities.end();++it,++n) + if(n >= mCurrentN-PARTIAL_VIEW_SIZE/2 && n <= mCurrentN+PARTIAL_VIEW_SIZE/2) + { + ids = QString::fromStdString(it->first.toStdString())+" : " ; + painter.drawText(ox+2*cellx,oy+celly,ids) ; + + for(uint32_t i=0;isecond[i])) ; + + if(n == mCurrentN) + { + current_probs = it->second ; + current_oy = oy ; + current_id = it->first ; + current_width = ox+matrix_info.friend_ids.size()*cellx+fm_monospace.width(ids); + } + + oy += celly ; + } + mMaxWheelZoneX = ox+matrix_info.friend_ids.size()*cellx + fm_monospace.width(ids); + + RsIdentityDetails iddetails ; + if(rsIdentity->getIdDetails(current_id,iddetails)) + painter.drawText(current_width+cellx, current_oy+celly, QString::fromUtf8(iddetails.mNickname.c_str())) ; + else + painter.drawText(current_width+cellx, current_oy+celly, tr("[Unknown identity]")) ; + + mMaxWheelZoneY = oy+celly ; + + painter.setPen(QColor::fromRgb(0,0,0)) ; + + painter.setPen(QColor::fromRgb(127,127,127)); + painter.drawRect(ox+2*cellx,current_oy+0.15*celly,fm_monospace.width(ids)+cellx*matrix_info.friend_ids.size()- 2*cellx,celly) ; + + float total_length = (matrix_info.friend_ids.size()+2)*cellx ; + + if(!current_probs.empty()) + for(uint32_t i=0;igetPeerDetails(matrix_info.friend_ids[i], peer_ssl_details); + + painter.drawLine(x1,y1,x1,y2); + painter.drawLine(x1,y2,x1 + total_length - i*cellx,y2) ; + painter.drawText(cellx+ x1 + total_length - i*cellx,y2+(0.35)*celly, QString::fromUtf8(peer_ssl_details.name.c_str()) + " - " + QString::fromUtf8(peer_ssl_details.location.c_str()) + " ("+QString::number(current_probs[i])+")"); + } + oy += celly * (2+matrix_info.friend_ids.size()); + + oy += celly ; + oy += celly ; + + // update the pixmap + // + pixmap = tmppixmap; + maxHeight = oy ; +} +#endif + +void GxsIdStatisticsWidget::paintEvent(QPaintEvent */*event*/) +{ + QStylePainter(this).drawPixmap(0, 0, pixmap); +} + +void GxsIdStatisticsWidget::resizeEvent(QResizeEvent *event) +{ + QRect rect = geometry(); + + mMaxWidth = rect.width(); + mMaxHeight = rect.height() ; + + QWidget::resizeEvent(event); + updateContent(); +} diff --git a/retroshare-gui/src/gui/statistics/GxsIdStatistics.h b/retroshare-gui/src/gui/statistics/GxsIdStatistics.h new file mode 100644 index 000000000..5263bb9e9 --- /dev/null +++ b/retroshare-gui/src/gui/statistics/GxsIdStatistics.h @@ -0,0 +1,85 @@ +/******************************************************************************* + * gui/statistics/GxsIdStatistics.h * + * * + * Copyright (c) 2011 Retroshare Team * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ + +#pragma once + +#include +#include +#include + +#include "RsAutoUpdatePage.h" +#include "Histogram.h" +#include "ui_GxsIdStatistics.h" + +// In this statistics panel we show: +// +// - histograms +// * age histogram of GXS ids (creation time) +// * last usage histogram +// * number of IDs used in each service as reported by UsageStatistics +// +// (note: we could use that histogram class for packets statistics, so we made a separate class) +// +// And general statistics: +// +// - total number of IDs +// - total number of signed IDs +// - total number of own IDs +// +class GxsIdStatisticsWidget ; + +class GxsIdStatistics: public RsAutoUpdatePage, public Ui::GxsIdStatistics +{ + Q_OBJECT + + public: + GxsIdStatistics(QWidget *parent = NULL) ; + ~GxsIdStatistics(); + + void updateContent() ; + + private: + + void processSettings(bool bLoad); + bool m_bProcessSettings; + + virtual void updateDisplay() ; + + GxsIdStatisticsWidget *_tst_CW ; +} ; + +class GxsIdStatisticsWidget: public QWidget +{ + Q_OBJECT + + public: + GxsIdStatisticsWidget(QWidget *parent = NULL) ; + + virtual void paintEvent(QPaintEvent *event) ; + virtual void resizeEvent(QResizeEvent *event); + + void updateContent() ; + private: + static QString speedString(float f) ; + + QPixmap pixmap ; + int mMaxWidth,mMaxHeight ; +}; + diff --git a/retroshare-gui/src/gui/statistics/GxsIdStatistics.ui b/retroshare-gui/src/gui/statistics/GxsIdStatistics.ui new file mode 100644 index 000000000..0c42ab780 --- /dev/null +++ b/retroshare-gui/src/gui/statistics/GxsIdStatistics.ui @@ -0,0 +1,49 @@ + + + GxsIdStatistics + + + + 0 + 0 + 1468 + 659 + + + + Router Statistics + + + + + + Qt::Vertical + + + + QFrame::NoFrame + + + Qt::ScrollBarAlwaysOff + + + true + + + + + 0 + 0 + 1450 + 641 + + + + + + + + + + + From a1c901e22ac285020746eabfcf48d85a41dbbd21 Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 10 Jul 2020 22:39:17 +0200 Subject: [PATCH 33/95] added per-service stats --- .../src/gui/statistics/GxsIdStatistics.cpp | 58 ++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp b/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp index 173b82506..ab83a869c 100644 --- a/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp +++ b/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp @@ -33,6 +33,7 @@ #include #include +#include #include "GxsIdStatistics.h" @@ -95,6 +96,47 @@ void GxsIdStatistics::updateDisplay() _tst_CW->updateContent() ; } +static QString getServiceName(uint32_t s) +{ + switch(s) + { + default: + case 0x0011 /* GOSSIP_DISCOVERY */ : return QObject::tr("Discovery"); + case 0x0012 /* CHAT */ : return QObject::tr("Chat"); + case 0x0013 /* MSG */ : return QObject::tr("Messages"); + case 0x0014 /* TURTLE */ : return QObject::tr("Turtle"); + case 0x0016 /* HEARTBEAT */ : return QObject::tr("Heartbeat"); + case 0x0017 /* FILE_TRANSFER */ : return QObject::tr("File transfer"); + case 0x0018 /* GROUTER */ : return QObject::tr("Global router"); + case 0x0019 /* FILE_DATABASE */ : return QObject::tr("File database"); + case 0x0020 /* SERVICEINFO */ : return QObject::tr("Service info"); + case 0x0021 /* BANDWIDTH_CONTROL */ : return QObject::tr("Bandwidth control"); + case 0x0022 /* MAIL */ : return QObject::tr("Mail"); + case 0x0023 /* DIRECT_MAIL */ : return QObject::tr("Mail"); + case 0x0024 /* DISTANT_MAIL */ : return QObject::tr("Distant mail"); + case 0x0026 /* SERVICE_CONTROL */ : return QObject::tr("Service control"); + case 0x0027 /* DISTANT_CHAT */ : return QObject::tr("Distant chat"); + case 0x0028 /* GXS_TUNNEL */ : return QObject::tr("GXS Tunnel"); + case 0x0101 /* BANLIST */ : return QObject::tr("Ban list"); + case 0x0102 /* STATUS */ : return QObject::tr("Status"); + case 0x0200 /* NXS */ : return QObject::tr("NXS"); + case 0x0211 /* GXSID */ : return QObject::tr("Identities"); + case 0x0212 /* PHOTO */ : return QObject::tr("GXS Photo"); + case 0x0213 /* WIKI */ : return QObject::tr("GXS Wiki"); + case 0x0214 /* WIRE */ : return QObject::tr("GXS TheWire"); + case 0x0215 /* FORUMS */ : return QObject::tr("Forums"); + case 0x0216 /* POSTED */ : return QObject::tr("Boards"); + case 0x0217 /* CHANNELS */ : return QObject::tr("Channels"); + case 0x0218 /* GXSCIRCLE */ : return QObject::tr("Circles"); + /// entiti not gxs, but used with :dentities. + case 0x0219 /* REPUTATION */ : return QObject::tr("Reputation"); + case 0x0220 /* GXS_RECOGN */ : return QObject::tr("Recogn"); + case 0x0230 /* GXS_TRANS */ : return QObject::tr("GXS Transport"); + case 0x0240 /* JSONAPI */ : return QObject::tr("JSon API"); + + } +} + static QString getUsageStatisticsName(RsIdentityUsage::UsageCode code) { switch(code) @@ -138,6 +180,7 @@ void GxsIdStatisticsWidget::updateContent() Histogram last_used_hist(now - 15*86400,now,20); uint32_t total_identities = 0; std::map usage_map; + std::map per_service_usage_map; for(auto& meta:ids) { @@ -156,6 +199,13 @@ void GxsIdStatisticsWidget::updateContent() usage_map[it.first.mUsageCode] = 0 ; ++usage_map[it.first.mUsageCode]; + + uint32_t s = static_cast(it.first.mServiceId); + auto it3 = per_service_usage_map.find(s); + if(it3 == per_service_usage_map.end()) + per_service_usage_map[s] = 0; + + ++per_service_usage_map[s]; } ++total_identities; @@ -218,7 +268,13 @@ void GxsIdStatisticsWidget::updateContent() painter.setFont(times_f) ; painter.drawText(ox,oy,tr("Usage per service: ")) ; oy += celly; - painter.drawText(ox+2*cellx,oy,tr("[TODO]")) ; oy += celly*2 ; + + for(auto it:per_service_usage_map) + { + painter.drawText(ox+2*cellx,oy, getServiceName(it.first) + ": " + QString::number(it.second)) ; + oy += celly ; + } + oy += celly ; // Draw the creation time histogram From de6b986c0112703c0d0d61c6b9b33fdbc4edb32f Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 11 Jul 2020 16:16:06 +0200 Subject: [PATCH 34/95] added histograms --- .../src/gui/statistics/GxsIdStatistics.cpp | 89 ++++++++++++++++--- retroshare-gui/src/gui/statistics/Histogram.h | 3 +- 2 files changed, 81 insertions(+), 11 deletions(-) diff --git a/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp b/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp index ab83a869c..ba1ec0811 100644 --- a/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp +++ b/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp @@ -18,14 +18,16 @@ * * *******************************************************************************/ -#include +#include +#include + #include + +#include #include #include #include #include -#include - #include #include #include @@ -175,9 +177,11 @@ void GxsIdStatisticsWidget::updateContent() rsIdentity->getIdentitiesSummaries(ids) ; time_t now = time(NULL); + uint32_t nb_weeks = 52; + uint32_t nb_hours = 52; - Histogram publish_date_hist(now - 5*365*86400,now,20); - Histogram last_used_hist(now - 15*86400,now,20); + Histogram publish_date_hist(now - nb_weeks*7*86400,now,nb_weeks); + Histogram last_used_hist(now - 3600*nb_hours,now,nb_hours); uint32_t total_identities = 0; std::map usage_map; std::map per_service_usage_map; @@ -267,7 +271,7 @@ void GxsIdStatisticsWidget::updateContent() // Display per-service statistics painter.setFont(times_f) ; - painter.drawText(ox,oy,tr("Usage per service: ")) ; oy += celly; + painter.drawText(ox,oy,tr("Usage per service: ")) ; oy += 2*celly; for(auto it:per_service_usage_map) { @@ -279,14 +283,79 @@ void GxsIdStatisticsWidget::updateContent() // Draw the creation time histogram painter.setFont(times_f) ; - painter.drawText(ox,oy,tr("Creation times: ")) ; oy += celly ; - painter.drawText(ox+2*cellx,oy,tr("[TODO]")) ; oy += celly*2 ; + painter.drawText(ox,oy,tr("Identity age (in weeks):")) ; oy += celly ; + + uint32_t hist_height = 10; + oy += hist_height*celly; + + painter.drawLine(QPoint(ox+4*cellx,oy),QPoint(ox+4*cellx+cellx*nb_weeks*2,oy)); + painter.drawLine(QPoint(ox+4*cellx,oy),QPoint(ox+4*cellx,oy-celly*hist_height)); + + uint32_t max_entry=0; + for(int i=0;i& entries() const { return mBins; } + private: double mStart; double mEnd; From 6ea6e7f89ede31637432f09fd32c9ee98a4c6993 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 11 Jul 2020 20:54:58 +0200 Subject: [PATCH 35/95] added count for per usage and per service uses --- .../src/gui/statistics/GxsIdStatistics.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp b/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp index ba1ec0811..5659179a3 100644 --- a/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp +++ b/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp @@ -215,6 +215,7 @@ void GxsIdStatisticsWidget::updateContent() ++total_identities; } +#ifdef DEBUG_GXSID_STATISTICS std::cerr << "Identities statistics:" << std::endl; std::cerr << " Usage map:" << std::endl; @@ -226,6 +227,7 @@ void GxsIdStatisticsWidget::updateContent() std::cerr << last_used_hist << std::endl; std::cerr << " Publish date hist: " << std::endl; std::cerr << publish_date_hist << std::endl; +#endif // Now draw the info int the widget's pixmap @@ -258,8 +260,12 @@ void GxsIdStatisticsWidget::updateContent() painter.setFont(times_f) ; painter.drawText(ox,oy,tr("Total identities: ")+QString::number(total_identities)) ; oy += celly*2 ; + uint32_t total_per_type = 0; + for(auto it:usage_map) + total_per_type += it.second; + painter.setFont(times_f) ; - painter.drawText(ox,oy,tr("Usage types: ")) ; oy += 2*celly ; + painter.drawText(ox,oy,tr("Usage types") + "(" + QString::number(total_per_type) + " identities actually used): ") ; oy += 2*celly; for(auto it:usage_map) { @@ -270,8 +276,12 @@ void GxsIdStatisticsWidget::updateContent() // Display per-service statistics + uint32_t total_per_service = 0; + for(auto it:per_service_usage_map) + total_per_service += it.second; + painter.setFont(times_f) ; - painter.drawText(ox,oy,tr("Usage per service: ")) ; oy += 2*celly; + painter.drawText(ox,oy,tr("Usage per service") + "(" + QString::number(total_per_service) + " identities actually used): ") ; oy += 2*celly; for(auto it:per_service_usage_map) { From 4af3f3742a05879a2932329093d9d9dc27b2f76d Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 11 Jul 2020 21:35:33 +0200 Subject: [PATCH 36/95] fixed text --- retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp b/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp index 5659179a3..bab6c2e9a 100644 --- a/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp +++ b/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp @@ -265,7 +265,7 @@ void GxsIdStatisticsWidget::updateContent() total_per_type += it.second; painter.setFont(times_f) ; - painter.drawText(ox,oy,tr("Usage types") + "(" + QString::number(total_per_type) + " identities actually used): ") ; oy += 2*celly; + painter.drawText(ox,oy,tr("Usage types") + "(" + QString::number(total_per_type) + " hits): ") ; oy += 2*celly; for(auto it:usage_map) { @@ -281,7 +281,7 @@ void GxsIdStatisticsWidget::updateContent() total_per_service += it.second; painter.setFont(times_f) ; - painter.drawText(ox,oy,tr("Usage per service") + "(" + QString::number(total_per_service) + " identities actually used): ") ; oy += 2*celly; + painter.drawText(ox,oy,tr("Usage per service") + "(" + QString::number(total_per_service) + " hits): ") ; oy += 2*celly; for(auto it:per_service_usage_map) { From 7d12a7a0858d9d9ba7064cbb013c179730b35a74 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 11 Jul 2020 22:26:24 +0200 Subject: [PATCH 37/95] switched to async loading of ids statistics --- .../src/gui/statistics/GxsIdStatistics.cpp | 168 ++++++++++-------- .../src/gui/statistics/GxsIdStatistics.h | 9 + .../src/gui/statistics/Histogram.cpp | 4 + retroshare-gui/src/gui/statistics/Histogram.h | 1 + 4 files changed, 108 insertions(+), 74 deletions(-) diff --git a/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp b/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp index bab6c2e9a..a09053deb 100644 --- a/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp +++ b/retroshare-gui/src/gui/statistics/GxsIdStatistics.cpp @@ -42,6 +42,7 @@ #include "util/DateTime.h" #include "util/QtVersion.h" #include "util/misc.h" +#include "util/qtthreadsutils.h" static QColor colorScale(float f) { @@ -96,6 +97,15 @@ void GxsIdStatistics::processSettings(bool bLoad) void GxsIdStatistics::updateDisplay() { _tst_CW->updateContent() ; + + static rstime_t last_data_update_time = 0; + rstime_t now = time(NULL); + + if(now > last_data_update_time + 60) + { + last_data_update_time = now; + _tst_CW->updateData(); + } } static QString getServiceName(uint32_t s) @@ -169,66 +179,73 @@ static QString getUsageStatisticsName(RsIdentityUsage::UsageCode code) } } -void GxsIdStatisticsWidget::updateContent() +void GxsIdStatisticsWidget::updateData() { - // get the info, stats, histograms and pass them + // get the info, stats, histograms and pass them - std::list ids; - rsIdentity->getIdentitiesSummaries(ids) ; + RsThread::async([this]() + { + // 1 - get group data - time_t now = time(NULL); - uint32_t nb_weeks = 52; - uint32_t nb_hours = 52; - - Histogram publish_date_hist(now - nb_weeks*7*86400,now,nb_weeks); - Histogram last_used_hist(now - 3600*nb_hours,now,nb_hours); - uint32_t total_identities = 0; - std::map usage_map; - std::map per_service_usage_map; - - for(auto& meta:ids) - { - RsIdentityDetails det; - - if(!rsIdentity->getIdDetails(RsGxsId(meta.mGroupId),det)) - continue; - - publish_date_hist.insert((double)meta.mPublishTs); - last_used_hist.insert((double)det.mLastUsageTS); - - for(auto it:det.mUseCases) - { - auto it2 = usage_map.find(it.first.mUsageCode); - if(it2 == usage_map.end()) - usage_map[it.first.mUsageCode] = 0 ; - - ++usage_map[it.first.mUsageCode]; - - uint32_t s = static_cast(it.first.mServiceId); - auto it3 = per_service_usage_map.find(s); - if(it3 == per_service_usage_map.end()) - per_service_usage_map[s] = 0; - - ++per_service_usage_map[s]; - } - - ++total_identities; - } - -#ifdef DEBUG_GXSID_STATISTICS - std::cerr << "Identities statistics:" << std::endl; - - std::cerr << " Usage map:" << std::endl; - for(auto it:usage_map) - std::cerr << std::hex << (int)it.first << " : " << std::dec << it.second << std::endl; - - std::cerr << " Total identities: " << total_identities << std::endl; - std::cerr << " Last used hist: " << std::endl; - std::cerr << last_used_hist << std::endl; - std::cerr << " Publish date hist: " << std::endl; - std::cerr << publish_date_hist << std::endl; +#ifdef DEBUG_FORUMS + std::cerr << "Retrieving post data for post " << mThreadId << std::endl; #endif + auto pids = new std::list() ; + rsIdentity->getIdentitiesSummaries(*pids) ; + + RsQThreadUtils::postToObject( [pids,this]() + { + /* Here it goes any code you want to be executed on the Qt Gui + * thread, for example to update the data model with new information + * after a blocking call to RetroShare API complete */ + + const auto& ids(*pids); + + time_t now = time(NULL); + mPublishDateHist = Histogram(now - mNbWeeks*7*86400,now,mNbWeeks); + mLastUsedHist = Histogram(now - 3600*mNbHours,now,mNbHours); + mTotalIdentities = 0; + mUsageMap.clear(); + mPerServiceUsageMap.clear(); + + for(auto& meta:ids) + { + RsIdentityDetails det; + + if(!rsIdentity->getIdDetails(RsGxsId(meta.mGroupId),det)) + continue; + + mPublishDateHist.insert((double)meta.mPublishTs); + mLastUsedHist.insert((double)det.mLastUsageTS); + + for(auto it:det.mUseCases) + { + auto it2 = mUsageMap.find(it.first.mUsageCode); + if(it2 == mUsageMap.end()) + mUsageMap[it.first.mUsageCode] = 0 ; + + ++mUsageMap[it.first.mUsageCode]; + + uint32_t s = static_cast(it.first.mServiceId); + auto it3 = mPerServiceUsageMap.find(s); + if(it3 == mPerServiceUsageMap.end()) + mPerServiceUsageMap[s] = 0; + + ++mPerServiceUsageMap[s]; + } + + ++mTotalIdentities; + } + + delete pids; + + }, this ); + }); +} + +void GxsIdStatisticsWidget::updateContent() +{ // Now draw the info int the widget's pixmap float size = QFontMetricsF(font()).height() ; @@ -258,16 +275,16 @@ void GxsIdStatisticsWidget::updateContent() int ox=5*fact,oy=15*fact ; painter.setFont(times_f) ; - painter.drawText(ox,oy,tr("Total identities: ")+QString::number(total_identities)) ; oy += celly*2 ; + painter.drawText(ox,oy,tr("Total identities: ")+QString::number(mTotalIdentities)) ; oy += celly*2 ; uint32_t total_per_type = 0; - for(auto it:usage_map) + for(auto it:mUsageMap) total_per_type += it.second; painter.setFont(times_f) ; painter.drawText(ox,oy,tr("Usage types") + "(" + QString::number(total_per_type) + " hits): ") ; oy += 2*celly; - for(auto it:usage_map) + for(auto it:mUsageMap) { painter.drawText(ox+2*cellx,oy, getUsageStatisticsName(it.first) + ": " + QString::number(it.second)) ; oy += celly ; @@ -277,13 +294,13 @@ void GxsIdStatisticsWidget::updateContent() // Display per-service statistics uint32_t total_per_service = 0; - for(auto it:per_service_usage_map) + for(auto it:mPerServiceUsageMap) total_per_service += it.second; painter.setFont(times_f) ; painter.drawText(ox,oy,tr("Usage per service") + "(" + QString::number(total_per_service) + " hits): ") ; oy += 2*celly; - for(auto it:per_service_usage_map) + for(auto it:mPerServiceUsageMap) { painter.drawText(ox+2*cellx,oy, getServiceName(it.first) + ": " + QString::number(it.second)) ; oy += celly ; @@ -298,23 +315,23 @@ void GxsIdStatisticsWidget::updateContent() uint32_t hist_height = 10; oy += hist_height*celly; - painter.drawLine(QPoint(ox+4*cellx,oy),QPoint(ox+4*cellx+cellx*nb_weeks*2,oy)); + painter.drawLine(QPoint(ox+4*cellx,oy),QPoint(ox+4*cellx+cellx*mNbWeeks*2,oy)); painter.drawLine(QPoint(ox+4*cellx,oy),QPoint(ox+4*cellx,oy-celly*hist_height)); uint32_t max_entry=0; - for(int i=0;i mUsageMap; + std::map mPerServiceUsageMap; }; diff --git a/retroshare-gui/src/gui/statistics/Histogram.cpp b/retroshare-gui/src/gui/statistics/Histogram.cpp index 6c03e7aaa..6cd1c4906 100644 --- a/retroshare-gui/src/gui/statistics/Histogram.cpp +++ b/retroshare-gui/src/gui/statistics/Histogram.cpp @@ -22,6 +22,10 @@ #include "Histogram.h" +Histogram::Histogram() + : mStart(0),mEnd(1.0),mBins(10,0) +{} + Histogram::Histogram(double start, double end, int bins) : mStart(start),mEnd(end),mBins(bins,0) { diff --git a/retroshare-gui/src/gui/statistics/Histogram.h b/retroshare-gui/src/gui/statistics/Histogram.h index 56eeddf65..ca71d3b82 100644 --- a/retroshare-gui/src/gui/statistics/Histogram.h +++ b/retroshare-gui/src/gui/statistics/Histogram.h @@ -26,6 +26,7 @@ class QPainter; class Histogram { public: + Histogram(); Histogram(double start, double end, int bins); void draw(QPainter *painter) const ; From 94918dc1a3150dd5e12c50472a7ee418eef2d2cb Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 15 Jul 2020 21:22:02 +0200 Subject: [PATCH 38/95] fixed error in parsing identity service string. --- libretroshare/src/services/p3idservice.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libretroshare/src/services/p3idservice.cc b/libretroshare/src/services/p3idservice.cc index 0f23883b8..85be9c077 100644 --- a/libretroshare/src/services/p3idservice.cc +++ b/libretroshare/src/services/p3idservice.cc @@ -49,6 +49,7 @@ * #define DEBUG_OPINION 1 * #define GXSID_GEN_DUMMY_DATA 1 ****/ +#define DEBUG_IDS 1 #define ID_REQUEST_LIST 0x0001 #define ID_REQUEST_IDENTITY 0x0002 @@ -616,11 +617,11 @@ void p3IdService::notifyChanges(std::vector &changes) std::cerr << "p3IdService::notifyChanges() Found Group Change Notification"; std::cerr << std::endl; #endif + const RsGxsGroupId& gid(groupChange->mGroupId); #ifdef DEBUG_IDS - std::cerr << "p3IdService::notifyChanges() Auto Subscribe to Incoming Groups: " << *git; + std::cerr << "p3IdService::notifyChanges() Auto Subscribe to Incoming Groups: " << gid; std::cerr << std::endl; #endif - const RsGxsGroupId& gid(groupChange->mGroupId); if(!rsReputations->isIdentityBanned(RsGxsId(gid))) { @@ -2291,7 +2292,7 @@ bool SSGxsIdGroup::load(const std::string &input) char scorestr[RSGXSID_MAX_SERVICE_STRING]; // split into parts. - if (3 != sscanf(input.c_str(), "v2 {P:%[^}]} {T:%[^}]} {R:%[^}]}", pgpstr, recognstr, scorestr)) + if (3 != sscanf(input.c_str(), "v2 {P:%[^}]}{T:%[^}]}{R:%[^}]}", pgpstr, recognstr, scorestr)) { #ifdef DEBUG_IDS std::cerr << "SSGxsIdGroup::load() Failed to extract 4 Parts"; From b3ab99bd4946199c83b4aaa7a0d16225329f28ef Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 15 Jul 2020 22:07:31 +0200 Subject: [PATCH 39/95] added last minute check to avoid re-requesting IDs that have been loaded in cache after they where foundmissing --- libretroshare/src/services/p3idservice.cc | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/libretroshare/src/services/p3idservice.cc b/libretroshare/src/services/p3idservice.cc index 85be9c077..c15002a33 100644 --- a/libretroshare/src/services/p3idservice.cc +++ b/libretroshare/src/services/p3idservice.cc @@ -657,6 +657,8 @@ void p3IdService::notifyChanges(std::vector &changes) // also time_stamp the key that this group represents timeStampKey(RsGxsId(gid),RsIdentityUsage(RsServiceType(serviceType()),RsIdentityUsage::IDENTITY_NEW_FROM_GXS_SYNC)) ; should_subscribe = true; + + std::cerr << "Received new identity " << gid << " and subscribing to it" << std::endl; } break; @@ -2954,9 +2956,19 @@ void p3IdService::requestIdsFromNet() for(cit = mIdsNotPresent.begin(); cit != mIdsNotPresent.end();) { #ifdef DEBUG_IDS - Dbg2() << __PRETTY_FUNCTION__ << " Processing missing key RsGxsId: " - << cit->first << std::endl; + Dbg2() << __PRETTY_FUNCTION__ << " Processing missing key RsGxsId: " << cit->first << std::endl; #endif + RsGxsIdCache data; + + if(!mKeyCache.fetch(cit->first,data)) + { + std::cerr << __PRETTY_FUNCTION__ << ". Dropping request for ID " << cit->first << " at last minute, because it was found in cache"<< std::endl; + auto tmp(cit); + ++tmp; + mIdsNotPresent.erase(cit); + cit = tmp; + continue; + } const RsGxsId& gxsId = cit->first; const std::list& peers = cit->second; @@ -3011,8 +3023,7 @@ void p3IdService::requestIdsFromNet() { const RsPeerId& peer = cit2->first; std::list grpIds; - for( std::list::const_iterator gxs_id_it = cit2->second.begin(); - gxs_id_it != cit2->second.end(); ++gxs_id_it ) + for( std::list::const_iterator gxs_id_it = cit2->second.begin(); gxs_id_it != cit2->second.end(); ++gxs_id_it ) { #ifdef DEBUG_IDS Dbg2() << __PRETTY_FUNCTION__ << " passing RsGxsId: " << *gxs_id_it From c01d797386bfff2a31f03a5a9a9539aea49bcfee Mon Sep 17 00:00:00 2001 From: Gioacchino Mazzurco Date: Wed, 15 Jul 2020 23:04:43 +0200 Subject: [PATCH 40/95] Add API method to retrieve forum child posts RsGxsDataAccess::getMsgRelatedInfo print errors also when not debugging RsGxsForums::getChildPosts get child posts from parent id p3gxsforums.cc remove a bit of deadcode --- libretroshare/src/gxs/rsgxsdataaccess.cc | 94 ++++++++------------- libretroshare/src/retroshare/rsgxsforums.h | 17 +++- libretroshare/src/services/p3gxsforums.cc | 98 ++++++++++++---------- libretroshare/src/services/p3gxsforums.h | 8 +- 4 files changed, 113 insertions(+), 104 deletions(-) diff --git a/libretroshare/src/gxs/rsgxsdataaccess.cc b/libretroshare/src/gxs/rsgxsdataaccess.cc index a695672f9..5c3b21ce9 100644 --- a/libretroshare/src/gxs/rsgxsdataaccess.cc +++ b/libretroshare/src/gxs/rsgxsdataaccess.cc @@ -1240,61 +1240,42 @@ bool RsGxsDataAccess::getMsgRelatedInfo(MsgRelatedInfoReq *req) onlyThreadMsgs = true; } - if (onlyAllVersions && onlyChildMsgs) - { -#ifdef DATA_DEBUG - RsDbg() << "RsGxsDataAccess::getMsgRelatedList() ERROR Incompatible FLAGS (VERSIONS & PARENT)" << std::endl; -#endif + if(onlyAllVersions && onlyChildMsgs) + { + RS_ERR("Incompatible FLAGS (VERSIONS & PARENT)"); + return false; + } - return false; - } + if(onlyAllVersions && onlyThreadMsgs) + { + RS_ERR("Incompatible FLAGS (VERSIONS & THREAD)"); + return false; + } - if (onlyAllVersions && onlyThreadMsgs) - { -#ifdef DATA_DEBUG - RsDbg() << "RsGxsDataAccess::getMsgRelatedList() ERROR Incompatible FLAGS (VERSIONS & THREAD)" << std::endl; -#endif + if((!onlyLatestMsgs) && onlyChildMsgs) + { + RS_ERR("Incompatible FLAGS (!LATEST & PARENT)"); + return false; + } - return false; - } + if((!onlyLatestMsgs) && onlyThreadMsgs) + { + RS_ERR("Incompatible FLAGS (!LATEST & THREAD)"); + return false; + } - if ((!onlyLatestMsgs) && onlyChildMsgs) - { -#ifdef DATA_DEBUG - RsDbg() << "RsGxsDataAccess::getMsgRelatedList() ERROR Incompatible FLAGS (!LATEST & PARENT)" << std::endl; -#endif + if(onlyChildMsgs && onlyThreadMsgs) + { + RS_ERR("Incompatible FLAGS (PARENT & THREAD)"); + return false; + } - return false; - } - - if ((!onlyLatestMsgs) && onlyThreadMsgs) - { -#ifdef DATA_DEBUG - RsDbg() << "RsGxsDataAccess::getMsgRelatedList() ERROR Incompatible FLAGS (!LATEST & THREAD)" << std::endl; -#endif - - return false; - } - - if (onlyChildMsgs && onlyThreadMsgs) - { -#ifdef DATA_DEBUG - RsDbg() << "RsGxsDataAccess::getMsgRelatedList() ERROR Incompatible FLAGS (PARENT & THREAD)" << std::endl; -#endif - - return false; - } - - - /* FALL BACK OPTION */ - if ((!onlyLatestMsgs) && (!onlyAllVersions) && (!onlyChildMsgs) && (!onlyThreadMsgs)) - { -#ifdef DATA_DEBUG - RsDbg() << "RsGxsDataAccess::getMsgRelatedList() FALLBACK -> NO FLAGS -> SIMPLY RETURN nothing" << std::endl; -#endif - - return true; - } + if( (!onlyLatestMsgs) && (!onlyAllVersions) && (!onlyChildMsgs) && + (!onlyThreadMsgs) ) + { + RS_WARN("NO FLAGS -> SIMPLY RETURN nothing"); + return true; + } for(auto vit_msgIds(req->mMsgIds.begin()); vit_msgIds != req->mMsgIds.end(); ++vit_msgIds) { @@ -1330,14 +1311,11 @@ bool RsGxsDataAccess::getMsgRelatedInfo(MsgRelatedInfoReq *req) } } - if(!origMeta) - { -#ifdef DATA_DEBUG - RsDbg() << "RsGxsDataAccess::getMsgRelatedInfo(): Cannot find meta of msgId (to relate to)!" - << std::endl; -#endif - return false; - } + if(!origMeta) + { + RS_ERR("Cannot find meta of msgId: ", msgId, " to relate to"); + return false; + } const RsGxsMessageId& origMsgId = origMeta->mOrigMsgId; std::map& metaMap = filterMap[grpId]; diff --git a/libretroshare/src/retroshare/rsgxsforums.h b/libretroshare/src/retroshare/rsgxsforums.h index c033bf3ac..7bec23b6c 100644 --- a/libretroshare/src/retroshare/rsgxsforums.h +++ b/libretroshare/src/retroshare/rsgxsforums.h @@ -4,7 +4,8 @@ * libretroshare: retroshare core library * * * * Copyright (C) 2012-2014 Robert Fernie * - * Copyright (C) 2018-2019 Gioacchino Mazzurco * + * Copyright (C) 2018-2020 Gioacchino Mazzurco * + * Copyright (C) 2019-2020 Asociación Civil Altermundi * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * @@ -25,6 +26,7 @@ #include #include #include +#include #include "retroshare/rstokenservice.h" #include "retroshare/rsgxsifacehelper.h" @@ -353,6 +355,19 @@ public: RsGxsGroupId& forumId = RS_DEFAULT_STORAGE_PARAM(RsGxsGroupId), std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string) ) = 0; + /** + * @brief Get posts related to the given post. + * If the set is empty, nothing is returned. + * @jsonapi{development} + * @param[in] forumId id of the forum of which the content is requested + * @param[in] parentId id of the post of which child posts (aka replies) + * are requested. + * @param[out] childPosts storage for the child posts + * @return false if something failed, true otherwhise + */ + virtual std::error_condition getChildPosts( + const RsGxsGroupId& forumId, const RsGxsMessageId& parentId, + std::vector& childPosts ) = 0; /** * @brief Create forum. Blocking API. diff --git a/libretroshare/src/services/p3gxsforums.cc b/libretroshare/src/services/p3gxsforums.cc index 85806d407..409293831 100644 --- a/libretroshare/src/services/p3gxsforums.cc +++ b/libretroshare/src/services/p3gxsforums.cc @@ -4,7 +4,8 @@ * libretroshare: retroshare core library * * * * Copyright (C) 2012-2014 Robert Fernie * - * Copyright (C) 2018-2019 Gioacchino Mazzurco * + * Copyright (C) 2018-2020 Gioacchino Mazzurco * + * Copyright (C) 2019-2020 Asociación Civil Altermundi * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * @@ -20,16 +21,20 @@ * along with this program. If not, see . * * * *******************************************************************************/ + +#include +#include + #include "services/p3gxsforums.h" #include "rsitems/rsgxsforumitems.h" #include "retroshare/rspeers.h" #include "retroshare/rsidentity.h" - +#include "util/rsdebug.h" #include "rsserver/p3face.h" #include "retroshare/rsnotify.h" - +#include "util/rsdebuglevel2.h" #include "retroshare/rsgxsflags.h" -#include + // For Dummy Msgs. #include "util/rsrandom.h" @@ -422,46 +427,6 @@ bool p3GxsForums::getMsgData(const uint32_t &token, std::vector & return ok; } -//Not currently used -/*bool p3GxsForums::getRelatedMessages(const uint32_t &token, std::vector &msgs) -{ - GxsMsgRelatedDataMap msgData; - bool ok = RsGenExchange::getMsgRelatedData(token, msgData); - - if(ok) - { - GxsMsgRelatedDataMap::iterator mit = msgData.begin(); - - for(; mit != msgData.end(); ++mit) - { - std::vector& msgItems = mit->second; - std::vector::iterator vit = msgItems.begin(); - - for(; vit != msgItems.end(); ++vit) - { - RsGxsForumMsgItem* item = dynamic_cast(*vit); - - if(item) - { - RsGxsForumMsg msg = item->mMsg; - msg.mMeta = item->meta; - msgs.push_back(msg); - delete item; - } - else - { - std::cerr << "Not a GxsForumMsgItem, deleting!" << std::endl; - delete *vit; - } - } - } - } - - return ok; -}*/ - -/********************************************************************************************/ - bool p3GxsForums::createForumV2( const std::string& name, const std::string& description, const RsGxsId& authorId, const std::set& moderatorsIds, @@ -826,6 +791,51 @@ bool p3GxsForums::importForumLink( return true; } +std::error_condition p3GxsForums::getChildPosts( + const RsGxsGroupId& forumId, const RsGxsMessageId& parentId, + std::vector& childPosts ) +{ + RS_DBG3("forumId: ", forumId, " parentId: ", parentId); + + if(forumId.isNull() || parentId.isNull()) + return std::errc::invalid_argument; + + std::vector msgIds; + msgIds.push_back(RsGxsGrpMsgIdPair(forumId, parentId)); + + RsTokReqOptions opts; + opts.mReqType = GXS_REQUEST_TYPE_MSG_RELATED_DATA; + opts.mOptions = RS_TOKREQOPT_MSG_PARENT | RS_TOKREQOPT_MSG_LATEST; + + uint32_t token; + if( !requestMsgRelatedInfo(token, opts, msgIds) || + waitToken(token) != RsTokenService::COMPLETE ) + return std::errc::timed_out; + + GxsMsgRelatedDataMap msgData; + if(!getMsgRelatedData(token, msgData)) + return std::errc::no_message_available; + + for(auto& mit: msgData) + { + for(auto& vit: mit.second) + { + auto msgItem = dynamic_cast(vit); + if(msgItem) + { + RsGxsForumMsg post = msgItem->mMsg; + post.mMeta = msgItem->meta; + childPosts.push_back(post); + } + else RS_WARN("Got item of unexpected type: ", vit); + + delete vit; + } + } + + return std::error_condition(); +} + bool p3GxsForums::createGroup(uint32_t &token, RsGxsForumGroup &group) { std::cerr << "p3GxsForums::createGroup()" << std::endl; diff --git a/libretroshare/src/services/p3gxsforums.h b/libretroshare/src/services/p3gxsforums.h index 347714acb..39416b46d 100644 --- a/libretroshare/src/services/p3gxsforums.h +++ b/libretroshare/src/services/p3gxsforums.h @@ -4,7 +4,8 @@ * libretroshare: retroshare core library * * * * Copyright (C) 2012-2014 Robert Fernie * - * Copyright (C) 2018-2019 Gioacchino Mazzurco * + * Copyright (C) 2018-2020 Gioacchino Mazzurco * + * Copyright (C) 2019-2020 Asociación Civil Altermundi * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * @@ -131,6 +132,11 @@ public: std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string) ) override; + /// @see RsGxsForums + std::error_condition getChildPosts( + const RsGxsGroupId& forumId, const RsGxsMessageId& parentId, + std::vector& childPosts ) override; + /// implementation of rsGxsGorums /// bool getGroupData(const uint32_t &token, std::vector &groups) override; From 6e52804547bd636f294cd06f1122db922a35a72a Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 16 Jul 2020 21:33:26 +0200 Subject: [PATCH 41/95] fixed bug causing banned GXS id to be still added to sync list --- libretroshare/src/gxs/rsgxsnetservice.cc | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/libretroshare/src/gxs/rsgxsnetservice.cc b/libretroshare/src/gxs/rsgxsnetservice.cc index 79be6fb95..e7dbe21ac 100644 --- a/libretroshare/src/gxs/rsgxsnetservice.cc +++ b/libretroshare/src/gxs/rsgxsnetservice.cc @@ -324,8 +324,8 @@ static const uint32_t RS_NXS_ITEM_ENCRYPTION_STATUS_GXS_KEY_MISSING = 0x05 ; || defined(NXS_NET_DEBUG_8) || defined(NXS_NET_DEBUG_9) static const RsPeerId peer_to_print = RsPeerId();//std::string("a97fef0e2dc82ddb19200fb30f9ac575")) ; -static const RsGxsGroupId group_id_to_print = RsGxsGroupId(std::string("66052380f5d1d0c5992e2b55dc402ce6")) ; // use this to allow to this group id only, or "" for all IDs -static const uint32_t service_to_print = RS_SERVICE_GXS_TYPE_GXSCIRCLE; // use this to allow to this service id only, or 0 for all services +static const RsGxsGroupId group_id_to_print = RsGxsGroupId();//std::string("66052380f5d1d0c5992e2b55dc402ce6")) ; // use this to allow to this group id only, or "" for all IDs +static const uint32_t service_to_print = RS_SERVICE_GXS_TYPE_GXSID; // use this to allow to this service id only, or 0 for all services // warning. Numbers should be SERVICE IDS (see serialiser/rsserviceids.h. E.g. 0x0215 for forums) class nullstream: public std::ostream {}; @@ -3183,7 +3183,8 @@ void RsGxsNetService::locked_genReqGrpTransaction(NxsTransaction* tr) { grpItemL.push_back(item); grpMetaMap[item->grpId] = NULL; - }else + } + else { #ifdef NXS_NET_DEBUG_0 GXSNETDEBUG_PG(tr->mTransaction->PeerId(),item->grpId) << "RsGxsNetService::genReqGrpTransaction(): item failed to caste to RsNxsSyncMsgItem* " << std::endl; @@ -3238,18 +3239,21 @@ void RsGxsNetService::locked_genReqGrpTransaction(NxsTransaction* tr) // FIXTESTS global variable rsReputations not available in unittests! #warning csoler 2016-12-23: Update the code below to correctly send/recv dependign on reputation - if( !grpSyncItem->authorId.isNull() && - mReputations->overallReputationLevel(grpSyncItem->authorId) == - RsReputationLevel::LOCALLY_NEGATIVE ) + if( mReputations->overallReputationLevel(grpSyncItem->grpId) == RsReputationLevel::LOCALLY_NEGATIVE ) { #ifdef NXS_NET_DEBUG_0 - GXSNETDEBUG_PG(tr->mTransaction->PeerId(),grpId) << " Identity " << grpSyncItem->authorId << " is banned. Not syncing group." << std::endl; + GXSNETDEBUG_PG(tr->mTransaction->PeerId(),grpId) << " Identity " << grpSyncItem->grpId << " is banned. Not GXS-syncing group." << std::endl; #endif continue ; } if( (mGrpAutoSync && !haveItem) || latestVersion) + { +#ifdef NXS_NET_DEBUG_0 + GXSNETDEBUG_PG(tr->mTransaction->PeerId(),grpId) << " Identity " << grpId << " will be sync-ed using GXS. mGrpAutoSync:" << mGrpAutoSync << " haveItem:" << haveItem << " latest_version: " << std::endl; +#endif addGroupItemToList(tr, grpId, transN, reqList); + } } if(!reqList.empty()) From 1a2e25da71a9e2e5f55c147efec739a8d9438ba5 Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 16 Jul 2020 21:41:01 +0200 Subject: [PATCH 42/95] disabled syncWithPeers group sync broadcast when mGrpAutoSync is false --- libretroshare/src/gxs/rsgxsnetservice.cc | 41 ++++++++++++------------ 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/libretroshare/src/gxs/rsgxsnetservice.cc b/libretroshare/src/gxs/rsgxsnetservice.cc index e7dbe21ac..557b3c36a 100644 --- a/libretroshare/src/gxs/rsgxsnetservice.cc +++ b/libretroshare/src/gxs/rsgxsnetservice.cc @@ -593,32 +593,33 @@ void RsGxsNetService::syncWithPeers() return; } - std::set::iterator sit = peers.begin(); + if(mGrpAutoSync) + { + // for now just grps + for(auto sit = peers.begin(); sit != peers.end(); ++sit) + { - // for now just grps - for(; sit != peers.end(); ++sit) - { + const RsPeerId peerId = *sit; - const RsPeerId peerId = *sit; + ClientGrpMap::const_iterator cit = mClientGrpUpdateMap.find(peerId); + uint32_t updateTS = 0; - ClientGrpMap::const_iterator cit = mClientGrpUpdateMap.find(peerId); - uint32_t updateTS = 0; - - if(cit != mClientGrpUpdateMap.end()) - { - const RsGxsGrpUpdate *gui = &cit->second; - updateTS = gui->grpUpdateTS; - } - RsNxsSyncGrpReqItem *grp = new RsNxsSyncGrpReqItem(mServType); - grp->clear(); - grp->PeerId(*sit); - grp->updateTS = updateTS; + if(cit != mClientGrpUpdateMap.end()) + { + const RsGxsGrpUpdate *gui = &cit->second; + updateTS = gui->grpUpdateTS; + } + RsNxsSyncGrpReqItem *grp = new RsNxsSyncGrpReqItem(mServType); + grp->clear(); + grp->PeerId(*sit); + grp->updateTS = updateTS; #ifdef NXS_NET_DEBUG_5 - GXSNETDEBUG_P_(*sit) << "Service "<< std::hex << ((mServiceInfo.mServiceType >> 8)& 0xffff) << std::dec << " sending global group TS of peer id: " << *sit << " ts=" << nice_time_stamp(time(NULL),updateTS) << " (secs ago) to himself" << std::endl; + GXSNETDEBUG_P_(*sit) << "Service "<< std::hex << ((mServiceInfo.mServiceType >> 8)& 0xffff) << std::dec << " sending global group TS of peer id: " << *sit << " ts=" << nice_time_stamp(time(NULL),updateTS) << " (secs ago) to himself" << std::endl; #endif - generic_sendItem(grp); - } + generic_sendItem(grp); + } + } if(!mAllowMsgSync) return ; From 6f636fd8161b0923c4196f32a6bfcabfccc82c3a Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 16 Jul 2020 21:51:37 +0200 Subject: [PATCH 43/95] fixed compilation and re-enabled sync grp broadcast because it is necessary for grp updates --- libretroshare/src/gxs/rsgxsnetservice.cc | 46 +++++++++++------------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/libretroshare/src/gxs/rsgxsnetservice.cc b/libretroshare/src/gxs/rsgxsnetservice.cc index 557b3c36a..d4e5dcdee 100644 --- a/libretroshare/src/gxs/rsgxsnetservice.cc +++ b/libretroshare/src/gxs/rsgxsnetservice.cc @@ -593,32 +593,29 @@ void RsGxsNetService::syncWithPeers() return; } - if(mGrpAutoSync) + // for now just grps + for(auto sit = peers.begin(); sit != peers.end(); ++sit) { - // for now just grps - for(auto sit = peers.begin(); sit != peers.end(); ++sit) + + const RsPeerId peerId = *sit; + + ClientGrpMap::const_iterator cit = mClientGrpUpdateMap.find(peerId); + uint32_t updateTS = 0; + + if(cit != mClientGrpUpdateMap.end()) { - - const RsPeerId peerId = *sit; - - ClientGrpMap::const_iterator cit = mClientGrpUpdateMap.find(peerId); - uint32_t updateTS = 0; - - if(cit != mClientGrpUpdateMap.end()) - { - const RsGxsGrpUpdate *gui = &cit->second; - updateTS = gui->grpUpdateTS; - } - RsNxsSyncGrpReqItem *grp = new RsNxsSyncGrpReqItem(mServType); - grp->clear(); - grp->PeerId(*sit); - grp->updateTS = updateTS; + const RsGxsGrpUpdate *gui = &cit->second; + updateTS = gui->grpUpdateTS; + } + RsNxsSyncGrpReqItem *grp = new RsNxsSyncGrpReqItem(mServType); + grp->clear(); + grp->PeerId(*sit); + grp->updateTS = updateTS; #ifdef NXS_NET_DEBUG_5 - GXSNETDEBUG_P_(*sit) << "Service "<< std::hex << ((mServiceInfo.mServiceType >> 8)& 0xffff) << std::dec << " sending global group TS of peer id: " << *sit << " ts=" << nice_time_stamp(time(NULL),updateTS) << " (secs ago) to himself" << std::endl; + GXSNETDEBUG_P_(*sit) << "Service "<< std::hex << ((mServiceInfo.mServiceType >> 8)& 0xffff) << std::dec << " sending global group TS of peer id: " << *sit << " ts=" << nice_time_stamp(time(NULL),updateTS) << " (secs ago) to himself" << std::endl; #endif - generic_sendItem(grp); - } + generic_sendItem(grp); } if(!mAllowMsgSync) @@ -645,15 +642,13 @@ void RsGxsNetService::syncWithPeers() } } - sit = peers.begin(); - // Synchronise group msg for groups which we're subscribed to // For each peer and each group, we send to the peer the time stamp of the most // recent modification the peer has sent. If the peer has more recent messages he will send them, because its latest // modifications will be more recent. This ensures that we always compare timestamps all taken in the same // computer (the peer's computer in this case) - for(; sit != peers.end(); ++sit) + for(auto sit = peers.begin(); sit != peers.end(); ++sit) { const RsPeerId& peerId = *sit; @@ -3239,8 +3234,7 @@ void RsGxsNetService::locked_genReqGrpTransaction(NxsTransaction* tr) } // FIXTESTS global variable rsReputations not available in unittests! -#warning csoler 2016-12-23: Update the code below to correctly send/recv dependign on reputation - if( mReputations->overallReputationLevel(grpSyncItem->grpId) == RsReputationLevel::LOCALLY_NEGATIVE ) + if( mReputations->overallReputationLevel(RsGxsId(grpSyncItem->grpId)) == RsReputationLevel::LOCALLY_NEGATIVE ) { #ifdef NXS_NET_DEBUG_0 GXSNETDEBUG_PG(tr->mTransaction->PeerId(),grpId) << " Identity " << grpSyncItem->grpId << " is banned. Not GXS-syncing group." << std::endl; From 016e6445a325a114d3564026c46445e1db66b88a Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 17 Jul 2020 00:26:14 +0200 Subject: [PATCH 44/95] fixed bug causing dataservice to return a non null group when the DB doesnt contain the requested group, causing rsgxsnetservice to still sync new groups in no mGrpAutoSync mode, causing identities to spread like hell --- libretroshare/src/gxs/rsdataservice.cc | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/libretroshare/src/gxs/rsdataservice.cc b/libretroshare/src/gxs/rsdataservice.cc index bd22a8aa9..5d09fee5d 100644 --- a/libretroshare/src/gxs/rsdataservice.cc +++ b/libretroshare/src/gxs/rsdataservice.cc @@ -502,6 +502,9 @@ RsGxsGrpMetaData* RsDataService::locked_getGrpMeta(RetroCursor &c, int colOffset RsGxsGrpMetaData* grpMeta ; RsGxsGroupId grpId(tempId) ; + if(grpId.isNull()) // not in the DB! + return nullptr; + if(use_cache) grpMeta = mGrpMetaDataCache.getOrCreateMeta(grpId); else @@ -659,8 +662,10 @@ RsGxsMsgMetaData* RsDataService::locked_getMsgMeta(RetroCursor &c, int colOffset std::string temp; c.getString(mColMsgMeta_MsgId + colOffset, temp); msg_id = RsGxsMessageId(temp); + // without these, a msg is meaningless - ok &= (!group_id.isNull()) && (!msg_id.isNull()); + if(group_id.isNull() || msg_id.isNull()) + return nullptr; RsGxsMsgMetaData* msgMeta = nullptr; @@ -1432,7 +1437,7 @@ int RsDataService::retrieveGxsGrpMetaData(RsGxsGrpMetaTemporaryMap& grp) RsGxsGrpMetaData *meta = mGrpMetaDataCache.getMeta(mit->first) ; if(meta) - grp[mit->first] = meta; + mit->second = meta; else { #ifdef RS_DATA_SERVICE_DEBUG_CACHE @@ -1446,7 +1451,7 @@ int RsDataService::retrieveGxsGrpMetaData(RsGxsGrpMetaTemporaryMap& grp) RsGxsGrpMetaData* meta = locked_getGrpMeta(*c, 0,true); if(meta) - grp[mit->first] = meta; + mit->second = meta; #ifdef RS_DATA_SERVICE_DEBUG_TIME ++resultCount; From e4d9194073dc6a241cb20d7f98e1d8b8b964d093 Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 17 Jul 2020 00:27:09 +0200 Subject: [PATCH 45/95] fixed bug causing to not request identities correctly to friends --- libretroshare/src/gxs/rsgxsnetservice.cc | 4 ++-- libretroshare/src/services/p3idservice.cc | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libretroshare/src/gxs/rsgxsnetservice.cc b/libretroshare/src/gxs/rsgxsnetservice.cc index d4e5dcdee..6762998a9 100644 --- a/libretroshare/src/gxs/rsgxsnetservice.cc +++ b/libretroshare/src/gxs/rsgxsnetservice.cc @@ -3223,7 +3223,7 @@ void RsGxsNetService::locked_genReqGrpTransaction(NxsTransaction* tr) RsNxsSyncGrpItem*& grpSyncItem = *llit; const RsGxsGroupId& grpId = grpSyncItem->grpId; - std::map::const_iterator metaIter = grpMetaMap.find(grpId); + std::map::const_iterator metaIter = grpMetaMap.find(grpId); bool haveItem = false; bool latestVersion = false; @@ -3245,7 +3245,7 @@ void RsGxsNetService::locked_genReqGrpTransaction(NxsTransaction* tr) if( (mGrpAutoSync && !haveItem) || latestVersion) { #ifdef NXS_NET_DEBUG_0 - GXSNETDEBUG_PG(tr->mTransaction->PeerId(),grpId) << " Identity " << grpId << " will be sync-ed using GXS. mGrpAutoSync:" << mGrpAutoSync << " haveItem:" << haveItem << " latest_version: " << std::endl; + GXSNETDEBUG_PG(tr->mTransaction->PeerId(),grpId) << " Identity " << grpId << " will be sync-ed using GXS. mGrpAutoSync:" << mGrpAutoSync << " haveItem:" << haveItem << " latest_version: " << latestVersion << std::endl; #endif addGroupItemToList(tr, grpId, transN, reqList); } diff --git a/libretroshare/src/services/p3idservice.cc b/libretroshare/src/services/p3idservice.cc index c15002a33..54488b5a0 100644 --- a/libretroshare/src/services/p3idservice.cc +++ b/libretroshare/src/services/p3idservice.cc @@ -2960,7 +2960,7 @@ void p3IdService::requestIdsFromNet() #endif RsGxsIdCache data; - if(!mKeyCache.fetch(cit->first,data)) + if(mKeyCache.fetch(cit->first,data)) { std::cerr << __PRETTY_FUNCTION__ << ". Dropping request for ID " << cit->first << " at last minute, because it was found in cache"<< std::endl; auto tmp(cit); From 120eb02638c94d11d116e82bb6d16a16c59447ff Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 17 Jul 2020 21:56:57 +0200 Subject: [PATCH 46/95] disabled debug output --- libretroshare/src/gxs/rsgxsnetservice.cc | 2 +- libretroshare/src/services/p3idservice.cc | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/libretroshare/src/gxs/rsgxsnetservice.cc b/libretroshare/src/gxs/rsgxsnetservice.cc index 6762998a9..8ed657bfb 100644 --- a/libretroshare/src/gxs/rsgxsnetservice.cc +++ b/libretroshare/src/gxs/rsgxsnetservice.cc @@ -275,7 +275,7 @@ NXS_NET_DEBUG_9 gxs distant search ***/ -#define NXS_NET_DEBUG_0 1 +//#define NXS_NET_DEBUG_0 1 //#define NXS_NET_DEBUG_1 1 //#define NXS_NET_DEBUG_2 1 //#define NXS_NET_DEBUG_3 1 diff --git a/libretroshare/src/services/p3idservice.cc b/libretroshare/src/services/p3idservice.cc index 54488b5a0..edc33056c 100644 --- a/libretroshare/src/services/p3idservice.cc +++ b/libretroshare/src/services/p3idservice.cc @@ -49,7 +49,6 @@ * #define DEBUG_OPINION 1 * #define GXSID_GEN_DUMMY_DATA 1 ****/ -#define DEBUG_IDS 1 #define ID_REQUEST_LIST 0x0001 #define ID_REQUEST_IDENTITY 0x0002 From 7d21390d034268211076ecc1be36acfe9d23811f Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 23 Jul 2020 21:59:35 +0200 Subject: [PATCH 47/95] increased GxsId size to 15000 --- libretroshare/src/services/p3idservice.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libretroshare/src/services/p3idservice.cc b/libretroshare/src/services/p3idservice.cc index edc33056c..b325d9560 100644 --- a/libretroshare/src/services/p3idservice.cc +++ b/libretroshare/src/services/p3idservice.cc @@ -55,7 +55,7 @@ #define ID_REQUEST_REPUTATION 0x0003 #define ID_REQUEST_OPINION 0x0004 -#define GXSID_MAX_CACHE_SIZE 5000 +#define GXSID_MAX_CACHE_SIZE 15000 // unused keys are deleted according to some heuristic that should favor known keys, signed keys etc. From ed0e0f1da1576c01eafb09621f8f8927a847b873 Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 23 Jul 2020 22:05:45 +0200 Subject: [PATCH 48/95] removed more debug info --- libretroshare/src/services/p3gxscircles.cc | 2 ++ libretroshare/src/services/p3idservice.cc | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/libretroshare/src/services/p3gxscircles.cc b/libretroshare/src/services/p3gxscircles.cc index e0d210f0f..80f5fa290 100644 --- a/libretroshare/src/services/p3gxscircles.cc +++ b/libretroshare/src/services/p3gxscircles.cc @@ -1463,7 +1463,9 @@ bool p3GxsCircles::locked_processLoadingCacheEntry(RsGxsCircleCache& cache) } else { +#ifdef DEBUG_CIRCLES std::cerr << " (WW) cache entry for circle " << cache.mCircleId << " has empty originator. Asking info for GXS id " << pit->first << " to all connected friends." << std::endl; +#endif rsPeers->getOnlineList(peers) ; } diff --git a/libretroshare/src/services/p3idservice.cc b/libretroshare/src/services/p3idservice.cc index b325d9560..609dd8ad6 100644 --- a/libretroshare/src/services/p3idservice.cc +++ b/libretroshare/src/services/p3idservice.cc @@ -1251,8 +1251,9 @@ bool p3IdService::requestKey(const RsGxsId &id, const std::list& peers if( info.mOverallReputationLevel == RsReputationLevel::LOCALLY_NEGATIVE ) { - RsInfo() << __PRETTY_FUNCTION__ << " not requesting Key " << id - << " because it has been banned." << std::endl; +#ifdef DEBUG_IDS + RsInfo() << __PRETTY_FUNCTION__ << " not requesting Key " << id << " because it has been banned." << std::endl; +#endif RS_STACK_MUTEX(mIdMtx); mIdsNotPresent.erase(id); @@ -2961,7 +2962,9 @@ void p3IdService::requestIdsFromNet() if(mKeyCache.fetch(cit->first,data)) { +#ifdef DEBUG_IDS std::cerr << __PRETTY_FUNCTION__ << ". Dropping request for ID " << cit->first << " at last minute, because it was found in cache"<< std::endl; +#endif auto tmp(cit); ++tmp; mIdsNotPresent.erase(cit); From b0245920aa5f4511099be61b5aea3b37e0a86b53 Mon Sep 17 00:00:00 2001 From: drbob Date: Thu, 30 Jul 2020 23:02:17 +1000 Subject: [PATCH 49/95] Fix Gxs data requests with LATEST flag. This was broken during a re-write earlier this year. Currently the code incorrectly checks mParentId, this has been fixed to check mOrigMsgId. --- libretroshare/src/gxs/rsgxsdataaccess.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libretroshare/src/gxs/rsgxsdataaccess.cc b/libretroshare/src/gxs/rsgxsdataaccess.cc index a695672f9..c2d458cb3 100644 --- a/libretroshare/src/gxs/rsgxsdataaccess.cc +++ b/libretroshare/src/gxs/rsgxsdataaccess.cc @@ -1046,9 +1046,9 @@ bool RsGxsDataAccess::getMsgMetaDataList( const GxsMsgReq& msgIds, const RsTokRe // Now loop once over message Metas and see if they have a parent. If yes, then mark the parent to be discarded. for(uint32_t i=0;imParentId.isNull() && metaV[i]->mParentId != metaV[i]->mMsgId) // this one is a follow up + if(!metaV[i]->mOrigMsgId.isNull() && metaV[i]->mOrigMsgId != metaV[i]->mMsgId) // this one is a follow up { - auto it = index_in_metaV.find(metaV[i]->mParentId); + auto it = index_in_metaV.find(metaV[i]->mOrigMsgId); if(it != index_in_metaV.end()) keep[it->second] = false; From 3a6648f706734bf991438f89d7064c2035ebca8f Mon Sep 17 00:00:00 2001 From: Gioacchino Mazzurco Date: Sat, 1 Aug 2020 18:23:35 +0200 Subject: [PATCH 50/95] Fix build error on big endian architectures --- libretroshare/src/util/rsendian.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libretroshare/src/util/rsendian.h b/libretroshare/src/util/rsendian.h index 925542f0d..29504a34b 100644 --- a/libretroshare/src/util/rsendian.h +++ b/libretroshare/src/util/rsendian.h @@ -26,7 +26,7 @@ * This file provide convenient integer endiannes conversion utilities. * Instead of providing them with different names for each type (a la C htonl, * htons, ntohl, ntohs ), which make them uncomfortable to use, expose a - * templated function `rs_endian_fix` to reorder integers representation byets + * templated function `rs_endian_fix` to reorder integers bytes representation * when sending or receiving from the network. */ /* enforce LITTLE_ENDIAN on Windows */ @@ -46,7 +46,7 @@ template inline INTTYPE rs_endian_fix(INTTYPE val) swapped |= (val >> (8*(sizeof(INTTYPE)-i-1)) & 0xFF) << (8*i); return swapped; #else - return hostI; + return val; #endif }; From 794fb1366080c6d79b318302ea73967b02d1261f Mon Sep 17 00:00:00 2001 From: Gioacchino Mazzurco Date: Sat, 1 Aug 2020 18:28:20 +0200 Subject: [PATCH 51/95] Fix description in copyright header --- libretroshare/src/util/rsendian.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libretroshare/src/util/rsendian.h b/libretroshare/src/util/rsendian.h index 29504a34b..d27c374ff 100644 --- a/libretroshare/src/util/rsendian.h +++ b/libretroshare/src/util/rsendian.h @@ -1,6 +1,6 @@ /******************************************************************************* * * - * libretroshare base64 encoding utilities * + * libretroshare endiannes utilities * * * * Copyright (C) 2020 Gioacchino Mazzurco * * Copyright (C) 2020 Asociación Civil Altermundi * From 9db2fe7d081fe988b66e3132dc6d50778f3b0a96 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Mon, 4 Feb 2019 19:07:20 +0100 Subject: [PATCH 52/95] Modified Windows build scripts - Deactivated build of plugins - Deactivated changelog - Pack license --- build_scripts/Windows/build-tor.bat | 27 ------------------- build_scripts/Windows/build.bat | 3 ++- build_scripts/Windows/build/pack.bat | 8 ++++-- .../Windows/installer/retroshare-Qt5.nsi | 8 +++--- 4 files changed, 12 insertions(+), 34 deletions(-) delete mode 100644 build_scripts/Windows/build-tor.bat diff --git a/build_scripts/Windows/build-tor.bat b/build_scripts/Windows/build-tor.bat deleted file mode 100644 index a82e63f16..000000000 --- a/build_scripts/Windows/build-tor.bat +++ /dev/null @@ -1,27 +0,0 @@ -@echo off - -setlocal - -:: Initialize environment -call "%~dp0env.bat" -if errorlevel 1 goto error_env -call "%EnvPath%\env.bat" -if errorlevel 1 goto error_env - -%cecho% info "Build libraries" -call "%~dp0build-libs\build-libs.bat" -if errorlevel 1 %cecho% error "Failed to build libraries." & exit /B %ERRORLEVEL% - -%cecho% info "Build %SourceName%" -call "%~dp0build\build.bat" release tor autologin plugins -if errorlevel 1 %cecho% error "Failed to build %SourceName%." & exit /B %ERRORLEVEL% - -%cecho% info "Pack %SourceName%" -call "%~dp0build\pack.bat" release tor -if errorlevel 1 %cecho% error "Failed to pack %SourceName%." & exit /B %ERRORLEVEL% - -exit /B 0 - -:error_env -echo Failed to initialize environment. -exit /B 1 diff --git a/build_scripts/Windows/build.bat b/build_scripts/Windows/build.bat index c91c64753..4f491d907 100644 --- a/build_scripts/Windows/build.bat +++ b/build_scripts/Windows/build.bat @@ -13,7 +13,8 @@ call "%~dp0build-libs\build-libs.bat" if errorlevel 1 %cecho% error "Failed to build libraries." & exit /B %ERRORLEVEL% %cecho% info "Build %SourceName%" -call "%~dp0build\build.bat" release autologin plugins +call "%~dp0build\build.bat" release autologin +rem plugins if errorlevel 1 %cecho% error "Failed to build %SourceName%." & exit /B %ERRORLEVEL% %cecho% info "Pack %SourceName%" diff --git a/build_scripts/Windows/build/pack.bat b/build_scripts/Windows/build/pack.bat index d97f3ea22..ec1ca042e 100644 --- a/build_scripts/Windows/build/pack.bat +++ b/build_scripts/Windows/build/pack.bat @@ -98,6 +98,7 @@ mkdir "%RsDeployPath%\qss" mkdir "%RsDeployPath%\stylesheets" mkdir "%RsDeployPath%\sounds" mkdir "%RsDeployPath%\translations" +mkdir "%RsDeployPath%\license" copy nul "%RsDeployPath%\portable" %Quite% @@ -148,6 +149,9 @@ rmdir /S /Q "%RsDeployPath%\stylesheets\__MACOSX__Bubble" %Quite% echo copy sounds xcopy /S "%SourcePath%\retroshare-gui\src\sounds" "%RsDeployPath%\sounds" %Quite% +echo copy license +xcopy /S "%SourcePath%\retroshare-gui\src\license" "%RsDeployPath%\license" %Quite% + echo copy translation copy "%SourcePath%\retroshare-gui\src\translations\qt_tr.qm" "%RsDeployPath%\translations" %Quite% copy "%QtPath%\..\translations\qt_*.qm" "%RsDeployPath%\translations" %Quite% @@ -162,8 +166,8 @@ if "%QtMainVersion%"=="5" ( echo copy bdboot.txt copy "%SourcePath%\libbitdht\src\bitdht\bdboot.txt" "%RsDeployPath%" %Quite% -echo copy changelog.txt -copy "%SourcePath%\retroshare-gui\src\changelog.txt" "%RsDeployPath%" %Quite% +rem echo copy changelog.txt +rem copy "%SourcePath%\retroshare-gui\src\changelog.txt" "%RsDeployPath%" %Quite% if exist "%SourcePath%\libresapi\src\webui" ( echo copy webui diff --git a/build_scripts/Windows/installer/retroshare-Qt5.nsi b/build_scripts/Windows/installer/retroshare-Qt5.nsi index 99a3c7804..f3a319351 100644 --- a/build_scripts/Windows/installer/retroshare-Qt5.nsi +++ b/build_scripts/Windows/installer/retroshare-Qt5.nsi @@ -102,9 +102,9 @@ Var StyleSheetDir !define MUI_FINISHPAGE_LINK "Visit the RetroShare forum for the latest news and support" !define MUI_FINISHPAGE_LINK_LOCATION "http://retroshare.sourceforge.net/forum/" !define MUI_FINISHPAGE_RUN "$INSTDIR\retroshare.exe" -!define MUI_FINISHPAGE_SHOWREADME $INSTDIR\changelog.txt -!define MUI_FINISHPAGE_SHOWREADME_TEXT changelog.txt -!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED +;!define MUI_FINISHPAGE_SHOWREADME $INSTDIR\changelog.txt +;!define MUI_FINISHPAGE_SHOWREADME_TEXT changelog.txt +;!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\orange-uninstall.ico" !define MUI_UNFINISHPAGE_NOAUTOCLOSE ;!define MUI_LANGDLL_REGISTRY_ROOT HKLM @@ -211,7 +211,7 @@ Section $(Section_Main) Section_Main File "${EXTERNAL_LIB_DIR}\bin\ssleay32.dll" ; Other files - File "${SOURCEDIR}\retroshare-gui\src\changelog.txt" +; File "${SOURCEDIR}\retroshare-gui\src\changelog.txt" File "${SOURCEDIR}\libbitdht\src\bitdht\bdboot.txt" ; Image formats From fd078f799193c191766b093cd22cb52710b29161 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Sat, 1 Aug 2020 19:18:59 +0200 Subject: [PATCH 53/95] Removed automatic download of Qt in Windows build environment --- build_scripts/Windows/env/env-qt.bat | 23 -- .../Windows/env/tools/prepare-qt.bat | 204 ------------------ build_scripts/Windows/qt-cmd.bat | 27 --- 3 files changed, 254 deletions(-) delete mode 100644 build_scripts/Windows/env/env-qt.bat delete mode 100644 build_scripts/Windows/env/tools/prepare-qt.bat delete mode 100644 build_scripts/Windows/qt-cmd.bat diff --git a/build_scripts/Windows/env/env-qt.bat b/build_scripts/Windows/env/env-qt.bat deleted file mode 100644 index 776e2078c..000000000 --- a/build_scripts/Windows/env/env-qt.bat +++ /dev/null @@ -1,23 +0,0 @@ -:: Usage: -:: call env-qt4.bat version [reinstall|clean] - -:: Initialize environment -call "%~dp0env.bat" -if errorlevel 1 goto error_env - -set EnvQtBasePath=%EnvRootPath%\qt - -:: Create folders -if not exist "%EnvQtBasePath%" mkdir "%EnvQtBasePath%" - -call "%~dp0tools\prepare-qt.bat" %1 %2 -if errorlevel 1 exit /B %ERRORLEVEL% - -if "%MinGWDir%" NEQ "" set PATH=%MinGWDir%\bin;%PATH% -if "%QtDir%" NEQ "" set PATH=%QtDir%\bin;%PATH% - -exit /B 0 - -:error_env -echo Failed to initialize environment. -exit /B 1 diff --git a/build_scripts/Windows/env/tools/prepare-qt.bat b/build_scripts/Windows/env/tools/prepare-qt.bat deleted file mode 100644 index c2593f48d..000000000 --- a/build_scripts/Windows/env/tools/prepare-qt.bat +++ /dev/null @@ -1,204 +0,0 @@ -:: Usage: -:: call prepare-qt.bat version [reinstall|clean] - -setlocal enabledelayedexpansion - -if "%EnvQtBasePath%"=="" exit /B 1 -if not exist "%EnvRootPath%"=="" exit /B 1 - -set EnvQtVersion=%~1 -if "%EnvQtVersion%"=="" ( - %cecho% error "Please specify Qt version" - goto error -) - -for /f "tokens=1,2 delims=." %%A in ("%EnvQtVersion%") do set EnvQtMainVersion=%%A& set EnvQtBaseVersion=%%A.%%B -set EnvQtPath=%EnvQtBasePath%\%EnvQtVersion% - -if "%~2"=="clean" ( - %cecho% info "Clean Qt %EnvQtVersion%" - call "%ToolsPath%\remove-dir.bat" "%EnvQtPath%" - goto exit -) - -set CheckQmakeExe= -if "%EnvQtMainVersion%"=="4" ( - set CheckQmakeExe=%EnvQtPath%\Qt\bin\qmake.exe -) else ( - if "%EnvQtMainVersion%" GEQ "5" ( - call :get_mingw_version EnvQtMinGWVersion "%EnvQtPath%\%EnvQtBaseVersion%" - if "!EnvQtMinGWVersion!" NEQ "" ( - set CheckQmakeExe=%EnvQtPath%\%EnvQtBaseVersion%\!EnvQtMinGWVersion!\bin\qmake.exe - ) - ) -) - -if "%CheckQmakeExe%" NEQ "" ( - if exist "%CheckQmakeExe%" ( - if "%~2"=="reinstall" ( - choice /M "Found existing Qt %EnvQtVersion% version. Do you want to proceed?" - if !ERRORLEVEL!==2 goto exit - ) else ( - goto exit - ) - ) -) - -set QtInstall=qt-opensource-windows-x86-mingw-%EnvQtVersion%.exe -set QtInstallWildcard=qt-opensource-windows-x86-mingw*-%EnvQtVersion%.exe -set QtUrl=http://download.qt.io/official_releases/qt/%EnvQtBaseVersion%/%EnvQtVersion% - -%cecho% info "Remove previous Qt %EnvQtVersion% version" -call "%ToolsPath%\remove-dir.bat" "%EnvQtPath%" - -%cecho% info "Download Qt installation files" -if not exist "%EnvDownloadPath%\%QtInstall%" ( - call "%ToolsPath%\download-file-wildcard.bat" "%QtUrl%" "%QtInstallWildcard%" "%EnvDownloadPath%" QtInstallDownload - if "!QtInstallDownload!"=="" %cecho% error "Cannot download Qt %EnvQtVersion%" & goto error - ren "%EnvDownloadPath%\!QtInstallDownload!" "%QtInstall%" -) -if not exist "%EnvDownloadPath%\%QtInstall%" %cecho% error "Cannot download Qt %EnvQtVersion%" & goto error - -mkdir "%EnvQtPath%" - -if "%EnvQtMainVersion%"=="4" ( - rem Qt 4 - goto install_qt4 -) -if "%EnvQtMainVersion%" GEQ "5" ( - rem Qt >= 5 - goto install_qt5 -) - -%cecho% error "Unknown Qt version %EnvQtVersion%" - -:error -endlocal & set QtDir=& set MinGWDir= -exit /B 1 - -:exit -set QtDir= -set MinGWDir= - -if "%EnvQtMainVersion%"=="4" ( - rem Qt 4 - set QtDir=%EnvQtBasePath%\%EnvQtVersion%\Qt - set MinGWDir=%EnvQtBasePath%\%EnvQtVersion%\mingw32 -) else ( - if "%EnvQtMainVersion%" GEQ "5" ( - call :get_mingw_version EnvQtToolsMinGWVersion "%EnvQtPath%\Tools" - - set QtDir=%EnvQtPath%\%EnvQtBaseVersion%\!EnvQtMinGWVersion! - set MinGWDir=%EnvQtPath%\Tools\!EnvQtToolsMinGWVersion! - ) -) - -endlocal & set QtDir=%QtDir%& set MinGWDir=%MinGWDir% -exit /B 0 - -:get_mingw_version -setlocal enabledelayedexpansion -set Variable=%~1 -set Result= - -for /D %%A in (%~2\*) do set Name=%%~nA& if "!Name:~0,5!"=="mingw" set Result=!Name! -endlocal & set %Variable%=%Result% -goto :EOF - -:replace -set InFile=%~1 -set InFileName=%~nx1 -set OutFile=%~1.tmp -set SearchText=%~2 -set ReplaceText=%~3 - -if exist "%OutFile%" del /Q "%OutFile%" - -for /f "tokens=1* delims=]" %%A in ('find /n /v ""^<%InFile%') do ( - set string=%%B - - if "!string!"=="" ( - echo.>>%OutFile% - ) else ( - set modified=!string:%SearchText%=%ReplaceText%! - echo !modified!>> %OutFile% - ) -) -del "%InFile%" -rename "%OutFile%" "%InFileName%" -goto :EOF - -:install_qt4 -set MinGWInstall=i686-4.8.2-release-posix-dwarf-rt_v3-rev3.7z -set MinGWUrl=http://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win32/Personal Builds/mingw-builds/4.8.2/threads-posix/dwarf/%MinGWInstall%/download - -%cecho% info "Download MinGW installation files" -if not exist "%EnvDownloadPath%\%MinGWInstall%" call "%ToolsPath%\download-file.bat" "%MinGWUrl%" "%EnvDownloadPath%\%MinGWInstall%" -if not exist "%EnvDownloadPath%\%MinGWInstall%" %cecho% error "Cannot download MinGW" & goto error - -%cecho% info "Unpack Qt %EnvQtVersion%" -call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" -mkdir "%EnvTempPath%" -"%EnvSevenZipExe%" x -o"%EnvTempPath%" "%EnvDownloadPath%\%QtInstall%" $_14_ -move "%EnvTempPath%\$_14_" "%EnvQtPath%\Qt" -call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" - -%cecho% info "Unpack MinGW" -"%EnvSevenZipExe%" x -o"%EnvQtPath%" "%EnvDownloadPath%\%MinGWInstall%" - -echo Prepare Qt %EnvQtVersion% -echo [Paths]>"%EnvQtPath%\Qt\bin\qt.conf" -echo Prefix=..>>"%EnvQtPath%\Qt\bin\qt.conf" - -goto exit - -:install_qt5 -set EnvQtInstallerFrameworkVersion=2.0.3 - -set QtInstallerFrameworkInstall=QtInstallerFramework-%EnvQtInstallerFrameworkVersion%-win-x86.exe -set QtInstallerFrameworkUrl=http://download.qt.io/official_releases/qt-installer-framework/%EnvQtInstallerFrameworkVersion%/QtInstallerFramework-win-x86.exe - -%cecho% info "Download QtInstallerFramework installation files" -if not exist "%EnvDownloadPath%\%QtInstallerFrameworkInstall%" call "%ToolsPath%\download-file.bat" "%QtInstallerFrameworkUrl%" "%EnvDownloadPath%\%QtInstallerFrameworkInstall%" -if not exist "%EnvDownloadPath%\%QtInstallerFrameworkInstall%" %cecho% error "Cannot download Qt Installer Framework %EnvQtInstallerFrameworkVersion%" & goto error - -%cecho% info "Unpack Qt Installer Framework" -call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" -mkdir "%EnvTempPath%" -"%EnvSevenZipExe%" x -o"%EnvTempPath%" "%EnvDownloadPath%\%QtInstallerFrameworkInstall%" bin\devtool.exe -move "%EnvTempPath%\bin\devtool.exe" "%EnvQtPath%" -call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" - -%cecho% info "Unpack Qt %EnvQtVersion%" -call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" -mkdir "%EnvTempPath%" -"%EnvQtPath%\devtool.exe" "%EnvDownloadPath%\%QtInstall%" --dump "%EnvTempPath%" - -pushd "%EnvTempPath%" -del /S *vcredist*.7z -del /S *qtcreator*.7z -del /S *1installer-changelog.7z -for /R %%F in (*.7z) do "%EnvSevenZipExe%" x -y -o"%EnvQtPath%" "%%F" -popd - -call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" - -call :get_mingw_version EnvQtMinGWVersion "%EnvQtPath%\%EnvQtBaseVersion%" - -%cecho% info "Prepare Qt %EnvQtVersion%" -echo [Paths]>"%EnvQtPath%\%EnvQtBaseVersion%\%EnvQtMinGWVersion%\bin\qt.conf" -echo Documentation=../../Docs/Qt-%EnvQtBaseVersion%>>"%EnvQtPath%\%EnvQtBaseVersion%\%EnvQtMinGWVersion%\bin\qt.conf" -echo Examples=../../Examples/Qt-%EnvQtBaseVersion%>>"%EnvQtPath%\%EnvQtBaseVersion%\%EnvQtMinGWVersion%\bin\qt.conf" -echo Prefix=..>>"%EnvQtPath%\%EnvQtBaseVersion%\%EnvQtMinGWVersion%\bin\qt.conf" - -call :replace "%EnvQtPath%\%EnvQtBaseVersion%\%EnvQtMinGWVersion%\mkspecs\qconfig.pri" "Enterprise" "OpenSource" - -for /R "%EnvQtPath%\%EnvQtBaseVersion%\%EnvQtMinGWVersion%\lib" %%A in (*.pc) do ( - call :replace "%%A" "c:/Users/qt/work/install" "%EnvQtPath:\=\\%\%EnvQtBaseVersion%\\%EnvQtMinGWVersion%" - call :replace "%%A" "c:\Users\qt\work\install" "%EnvQtPath:\=/%\%EnvQtBaseVersion%/%EnvQtMinGWVersion%" -) -for /R "%EnvQtPath%\%EnvQtBaseVersion%\%EnvQtMinGWVersion%\lib" %%A in (*.prl) do ( - call :replace "%%A" "c:/Users/qt/work/install" "%EnvQtPath:\=\\%\%EnvQtBaseVersion%\\%EnvQtMinGWVersion%" - call :replace "%%A" "c:\Users\qt\work\install" "%EnvQtPath:\=/%\%EnvQtBaseVersion%/%EnvQtMinGWVersion%" -) -goto exit diff --git a/build_scripts/Windows/qt-cmd.bat b/build_scripts/Windows/qt-cmd.bat deleted file mode 100644 index c0ac6ecbd..000000000 --- a/build_scripts/Windows/qt-cmd.bat +++ /dev/null @@ -1,27 +0,0 @@ -:: Usage: -:: call qt-cmd.bat [command] - -@echo off - -setlocal - -set QtVersion=%~1 - -:: Initialize environment -call "%~dp0env.bat" -if errorlevel 1 goto error_env -call "%EnvPath%\env-qt.bat" %QtVersion% -if errorlevel 1 goto error_env - -if "%~2"=="" ( - "%ComSpec%" -) else ( - "%ComSpec%" /c %2 %3 %4 %5 %6 %7 %8 %9 -) - -exit /B %ERRORLEVEL% - -:error_env -echo Failed to initialize environment. -endlocal -exit /B 1 From 06d8b67f2383dc099c59bf00ff6169b1b16e71ea Mon Sep 17 00:00:00 2001 From: thunder2 Date: Wed, 29 Jul 2020 17:33:03 +0200 Subject: [PATCH 54/95] Removed usage of MSYS from Windows build environment --- build_scripts/Windows/build-libs/Makefile | 393 ------------------ .../Windows/build-libs/build-libs.bat | 47 --- build_scripts/Windows/env/env-msys.bat | 22 - .../Windows/env/tools/prepare-msys.bat | 81 ---- .../Windows/env/tools/root/update-msys.bat | 15 - 5 files changed, 558 deletions(-) delete mode 100755 build_scripts/Windows/build-libs/Makefile delete mode 100644 build_scripts/Windows/build-libs/build-libs.bat delete mode 100644 build_scripts/Windows/env/env-msys.bat delete mode 100644 build_scripts/Windows/env/tools/prepare-msys.bat delete mode 100644 build_scripts/Windows/env/tools/root/update-msys.bat diff --git a/build_scripts/Windows/build-libs/Makefile b/build_scripts/Windows/build-libs/Makefile deleted file mode 100755 index 697d4c286..000000000 --- a/build_scripts/Windows/build-libs/Makefile +++ /dev/null @@ -1,393 +0,0 @@ -ZLIB_VERSION=1.2.3 -BZIP2_VERSION=1.0.6 -MINIUPNPC_VERSION=2.0 -OPENSSL_VERSION=1.0.2n -SPEEX_VERSION=1.2.0 -SPEEXDSP_VERSION=1.2rc3 -OPENCV_VERSION=3.4.1 -LIBXML2_VERSION=2.9.7 -LIBXSLT_VERSION=1.1.32 -CURL_VERSION=7.58.0 -TCL_VERSION=8.6.2 -SQLCIPHER_VERSION=2.2.1 -LIBMICROHTTPD_VERSION=0.9.59 -FFMPEG_VERSION=3.4 -RAPIDJSON_VERSION=1.1.0 -XAPIAN_VERSION=1.4.7 - -DOWNLOAD_PATH?=download -BUILD_PATH=build -LIBS_PATH?=libs - -all: dirs zlib bzip2 miniupnpc openssl speex speexdsp opencv libxml2 libxslt curl sqlcipher libmicrohttpd ffmpeg rapidjson xapian copylibs - -download: \ - $(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz \ - $(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz \ - $(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz \ - $(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz \ - $(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz \ - $(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz \ - $(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz \ - $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz \ - $(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz \ - $(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz \ - $(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz \ - $(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz \ - $(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz \ - $(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz \ - $(DOWNLOAD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tar.gz \ - $(DOWNLOAD_PATH)/xapian-core-$(XAPIAN_VERSION).tar.xz - -clean: - rm -r -f $(BUILD_PATH) - rm -r -f $(LIBS_PATH) - -dirs: - mkdir -p $(DOWNLOAD_PATH) - mkdir -p $(BUILD_PATH) - gcc --version | head --lines 1 | tr ' ' '\n' | tail -1 >$(BUILD_PATH)/gcc-version - -$(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz: - wget --no-check-certificate http://sourceforge.net/projects/libpng/files/zlib/$(ZLIB_VERSION)/zlib-$(ZLIB_VERSION).tar.gz/download -O $(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz - -zlib: $(BUILD_PATH)/zlib-$(ZLIB_VERSION) - -$(BUILD_PATH)/zlib-$(ZLIB_VERSION): $(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz - # prepare - rm -r -f $(BUILD_PATH)/zlib-* - tar xvf $(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz - # build - cd zlib-$(ZLIB_VERSION) && ./configure - #cd zlib-$(ZLIB_VERSION) && make install prefix="`pwd`/../$(BUILD_PATH)" - cd zlib-$(ZLIB_VERSION) && make - # copy files - mkdir -p $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp/include - cp zlib-$(ZLIB_VERSION)/zlib.h $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp/include/ - cp zlib-$(ZLIB_VERSION)/zconf.h $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp/include/ - mkdir -p $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp/lib - cp zlib-$(ZLIB_VERSION)/libz.a $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp/lib/ - # cleanup - rm -r -f zlib-$(ZLIB_VERSION) - mv $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp $(BUILD_PATH)/zlib-$(ZLIB_VERSION) - -bzip2: $(BUILD_PATH)/bzip2-$(BZIP2_VERSION) - -$(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz: - wget http://bzip.org/$(BZIP2_VERSION)/bzip2-$(BZIP2_VERSION).tar.gz -O $(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz - -$(BUILD_PATH)/bzip2-$(BZIP2_VERSION): $(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz - # prepare - rm -r -f $(BUILD_PATH)/bzip2-* - tar xvf $(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz - # build - #cd bzip2-$(BZIP2_VERSION) && make install PREFIX="`pwd`/../$(BUILD_PATH)" - cd bzip2-$(BZIP2_VERSION) && make - # copy files - mkdir -p $(BUILD_PATH)/bzip2-$(BZIP2_VERSION).tmp/include - cp bzip2-$(BZIP2_VERSION)/bzlib.h $(BUILD_PATH)/bzip2-$(BZIP2_VERSION).tmp/include/ - mkdir -p $(BUILD_PATH)/bzip2-$(BZIP2_VERSION).tmp/lib - cp bzip2-$(BZIP2_VERSION)/libbz2.a $(BUILD_PATH)/bzip2-$(BZIP2_VERSION).tmp/lib/ - # cleanup - rm -r -f bzip2-$(BZIP2_VERSION) - mv $(BUILD_PATH)/bzip2-$(BZIP2_VERSION).tmp $(BUILD_PATH)/bzip2-$(BZIP2_VERSION) - -miniupnpc: $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION) - -$(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz: - wget http://miniupnp.free.fr/files/download.php?file=miniupnpc-$(MINIUPNPC_VERSION).tar.gz -O $(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz - -$(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION): $(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz - # prepare - rm -r -f $(BUILD_PATH)/miniupnpc-* - tar xvf $(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz - # build - cd miniupnpc-$(MINIUPNPC_VERSION) && export CC=gcc && make -f Makefile.mingw init libminiupnpc.a miniupnpc.dll - # copy files - mkdir -p $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/include/miniupnpc - cp miniupnpc-$(MINIUPNPC_VERSION)/*.h $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/include/miniupnpc/ - mkdir -p $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/lib - cp miniupnpc-$(MINIUPNPC_VERSION)/miniupnpc.lib $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/lib/ - mkdir -p $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/bin - cp miniupnpc-$(MINIUPNPC_VERSION)/miniupnpc.dll $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/bin/ - # cleanup - rm -r -f miniupnpc-$(MINIUPNPC_VERSION) - mv $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION) - -openssl: $(BUILD_PATH)/openssl-$(OPENSSL_VERSION) - -$(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz: - wget --no-check-certificate https://www.openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz -O $(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz - -$(BUILD_PATH)/openssl-$(OPENSSL_VERSION): $(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz - # prepare - rm -r -f $(BUILD_PATH)/openssl-* - tar xvf $(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz - # build - #cd openssl-$(OPENSSL_VERSION) && ./config --prefix="`pwd`/../$(BUILD_PATH)" - #cd openssl-$(OPENSSL_VERSION) && make install - cd openssl-$(OPENSSL_VERSION) && ./config shared - cd openssl-$(OPENSSL_VERSION) && make - # copy files - mkdir -p $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/include/openssl - cp openssl-$(OPENSSL_VERSION)/include/openssl/*.h $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/include/openssl/ - mkdir -p $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/bin - cp openssl-$(OPENSSL_VERSION)/libeay32.dll $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/bin/ - cp openssl-$(OPENSSL_VERSION)/ssleay32.dll $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/bin/ - mkdir -p $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/lib - cp openssl-$(OPENSSL_VERSION)/libcrypto.dll.a $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/lib/ - cp openssl-$(OPENSSL_VERSION)/libssl.dll.a $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/lib/ - # cleanup - rm -r -f openssl-$(OPENSSL_VERSION) - mv $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp $(BUILD_PATH)/openssl-$(OPENSSL_VERSION) - -speex: $(BUILD_PATH)/speex-$(SPEEX_VERSION) - -$(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz: - wget --no-check-certificate http://downloads.xiph.org/releases/speex/speex-$(SPEEX_VERSION).tar.gz -O $(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz - -$(BUILD_PATH)/speex-$(SPEEX_VERSION): $(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz - # prepare - rm -r -f $(BUILD_PATH)/speex-* - tar xvf $(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz - # build - cd speex-$(SPEEX_VERSION) && ./configure - #cd speex-$(SPEEX_VERSION) && make install exec_prefix="`pwd`/../$(BUILD_PATH)" - cd speex-$(SPEEX_VERSION) && make - # copy files - mkdir -p $(BUILD_PATH)/speex-$(SPEEX_VERSION).tmp/include/speex - cp speex-$(SPEEX_VERSION)/include/speex/*.h $(BUILD_PATH)/speex-$(SPEEX_VERSION).tmp/include/speex/ - mkdir -p $(BUILD_PATH)/speex-$(SPEEX_VERSION).tmp/lib - cp speex-$(SPEEX_VERSION)/libspeex/.libs/libspeex.a $(BUILD_PATH)/speex-$(SPEEX_VERSION).tmp/lib - # cleanup - rm -r -f speex-$(SPEEX_VERSION) - mv $(BUILD_PATH)/speex-$(SPEEX_VERSION).tmp $(BUILD_PATH)/speex-$(SPEEX_VERSION) - -speexdsp: $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION) - -$(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz: - wget --no-check-certificate http://downloads.xiph.org/releases/speex/speexdsp-$(SPEEXDSP_VERSION).tar.gz -O $(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz - -$(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION): $(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz - # prepare - rm -r -f $(BUILD_PATH)/speexdsp-* - tar xvf $(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz - # build - cd speexdsp-$(SPEEXDSP_VERSION) && ./configure - cd speexdsp-$(SPEEXDSP_VERSION) && make - # copy files - mkdir -p $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tmp/include/speex - cp speexdsp-$(SPEEXDSP_VERSION)/include/speex/*.h $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tmp/include/speex/ - mkdir -p $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tmp/lib - cp speexdsp-$(SPEEXDSP_VERSION)/libspeexdsp/.libs/libspeexdsp.a $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tmp/lib - # cleanup - rm -r -f speexdsp-$(SPEEXDSP_VERSION) - mv $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tmp $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION) - -opencv: $(BUILD_PATH)/opencv-$(OPENCV_VERSION) - -$(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz: - wget --no-check-certificate https://github.com/opencv/opencv/archive/$(OPENCV_VERSION).tar.gz -O $(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz - -$(BUILD_PATH)/opencv-$(OPENCV_VERSION): $(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz - # prepare - rm -r -f $(BUILD_PATH)/opencv-* - tar xvf $(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz - # build - mkdir -p opencv-$(OPENCV_VERSION)/build - #cd opencv-$(OPENCV_VERSION)/build && cmake .. -G"MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX="`pwd`/../../build" - cd opencv-$(OPENCV_VERSION)/build && cmake .. -G"MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DENABLE_CXX11=ON -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -DSTRSAFE_NO_DEPRECATE" -DCMAKE_INSTALL_PREFIX="`pwd`/install" - cd opencv-$(OPENCV_VERSION)/build && make install - # copy files - mkdir -p $(BUILD_PATH)/opencv-$(OPENCV_VERSION).tmp/include - cp -r opencv-$(OPENCV_VERSION)/build/install/include/* $(BUILD_PATH)/opencv-$(OPENCV_VERSION).tmp/include/ - mkdir -p $(BUILD_PATH)/opencv-$(OPENCV_VERSION).tmp/lib/opencv - cp -r opencv-$(OPENCV_VERSION)/build/install/x86/mingw/staticlib/* $(BUILD_PATH)/opencv-$(OPENCV_VERSION).tmp/lib/opencv/ - # cleanup - rm -r -f opencv-$(OPENCV_VERSION) - mv $(BUILD_PATH)/opencv-$(OPENCV_VERSION).tmp $(BUILD_PATH)/opencv-$(OPENCV_VERSION) - -libxml2: $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION) - -$(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz: - wget ftp://xmlsoft.org/libxml2/libxml2-$(LIBXML2_VERSION).tar.gz -O $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz - -$(BUILD_PATH)/libxml2-$(LIBXML2_VERSION): $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz - # prepare - rm -r -f $(BUILD_PATH)/libxml2-* - tar xvf $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz - # build - cd libxml2-$(LIBXML2_VERSION) && ./configure --without-iconv -enable-shared=no - #cd libxml2-$(LIBXML2_VERSION) && make install exec_prefix="`pwd`/../$(BUILD_PATH)" - cd libxml2-$(LIBXML2_VERSION) && make - # copy files - mkdir -p $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION).tmp/include/libxml - cp libxml2-$(LIBXML2_VERSION)/include/libxml/*.h $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION).tmp/include/libxml/ - mkdir -p $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION).tmp/lib - cp libxml2-$(LIBXML2_VERSION)/.libs/libxml2.a $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION).tmp/lib/ - # cleanup - #rm -r -f libxml2-$(LIBXML2_VERSION) # see libxslt - mv $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION).tmp $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION) - -libxslt: $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION) - -$(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz: - wget ftp://xmlsoft.org/libxml2/libxslt-$(LIBXSLT_VERSION).tar.gz -O $(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz - -$(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION): $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz $(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz - # prepare - rm -r -f $(BUILD_PATH)/libxslt-* - tar xvf $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz - tar xvf $(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz - # build - cd libxslt-$(LIBXSLT_VERSION) && ./configure --with-libxml-src=../libxml2-$(LIBXML2_VERSION) -enable-shared=no CFLAGS=-DLIBXML_STATIC - cd libxslt-$(LIBXSLT_VERSION) && make - # copy files - mkdir -p $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp/include/libxslt - cp libxslt-$(LIBXSLT_VERSION)/libxslt/*.h $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp/include/libxslt/ - mkdir -p $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp/lib - cp libxslt-$(LIBXSLT_VERSION)/libxslt/.libs/libxslt.a $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp/lib/ - cp libxslt-$(LIBXSLT_VERSION)/libexslt/.libs/libexslt.a $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp/lib/ - # cleanup - rm -r -f libxml2-$(LIBXML2_VERSION) - rm -r -f libxslt-$(LIBXSLT_VERSION) - mv $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION) - -curl: $(BUILD_PATH)/curl-$(CURL_VERSION) - -$(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz: - wget --no-check-certificate http://curl.haxx.se/download/curl-$(CURL_VERSION).tar.gz -O $(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz - -$(BUILD_PATH)/curl-$(CURL_VERSION): $(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz - # prepare - rm -r -f $(BUILD_PATH)/curl-* - tar xvf $(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz - # build - cd curl-$(CURL_VERSION) && ./configure --disable-shared --with-ssl="`pwd`/../$(BUILD_PATH)/openssl-$(OPENSSL_VERSION)" - #cd curl-$(CURL_VERSION) && make install exec_prefix="`pwd`/../$(BUILD_PATH)" - cd curl-$(CURL_VERSION) && make - # copy files - mkdir -p $(BUILD_PATH)/curl-$(CURL_VERSION).tmp/include/curl - cp curl-$(CURL_VERSION)/include/curl/*.h $(BUILD_PATH)/curl-$(CURL_VERSION).tmp/include/curl/ - mkdir -p $(BUILD_PATH)/curl-$(CURL_VERSION).tmp/lib - cp curl-$(CURL_VERSION)/lib/.libs/libcurl.a $(BUILD_PATH)/curl-$(CURL_VERSION).tmp/lib/ - # cleanup - rm -r -f curl-$(CURL_VERSION) - mv $(BUILD_PATH)/curl-$(CURL_VERSION).tmp $(BUILD_PATH)/curl-$(CURL_VERSION) - -sqlcipher: $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION) - -$(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz: - wget --no-check-certificate http://downloads.sourceforge.net/project/tcl/Tcl/$(TCL_VERSION)/tcl$(TCL_VERSION)-src.tar.gz -O $(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz - -$(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz: - wget --no-check-certificate https://github.com/sqlcipher/sqlcipher/archive/v$(SQLCIPHER_VERSION).tar.gz -O $(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz - -$(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION): $(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz $(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz - # prepare - rm -r -f $(BUILD_PATH)/sqlcipher-* - # tcl - tar xvf $(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz - mkdir -p tcl$(TCL_VERSION)/build - cd tcl$(TCL_VERSION)/build && ../win/configure - cd tcl$(TCL_VERSION)/build && make - #sqlcipher - tar xvf $(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz - cd sqlcipher-$(SQLCIPHER_VERSION) && ln -s ../tcl$(TCL_VERSION)/build/tclsh86.exe tclsh - mkdir -p tcl$(TCL_VERSION)/lib - ln -s `pwd`/tcl$(TCL_VERSION)/library `pwd`/tcl$(TCL_VERSION)/lib/tcl8.6 - # build - cd sqlcipher-$(SQLCIPHER_VERSION) && PATH=.:$$PATH:`pwd`/../tcl$(TCL_VERSION)/build && export LIBS="-L`pwd`/../$(BUILD_PATH)/openssl-$(OPENSSL_VERSION)/lib -lgdi32 $$LIBS" && ./configure --disable-shared --enable-static --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC -I`pwd`/../$(BUILD_PATH)/openssl-$(OPENSSL_VERSION)/include -I`pwd`/../tcl$(TCL_VERSION)/generic" LDFLAGS="-L`pwd`/../$(BUILD_PATH)/openssl-$(OPENSSL_VERSION)/lib -lcrypto -lgdi32" --with-tcl="`pwd`/../tcl$(TCL_VERSION)/build" && make install prefix="`pwd`/install" - # copy files - mkdir -p $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/include - cp -r sqlcipher-$(SQLCIPHER_VERSION)/install/include/* $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/include/ - mkdir -p $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/lib - cp sqlcipher-$(SQLCIPHER_VERSION)/install/lib/libsqlcipher.a $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/lib/ - mkdir -p $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/bin - cp sqlcipher-$(SQLCIPHER_VERSION)/install/bin/sqlcipher.exe $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/bin/ - # cleanup - rm -r -f sqlcipher-$(SQLCIPHER_VERSION) - rm -r -f tcl$(TCL_VERSION) - mv $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION) - -libmicrohttpd: $(BUILD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION) - -$(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz: - wget --no-check-certificate http://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz -O $(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz - -$(BUILD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION): $(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz - # prepare - rm -r -f $(BUILD_PATH)/libmicrohttpd-* - tar xvf $(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz - # build - cd libmicrohttpd-$(LIBMICROHTTPD_VERSION) && ./configure --disable-shared --enable-static --prefix="`pwd`/../$(BUILD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tmp" - cd libmicrohttpd-$(LIBMICROHTTPD_VERSION) && make install - # cleanup - rm -r -f libmicrohttpd-$(LIBMICROHTTPD_VERSION) - mv $(BUILD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tmp $(BUILD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION) - -ffmpeg: $(BUILD_PATH)/ffmpeg-$(FFMPEG_VERSION) - -$(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz: - wget --no-check-certificate https://ffmpeg.org/releases/ffmpeg-$(FFMPEG_VERSION).tar.gz -O $(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz - -$(BUILD_PATH)/ffmpeg-$(FFMPEG_VERSION): $(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz - # prepare - rm -r -f $(BUILD_PATH)/ffmpeg-* - tar xvf $(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz - # build - cd ffmpeg-$(FFMPEG_VERSION) && ./configure --disable-shared --enable-static --disable-programs --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-yasm --disable-everything --enable-encoder=mpeg4 --enable-decoder=mpeg4 --prefix="`pwd`/../$(BUILD_PATH)/ffmpeg-$(FFMPEG_VERSION).tmp" - cd ffmpeg-$(FFMPEG_VERSION) && make install - # cleanup - rm -r -f ffmpeg-$(FFMPEG_VERSION) - mv $(BUILD_PATH)/ffmpeg-$(FFMPEG_VERSION).tmp $(BUILD_PATH)/ffmpeg-$(FFMPEG_VERSION) - -rapidjson: $(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION) - -$(DOWNLOAD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tar.gz: - wget --no-check-certificate https://github.com/Tencent/rapidjson/archive/v$(RAPIDJSON_VERSION).tar.gz -O $(DOWNLOAD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tar.gz - -$(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION): $(DOWNLOAD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tar.gz - # prepare - rm -r -f $(BUILD_PATH)/rapidjson-* - tar xvf $(DOWNLOAD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tar.gz - # build - #mkdir -p rapidjson-$(RAPIDJSON_VERSION)/build - #cd rapidjson-$(RAPIDJSON_VERSION)/build && cmake .. -G"MSYS Makefiles" - #cd rapidjson-$(RAPIDJSON_VERSION)/build && make - # copy files - mkdir -p $(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tmp/include - cp -r rapidjson-$(RAPIDJSON_VERSION)/include/* $(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tmp/include/ - # cleanup - rm -r -f rapidjson-$(RAPIDJSON_VERSION) - mv $(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tmp $(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION) - -xapian: $(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION) - -$(DOWNLOAD_PATH)/xapian-core-$(XAPIAN_VERSION).tar.xz: - wget --no-check-certificate https://oligarchy.co.uk/xapian/$(XAPIAN_VERSION)/xapian-core-$(XAPIAN_VERSION).tar.xz -O $(DOWNLOAD_PATH)/xapian-core-$(XAPIAN_VERSION).tar.xz - -$(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION): $(DOWNLOAD_PATH)/xapian-core-$(XAPIAN_VERSION).tar.xz - # prepare - rm -r -f $(BUILD_PATH)/xapian-core-* - tar xvf $(DOWNLOAD_PATH)/xapian-core-$(XAPIAN_VERSION).tar.xz - # build - #cd xapian-core-$(XAPIAN_VERSION) && ./configure --disable-shared --enable-static --prefix="`pwd`/../$(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION).tmp" - #cd xapian-core-$(XAPIAN_VERSION) && make install - cd xapian-core-$(XAPIAN_VERSION) && ./configure --disable-shared --enable-static - cd xapian-core-$(XAPIAN_VERSION) && make - # copy files - mkdir -p $(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION).tmp/include - cp -r xapian-core-$(XAPIAN_VERSION)/include/* $(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION).tmp/include/ - rm $(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION).tmp/include/Makefile* - mkdir -p $(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION).tmp/lib - cp -r xapian-core-$(XAPIAN_VERSION)/.libs/libxapian.a $(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION).tmp/lib/ - # cleanup - rm -r -f xapian-core-$(XAPIAN_VERSION) - mv $(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION).tmp $(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION) - -copylibs: - rm -r -f $(LIBS_PATH) ; \ - mkdir -p $(LIBS_PATH) ; \ - cp $(BUILD_PATH)/gcc-version $(LIBS_PATH) ; \ - find $(BUILD_PATH) -mindepth 1 -maxdepth 1 -type d -not -name "*.tmp" -print -exec cp -r {}/. $(LIBS_PATH) \; ; \ diff --git a/build_scripts/Windows/build-libs/build-libs.bat b/build_scripts/Windows/build-libs/build-libs.bat deleted file mode 100644 index e0c5af09b..000000000 --- a/build_scripts/Windows/build-libs/build-libs.bat +++ /dev/null @@ -1,47 +0,0 @@ -:: Usage: -:: call build-libs.bat [make tasks] - -@echo off - -setlocal - -:: Parameter -set MakeParam="DOWNLOAD_PATH=../download" - -set MakeTask= -:param_loop -if "%~1" NEQ "" ( - set MakeTask=%MakeTask% %1 - shift /1 - goto param_loop -) - -:: Initialize environment -call "%~dp0..\env.bat" -if errorlevel 1 goto error_env -call "%EnvPath%\env-msys.bat" -if errorlevel 1 goto error_env - -:: Check MSYS environment -if not exist "%EnvMSYSSH%" %cecho% error "Please install MSYS first." & exit /B 1 - -:: Initialize environment -call "%~dp0env.bat" -if errorlevel 1 goto error_env - -:: Add tools path to PATH environment -set PATH=%EnvToolsPath%;%PATH% - -call "%ToolsPath%\msys-path.bat" "%~dp0" MSYSCurPath -call "%ToolsPath%\msys-path.bat" "%BuildLibsPath%" MSYSBuildLibsPath - -if not exist "%BuildLibsPath%" mkdir "%BuildLibsPath%" - -%EnvMSYSCmd% "cd "%MSYSBuildLibsPath%" && make -f %MSYSCurPath%/makefile %MakeParam% %MakeTask%" - -exit /B %ERRORLEVEL% - -:error_env -echo Failed to initialize environment. -endlocal -exit /B 1 diff --git a/build_scripts/Windows/env/env-msys.bat b/build_scripts/Windows/env/env-msys.bat deleted file mode 100644 index 99d988e1e..000000000 --- a/build_scripts/Windows/env/env-msys.bat +++ /dev/null @@ -1,22 +0,0 @@ -:: Usage: -:: call env-msys.bat [reinstall|clean] - -:: Initialize environment -call "%~dp0env.bat" -if errorlevel 1 goto error_env - -set EnvMSYSPath=%EnvRootPath%\msys - -call "%~dp0tools\prepare-msys.bat" %1 -if errorlevel 1 exit /B %ERRORLEVEL% - -set EnvMSYSSH=%EnvMSYSPath%\msys\1.0\bin\sh.exe -if not exist "%EnvMSYSSH%" if errorlevel 1 goto error_env - -set EnvMSYSCmd="%EnvMSYSSH%" --login -i -c - -exit /B 0 - -:error_env -echo Failed to initialize environment. -exit /B 1 diff --git a/build_scripts/Windows/env/tools/prepare-msys.bat b/build_scripts/Windows/env/tools/prepare-msys.bat deleted file mode 100644 index 23dd391f4..000000000 --- a/build_scripts/Windows/env/tools/prepare-msys.bat +++ /dev/null @@ -1,81 +0,0 @@ -:: Usage: -:: call prepare-msys.bat [reinstall|clean] - -setlocal enabledelayedexpansion - -if "%EnvMSYSPath%"=="" exit /B 1 -if not exist "%EnvRootPath%"=="" exit /B 1 - -copy "%~dp0root\update-msys.bat" "%EnvRootPath%" >nul - -if "%~1"=="clean" ( - %cecho% info "Clean MSYS" - call "%ToolsPath%\remove-dir.bat" "%EnvMSYSPath%" - goto exit -) - -if exist "%EnvMSYSPath%\bin\mingw-get.exe" ( - if "%~1"=="reinstall" ( - choice /M "Found existing MSYS version. Do you want to proceed?" - if !ERRORLEVEL!==2 goto exit - ) else ( - goto exit - ) -) - -set MSYSInstall=mingw-get-0.6.2-mingw32-beta-20131004-1-bin.zip -set MSYSUrl=http://sourceforge.net/projects/mingw/files/Installer/mingw-get/mingw-get-0.6.2-beta-20131004-1/%MSYSInstall%/download -set CMakeInstall=cmake-3.1.0-win32-x86.zip -set CMakeUrl=http://www.cmake.org/files/v3.1/%CMakeInstall% -set CMakeUnpackPath=%EnvMSYSPath%\msys\1.0 - -%cecho% info "Remove previous MSYS version" -call "%ToolsPath%\remove-dir.bat" "%EnvMSYSPath%" - -%cecho% info "Download installation files" -if not exist "%EnvDownloadPath%\%MSYSInstall%" call "%ToolsPath%\download-file.bat" "%MSYSUrl%" "%EnvDownloadPath%\%MSYSInstall%" -if not exist "%EnvDownloadPath%\%MSYSInstall%" %cecho% error "Cannot download MSYS" & goto error - -if not exist "%EnvDownloadPath%\%CMakeInstall%" call "%ToolsPath%\download-file.bat" "%CMakeUrl%" "%EnvDownloadPath%\%CMakeInstall%" -if not exist "%EnvDownloadPath%\%CMakeInstall%" %cecho% error "Cannot download CMake" & goto error - -%cecho% info "Unpack MSYS" -"%EnvSevenZipExe%" x -o"%EnvMSYSPath%" "%EnvDownloadPath%\%MSYSInstall%" - -%cecho% info "Install MSYS" -if not exist "%EnvMSYSPath%\var\lib\mingw-get\data\profile.xml" copy "%EnvMSYSPath%\var\lib\mingw-get\data\defaults.xml" "%EnvMSYSPath%\var\lib\mingw-get\data\profile.xml" -pushd "%EnvMSYSPath%\bin" -mingw-get.exe install mingw32-mingw-get -mingw-get.exe install msys-coreutils -mingw-get.exe install msys-base -mingw-get.exe install msys-autoconf -mingw-get.exe install msys-automake -mingw-get.exe install msys-autogen -mingw-get.exe install msys-mktemp -rem Use own wget binary, because MSYS version of wget is to old -rem mingw-get.exe install msys-wget -popd - -%cecho% info "Unpack CMake" -"%EnvSevenZipExe%" x -o"%CMakeUnpackPath%" "%EnvDownloadPath%\%CMakeInstall%" - -%cecho% info "Install CMake" -set CMakeVersion= -for /D %%F in (%CMakeUnpackPath%\cmake*) do set CMakeVersion=%%~nxF -if "%CMakeVersion%"=="" %cecho% error "CMake version not found." & goto :exit -%cecho% info "Found CMake version %CMakeVersion%" - -set FoundProfile= -for /f "tokens=3" %%F in ('find /c /i "%CMakeVersion%" "%EnvMSYSPath%\msys\1.0\etc\profile"') do set FoundProfile=%%F - -if "%FoundProfile%"=="0" ( - echo export PATH="${PATH}:/%CMakeVersion%/bin">>"%EnvMSYSPath%\msys\1.0\etc\profile" -) - -:exit -endlocal -exit /B 0 - -:error -endlocal -exit /B 1 diff --git a/build_scripts/Windows/env/tools/root/update-msys.bat b/build_scripts/Windows/env/tools/root/update-msys.bat deleted file mode 100644 index b0a109d01..000000000 --- a/build_scripts/Windows/env/tools/root/update-msys.bat +++ /dev/null @@ -1,15 +0,0 @@ -@echo off - -setlocal - -set MSYSPath=%~dp0msys - -if not exist "%MSYSPath%\bin\mingw-get.exe" echo MSYS is not installed& exit /B 0 - -echo Update MSYS -pushd "%MSYSPath%\bin" -mingw-get.exe update -mingw-get.exe upgrade -popd - -exit /B %ERRORLEVEL% From 096c9961539ab8716c62b8d8623677d01afaff03 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Wed, 29 Jul 2020 18:11:53 +0200 Subject: [PATCH 55/95] Updated Windows build tools --- build_scripts/Windows/env/tools/prepare-tools.bat | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build_scripts/Windows/env/tools/prepare-tools.bat b/build_scripts/Windows/env/tools/prepare-tools.bat index e8bc7a951..da798ab2a 100644 --- a/build_scripts/Windows/env/tools/prepare-tools.bat +++ b/build_scripts/Windows/env/tools/prepare-tools.bat @@ -4,8 +4,8 @@ if "%EnvRootPath%"=="" exit /B 1 set CEchoUrl=https://github.com/lordmulder/cecho/releases/download/2015-10-10/cecho.2015-10-10.zip set CEchoInstall=cecho.2015-10-10.zip -set SevenZipUrl=https://sourceforge.net/projects/sevenzip/files/7-Zip/18.05/7z1805.msi/download -set SevenZipInstall=7z1805.msi +set SevenZipUrl=https://sourceforge.net/projects/sevenzip/files/7-Zip/19.00/7z1900.msi/download +set SevenZipInstall=7z1900.msi ::set CurlUrl=https://bintray.com/artifact/download/vszakats/generic/curl-7.50.1-win32-mingw.7z ::set CurlInstall=curl-7.50.1-win32-mingw.7z set WgetUrl=https://eternallybored.org/misc/wget/1.19.4/32/wget.exe @@ -19,8 +19,8 @@ set UnixToolsInstall=UnxUpdates.zip set NSISUrl=http://prdownloads.sourceforge.net/nsis/nsis-3.0-setup.exe?download set NSISInstall=nsis-3.0-setup.exe set NSISInstallPath=%EnvToolsPath%\NSIS -set MinGitInstall=MinGit-2.19.1-32-bit.zip -set MinGitUrl=https://github.com/git-for-windows/git/releases/download/v2.19.1.windows.1/%MinGitInstall% +set MinGitInstall=MinGit-2.28.0-32-bit.zip +set MinGitUrl=https://github.com/git-for-windows/git/releases/download/v2.28.0.windows.1/%MinGitInstall% set MinGitInstallPath=%EnvToolsPath%\MinGit set SigcheckInstall=Sigcheck.zip set SigcheckUrl=https://download.sysinternals.com/files/%SigcheckInstall% From ef03b129569259128c5dbbd53c7d54fbe84f892c Mon Sep 17 00:00:00 2001 From: thunder2 Date: Mon, 27 Feb 2017 08:16:48 +0100 Subject: [PATCH 56/95] Use MSYS2 to build external libraries for Windows compile --- build_scripts/Windows/build-libs/Makefile | 396 ++++++++++++++++++ .../Windows/build-libs/build-libs.bat | 51 +++ build_scripts/Windows/build-libs/env.bat | 5 +- build_scripts/Windows/build/env.bat | 9 +- build_scripts/Windows/env/env-msys2.bat | 39 ++ build_scripts/Windows/env/env.bat | 2 +- .../Windows/env/tools/prepare-msys2.bat | 83 ++++ .../Windows/env/tools/prepare-tools.bat | 23 + .../Windows/env/tools/root/update-msys2.bat | 19 + .../Windows/tools/get-gcc-version.bat | 33 +- 10 files changed, 647 insertions(+), 13 deletions(-) create mode 100644 build_scripts/Windows/build-libs/Makefile create mode 100644 build_scripts/Windows/build-libs/build-libs.bat create mode 100644 build_scripts/Windows/env/env-msys2.bat create mode 100644 build_scripts/Windows/env/tools/prepare-msys2.bat create mode 100644 build_scripts/Windows/env/tools/root/update-msys2.bat diff --git a/build_scripts/Windows/build-libs/Makefile b/build_scripts/Windows/build-libs/Makefile new file mode 100644 index 000000000..c76269d1e --- /dev/null +++ b/build_scripts/Windows/build-libs/Makefile @@ -0,0 +1,396 @@ +ZLIB_VERSION=1.2.3 +BZIP2_VERSION=1.0.6 +MINIUPNPC_VERSION=2.0 +OPENSSL_VERSION=1.1.1g +SPEEX_VERSION=1.2.0 +SPEEXDSP_VERSION=1.2rc3 +OPENCV_VERSION=3.4.11 +LIBXML2_VERSION=2.9.7 +LIBXSLT_VERSION=1.1.32 +CURL_VERSION=7.58.0 +TCL_VERSION=8.6.10 +SQLCIPHER_VERSION=4.4.0 +LIBMICROHTTPD_VERSION=0.9.59 +FFMPEG_VERSION=3.4 +RAPIDJSON_VERSION=1.1.0 +XAPIAN_VERSION=1.4.7 + +DOWNLOAD_PATH?=download +BUILD_PATH=build +LIBS_PATH?=libs + +all: dirs zlib bzip2 miniupnpc openssl speex speexdsp opencv libxml2 libxslt curl sqlcipher libmicrohttpd ffmpeg rapidjson xapian copylibs + +download: \ + $(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz \ + $(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz \ + $(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz \ + $(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz \ + $(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz \ + $(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz \ + $(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz \ + $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz \ + $(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz \ + $(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz \ + $(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz \ + $(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz \ + $(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz \ + $(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz \ + $(DOWNLOAD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tar.gz \ + $(DOWNLOAD_PATH)/xapian-core-$(XAPIAN_VERSION).tar.xz + +clean: + rm -r -f $(BUILD_PATH) + rm -r -f $(LIBS_PATH) + +dirs: + mkdir -p $(DOWNLOAD_PATH) + mkdir -p $(BUILD_PATH) + gcc --version | head --lines 1 | tr ' ' '\n' | tail -1 >$(BUILD_PATH)/gcc-version + +$(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz: + wget --no-check-certificate http://sourceforge.net/projects/libpng/files/zlib/$(ZLIB_VERSION)/zlib-$(ZLIB_VERSION).tar.gz/download -O $(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz + +zlib: $(BUILD_PATH)/zlib-$(ZLIB_VERSION) + +$(BUILD_PATH)/zlib-$(ZLIB_VERSION): $(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz + # prepare + rm -r -f $(BUILD_PATH)/zlib-* + tar xvf $(DOWNLOAD_PATH)/zlib-$(ZLIB_VERSION).tar.gz + # build + cd zlib-$(ZLIB_VERSION) && ./configure + #cd zlib-$(ZLIB_VERSION) && make install prefix="`pwd`/../$(BUILD_PATH)" + cd zlib-$(ZLIB_VERSION) && make + # copy files + mkdir -p $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp/include + cp zlib-$(ZLIB_VERSION)/zlib.h $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp/include/ + cp zlib-$(ZLIB_VERSION)/zconf.h $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp/include/ + mkdir -p $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp/lib + cp zlib-$(ZLIB_VERSION)/libz.a $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp/lib/ + # cleanup + rm -r -f zlib-$(ZLIB_VERSION) + mv $(BUILD_PATH)/zlib-$(ZLIB_VERSION).tmp $(BUILD_PATH)/zlib-$(ZLIB_VERSION) + +bzip2: $(BUILD_PATH)/bzip2-$(BZIP2_VERSION) + +$(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz: + wget https://sourceforge.net/projects/bzip2/files/bzip2-$(BZIP2_VERSION).tar.gz/download -O $(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz + +$(BUILD_PATH)/bzip2-$(BZIP2_VERSION): $(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz + # prepare + rm -r -f $(BUILD_PATH)/bzip2-* + tar xvf $(DOWNLOAD_PATH)/bzip2-$(BZIP2_VERSION).tar.gz + # build + #cd bzip2-$(BZIP2_VERSION) && make install PREFIX="`pwd`/../$(BUILD_PATH)" + cd bzip2-$(BZIP2_VERSION) && make + # copy files + mkdir -p $(BUILD_PATH)/bzip2-$(BZIP2_VERSION).tmp/include + cp bzip2-$(BZIP2_VERSION)/bzlib.h $(BUILD_PATH)/bzip2-$(BZIP2_VERSION).tmp/include/ + mkdir -p $(BUILD_PATH)/bzip2-$(BZIP2_VERSION).tmp/lib + cp bzip2-$(BZIP2_VERSION)/libbz2.a $(BUILD_PATH)/bzip2-$(BZIP2_VERSION).tmp/lib/ + # cleanup + rm -r -f bzip2-$(BZIP2_VERSION) + mv $(BUILD_PATH)/bzip2-$(BZIP2_VERSION).tmp $(BUILD_PATH)/bzip2-$(BZIP2_VERSION) + +miniupnpc: $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION) + +$(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz: + wget http://miniupnp.free.fr/files/download.php?file=miniupnpc-$(MINIUPNPC_VERSION).tar.gz -O $(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz + +$(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION): $(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz + # prepare + rm -r -f $(BUILD_PATH)/miniupnpc-* + tar xvf $(DOWNLOAD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tar.gz + # build + cd miniupnpc-$(MINIUPNPC_VERSION) && export CC=gcc && export PATH=.:$$PATH && make -f Makefile.mingw init libminiupnpc.a miniupnpc.dll + # copy files + mkdir -p $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/include/miniupnpc + cp miniupnpc-$(MINIUPNPC_VERSION)/*.h $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/include/miniupnpc/ + mkdir -p $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/lib + cp miniupnpc-$(MINIUPNPC_VERSION)/miniupnpc.lib $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/lib/ + mkdir -p $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/bin + cp miniupnpc-$(MINIUPNPC_VERSION)/miniupnpc.dll $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp/bin/ + # cleanup + rm -r -f miniupnpc-$(MINIUPNPC_VERSION) + mv $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION).tmp $(BUILD_PATH)/miniupnpc-$(MINIUPNPC_VERSION) + +openssl: $(BUILD_PATH)/openssl-$(OPENSSL_VERSION) + +$(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz: + wget --no-check-certificate https://www.openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz -O $(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz + +$(BUILD_PATH)/openssl-$(OPENSSL_VERSION): $(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz + # prepare + rm -r -f $(BUILD_PATH)/openssl-* + tar xvf $(DOWNLOAD_PATH)/openssl-$(OPENSSL_VERSION).tar.gz + # build + #cd openssl-$(OPENSSL_VERSION) && ./config --prefix="`pwd`/../$(BUILD_PATH)" + #cd openssl-$(OPENSSL_VERSION) && make install + cd openssl-$(OPENSSL_VERSION) && ./config shared + cd openssl-$(OPENSSL_VERSION) && make + # copy files + mkdir -p $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/include/openssl + cp openssl-$(OPENSSL_VERSION)/include/openssl/*.h $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/include/openssl/ + mkdir -p $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/bin + if [ $(MSYSTEM) = "MINGW32" ] ; then cp openssl-$(OPENSSL_VERSION)/libcrypto-1_1.dll $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/bin/ ; fi + if [ $(MSYSTEM) = "MINGW32" ] ; then cp openssl-$(OPENSSL_VERSION)/libcrypto-1_1.dll $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/bin/ ; fi + if [ $(MSYSTEM) = "MINGW32" ] ; then cp openssl-$(OPENSSL_VERSION)/libssl-1_1.dll $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/bin/ ; fi + if [ $(MSYSTEM) = "MINGW64" ] ; then cp openssl-$(OPENSSL_VERSION)/libcrypto-1_1-x64.dll $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/bin/ ; fi + if [ $(MSYSTEM) = "MINGW64" ] ; then cp openssl-$(OPENSSL_VERSION)/libssl-1_1-x64.dll $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/bin/ ; fi + mkdir -p $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/lib + cp openssl-$(OPENSSL_VERSION)/libcrypto.dll.a $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/lib/ + cp openssl-$(OPENSSL_VERSION)/libssl.dll.a $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp/lib/ + # cleanup + rm -r -f openssl-$(OPENSSL_VERSION) + mv $(BUILD_PATH)/openssl-$(OPENSSL_VERSION).tmp $(BUILD_PATH)/openssl-$(OPENSSL_VERSION) + +speex: $(BUILD_PATH)/speex-$(SPEEX_VERSION) + +$(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz: + wget --no-check-certificate http://downloads.xiph.org/releases/speex/speex-$(SPEEX_VERSION).tar.gz -O $(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz + +$(BUILD_PATH)/speex-$(SPEEX_VERSION): $(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz + # prepare + rm -r -f $(BUILD_PATH)/speex-* + tar xvf $(DOWNLOAD_PATH)/speex-$(SPEEX_VERSION).tar.gz + # build + cd speex-$(SPEEX_VERSION) && ./configure + #cd speex-$(SPEEX_VERSION) && make install exec_prefix="`pwd`/../$(BUILD_PATH)" + cd speex-$(SPEEX_VERSION) && make + # copy files + mkdir -p $(BUILD_PATH)/speex-$(SPEEX_VERSION).tmp/include/speex + cp speex-$(SPEEX_VERSION)/include/speex/*.h $(BUILD_PATH)/speex-$(SPEEX_VERSION).tmp/include/speex/ + mkdir -p $(BUILD_PATH)/speex-$(SPEEX_VERSION).tmp/lib + cp speex-$(SPEEX_VERSION)/libspeex/.libs/libspeex.a $(BUILD_PATH)/speex-$(SPEEX_VERSION).tmp/lib + # cleanup + rm -r -f speex-$(SPEEX_VERSION) + mv $(BUILD_PATH)/speex-$(SPEEX_VERSION).tmp $(BUILD_PATH)/speex-$(SPEEX_VERSION) + +speexdsp: $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION) + +$(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz: + wget --no-check-certificate http://downloads.xiph.org/releases/speex/speexdsp-$(SPEEXDSP_VERSION).tar.gz -O $(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz + +$(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION): $(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz + # prepare + rm -r -f $(BUILD_PATH)/speexdsp-* + tar xvf $(DOWNLOAD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tar.gz + # build + cd speexdsp-$(SPEEXDSP_VERSION) && ./configure + cd speexdsp-$(SPEEXDSP_VERSION) && make + # copy files + mkdir -p $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tmp/include/speex + cp speexdsp-$(SPEEXDSP_VERSION)/include/speex/*.h $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tmp/include/speex/ + mkdir -p $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tmp/lib + cp speexdsp-$(SPEEXDSP_VERSION)/libspeexdsp/.libs/libspeexdsp.a $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tmp/lib + # cleanup + rm -r -f speexdsp-$(SPEEXDSP_VERSION) + mv $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION).tmp $(BUILD_PATH)/speexdsp-$(SPEEXDSP_VERSION) + +opencv: $(BUILD_PATH)/opencv-$(OPENCV_VERSION) + +$(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz: + wget --no-check-certificate https://github.com/opencv/opencv/archive/$(OPENCV_VERSION).tar.gz -O $(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz + +$(BUILD_PATH)/opencv-$(OPENCV_VERSION): $(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz + # prepare + rm -r -f $(BUILD_PATH)/opencv-* + tar xvf $(DOWNLOAD_PATH)/opencv-$(OPENCV_VERSION).tar.gz + # build + mkdir -p opencv-$(OPENCV_VERSION)/build + #cd opencv-$(OPENCV_VERSION)/build && cmake .. -G"MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX="`pwd`/../../build" + cd opencv-$(OPENCV_VERSION)/build && cmake .. -G"MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DENABLE_CXX11=ON -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -DSTRSAFE_NO_DEPRECATE" -DCMAKE_INSTALL_PREFIX="`pwd`/install" + cd opencv-$(OPENCV_VERSION)/build && make install + # copy files + mkdir -p $(BUILD_PATH)/opencv-$(OPENCV_VERSION).tmp/include + cp -r opencv-$(OPENCV_VERSION)/build/install/include/* $(BUILD_PATH)/opencv-$(OPENCV_VERSION).tmp/include/ + mkdir -p $(BUILD_PATH)/opencv-$(OPENCV_VERSION).tmp/lib/opencv + cp -r opencv-$(OPENCV_VERSION)/build/install/x64/mingw/staticlib/* $(BUILD_PATH)/opencv-$(OPENCV_VERSION).tmp/lib/opencv/ + # cleanup + rm -r -f opencv-$(OPENCV_VERSION) + mv $(BUILD_PATH)/opencv-$(OPENCV_VERSION).tmp $(BUILD_PATH)/opencv-$(OPENCV_VERSION) + +libxml2: $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION) + +$(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz: + wget ftp://xmlsoft.org/libxml2/libxml2-$(LIBXML2_VERSION).tar.gz -O $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz + +$(BUILD_PATH)/libxml2-$(LIBXML2_VERSION): $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz + # prepare + rm -r -f $(BUILD_PATH)/libxml2-* + tar xvf $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz + # build + cd libxml2-$(LIBXML2_VERSION) && ./configure --without-iconv -enable-shared=no + #cd libxml2-$(LIBXML2_VERSION) && make install exec_prefix="`pwd`/../$(BUILD_PATH)" + cd libxml2-$(LIBXML2_VERSION) && make + # copy files + mkdir -p $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION).tmp/include/libxml + cp libxml2-$(LIBXML2_VERSION)/include/libxml/*.h $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION).tmp/include/libxml/ + mkdir -p $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION).tmp/lib + cp libxml2-$(LIBXML2_VERSION)/.libs/libxml2.a $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION).tmp/lib/ + # cleanup + #rm -r -f libxml2-$(LIBXML2_VERSION) # see libxslt + mv $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION).tmp $(BUILD_PATH)/libxml2-$(LIBXML2_VERSION) + +libxslt: $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION) + +$(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz: + wget ftp://xmlsoft.org/libxml2/libxslt-$(LIBXSLT_VERSION).tar.gz -O $(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz + +$(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION): $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz $(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz + # prepare + rm -r -f $(BUILD_PATH)/libxslt-* + tar xvf $(DOWNLOAD_PATH)/libxml2-$(LIBXML2_VERSION).tar.gz + tar xvf $(DOWNLOAD_PATH)/libxslt-$(LIBXSLT_VERSION).tar.gz + # build + cd libxslt-$(LIBXSLT_VERSION) && ./configure --with-libxml-src=../libxml2-$(LIBXML2_VERSION) -enable-shared=no CFLAGS=-DLIBXML_STATIC + cd libxslt-$(LIBXSLT_VERSION) && make + # copy files + mkdir -p $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp/include/libxslt + cp libxslt-$(LIBXSLT_VERSION)/libxslt/*.h $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp/include/libxslt/ + mkdir -p $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp/lib + cp libxslt-$(LIBXSLT_VERSION)/libxslt/.libs/libxslt.a $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp/lib/ + cp libxslt-$(LIBXSLT_VERSION)/libexslt/.libs/libexslt.a $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp/lib/ + # cleanup + rm -r -f libxml2-$(LIBXML2_VERSION) + rm -r -f libxslt-$(LIBXSLT_VERSION) + mv $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION).tmp $(BUILD_PATH)/libxslt-$(LIBXSLT_VERSION) + +curl: $(BUILD_PATH)/curl-$(CURL_VERSION) + +$(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz: + wget --no-check-certificate http://curl.haxx.se/download/curl-$(CURL_VERSION).tar.gz -O $(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz + +$(BUILD_PATH)/curl-$(CURL_VERSION): $(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz + # prepare + rm -r -f $(BUILD_PATH)/curl-* + tar xvf $(DOWNLOAD_PATH)/curl-$(CURL_VERSION).tar.gz + # build + cd curl-$(CURL_VERSION) && ./configure --disable-shared --with-ssl="`pwd`/../$(BUILD_PATH)/openssl-$(OPENSSL_VERSION)" + #cd curl-$(CURL_VERSION) && make install exec_prefix="`pwd`/../$(BUILD_PATH)" + cd curl-$(CURL_VERSION) && make + # copy files + mkdir -p $(BUILD_PATH)/curl-$(CURL_VERSION).tmp/include/curl + cp curl-$(CURL_VERSION)/include/curl/*.h $(BUILD_PATH)/curl-$(CURL_VERSION).tmp/include/curl/ + mkdir -p $(BUILD_PATH)/curl-$(CURL_VERSION).tmp/lib + cp curl-$(CURL_VERSION)/lib/.libs/libcurl.a $(BUILD_PATH)/curl-$(CURL_VERSION).tmp/lib/ + # cleanup + rm -r -f curl-$(CURL_VERSION) + mv $(BUILD_PATH)/curl-$(CURL_VERSION).tmp $(BUILD_PATH)/curl-$(CURL_VERSION) + +sqlcipher: $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION) + +$(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz: + wget --no-check-certificate http://downloads.sourceforge.net/project/tcl/Tcl/$(TCL_VERSION)/tcl$(TCL_VERSION)-src.tar.gz -O $(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz + +$(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz: + wget --no-check-certificate https://github.com/sqlcipher/sqlcipher/archive/v$(SQLCIPHER_VERSION).tar.gz -O $(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz + +$(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION): $(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz $(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz + # prepare + rm -r -f $(BUILD_PATH)/sqlcipher-* + # tcl + tar xvf $(DOWNLOAD_PATH)/tcl$(TCL_VERSION)-src.tar.gz + mkdir -p tcl$(TCL_VERSION)/build + cd tcl$(TCL_VERSION)/build && ../win/configure + cd tcl$(TCL_VERSION)/build && make + #sqlcipher + tar xvf $(DOWNLOAD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tar.gz + cd sqlcipher-$(SQLCIPHER_VERSION) && ln -s ../tcl$(TCL_VERSION)/build/tclsh86.exe tclsh + mkdir -p tcl$(TCL_VERSION)/lib + ln -s `pwd`/tcl$(TCL_VERSION)/library `pwd`/tcl$(TCL_VERSION)/lib/tcl8.6 + # build + cd sqlcipher-$(SQLCIPHER_VERSION) && PATH=.:$$PATH:`pwd`/../tcl$(TCL_VERSION)/build && export LIBS="-L`pwd`/../$(BUILD_PATH)/openssl-$(OPENSSL_VERSION)/lib -lgdi32 $$LIBS" && ./configure --disable-shared --enable-static --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC -I`pwd`/../$(BUILD_PATH)/openssl-$(OPENSSL_VERSION)/include -I`pwd`/../tcl$(TCL_VERSION)/generic" LDFLAGS="-L`pwd`/../$(BUILD_PATH)/openssl-$(OPENSSL_VERSION)/lib -lcrypto -lgdi32" --with-tcl="`pwd`/../tcl$(TCL_VERSION)/build" && make install prefix="`pwd`/install" + # copy files + mkdir -p $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/include + cp -r sqlcipher-$(SQLCIPHER_VERSION)/install/include/* $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/include/ + mkdir -p $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/lib + cp sqlcipher-$(SQLCIPHER_VERSION)/install/lib/libsqlcipher.a $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/lib/ + mkdir -p $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/bin + cp sqlcipher-$(SQLCIPHER_VERSION)/install/bin/sqlcipher.exe $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp/bin/ + # cleanup + rm -r -f sqlcipher-$(SQLCIPHER_VERSION) + rm -r -f tcl$(TCL_VERSION) + mv $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION).tmp $(BUILD_PATH)/sqlcipher-$(SQLCIPHER_VERSION) + +libmicrohttpd: $(BUILD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION) + +$(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz: + wget --no-check-certificate http://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz -O $(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz + +$(BUILD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION): $(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz + # prepare + rm -r -f $(BUILD_PATH)/libmicrohttpd-* + tar xvf $(DOWNLOAD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tar.gz + # build + cd libmicrohttpd-$(LIBMICROHTTPD_VERSION) && ./configure --disable-shared --enable-static --prefix="`pwd`/../$(BUILD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tmp" + cd libmicrohttpd-$(LIBMICROHTTPD_VERSION) && make install + # cleanup + rm -r -f libmicrohttpd-$(LIBMICROHTTPD_VERSION) + mv $(BUILD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION).tmp $(BUILD_PATH)/libmicrohttpd-$(LIBMICROHTTPD_VERSION) + +ffmpeg: $(BUILD_PATH)/ffmpeg-$(FFMPEG_VERSION) + +$(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz: + wget --no-check-certificate https://ffmpeg.org/releases/ffmpeg-$(FFMPEG_VERSION).tar.gz -O $(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz + +$(BUILD_PATH)/ffmpeg-$(FFMPEG_VERSION): $(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz + # prepare + rm -r -f $(BUILD_PATH)/ffmpeg-* + tar xvf $(DOWNLOAD_PATH)/ffmpeg-$(FFMPEG_VERSION).tar.gz + # build + cd ffmpeg-$(FFMPEG_VERSION) && ./configure --disable-shared --enable-static --disable-programs --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-yasm --disable-everything --enable-encoder=mpeg4 --enable-decoder=mpeg4 --prefix="`pwd`/../$(BUILD_PATH)/ffmpeg-$(FFMPEG_VERSION).tmp" + cd ffmpeg-$(FFMPEG_VERSION) && make install + # cleanup + rm -r -f ffmpeg-$(FFMPEG_VERSION) + mv $(BUILD_PATH)/ffmpeg-$(FFMPEG_VERSION).tmp $(BUILD_PATH)/ffmpeg-$(FFMPEG_VERSION) + +rapidjson: $(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION) + +$(DOWNLOAD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tar.gz: + wget --no-check-certificate https://github.com/Tencent/rapidjson/archive/v$(RAPIDJSON_VERSION).tar.gz -O $(DOWNLOAD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tar.gz + +$(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION): $(DOWNLOAD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tar.gz + # prepare + rm -r -f $(BUILD_PATH)/rapidjson-* + tar xvf $(DOWNLOAD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tar.gz + # build + #mkdir -p rapidjson-$(RAPIDJSON_VERSION)/build + #cd rapidjson-$(RAPIDJSON_VERSION)/build && cmake .. -G"MSYS Makefiles" + #cd rapidjson-$(RAPIDJSON_VERSION)/build && make + # copy files + mkdir -p $(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tmp/include + cp -r rapidjson-$(RAPIDJSON_VERSION)/include/* $(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tmp/include/ + # cleanup + rm -r -f rapidjson-$(RAPIDJSON_VERSION) + mv $(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION).tmp $(BUILD_PATH)/rapidjson-$(RAPIDJSON_VERSION) + +xapian: $(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION) + +$(DOWNLOAD_PATH)/xapian-core-$(XAPIAN_VERSION).tar.xz: + wget --no-check-certificate https://oligarchy.co.uk/xapian/$(XAPIAN_VERSION)/xapian-core-$(XAPIAN_VERSION).tar.xz -O $(DOWNLOAD_PATH)/xapian-core-$(XAPIAN_VERSION).tar.xz + +$(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION): $(DOWNLOAD_PATH)/xapian-core-$(XAPIAN_VERSION).tar.xz + # prepare + rm -r -f $(BUILD_PATH)/xapian-core-* + tar xvf $(DOWNLOAD_PATH)/xapian-core-$(XAPIAN_VERSION).tar.xz + # build + #cd xapian-core-$(XAPIAN_VERSION) && ./configure --disable-shared --enable-static --prefix="`pwd`/../$(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION).tmp" + #cd xapian-core-$(XAPIAN_VERSION) && make install + cd xapian-core-$(XAPIAN_VERSION) && ./configure --disable-shared --enable-static + cd xapian-core-$(XAPIAN_VERSION) && make + # copy files + mkdir -p $(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION).tmp/include + cp -r xapian-core-$(XAPIAN_VERSION)/include/* $(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION).tmp/include/ + rm $(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION).tmp/include/Makefile* + mkdir -p $(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION).tmp/lib + cp -r xapian-core-$(XAPIAN_VERSION)/.libs/libxapian.a $(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION).tmp/lib/ + # cleanup + rm -r -f xapian-core-$(XAPIAN_VERSION) + mv $(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION).tmp $(BUILD_PATH)/xapian-core-$(XAPIAN_VERSION) + +copylibs: + rm -r -f $(LIBS_PATH) ; \ + mkdir -p $(LIBS_PATH) ; \ + cp $(BUILD_PATH)/gcc-version $(LIBS_PATH) ; \ + find $(BUILD_PATH) -mindepth 1 -maxdepth 1 -type d -not -name "*.tmp" -print -exec cp -r {}/. $(LIBS_PATH) \; ; \ diff --git a/build_scripts/Windows/build-libs/build-libs.bat b/build_scripts/Windows/build-libs/build-libs.bat new file mode 100644 index 000000000..ded716f4a --- /dev/null +++ b/build_scripts/Windows/build-libs/build-libs.bat @@ -0,0 +1,51 @@ +:: Usage: +:: call build-libs.bat [make tasks] + +@echo off + +setlocal + +:: Parameter +set MakeParam="DOWNLOAD_PATH=../../download" + +set MakeTask= +:param_loop +if "%~1" NEQ "" ( + set MakeTask=%MakeTask% %1 + shift /1 + goto param_loop +) + +:: Initialize environment +call "%~dp0..\env.bat" +if errorlevel 1 goto error_env +call "%EnvPath%\env-msys2.bat" +if errorlevel 1 goto error_env + +:: Check MSYS environment +if not exist "%EnvMSYS2SH%" %cecho% error "Please install MSYS2 first." & exit /B 1 + +:: Initialize environment +call "%~dp0env.bat" +if errorlevel 1 goto error_env + +call "%ToolsPath%\msys-path.bat" "%~dp0" MSYS2CurPath +call "%ToolsPath%\msys-path.bat" "%BuildLibsPath%" MSYS2BuildLibsPath + +if not exist "%BuildLibsPath%" mkdir "%BuildLibsPath%" + +set MSYSTEM=MINGW%MSYS2Base% +set MSYS2_PATH_TYPE=inherit + +%EnvMSYS2Cmd% "pacman --needed --noconfirm -S diffutils perl tar make mingw-w64-%MSYS2Architecture%-make" +::mingw-w64-%MSYS2Architecture%-cmake +::%EnvMSYS2Cmd% "pacman --noconfirm -Rd --nodeps mingw-w64-%MSYS2Architecture%-zlib" + +%EnvMSYS2Cmd% "cd "%MSYS2BuildLibsPath%" && make -f %MSYS2CurPath%/makefile %MakeParam% %MakeTask%" + +exit /B %ERRORLEVEL% + +:error_env +echo Failed to initialize environment. +endlocal +exit /B 1 diff --git a/build_scripts/Windows/build-libs/env.bat b/build_scripts/Windows/build-libs/env.bat index e340a6f88..48687e7f0 100644 --- a/build_scripts/Windows/build-libs/env.bat +++ b/build_scripts/Windows/build-libs/env.bat @@ -4,9 +4,10 @@ call "%ToolsPath%\find-in-path.bat" MinGWPath gcc.exe if "%MinGWPath%"=="" %cecho% error "Please run command in the Qt Command Prompt or add the path to MinGW bin folder to PATH variable." & exit /B 1 :: Get gcc versions -call "%ToolsPath%\get-gcc-version.bat" GCCVersion +call "%ToolsPath%\get-gcc-version.bat" GCCVersion GCCArchitecture if "%GCCVersion%"=="" %cecho% error "Cannot get gcc version." & exit /B 1 +if "%GCCArchitecture%"=="" %cecho% error "Cannot get gcc architecture." & exit /B 1 -set BuildLibsPath=%EnvRootPath%\build-libs\gcc-%GCCVersion% +set BuildLibsPath=%EnvRootPath%\build-libs\gcc-%GCCVersion%\%GCCArchitecture% exit /B 0 diff --git a/build_scripts/Windows/build/env.bat b/build_scripts/Windows/build/env.bat index f10ab2075..f9ec9c3f7 100644 --- a/build_scripts/Windows/build/env.bat +++ b/build_scripts/Windows/build/env.bat @@ -67,13 +67,14 @@ call "%ToolsPath%\get-qt-version.bat" QtVersion if "%QtVersion%"=="" %cecho% error "Cannot get Qt version." & exit /B 1 :: Get gcc versions -call "%ToolsPath%\get-gcc-version.bat" GCCVersion +call "%ToolsPath%\get-gcc-version.bat" GCCVersion GCCArchitecture if "%GCCVersion%"=="" %cecho% error "Cannot get gcc version." & exit /B 1 +if "%GCCArchitecture%"=="" %cecho% error "Cannot get gcc architecture." & exit /B 1 -set BuildLibsPath=%EnvRootPath%\build-libs\gcc-%GCCVersion% +set BuildLibsPath=%EnvRootPath%\build-libs\gcc-%GCCVersion%\%GCCArchitecture% -set RsBuildPath=%BuildPath%\Qt-%QtVersion%-%RsBuildConfig% -set RsDeployPath=%DeployPath%\Qt-%QtVersion%%RsType%-%RsBuildConfig% +set RsBuildPath=%BuildPath%\Qt-%QtVersion%-%GCCArchitecture%-%RsBuildConfig% +set RsDeployPath=%DeployPath%\Qt-%QtVersion%%RsType%-%GCCArchitecture%-%RsBuildConfig% set RsPackPath=%DeployPath% set RsArchiveAdd= diff --git a/build_scripts/Windows/env/env-msys2.bat b/build_scripts/Windows/env/env-msys2.bat new file mode 100644 index 000000000..b99ede679 --- /dev/null +++ b/build_scripts/Windows/env/env-msys2.bat @@ -0,0 +1,39 @@ +:: Usage: +:: call env-msys2.bat [reinstall|clean] + +:: Initialize environment +call "%~dp0env.bat" +if errorlevel 1 goto error_env + +rem openssl x86 doesn't compile with mingw64 x64 +:: Get gcc versions +call "%ToolsPath%\get-gcc-version.bat" GCCVersion GCCArchitecture +if "%GCCVersion%"=="" %cecho% error "Cannot get gcc version." & exit /B 1 +if "%GCCArchitecture%"=="" %cecho% error "Cannot get gcc architecture." & exit /B 1 + +rem IF DEFINED ProgramFiles(x86) ( +if "%GCCArchitecture%"=="x64" ( + :: x64 + set MSYS2Architecture=x86_64 + set MSYS2Base=64 +) else ( + :: x86 + set MSYS2Architecture=i686 + set MSYS2Base=32 +) + +set EnvMSYS2Path=%EnvRootPath%\msys2 + +call "%~dp0tools\prepare-msys2.bat" %1 +if errorlevel 1 exit /B %ERRORLEVEL% + +set EnvMSYS2SH=%EnvMSYS2Path%\msys%MSYS2Base%\usr\bin\sh.exe +if not exist "%EnvMSYS2SH%" if errorlevel 1 goto error_env + +set EnvMSYS2Cmd="%EnvMSYS2SH%" -lc + +exit /B 0 + +:error_env +echo Failed to initialize environment. +exit /B 1 diff --git a/build_scripts/Windows/env/env.bat b/build_scripts/Windows/env/env.bat index a640d1612..2ba108b94 100644 --- a/build_scripts/Windows/env/env.bat +++ b/build_scripts/Windows/env/env.bat @@ -27,7 +27,7 @@ call "%~dp0tools\prepare-tools.bat" if errorlevel 1 exit /B %ERRORLEVEL% :: Add MinGit to PATH -set PATH=%EnvToolsPath%\MinGit\cmd;%PATH% +set PATH=%EnvToolsPath%\MinGit\cmd;%EnvToolsPath%\cmake\bin;%PATH% set HOME=%EnvToolsPath%\MinGit\home exit /B 0 diff --git a/build_scripts/Windows/env/tools/prepare-msys2.bat b/build_scripts/Windows/env/tools/prepare-msys2.bat new file mode 100644 index 000000000..3003d713d --- /dev/null +++ b/build_scripts/Windows/env/tools/prepare-msys2.bat @@ -0,0 +1,83 @@ +:: Usage: +:: call prepare-msys2.bat [reinstall|clean] + +setlocal enabledelayedexpansion + +if "%EnvMSYS2Path%"=="" exit /B 1 +if "%MSYS2Architecture%"=="" exit /B 1 +if "%MSYS2Base%"=="" exit /B 1 +if not exist "%EnvRootPath%"=="" exit /B 1 + +copy "%~dp0root\update-msys2.bat" "%EnvRootPath%" >nul + +if "%~1"=="clean" ( + %cecho% info "Clean MSYS2" + call "%ToolsPath%\remove-dir.bat" "%EnvMSYS2Path%" + goto exit +) + +if exist "%EnvMSYS2Path%\msys%MSYS2Base%\usr\bin\pacman.exe" ( + if "%~1"=="reinstall" ( + choice /M "Found existing MSYS2 version. Do you want to proceed?" + if !ERRORLEVEL!==2 goto exit + ) else ( + goto exit + ) +) + +set MSYS2Install=msys2-base-%MSYS2Architecture%-20190524.tar.xz +set MSYS2Url=http://sourceforge.net/projects/msys2/files/Base/%MSYS2Architecture%/%MSYS2Install%/download +set CMakeInstall=cmake-3.1.0-win32-x86.zip +set CMakeUrl=http://www.cmake.org/files/v3.1/%CMakeInstall% +set CMakeUnpackPath=%EnvMSYS2Path%\msys%MSYS2Base% + +%cecho% info "Remove previous MSYS2 version" +call "%ToolsPath%\remove-dir.bat" "%EnvMSYS2Path%\msys%MSYS2Base%" + +%cecho% info "Download installation files" +if not exist "%EnvDownloadPath%\%MSYS2Install%" call "%ToolsPath%\download-file.bat" "%MSYS2Url%" "%EnvDownloadPath%\%MSYS2Install%" +if not exist "%EnvDownloadPath%\%MSYS2Install%" %cecho% error "Cannot download MSYS" & goto error + +if not exist "%EnvDownloadPath%\%CMakeInstall%" call "%ToolsPath%\download-file.bat" "%CMakeUrl%" "%EnvDownloadPath%\%CMakeInstall%" +if not exist "%EnvDownloadPath%\%CMakeInstall%" %cecho% error "Cannot download CMake" & goto error + +%cecho% info "Unpack MSYS2" +"%EnvSevenZipExe%" x -so "%EnvDownloadPath%\%MSYS2Install%" | "%EnvSevenZipExe%" x -y -si -ttar -o"%EnvMSYS2Path%" + +%cecho% info "Unpack CMake" +"%EnvSevenZipExe%" x -o"%CMakeUnpackPath%" "%EnvDownloadPath%\%CMakeInstall%" + +%cecho% info "Install CMake" +set CMakeVersion= +for /D %%F in (%CMakeUnpackPath%\cmake*) do set CMakeVersion=%%~nxF +if "%CMakeVersion%"=="" %cecho% error "CMake version not found." & goto :exit +%cecho% info "Found CMake version %CMakeVersion%" + +set FoundProfile= +for /f "tokens=3" %%F in ('find /c /i "%CMakeVersion%" "%EnvMSYS2Path%\msys%MSYS2Base%\etc\profile"') do set FoundProfile=%%F + +if "%FoundProfile%"=="0" ( + echo export PATH="${PATH}:/%CMakeVersion%/bin">>"%EnvMSYS2Path%\msys%MSYS2Base%\etc\profile" +) + +set MSYS2SH=%EnvMSYS2Path%\msys%MSYS2Base%\usr\bin\sh + +%cecho% info "Update keyring" +"%MSYS2SH%" -lc "curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz" +"%MSYS2SH%" -lc "pacman --noconfirm -U msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz" + +%cecho% info "Initialize MSYS2" +"%MSYS2SH%" -lc "pacman -Sy" +"%MSYS2SH%" -lc "pacman --noconfirm --needed -S bash pacman pacman-mirrors msys2-runtime" + +call "%EnvMSYS2Path%\msys%MSYS2Base%\autorebase.bat" +call "%EnvRootPath%\update-msys2.bat" +call "%EnvRootPath%\update-msys2.bat" + +:exit +endlocal +exit /B 0 + +:error +endlocal +exit /B 1 diff --git a/build_scripts/Windows/env/tools/prepare-tools.bat b/build_scripts/Windows/env/tools/prepare-tools.bat index da798ab2a..0d1bd74e3 100644 --- a/build_scripts/Windows/env/tools/prepare-tools.bat +++ b/build_scripts/Windows/env/tools/prepare-tools.bat @@ -24,6 +24,10 @@ set MinGitUrl=https://github.com/git-for-windows/git/releases/download/v2.28.0.w set MinGitInstallPath=%EnvToolsPath%\MinGit set SigcheckInstall=Sigcheck.zip set SigcheckUrl=https://download.sysinternals.com/files/%SigcheckInstall% +set CMakeVersion=cmake-3.1.0-win32-x86 +set CMakeInstall=%CMakeVersion%.zip +set CMakeUrl=http://www.cmake.org/files/v3.1/%CMakeInstall% +set CMakeInstallPath=%EnvToolsPath%\cmake if not exist "%EnvToolsPath%\wget.exe" ( echo Download Wget installation @@ -185,6 +189,25 @@ if not exist "%EnvToolsPath%\sigcheck.exe" ( "%EnvSevenZipExe%" x -o"%EnvToolsPath%" "%EnvDownloadPath%\%SigcheckInstall%" sigcheck.exe ) +if not exist "%EnvDownloadPath%\%CMakeInstall%" call "%ToolsPath%\remove-dir.bat" "%CMakeInstallPath%" +if not exist "%CMakeInstallPath%\bin\cmake.exe" ( + %cecho% info "Download CMake installation" + + if exist "%CMakeInstallPath%" call "%ToolsPath%\remove-dir.bat" "%CMakeInstallPath%" + + mkdir "%EnvTempPath%" + + if not exist "%EnvDownloadPath%\%CMakeInstall%" call "%ToolsPath%\download-file.bat" "%CMakeUrl%" "%EnvDownloadPath%\%CMakeInstall%" + if not exist "%EnvDownloadPath%\%CMakeInstall%" %cecho% error "Cannot download CMake installation" & goto error + + %cecho% info "Unpack CMake" + "%EnvSevenZipExe%" x -o"%EnvTempPath%" "%EnvDownloadPath%\%CMakeInstall%" + + move "%EnvTempPath%\%CMakeVersion%" "%CMakeInstallPath%" + + call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" +) + :exit endlocal exit /B 0 diff --git a/build_scripts/Windows/env/tools/root/update-msys2.bat b/build_scripts/Windows/env/tools/root/update-msys2.bat new file mode 100644 index 000000000..3075e392b --- /dev/null +++ b/build_scripts/Windows/env/tools/root/update-msys2.bat @@ -0,0 +1,19 @@ +@echo off + +setlocal + +if exist "%~dp0msys2\msys32" call :update 32 +if exist "%~dp0msys2\msys64" call :update 64 + +goto :EOF + +:update +set MSYSSH=%~dp0msys2\msys%~1\usr\bin\sh + +echo Update MSYS2 %~1 +"%MSYSSH%" -lc "pacman -Sy" +"%MSYSSH%" -lc "pacman --noconfirm -Su" + +:exit +endlocal +goto :EOF diff --git a/build_scripts/Windows/tools/get-gcc-version.bat b/build_scripts/Windows/tools/get-gcc-version.bat index c9998376b..5c6ff8162 100644 --- a/build_scripts/Windows/tools/get-gcc-version.bat +++ b/build_scripts/Windows/tools/get-gcc-version.bat @@ -1,16 +1,24 @@ :: Usage: -:: call get-gcc-version.bat variable +:: call get-gcc-version.bat version architecture setlocal -set Var=%~1 -if "%Var%"=="" ( +set VarVersion=%~1 +if "%VarVersion%"=="" ( + echo. + echo Parameter error. + exit /B 1 +) + +set VarArchitecture=%~2 +if "%VarArchitecture%"=="" ( echo. echo Parameter error. exit /B 1 ) set GCCVersion= +set GCCArchitecture= call "%~dp0find-in-path.bat" GCCPath gcc.exe if "%GCCPath%"=="" ( @@ -23,6 +31,7 @@ gcc --version >"%~dp0gccversion.tmp" for /F "tokens=1*" %%A in (%~sdp0gccversion.tmp) do ( if "%%A"=="gcc" ( call :find_version %%B + call :find_architecture %%B goto exit ) ) @@ -30,13 +39,25 @@ for /F "tokens=1*" %%A in (%~sdp0gccversion.tmp) do ( :exit if exist "%~dp0gccversion.tmp" del /Q "%~dp0gccversion.tmp" -endlocal & set %Var%=%GCCVersion% +endlocal & set %VarVersion%=%GCCVersion%& set %VarArchitecture%=%GCCArchitecture% goto :EOF :find_version -:loop +:loop_version if "%2" NEQ "" ( shift - goto loop + goto loop_version ) set GCCVersion=%1 +goto :EOF + +:find_architecture +:loop_architecture +if "%7" NEQ "" ( + shift + goto loop_architecture +) +set _Architecture=%1 +if "%_Architecture:~1,4%"=="i686" set GCCArchitecture=x86 +if "%_Architecture:~1,6%"=="x86_64" set GCCArchitecture=x64 +goto :EOF From 2eb7fecd4267497ec0125f0480324669a5a7be75 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Thu, 30 Jul 2020 23:00:47 +0200 Subject: [PATCH 57/95] Fixed Windows build of udp-discovery-cpp without MSYS2 --- libretroshare/src/libretroshare.pro | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 3277f8208..4141484f0 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -950,18 +950,30 @@ rs_broadcast_discovery { no_rs_cross_compiling { DUMMYQMAKECOMPILERINPUT = FORCE CMAKE_GENERATOR_OVERRIDE="" - win32-g++|win32-clang-g++:CMAKE_GENERATOR_OVERRIDE="-G \"MSYS Makefiles\"" + win32-g++|win32-clang-g++ { + isEmpty(QMAKE_SH) { + CMAKE_GENERATOR_OVERRIDE="-G \"MinGW Makefiles\"" + } else { + CMAKE_GENERATOR_OVERRIDE="-G \"MSYS Makefiles\"" + } + } udpdiscoverycpplib.name = Generating libudp-discovery.a. udpdiscoverycpplib.input = DUMMYQMAKECOMPILERINPUT udpdiscoverycpplib.output = $$clean_path($${UDP_DISCOVERY_BUILD_PATH}/libudp-discovery.a) udpdiscoverycpplib.CONFIG += target_predeps combine udpdiscoverycpplib.variable_out = PRE_TARGETDEPS - udpdiscoverycpplib.commands = \ - cd $${RS_SRC_PATH} && ( \ - git submodule update --init supportlibs/udp-discovery-cpp || \ - true ) && \ - mkdir -p $${UDP_DISCOVERY_BUILD_PATH} && \ - cd $${UDP_DISCOVERY_BUILD_PATH} && \ + isEmpty(QMAKE_SH) { + udpdiscoverycpplib.commands = \ + $(CHK_DIR_EXISTS) $$shell_path($$UDP_DISCOVERY_BUILD_PATH) $(MKDIR) $$shell_path($${UDP_DISCOVERY_BUILD_PATH}) $$escape_expand(\\n\\t) + } else { + udpdiscoverycpplib.commands = \ + cd $${RS_SRC_PATH} && ( \ + git submodule update --init supportlibs/udp-discovery-cpp || \ + true ) && \ + mkdir -p $${UDP_DISCOVERY_BUILD_PATH} && + } + udpdiscoverycpplib.commands += \ + cd $$shell_path($${UDP_DISCOVERY_BUILD_PATH}) && \ cmake -DCMAKE_C_COMPILER=$$fixQmakeCC($$QMAKE_CC) \ -DCMAKE_CXX_COMPILER=$$QMAKE_CXX \ \"-DCMAKE_CXX_FLAGS=$${QMAKE_CXXFLAGS}\" \ From b4b09373bd0b54f7ba50c007b57985428ca7fecd Mon Sep 17 00:00:00 2001 From: thunder2 Date: Fri, 31 Jul 2020 00:51:18 +0200 Subject: [PATCH 58/95] Removed Sigcheck from Windows build environment --- build_scripts/Windows/env/tools/prepare-tools.bat | 12 ------------ build_scripts/Windows/tools/get-rs-version.bat | 2 +- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/build_scripts/Windows/env/tools/prepare-tools.bat b/build_scripts/Windows/env/tools/prepare-tools.bat index 0d1bd74e3..b3c37965f 100644 --- a/build_scripts/Windows/env/tools/prepare-tools.bat +++ b/build_scripts/Windows/env/tools/prepare-tools.bat @@ -22,8 +22,6 @@ set NSISInstallPath=%EnvToolsPath%\NSIS set MinGitInstall=MinGit-2.28.0-32-bit.zip set MinGitUrl=https://github.com/git-for-windows/git/releases/download/v2.28.0.windows.1/%MinGitInstall% set MinGitInstallPath=%EnvToolsPath%\MinGit -set SigcheckInstall=Sigcheck.zip -set SigcheckUrl=https://download.sysinternals.com/files/%SigcheckInstall% set CMakeVersion=cmake-3.1.0-win32-x86 set CMakeInstall=%CMakeVersion%.zip set CMakeUrl=http://www.cmake.org/files/v3.1/%CMakeInstall% @@ -179,16 +177,6 @@ if not exist "%MinGitInstallPath%\cmd\git.exe" ( "%EnvSevenZipExe%" x -o"%MinGitInstallPath%" "%EnvDownloadPath%\%MinGitInstall%" ) -if not exist "%EnvToolsPath%\sigcheck.exe" ( - %cecho% info "Download Sigcheck installation" - - if not exist "%EnvDownloadPath%\%SigcheckInstall%" call "%ToolsPath%\download-file.bat" "%SigcheckUrl%" "%EnvDownloadPath%\%SigcheckInstall%" - if not exist "%EnvDownloadPath%\%SigcheckInstall%" %cecho% error "Cannot download Sigcheck installation" & goto error - - %cecho% info "Unpack Sigcheck" - "%EnvSevenZipExe%" x -o"%EnvToolsPath%" "%EnvDownloadPath%\%SigcheckInstall%" sigcheck.exe -) - if not exist "%EnvDownloadPath%\%CMakeInstall%" call "%ToolsPath%\remove-dir.bat" "%CMakeInstallPath%" if not exist "%CMakeInstallPath%\bin\cmake.exe" ( %cecho% info "Download CMake installation" diff --git a/build_scripts/Windows/tools/get-rs-version.bat b/build_scripts/Windows/tools/get-rs-version.bat index 2398baf93..cc4e53ff8 100644 --- a/build_scripts/Windows/tools/get-rs-version.bat +++ b/build_scripts/Windows/tools/get-rs-version.bat @@ -27,7 +27,7 @@ set VersionMinor= set VersionMini= set VersionExtra= -for /F "tokens=1,2,3,* delims=.-" %%A in ('%EnvToolsPath%\sigcheck.exe -nobanner -n %Executable%') do ( +for /F "USEBACKQ tokens=1,2,3,* delims=.-" %%A in (`powershell -NoLogo -NoProfile -Command ^(Get-Item "%Executable%"^).VersionInfo.FileVersion`) do ( set VersionMajor=%%A set VersionMinor=%%B set VersionMini=%%C From 33e22a4236a0620e2a763fd8c72fa2e6a136e142 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Fri, 31 Jul 2020 00:52:56 +0200 Subject: [PATCH 59/95] Pack x86/x64 Windows build environment Pack retroshare-service instead of retroshare-nogui --- build_scripts/Windows/build/pack.bat | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/build_scripts/Windows/build/pack.bat b/build_scripts/Windows/build/pack.bat index ec1ca042e..c9e800eba 100644 --- a/build_scripts/Windows/build/pack.bat +++ b/build_scripts/Windows/build/pack.bat @@ -74,9 +74,9 @@ if "%QtMainVersion%"=="4" set QtMainVersion2=4 if "%QtMainVersion%"=="5" set QtMainVersion1=5 if "%RsBuildConfig%" NEQ "release" ( - set Archive=%RsPackPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsVersion.Extra%-Qt-%QtVersion%%RsType%%RsArchiveAdd%-%RsBuildConfig%.7z + set Archive=%RsPackPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsVersion.Extra%-Qt-%QtVersion%-%GCCArchitecture%%RsType%%RsArchiveAdd%-%RsBuildConfig%.7z ) else ( - set Archive=%RsPackPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsVersion.Extra%-Qt-%QtVersion%%RsType%%RsArchiveAdd%.7z + set Archive=%RsPackPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsVersion.Extra%-Qt-%QtVersion%-%GCCArchitecture%%RsType%%RsArchiveAdd%.7z ) if exist "%Archive%" del /Q "%Archive%" @@ -103,8 +103,8 @@ mkdir "%RsDeployPath%\license" copy nul "%RsDeployPath%\portable" %Quite% echo copy binaries -copy "%RsBuildPath%\retroshare-gui\src\%RsBuildConfig%\RetroShare*.exe" "%RsDeployPath%" %Quite% -copy "%RsBuildPath%\retroshare-nogui\src\%RsBuildConfig%\retroshare*-nogui.exe" "%RsDeployPath%" %Quite% +copy "%RsBuildPath%\retroshare-gui\src\%RsBuildConfig%\retroshare*.exe" "%RsDeployPath%" %Quite% +copy "%RsBuildPath%\retroshare-service\src\%RsBuildConfig%\retroshare*-service.exe" "%RsDeployPath%" %Quite% echo copy extensions for /D %%D in ("%RsBuildPath%\plugins\*") do ( @@ -158,7 +158,6 @@ copy "%QtPath%\..\translations\qt_*.qm" "%RsDeployPath%\translations" %Quite% if "%QtMainVersion%"=="5" ( copy "%QtPath%\..\translations\qtbase_*.qm" "%RsDeployPath%\translations" %Quite% copy "%QtPath%\..\translations\qtscript_*.qm" "%RsDeployPath%\translations" %Quite% - copy "%QtPath%\..\translations\qtquick1_*.qm" "%RsDeployPath%\translations" %Quite% copy "%QtPath%\..\translations\qtmultimedia_*.qm" "%RsDeployPath%\translations" %Quite% copy "%QtPath%\..\translations\qtxmlpatterns_*.qm" "%RsDeployPath%\translations" %Quite% ) From eb641055cdc3624724a7c4ce9437e58dbece5456 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Fri, 31 Jul 2020 02:25:12 +0200 Subject: [PATCH 60/95] Changed Windows Installer to build x86 and x64 version --- .../Windows/build/build-installer.bat | 1 + .../Windows/env/tools/prepare-tools.bat | 8 +- .../Windows/installer/retroshare-Qt4.nsi | 481 ------------------ .../Windows/installer/retroshare-Qt5.nsi | 36 +- 4 files changed, 36 insertions(+), 490 deletions(-) delete mode 100644 build_scripts/Windows/installer/retroshare-Qt4.nsi diff --git a/build_scripts/Windows/build/build-installer.bat b/build_scripts/Windows/build/build-installer.bat index afa01ffe0..4a011025c 100644 --- a/build_scripts/Windows/build/build-installer.bat +++ b/build_scripts/Windows/build/build-installer.bat @@ -30,6 +30,7 @@ set NSIS_PARAM=%NSIS_PARAM% /DMINGWDIR="%MinGWPath%\.." set NSIS_PARAM=%NSIS_PARAM% /DOUTDIR="%RsPackPath%" set NSIS_PARAM=%NSIS_PARAM% /DINSTALLERADD="%RsArchiveAdd%" set NSIS_PARAM=%NSIS_PARAM% /DEXTERNAL_LIB_DIR="%BuildLibsPath%\libs" +set NSIS_PARAM=%NSIS_PARAM% /DARCHITECTURE="%GCCArchitecture%" :: Get compiled version call "%ToolsPath%\get-rs-version.bat" "%RsBuildPath%\retroshare-gui\src\%RsBuildConfig%\retroshare.exe" RsVersion diff --git a/build_scripts/Windows/env/tools/prepare-tools.bat b/build_scripts/Windows/env/tools/prepare-tools.bat index b3c37965f..a1dda4e87 100644 --- a/build_scripts/Windows/env/tools/prepare-tools.bat +++ b/build_scripts/Windows/env/tools/prepare-tools.bat @@ -16,8 +16,8 @@ set DependsUrl=http://www.dependencywalker.com/depends22_x86.zip set DependsInstall=depends22_x86.zip set UnixToolsUrl=http://unxutils.sourceforge.net/UnxUpdates.zip set UnixToolsInstall=UnxUpdates.zip -set NSISUrl=http://prdownloads.sourceforge.net/nsis/nsis-3.0-setup.exe?download -set NSISInstall=nsis-3.0-setup.exe +set NSISInstall=nsis-3.05-setup.exe +set NSISUrl=http://prdownloads.sourceforge.net/nsis/%NSISInstall%?download set NSISInstallPath=%EnvToolsPath%\NSIS set MinGitInstall=MinGit-2.28.0-32-bit.zip set MinGitUrl=https://github.com/git-for-windows/git/releases/download/v2.28.0.windows.1/%MinGitInstall% @@ -150,8 +150,12 @@ if not exist "%EnvToolsPath%\sed.exe" ( call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" ) +if not exist "%EnvDownloadPath%\%NSISInstall%" call "%ToolsPath%\remove-dir.bat" "%NSISInstallPath%" if not exist "%NSISInstallPath%\nsis.exe" ( call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" + + if exist "%NSISInstallPath%" call "%ToolsPath%\remove-dir.bat" "%NSISInstallPath%" + mkdir "%EnvTempPath%" %cecho% info "Download NSIS installation" diff --git a/build_scripts/Windows/installer/retroshare-Qt4.nsi b/build_scripts/Windows/installer/retroshare-Qt4.nsi deleted file mode 100644 index cb6f69c74..000000000 --- a/build_scripts/Windows/installer/retroshare-Qt4.nsi +++ /dev/null @@ -1,481 +0,0 @@ -; Script generated with the Venis Install Wizard & modified by defnax -; Reworked by Thunder - -!include ifexist.nsh - -# Needed defines -;!define REVISION "" -;!define RELEASEDIR "" -;!define QTDIR "" -;!define MINGWDIR "" - -# Optional defines -;!define OUTDIR "" - -# Check needed defines -!ifndef RELEASEDIR -!error "RELEASEDIR is not defined" -!endif -!ifndef QTDIR -!error "QTDIR is not defined" -!endif -!ifndef MINGWDIR -!error "MINGWDIR is not defined" -!endif - -# Check optional defines -!ifdef OUTDIR -!define OUTDIR_ "${OUTDIR}\" -!else -!define OUTDIR "" -!define OUTDIR_ "" -!endif - -!ifndef INSTALLERADD -!define INSTALLERADD "" -!endif - -# Source directory -!define SOURCEDIR "..\..\.." - -# Get version from executable -!GetDllVersion "${RELEASEDIR}\retroshare-gui\src\release\retroshare.exe" VERSION_ -!define VERSION ${VERSION_1}.${VERSION_2}.${VERSION_3} -;!define REVISION ${VERSION_4} - -# Get version of Qt -!GetDllVersion "${QTDIR}\bin\QtCore4.dll" QTVERSION_ -!define QTVERSION ${QTVERSION_1}.${QTVERSION_2}.${QTVERSION_3} - -# Check version -!ifndef REVISION -!error "REVISION is not defined" -!endif - -# Date -!define /date Date "%Y%m%d" - -# Application name and version -!define APPNAME "RetroShare" -!define APPNAMEANDVERSION "${APPNAME} ${VERSION}" -!define PUBLISHER "RetroShare Team" - -# Install path -!define INSTDIR_NORMAL "$ProgramFiles\${APPNAME}" -!define INSTDIR_PORTABLE "$Desktop\${APPNAME}" - -!define DATADIR_NORMAL "$APPDATA\${APPNAME}" -!define DATADIR_PORTABLE "$INSTDIR\Data" - -# Main Install settings -Name "${APPNAMEANDVERSION}" -InstallDirRegKey HKLM "Software\${APPNAME}" "" -OutFile "${OUTDIR_}RetroShare-${VERSION}-${Date}-${REVISION}-Qt-${QTVERSION}${INSTALLERADD}-setup.exe" -BrandingText "${APPNAMEANDVERSION}" -RequestExecutionlevel highest -# Use compression -SetCompressor /SOLID LZMA - -# Global variables -Var PortableMode -Var InstDirNormal -Var InstDirPortable -Var DataDir -Var StyleSheetDir - -# Modern interface settings -!include Sections.nsh -!include nsDialogs.nsh -!include "MUI.nsh" - -# Interface Settings -!define MUI_ABORTWARNING -!define MUI_HEADERIMAGE -!define MUI_HEADERIMAGE_BITMAP "${SOURCEDIR}\build_scripts\Windows\installer\HeaderImage.bmp" -;!define MUI_WELCOMEFINISHPAGE_BITMAP "...bmp" - -# MUI defines -!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico" -!define MUI_FINISHPAGE_NOAUTOCLOSE -!define MUI_LICENSEPAGE_RADIOBUTTONS -!define MUI_COMPONENTSPAGE_SMALLDESC -!define MUI_FINISHPAGE_LINK "Visit the RetroShare forum for the latest news and support" -!define MUI_FINISHPAGE_LINK_LOCATION "http://retroshare.sourceforge.net/forum/" -!define MUI_FINISHPAGE_RUN "$INSTDIR\retroshare.exe" -!define MUI_FINISHPAGE_SHOWREADME $INSTDIR\changelog.txt -!define MUI_FINISHPAGE_SHOWREADME_TEXT changelog.txt -!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED -!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\orange-uninstall.ico" -!define MUI_UNFINISHPAGE_NOAUTOCLOSE -;!define MUI_LANGDLL_REGISTRY_ROOT HKLM -;!define MUI_LANGDLL_REGISTRY_KEY ${REGKEY} -;!define MUI_LANGDLL_REGISTRY_VALUENAME InstallerLanguage - -# Defines the un-/installer logo of RetroShare -!insertmacro MUI_DEFAULT MUI_WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\orange.bmp" -!insertmacro MUI_DEFAULT MUI_UNWELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\orange-uninstall.bmp" - -# Installer pages -!insertmacro MUI_PAGE_WELCOME -!insertmacro MUI_PAGE_LICENSE "$(myLicenseData)" -Page Custom PortableModePageCreate PortableModePageLeave -!define MUI_PAGE_CUSTOMFUNCTION_LEAVE dir_leave -!insertmacro MUI_PAGE_DIRECTORY -!insertmacro MUI_PAGE_COMPONENTS -!insertmacro MUI_PAGE_INSTFILES -!insertmacro MUI_PAGE_FINISH -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_INSTFILES - -# Set languages (first is default language) -!insertmacro MUI_RESERVEFILE_LANGDLL - -# Installer languages -!define MUI_LANGDLL_ALLLANGUAGES - -# Translations -!macro LANG_LOAD LANGUAGE LANGCODE LANGID LICENCEFILE - !insertmacro MUI_LANGUAGE "${LANGUAGE}" -; !verbose off - !define LANG "${LANGUAGE}" - !include "lang\${LANGCODE}.nsh" - LangString LANGUAGEID "${LANG_${LANG}}" "1031" - LicenseLangString myLicenseData ${LANGCODE} ${LICENCEFILE} -; !verbose on - !undef LANG -!macroend - -!macro LANG_STRING NAME VALUE - LangString "${NAME}" "${LANG_${LANG}}" "${VALUE}" -!macroend - -!insertmacro LANG_LOAD "English" "en" "1033" "${SOURCEDIR}\retroshare-gui\src\license\license.txt" -!insertmacro LANG_LOAD "French" "fr" "1036" "${SOURCEDIR}\retroshare-gui\src\license\license-FR.txt" -!insertmacro LANG_LOAD "German" "de" "1031" "${SOURCEDIR}\retroshare-gui\src\license\license-GER.txt" -!insertmacro LANG_LOAD "Turkish" "tr" "1055" "${SOURCEDIR}\retroshare-gui\src\license\license-TR.txt" -!insertmacro LANG_LOAD "SimpChinese" "zh_CN" "2052" "${SOURCEDIR}\retroshare-gui\src\license\license.txt" -!insertmacro LANG_LOAD "Polish" "pl" "1045" "${SOURCEDIR}\retroshare-gui\src\license\license.txt" -!insertmacro LANG_LOAD "Spanish" "es" "1034" "${SOURCEDIR}\retroshare-gui\src\license\license.txt" -!insertmacro LANG_LOAD "Russian" "ru" "1049" "${SOURCEDIR}\retroshare-gui\src\license\license.txt" -!insertmacro LANG_LOAD "Catalan" "ca_ES" "1027" "${SOURCEDIR}\retroshare-gui\src\license\license.txt" - -LicenseData $(myLicenseData) - -# Main binaries -Section $(Section_Main) Section_Main - ;Set Section required - SectionIn RO - - ; Set Section properties - SetOverwrite on - - ; Clears previous error logs -; Delete "$INSTDIR\*.log" - - ; Main binaries - SetOutPath "$INSTDIR" - File /oname=retroshare.exe "${RELEASEDIR}\retroshare-gui\src\release\retroshare.exe" - File /oname=retroshare-nogui.exe "${RELEASEDIR}\retroshare-nogui\src\release\retroshare-nogui.exe" - - ; Qt binaries - File "${QTDIR}\bin\QtCore4.dll" - File "${QTDIR}\bin\QtGui4.dll" - File "${QTDIR}\bin\QtMultimedia4.dll" - File "${QTDIR}\bin\QtNetwork4.dll" - File "${QTDIR}\bin\QtSvg4.dll" - File "${QTDIR}\bin\QtXml4.dll" - - ; MinGW binaries - File "${MINGWDIR}\bin\libstdc++-6.dll" - File "${MINGWDIR}\bin\libgcc_s_dw2-1.dll" - File "${MINGWDIR}\bin\libwinpthread-1.dll" - - ; External binaries - File "${EXTERNAL_LIB_DIR}\bin\miniupnpc.dll" - File "${EXTERNAL_LIB_DIR}\bin\libeay32.dll" - File "${EXTERNAL_LIB_DIR}\bin\ssleay32.dll" - - ; Other files - File "${SOURCEDIR}\retroshare-gui\src\changelog.txt" - File "${SOURCEDIR}\libbitdht\src\bitdht\bdboot.txt" - - ; Image formats - SetOutPath "$INSTDIR\imageformats" - File /r "${QTDIR}\plugins\imageformats\qgif4.dll" - File /r "${QTDIR}\plugins\imageformats\qico4.dll" - File /r "${QTDIR}\plugins\imageformats\qjpeg4.dll" - File /r "${QTDIR}\plugins\imageformats\qmng4.dll" - File /r "${QTDIR}\plugins\imageformats\qsvg4.dll" - File /r "${QTDIR}\plugins\imageformats\qtga4.dll" - File /r "${QTDIR}\plugins\imageformats\qtiff4.dll" - - ; Sounds - SetOutPath "$INSTDIR\sounds" - File /r "${SOURCEDIR}\retroshare-gui\src\sounds\*.*" - - ; Translations - SetOutPath "$INSTDIR\translations" - File /r "${SOURCEDIR}\retroshare-gui\src\translations\*.qm" - File /r "${QTDIR}\translations\qt_*.qm" - - ; WebUI - SetOutPath "$INSTDIR\webui" - File /r "${SOURCEDIR}\libresapi\src\webui\*.*" - - ; License - SetOutPath "$INSTDIR\license" - File /r "${SOURCEDIR}\retroshare-gui\src\license\*.*" -SectionEnd - -# Plugins -${!defineifexist} PLUGIN_FEEDREADER_EXISTS "${RELEASEDIR}\plugins\FeedReader\release\FeedReader.dll" -${!defineifexist} PLUGIN_VOIP_EXISTS "${RELEASEDIR}\plugins\VOIP\release\VOIP.dll" - -!ifdef PLUGIN_FEEDREADER_EXISTS -!define /ifndef PLUGIN_EXISTS -!endif -!ifdef PLUGIN_VOIP_EXISTS -!define /ifndef PLUGIN_EXISTS -!endif - -!ifdef PLUGIN_EXISTS - SectionGroup $(Section_Plugins) Section_Plugins - !ifdef PLUGIN_FEEDREADER_EXISTS - Section $(Section_Plugin_FeedReader) Section_Plugin_FeedReader - SetOutPath "$DataDir\extensions6" - File "${RELEASEDIR}\plugins\FeedReader\release\FeedReader.dll" - SectionEnd - !endif - - !ifdef PLUGIN_VOIP_EXISTS - Section $(Section_Plugin_VOIP) Section_Plugin_VOIP - SetOutPath "$DataDir\extensions6" - File "${RELEASEDIR}\plugins\VOIP\release\VOIP.dll" - SectionEnd - !endif - SectionGroupEnd -!endif - -# Data (Styles) -Section $(Section_Data) Section_Data - ; Set Section properties - SetOverwrite on - - ; Chat style - SetOutPath "$StyleSheetDir\stylesheets\Bubble" - File /r "${SOURCEDIR}\retroshare-gui\src\gui\qss\chat\Bubble\*.*" - SetOutPath "$StyleSheetDir\stylesheets\Bubble_Compact" - File /r "${SOURCEDIR}\retroshare-gui\src\gui\qss\chat\Bubble_Compact\*.*" - - ; Stylesheets - SetOutPath "$INSTDIR\qss" - File /r "${SOURCEDIR}\retroshare-gui\src\qss\*.*" -SectionEnd - -;Section $(Section_Link) Section_Link - ; Delete any existing keys - - ; Write the file association -; WriteRegStr HKCR .pqi "" retroshare -; WriteRegStr HKCR retroshare "" "PQI File" -; WriteRegBin HKCR retroshare EditFlags 00000100 -; WriteRegStr HKCR "retroshare\shell" "" open -; WriteRegStr HKCR "retroshare\shell\open\command" "" `"$INSTDIR\retroshare.exe" "%1"` -;SectionEnd - -# Shortcuts -SectionGroup $(Section_Shortcuts) Section_Shortcuts -Section $(Section_StartMenu) Section_StartMenu - SetOutPath "$INSTDIR" - CreateDirectory "$SMPROGRAMS\${APPNAME}" - CreateShortCut "$SMPROGRAMS\${APPNAME}\$(Link_Uninstall).lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0 - CreateShortCut "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk" "$INSTDIR\retroshare.exe" "" "$INSTDIR\retroshare.exe" 0 -SectionEnd - -Section $(Section_Desktop) Section_Desktop - CreateShortCut "$DESKTOP\${APPNAME}.lnk" "$INSTDIR\retroshare.exe" "" "$INSTDIR\retroshare.exe" 0 -SectionEnd - -Section $(Section_QuickLaunch) Section_QuickLaunch - CreateShortCut "$QUICKLAUNCH\${APPNAME}.lnk" "$INSTDIR\retroshare.exe" "" "$INSTDIR\retroshare.exe" 0 -SectionEnd -SectionGroupEnd - -Section $(Section_AutoStart) Section_AutoStart - WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "RetroShare" "$INSTDIR\retroshare.exe -m" -SectionEnd - -;Section $(Section_AutoStart) Section_AutoStart -; CreateShortCut "$SMSTARTUP\${APPNAME}.lnk" "$INSTDIR\retroshare.exe" "" "$INSTDIR\retroshare.exe -m" 0 -;SectionEnd - -Section -FinishSection - ${If} $PortableMode = 0 - WriteRegStr HKLM "Software\${APPNAME}" "" "$INSTDIR" - WriteRegStr HKLM "Software\${APPNAME}" "Version" "${VERSION}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${VERSION}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$INSTDIR\retroshare.exe" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "Publisher" "${PUBLISHER}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" "1" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" "1" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$INSTDIR\uninstall.exe" - WriteUninstaller "$INSTDIR\uninstall.exe" - ${Else} - ; Create the file the application uses to detect portable mode - FileOpen $0 "$INSTDIR\portable" w - FileClose $0 - ${EndIf} -SectionEnd - -# Descriptions -!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN - !insertmacro MUI_DESCRIPTION_TEXT ${Section_Main} $(Section_Main_Desc) - !insertmacro MUI_DESCRIPTION_TEXT ${Section_Data} $(Section_Data_Desc) - !insertmacro MUI_DESCRIPTION_TEXT ${Section_Shortcuts} $(Section_Shortcuts_Desc) - !insertmacro MUI_DESCRIPTION_TEXT ${Section_StartMenu} $(Section_StartMenu_Desc) - !insertmacro MUI_DESCRIPTION_TEXT ${Section_Desktop} $(Section_Desktop_Desc) - !insertmacro MUI_DESCRIPTION_TEXT ${Section_QuickLaunch} $(Section_QuickLaunch_Desc) - !insertmacro MUI_DESCRIPTION_TEXT ${Section_Plugins} $(Section_Plugins_Desc) - !insertmacro MUI_DESCRIPTION_TEXT ${Section_Plugin_FeedReader} $(Section_Plugin_FeedReader_Desc) - !insertmacro MUI_DESCRIPTION_TEXT ${Section_Plugin_VOIP} $(Section_Plugin_VOIP_Desc) -; !insertmacro MUI_DESCRIPTION_TEXT ${Section_Link} $(Section_Link_Desc) - !insertmacro MUI_DESCRIPTION_TEXT ${Section_AutoStart} $(Section_AutoStart_Desc) -!insertmacro MUI_FUNCTION_DESCRIPTION_END - -# Uninstall -Section "Uninstall" - ; Remove file association registry keys -; DeleteRegKey HKCR .pqi - DeleteRegKey HKCR RetroShare - - ; Remove program/uninstall regsitry keys - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" - DeleteRegKey HKLM SOFTWARE\${APPNAME} - - DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "RetroShare" - - ; Remove shortcuts, if any - Delete "$SMPROGRAMS\${APPNAME}\*.*" - - ; Remove desktop shortcut - Delete "$DESKTOP\${APPNAME}.lnk" - - ; Remove Quicklaunch shortcut - Delete "$QUICKLAUNCH\${APPNAME}.lnk" - - ; Remove Autstart - Delete "$SMSTARTUP\${APPNAME}.lnk" - - ; Remove directories used - RMDir "$SMPROGRAMS\${APPNAME}" - RMDir /r "$INSTDIR" - - ; Don't remove the directory, otherwise - ; we lose the XPGP keys. - ; Should make this an option though... - RMDir /r "${DATADIR_NORMAL}\extensions6" - RMDir /r "${DATADIR_NORMAL}\stylesheets" -SectionEnd - -Function .onInit - StrCpy $InstDirNormal "${INSTDIR_NORMAL}" - StrCpy $InstDirPortable "${INSTDIR_PORTABLE}" - - StrCpy $PortableMode 0 - StrCpy $INSTDIR "$InstDirNormal" - StrCpy $DataDir "${DATADIR_NORMAL}" - - InitPluginsDir - Push $R1 - File /oname=$PLUGINSDIR\spltmp.bmp "${SOURCEDIR}\retroshare-gui\src\gui\images\logo\logo_splash.png" - advsplash::show 1200 1000 1000 -1 $PLUGINSDIR\spltmp - Pop $R1 - Pop $R1 - !insertmacro MUI_LANGDLL_DISPLAY -FunctionEnd - -# Installation mode - -Function RequireAdmin - UserInfo::GetAccountType - Pop $8 - ${If} $8 != "admin" - MessageBox MB_ICONSTOP "You need administrator rights to install ${APPNAME}" - SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED - Abort - ${EndIf} -FunctionEnd - -Function SetModeDestinationFromInstdir - ${If} $PortableMode = 0 - StrCpy $InstDirNormal $INSTDIR - ${Else} - StrCpy $InstDirPortable $INSTDIR - ${EndIf} -FunctionEnd - -Function PortableModePageCreate - Call SetModeDestinationFromInstdir ; If the user clicks BACK on the directory page we will remember their mode specific directory - !insertmacro MUI_HEADER_TEXT $(Page_InstallMode) $(Page_InstallMode_Desc) - nsDialogs::Create 1018 - Pop $0 - ${NSD_CreateRadioButton} 5u 25u -10u 8u $(Page_InstallMode_Standard) - Pop $1 - ${NSD_CreateLabel} 18u 40u -10u 24u $(Page_InstallMode_Standard_Desc) - Pop $0 - ${NSD_CreateRadioButton} 5u 75u -10u 8u $(Page_InstallMode_Portable) - Pop $2 - ${NSD_CreateLabel} 18u 90u -10u 24u $(Page_InstallMode_Portable_Desc) - Pop $0 - ${If} $PortableMode = 0 - SendMessage $1 ${BM_SETCHECK} ${BST_CHECKED} 0 - ${Else} - SendMessage $2 ${BM_SETCHECK} ${BST_CHECKED} 0 - ${EndIf} - nsDialogs::Show -FunctionEnd - -Function PortableModePageLeave - ${NSD_GetState} $1 $0 - ${If} $0 <> ${BST_UNCHECKED} - StrCpy $PortableMode 0 - StrCpy $INSTDIR $InstDirNormal - Call RequireAdmin - ; Enable sections - SectionSetText ${Section_Shortcuts} $(Section_Shortcuts) - SectionSetText ${Section_StartMenu} $(Section_StartMenu) - SectionSetText ${Section_Desktop} $(Section_Desktop) - SectionSetText ${Section_QuickLaunch} $(Section_QuickLaunch) - SectionSetText ${Section_AutoStart} $(Section_AutoStart) - !insertmacro SelectSection ${Section_Shortcuts} - !insertmacro SelectSection ${Section_AutoStart} - !insertmacro SelectSection ${Section_StartMenu} - !insertmacro SelectSection ${Section_Desktop} - !insertmacro SelectSection ${Section_QuickLaunch} - ${Else} - StrCpy $PortableMode 1 - StrCpy $INSTDIR $InstDirPortable - ; Disable sections - !insertmacro UnselectSection ${Section_Shortcuts} - !insertmacro UnselectSection ${Section_AutoStart} - !insertmacro UnselectSection ${Section_StartMenu} - !insertmacro UnselectSection ${Section_Desktop} - !insertmacro UnselectSection ${Section_QuickLaunch} - SectionSetText ${Section_Shortcuts} "" - SectionSetText ${Section_StartMenu} "" - SectionSetText ${Section_Desktop} "" - SectionSetText ${Section_QuickLaunch} "" - SectionSetText ${Section_AutoStart} "" - ${EndIf} -FunctionEnd - -Function dir_leave - ${If} $PortableMode = 0 - StrCpy $DataDir "${DATADIR_NORMAL}" - StrCpy $StyleSheetDir $DataDir - ${Else} - StrCpy $DataDir "${DATADIR_PORTABLE}" - StrCpy $StyleSheetDir $INSTDIR - ${EndIf} -FunctionEnd diff --git a/build_scripts/Windows/installer/retroshare-Qt5.nsi b/build_scripts/Windows/installer/retroshare-Qt5.nsi index f3a319351..64e6585ff 100644 --- a/build_scripts/Windows/installer/retroshare-Qt5.nsi +++ b/build_scripts/Windows/installer/retroshare-Qt5.nsi @@ -22,6 +22,9 @@ !ifndef MINGWDIR !error "MINGWDIR is not defined" !endif +!ifndef ARCHITECTURE +!error "Architecture is not defined" +!endif # Check optional defines !ifdef OUTDIR @@ -61,7 +64,12 @@ !define PUBLISHER "RetroShare Team" # Install path -!define INSTDIR_NORMAL "$ProgramFiles\${APPNAME}" +!if ${ARCHITECTURE} == "x86" + !define INSTDIR_NORMAL "$ProgramFiles32\${APPNAME}" +!endif +!if ${ARCHITECTURE} == "x64" + !define INSTDIR_NORMAL "$ProgramFiles64\${APPNAME}" +!endif !define INSTDIR_PORTABLE "$Desktop\${APPNAME}" !define DATADIR_NORMAL "$APPDATA\${APPNAME}" @@ -70,7 +78,7 @@ # Main Install settings Name "${APPNAMEANDVERSION}" InstallDirRegKey HKLM "Software\${APPNAME}" "" -OutFile "${OUTDIR_}RetroShare-${VERSION}-${Date}-${REVISION}-Qt-${QTVERSION}${INSTALLERADD}-setup.exe" +OutFile "${OUTDIR_}RetroShare-${VERSION}-${Date}-${REVISION}-Qt-${QTVERSION}-${ARCHITECTURE}${INSTALLERADD}-setup.exe" BrandingText "${APPNAMEANDVERSION}" RequestExecutionlevel highest # Use compression @@ -175,7 +183,7 @@ Section $(Section_Main) Section_Main ; Main binaries SetOutPath "$INSTDIR" File /oname=retroshare.exe "${RELEASEDIR}\retroshare-gui\src\release\retroshare.exe" - File /oname=retroshare-nogui.exe "${RELEASEDIR}\retroshare-nogui\src\release\retroshare-nogui.exe" + File /oname=retroshare-service.exe "${RELEASEDIR}\retroshare-service\src\release\retroshare-service.exe" ; Qt binaries File "${QTDIR}\bin\Qt5Core.dll" @@ -202,18 +210,33 @@ Section $(Section_Main) Section_Main ; MinGW binaries SetOutPath "$INSTDIR" File "${MINGWDIR}\bin\libstdc++-6.dll" - File "${MINGWDIR}\bin\libgcc_s_dw2-1.dll" + !if ${ARCHITECTURE} == "x86" + File "${MINGWDIR}\bin\libgcc_s_dw2-1.dll" + !endif + !if ${ARCHITECTURE} == "x64" + File "${MINGWDIR}\bin\libgcc_s_seh-1.dll" + !endif File "${MINGWDIR}\bin\libwinpthread-1.dll" ; External binaries File "${EXTERNAL_LIB_DIR}\bin\miniupnpc.dll" - File "${EXTERNAL_LIB_DIR}\bin\libeay32.dll" - File "${EXTERNAL_LIB_DIR}\bin\ssleay32.dll" + !if ${ARCHITECTURE} == "x86" + File "${EXTERNAL_LIB_DIR}\bin\libcrypto-1_1.dll" + File "${EXTERNAL_LIB_DIR}\bin\libssl-1_1.dll" + !endif + !if ${ARCHITECTURE} == "x64" + File "${EXTERNAL_LIB_DIR}\bin\libcrypto-1_1-x64.dll" + File "${EXTERNAL_LIB_DIR}\bin\libssl-1_1-x64.dll" + !endif ; Other files ; File "${SOURCEDIR}\retroshare-gui\src\changelog.txt" File "${SOURCEDIR}\libbitdht\src\bitdht\bdboot.txt" + ; License + SetOutPath "$INSTDIR\license" + File "${SOURCEDIR}\retroshare-gui\src\license\*.*" + ; Image formats SetOutPath "$INSTDIR\imageformats" File /r "${QTDIR}\plugins\imageformats\qgif.dll" @@ -236,7 +259,6 @@ Section $(Section_Main) Section_Main File /r "${QTDIR}\translations\qt_*.qm" File /r "${QTDIR}\translations\qtbase_*.qm" File /r "${QTDIR}\translations\qtscript_*.qm" - File /r "${QTDIR}\translations\qtquick1_*.qm" File /r "${QTDIR}\translations\qtmultimedia_*.qm" File /r "${QTDIR}\translations\qtxmlpatterns_*.qm" From 4089fd2d7a78f1a1cb7ff1f6a9e2a908287e961f Mon Sep 17 00:00:00 2001 From: thunder2 Date: Sat, 1 Aug 2020 22:29:58 +0200 Subject: [PATCH 61/95] Fixed creating git-log in Windows build environment --- build_scripts/Windows/build/git-log.bat | 29 +++++++++---------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/build_scripts/Windows/build/git-log.bat b/build_scripts/Windows/build/git-log.bat index d711ededb..de313adda 100644 --- a/build_scripts/Windows/build/git-log.bat +++ b/build_scripts/Windows/build/git-log.bat @@ -28,25 +28,16 @@ if not exist "%GetRsVersion%" ( exit /B 1 ) -call "%GetRsVersion%" RS_REVISION_STRING RsRevision -if "%RsRevision%"=="" echo Revision not found.& exit /B 1 - :: Get compiled version -call "%GetRsVersion%" RS_REVISION_STRING RsRevision -if "%RsRevision%"=="" echo Revision not found.& exit /B 1 +call "%GetRsVersion%" "%RsBuildPath%\retroshare-gui\src\%RsBuildConfig%\retroshare.exe" RsVersion +if errorlevel 1 %cecho% error "Version not found."& goto error -call "%GetRsVersion%" RS_MAJOR_VERSION RsMajorVersion -if "%RsMajorVersion%"=="" echo Major version not found.& exit /B 1 +if "%RsVersion.Major%"=="" %cecho% error "Major version not found."& goto error +if "%RsVersion.Minor%"=="" %cecho% error "Minor version not found."& goto error +if "%RsVersion.Mini%"=="" %cecho% error "Mini number not found".& goto error +if "%RsVersion.Extra%"=="" %cecho% error "Extra number not found".& goto error -call "%GetRsVersion%" RS_MINOR_VERSION RsMinorVersion -if "%RsMinorVersion%"=="" echo Minor version not found.& exit /B 1 - -call "%GetRsVersion%" RS_BUILD_NUMBER RsBuildNumber -if "%RsBuildNumber%"=="" echo Build number not found.& exit /B 1 - -call "%GetRsVersion%" RS_BUILD_NUMBER_ADD RsBuildNumberAdd - -set RsVersion=%RsMajorVersion%.%RsMinorVersion%.%RsBuildNumber%%RsBuildNumberAdd% +set RsVersion=%RsVersion.Major%.%RsVersion.Minor%.%RsVersion.Mini% :: Check WMIC is available wmic.exe alias /? >nul 2>&1 || echo WMIC is not available.&& exit /B 1 @@ -57,7 +48,7 @@ for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set RsDate=%RsDate:~0,4%%RsDate:~4,2%%RsDate:~6,2% :: Get last revision -set RsLastRefFile=%BuildPath%\Qt-%QtVersion%%RsType%-%RsBuildConfig%-LastRef.txt +set RsLastRefFile=%BuildPath%\Qt-%QtVersion%-%GCCArchitecture%%RsType%-%RsBuildConfig%-LastRef.txt set RsLastRef= if exist "%RsLastRefFile%" set /P RsLastRef=<"%RsLastRefFile%" @@ -85,9 +76,9 @@ if %errorlevel%==2 exit /B 1 :no_confirm if "%RsBuildConfig%" NEQ "release" ( - set RsGitLog=%DeployPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsRevision%-Qt-%QtVersion%%RsType%%RsArchiveAdd%-%RsBuildConfig%.txt + set RsGitLog=%DeployPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsVersion.Extra%-Qt-%QtVersion%-%GCCArchitecture%%RsType%%RsArchiveAdd%-%RsBuildConfig%.txt ) else ( - set RsGitLog=%DeployPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsRevision%-Qt-%QtVersion%%RsType%%RsArchiveAdd%.txt + set RsGitLog=%DeployPath%\RetroShare-%RsVersion%-Windows-Portable-%RsDate%-%RsVersion.Extra%-Qt-%QtVersion%-%GCCArchitecture%%RsType%%RsArchiveAdd%.txt ) title %SourceName%-%RsBuildConfig% [git log] From 3f9acd7ef84d84ba0c5cab8128d433d97d49531a Mon Sep 17 00:00:00 2001 From: drbob Date: Mon, 3 Aug 2020 19:30:29 +1000 Subject: [PATCH 62/95] Remove old Pulse display Remove PulseItem / PulseDetails classes Switch all Message retrieval away from TokenQueues Remove Original PulseItem View --- .../src/gui/TheWire/PulseAddDialog.cpp | 19 +- .../src/gui/TheWire/PulseAddDialog.h | 2 +- .../src/gui/TheWire/PulseDetails.cpp | 226 ----------- retroshare-gui/src/gui/TheWire/PulseDetails.h | 66 --- .../src/gui/TheWire/PulseDetails.ui | 243 ----------- retroshare-gui/src/gui/TheWire/PulseItem.cpp | 157 -------- retroshare-gui/src/gui/TheWire/PulseItem.h | 72 ---- retroshare-gui/src/gui/TheWire/PulseItem.ui | 192 --------- .../src/gui/TheWire/PulseTopLevel.cpp | 2 +- .../src/gui/TheWire/PulseViewItem.h | 2 +- retroshare-gui/src/gui/TheWire/WireDialog.cpp | 379 +----------------- retroshare-gui/src/gui/TheWire/WireDialog.h | 24 +- retroshare-gui/src/gui/TheWire/WireDialog.ui | 78 +--- retroshare-gui/src/retroshare-gui.pro | 14 +- 14 files changed, 35 insertions(+), 1441 deletions(-) delete mode 100644 retroshare-gui/src/gui/TheWire/PulseDetails.cpp delete mode 100644 retroshare-gui/src/gui/TheWire/PulseDetails.h delete mode 100644 retroshare-gui/src/gui/TheWire/PulseDetails.ui delete mode 100644 retroshare-gui/src/gui/TheWire/PulseItem.cpp delete mode 100644 retroshare-gui/src/gui/TheWire/PulseItem.h delete mode 100644 retroshare-gui/src/gui/TheWire/PulseItem.ui diff --git a/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp b/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp index edf95df35..41ad2be75 100644 --- a/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp @@ -21,7 +21,7 @@ #include #include -#include "PulseDetails.h" +#include "PulseReply.h" #include "PulseAddDialog.h" @@ -128,7 +128,8 @@ void PulseAddDialog::pulseTextChanged() } // Old Interface, deprecate / make internal. -void PulseAddDialog::setReplyTo(RsWirePulse &pulse, std::string &groupName, uint32_t replyType) +// TODO: Convert mReplyToPulse to be an SPtr, and remove &pulse parameter. +void PulseAddDialog::setReplyTo(RsWirePulse &pulse, RsWirePulseSPtr pPulse, std::string &groupName, uint32_t replyType) { mIsReply = true; mReplyToPulse = pulse; @@ -136,11 +137,11 @@ void PulseAddDialog::setReplyTo(RsWirePulse &pulse, std::string &groupName, uint ui.frame_reply->setVisible(true); { - std::map replies; - PulseDetails *details = new PulseDetails(NULL, &pulse, groupName, replies); + PulseReply *reply = new PulseReply(NULL, pPulse); + // add extra widget into layout. QVBoxLayout *vbox = new QVBoxLayout(); - vbox->addWidget(details); + vbox->addWidget(reply); vbox->setSpacing(1); vbox->setContentsMargins(0,0,0,0); ui.widget_replyto->setLayout(vbox); @@ -186,7 +187,13 @@ void PulseAddDialog::setReplyTo(const RsGxsGroupId &grpId, const RsGxsMessageId return; } - setReplyTo(*pPulse, pGroup->mMeta.mGroupName, replyType); + // update GroupPtr + // TODO - this should be handled in libretroshare if possible. + if (pPulse->mGroupPtr == NULL) { + pPulse->mGroupPtr = pGroup; + } + + setReplyTo(*pPulse, pPulse, pGroup->mMeta.mGroupName, replyType); } void PulseAddDialog::addURL() diff --git a/retroshare-gui/src/gui/TheWire/PulseAddDialog.h b/retroshare-gui/src/gui/TheWire/PulseAddDialog.h index 881b0c1a7..51f92f4e9 100644 --- a/retroshare-gui/src/gui/TheWire/PulseAddDialog.h +++ b/retroshare-gui/src/gui/TheWire/PulseAddDialog.h @@ -56,7 +56,7 @@ private slots: private: // OLD VERSIONs, private now. void setGroup(RsWireGroup &group); - void setReplyTo(RsWirePulse &pulse, std::string &groupName, uint32_t replyType); + void setReplyTo(RsWirePulse &pulse, RsWirePulseSPtr pPulse, std::string &groupName, uint32_t replyType); void postOriginalPulse(); void postReplyPulse(); diff --git a/retroshare-gui/src/gui/TheWire/PulseDetails.cpp b/retroshare-gui/src/gui/TheWire/PulseDetails.cpp deleted file mode 100644 index 3cb45dc2b..000000000 --- a/retroshare-gui/src/gui/TheWire/PulseDetails.cpp +++ /dev/null @@ -1,226 +0,0 @@ -/******************************************************************************* - * gui/TheWire/PulseDetails.cpp * - * * - * Copyright (c) 2020 Robert Fernie * - * * - * This program is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Affero General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Affero General Public License for more details. * - * * - * You should have received a copy of the GNU Affero General Public License * - * along with this program. If not, see . * - * * - *******************************************************************************/ - -#include -#include -#include -#include - -#include "PulseDetails.h" - -#include "util/DateTime.h" - -#include -#include - -/** Constructor */ -PulseDetails::PulseDetails(PulseHolder *actions, RsWirePulse *pulse, std::string &groupName, - std::map replies) -:QWidget(NULL), mActions(actions), mPulse(*pulse), mGroupName(groupName) -{ - setupUi(this); - setAttribute ( Qt::WA_DeleteOnClose, true ); - setup(); - addReplies(replies); -} - -PulseDetails::PulseDetails(PulseHolder *actions, - RsGxsGroupId &parentGroupId, - std::string &parentGroupName, - RsGxsMessageId &parentOrigMsgId, - RsGxsId &parentAuthorId, - rstime_t &parentPublishTs, - std::string &parentPulseText) -:QWidget(NULL), mActions(actions), mPulse(), mGroupName(parentGroupName) -{ - setupUi(this); - setAttribute ( Qt::WA_DeleteOnClose, true ); - - // reuse Meta data structure. - mPulse.mMeta.mGroupId = parentGroupId; - mPulse.mMeta.mOrigMsgId = parentOrigMsgId; - mPulse.mMeta.mMsgId = parentOrigMsgId; // add in, for completeness. - mPulse.mMeta.mAuthorId = parentAuthorId; - mPulse.mMeta.mPublishTs = parentPublishTs; - mPulse.mPulseText = parentPulseText; - setup(); -} - -void PulseDetails::setBackground(QString color) -{ - QWidget *tocolor = this; - QPalette p = tocolor->palette(); - p.setColor(tocolor->backgroundRole(), QColor(color)); - tocolor->setPalette(p); - tocolor->setAutoFillBackground(true); -} - -void PulseDetails::setup() -{ - connect(toolButton_expand, SIGNAL(clicked()), this, SLOT(toggle())); - - connect(toolButton_follow, SIGNAL(clicked()), this, SLOT(follow())); - connect(toolButton_rate, SIGNAL(clicked()), this, SLOT(rate())); - connect(toolButton_reply, SIGNAL(clicked()), this, SLOT(reply())); - - label_wireName->setText(QString::fromStdString(mGroupName)); - label_idName->setId(mPulse.mMeta.mAuthorId); - - label_date->setText(DateTime::formatDateTime(mPulse.mMeta.mPublishTs)); - label_summary->setText(getSummary()); - - // label_icon->setText(); - textBrowser->setPlainText(QString::fromStdString(mPulse.mPulseText)); - frame_expand->setVisible(false); - - label_replies->setText(""); - frame_replies->setVisible(false); - mHasReplies = false; - - // TMP toolButton_follow->setEnabled(false); // TODO - toolButton_rate->setEnabled(false); // TODO - toolButton_reply->setEnabled(mActions != NULL); -} - -void PulseDetails::addReplies(std::map replies) -{ - if (replies.size() == 0) - { - // do nothing. - return; - } - else if (replies.size() == 1) - { - label_replies->setText("1 reply"); - } - else if (replies.size() > 1) - { - label_replies->setText(QString("%1 replies").arg(replies.size())); - } - - // add extra widgets into layout. - QLayout *vbox = frame_replies->layout(); - mHasReplies = true; - - std::map emptyReplies; - std::map::reverse_iterator it; - for (it = replies.rbegin(); it != replies.rend(); it++) - { - // add Ref as child reply. - PulseDetails *pd = new PulseDetails(mActions, - it->second->mRefGroupId, - it->second->mRefGroupName, - it->second->mRefOrigMsgId, - it->second->mRefAuthorId, - it->second->mRefPublishTs, - it->second->mRefPulseText); - pd->setBackground("goldenrod"); - vbox->addWidget(pd); - } -} - - -void PulseDetails::toggle() -{ - if (frame_expand->isVisible()) { - // switch to minimal view. - label_summary->setVisible(true); - frame_expand->setVisible(false); - frame_replies->setVisible(false); - } else { - // switch to expanded view. - label_summary->setVisible(false); - frame_expand->setVisible(true); - if (mHasReplies) { - frame_replies->setVisible(true); - } - } -} - -const int SUMMARY_MAX_LEN = 50; -QString PulseDetails::getSummary() -{ - std::string summary = mPulse.mPulseText; - std::cerr << "PulseDetails::getSummary() orig: " << summary; - std::cerr << std::endl; - int len = summary.size(); - bool in_whitespace = false; - for (int i = 0; i < len; i++) - { - if (isspace(summary[i])) { - if (in_whitespace) { - // trim - summary.erase(i, 1); - // rollback index / len. - --i; - --len; - } else { - // replace whitespace with space. - summary[i] = ' '; - in_whitespace = true; - } - } else { - in_whitespace = false; - } - } - - if (SUMMARY_MAX_LEN < len) - { - summary = summary.substr(0,SUMMARY_MAX_LEN-3); - summary += "..."; - } - - std::cerr << "PulseDetails::getSummary() summary: " << summary; - std::cerr << std::endl; - - return QString::fromStdString(summary); -} - -void PulseDetails::follow() -{ - // follow group. - if (mActions) - { - // tmp hack for developing. - mActions->focus(mPulse.mMeta.mGroupId, mPulse.mMeta.mOrigMsgId); - - //mActions->follow(mPulse.mMeta.mGroupId); - } -} - -void PulseDetails::rate() -{ - // rate author - if (mActions) - { - mActions->rate(mPulse.mMeta.mAuthorId); - } -} - -void PulseDetails::reply() -{ - // reply - if (mActions) - { - mActions->reply(mPulse, mGroupName); - } -} - - diff --git a/retroshare-gui/src/gui/TheWire/PulseDetails.h b/retroshare-gui/src/gui/TheWire/PulseDetails.h deleted file mode 100644 index b6a623f73..000000000 --- a/retroshare-gui/src/gui/TheWire/PulseDetails.h +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************* - * gui/TheWire/PulseDetails.h * - * * - * Copyright (c) 2020 Robert Fernie * - * * - * This program is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Affero General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Affero General Public License for more details. * - * * - * You should have received a copy of the GNU Affero General Public License * - * along with this program. If not, see . * - * * - *******************************************************************************/ - -#ifndef MRK_PULSE_DETAILS_H -#define MRK_PULSE_DETAILS_H - -#include "ui_PulseDetails.h" -#include "PulseItem.h" - -#include - -class PulseDetails : public QWidget, private Ui::PulseDetails -{ - Q_OBJECT - -public: - PulseDetails(PulseHolder *actions, RsWirePulse *pulse, std::string &groupName, - std::map replies); - - // when Reply parent.... - PulseDetails(PulseHolder *actions, - RsGxsGroupId &parentGroupId, - std::string &parentGroupName, - RsGxsMessageId &parentOrigMsgId, - RsGxsId &parentAuthorId, - rstime_t &parentPublishTs, - std::string &parentPulseText); - - void setup(); - - void setBackground(QString color); - -private slots: - void toggle(); - void follow(); - void rate(); - void reply(); - -private: - void addReplies(std::map replies); - QString getSummary(); - - PulseHolder *mActions; - RsWirePulse mPulse; - std::string mGroupName; - bool mHasReplies; -}; - -#endif diff --git a/retroshare-gui/src/gui/TheWire/PulseDetails.ui b/retroshare-gui/src/gui/TheWire/PulseDetails.ui deleted file mode 100644 index f5f7f7f31..000000000 --- a/retroshare-gui/src/gui/TheWire/PulseDetails.ui +++ /dev/null @@ -1,243 +0,0 @@ - - - PulseDetails - - - - 0 - 0 - 807 - 231 - - - - Form - - - - - - - - \/ - - - - - - - WireGroupName - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - # replies - - - - - - - Qt::Horizontal - - - - 128 - 20 - - - - - - - - Summary Text - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 20 - 20 - - - - - - - - DateTime 02/02/20 - - - - - - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - - - - - follow - - - - - - - reply - - - - - - - rate - - - - - - - - - - - idLabel - - - - - - - - 80 - 80 - - - - Image - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 5 - - - - - - - - - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 30 - 0 - - - - - - - - - 0 - 0 - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - - - - 75 - true - - - - Replies - - - - - - - - - - - - - GxsIdLabel - QLabel -

gui/gxs/GxsIdLabel.h
- - - - - diff --git a/retroshare-gui/src/gui/TheWire/PulseItem.cpp b/retroshare-gui/src/gui/TheWire/PulseItem.cpp deleted file mode 100644 index a2dac8bc2..000000000 --- a/retroshare-gui/src/gui/TheWire/PulseItem.cpp +++ /dev/null @@ -1,157 +0,0 @@ -/******************************************************************************* - * gui/TheWire/PulseItem.cpp * - * * - * Copyright (c) 2012-2020 Robert Fernie * - * * - * This program is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Affero General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Affero General Public License for more details. * - * * - * You should have received a copy of the GNU Affero General Public License * - * along with this program. If not, see . * - * * - *******************************************************************************/ - -#include -#include -#include -#include - -#include "PulseItem.h" - -#include "PulseDetails.h" - -#include -#include - -/**** - * #define DEBUG_ITEM 1 - ****/ - -/** Constructor */ - -PulseItem::PulseItem(PulseHolder *holder, std::string path) -:QWidget(NULL), mHolder(holder), mType(0) -{ - setupUi(this); - setAttribute ( Qt::WA_DeleteOnClose, true ); - -} - -PulseItem::PulseItem(PulseHolder *holder, RsWirePulse *pulse_ptr, RsWireGroup *group_ptr, std::map replies) -:QWidget(NULL), mHolder(holder), mPulse(*pulse_ptr), mType(0) -{ - setupUi(this); - setAttribute ( Qt::WA_DeleteOnClose, true ); - QWidget *pulse_widget = widget_parent; // default msg goes into widget_parent. - - /* if it is a reply */ - if (mPulse.mPulseType & WIRE_PULSE_TYPE_RESPONSE) { - - std::cerr << "Installing Reply Msg"; - std::cerr << std::endl; - std::cerr << "GroupID: " << mPulse.mRefGroupId; - std::cerr << std::endl; - std::cerr << "GroupName: " << mPulse.mRefGroupName; - std::cerr << std::endl; - std::cerr << "OrigMsgId: " << mPulse.mRefOrigMsgId; - std::cerr << std::endl; - std::cerr << "AuthorId: " << mPulse.mRefAuthorId; - std::cerr << std::endl; - std::cerr << "PublishTs: " << mPulse.mRefPublishTs; - std::cerr << std::endl; - std::cerr << "PulseText: " << mPulse.mRefPulseText; - std::cerr << std::endl; - - // fill in the parent. - PulseDetails *parent = new PulseDetails( - mHolder, - mPulse.mRefGroupId, - mPulse.mRefGroupName, - mPulse.mRefOrigMsgId, - mPulse.mRefAuthorId, - mPulse.mRefPublishTs, - mPulse.mRefPulseText); - - parent->setBackground("sienna"); - - // add extra widget into layout. - QVBoxLayout *vbox = new QVBoxLayout(); - vbox->addWidget(parent); - vbox->setContentsMargins(0,0,0,0); - widget_parent->setLayout(vbox); - - // if its a reply, the real msg goes into reply slot. - pulse_widget = widget_reply; - } - else - { - // ORIGINAL PULSE. - // hide widget_reply, as it will be empty. - widget_reply->setVisible(false); - } - - { - std::cerr << "Adding Main Message"; - std::cerr << std::endl; - PulseDetails *details = new PulseDetails(mHolder, &mPulse, group_ptr->mMeta.mGroupName, replies); - - // add extra widget into layout. - QVBoxLayout *vbox = new QVBoxLayout(); - vbox->addWidget(details); - vbox->setSpacing(1); - vbox->setContentsMargins(0,0,0,0); - pulse_widget->setLayout(vbox); - pulse_widget->setVisible(true); - } -} - -rstime_t PulseItem::publishTs() -{ - return mPulse.mMeta.mPublishTs; -} - -void PulseItem::removeItem() -{ -} - -void PulseItem::setSelected(bool on) -{ -} - -bool PulseItem::isSelected() -{ - return mSelected; -} - -void PulseItem::mousePressEvent(QMouseEvent *event) -{ - /* We can be very cunning here? - * grab out position. - * flag ourselves as selected. - * then pass the mousePressEvent up for handling by the parent - */ - - QPoint pos = event->pos(); - - std::cerr << "PulseItem::mousePressEvent(" << pos.x() << ", " << pos.y() << ")"; - std::cerr << std::endl; - - setSelected(true); - - QWidget::mousePressEvent(event); - - mHolder->notifyPulseSelection(this); -} - -const QPixmap *PulseItem::getPixmap() -{ - return NULL; -} - diff --git a/retroshare-gui/src/gui/TheWire/PulseItem.h b/retroshare-gui/src/gui/TheWire/PulseItem.h deleted file mode 100644 index a0bbc9b77..000000000 --- a/retroshare-gui/src/gui/TheWire/PulseItem.h +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * gui/TheWire/PulseItem.h * - * * - * Copyright (c) 2012-2020 Robert Fernie * - * * - * This program is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Affero General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Affero General Public License for more details. * - * * - * You should have received a copy of the GNU Affero General Public License * - * along with this program. If not, see . * - * * - *******************************************************************************/ - -#ifndef MRK_PULSE_ITEM_H -#define MRK_PULSE_ITEM_H - -#include "ui_PulseItem.h" - -#include - -class PulseItem; - -class PulseHolder -{ -public: - virtual ~PulseHolder() {} - virtual void deletePulseItem(PulseItem *, uint32_t ptype) = 0; - virtual void notifyPulseSelection(PulseItem *item) = 0; - - // Actions. - virtual void focus(RsGxsGroupId &groupId, RsGxsMessageId &msgId) = 0; - virtual void follow(RsGxsGroupId &groupId) = 0; - virtual void rate(RsGxsId &authorId) = 0; - virtual void reply(RsWirePulse &pulse, std::string &groupName) = 0; -}; - - -class PulseItem : public QWidget, private Ui::PulseItem -{ - Q_OBJECT - -public: - PulseItem(PulseHolder *holder, std::string url); - PulseItem(PulseHolder *holder, RsWirePulse *pulse_ptr, RsWireGroup *group_ptr, std::map replies); - - rstime_t publishTs(); - void removeItem(); - - void setSelected(bool on); - bool isSelected(); - - const QPixmap *getPixmap(); - -protected: - void mousePressEvent(QMouseEvent *event); - -private: - - PulseHolder *mHolder; - RsWirePulse mPulse; - uint32_t mType; - bool mSelected; -}; - -#endif diff --git a/retroshare-gui/src/gui/TheWire/PulseItem.ui b/retroshare-gui/src/gui/TheWire/PulseItem.ui deleted file mode 100644 index f12b3bda0..000000000 --- a/retroshare-gui/src/gui/TheWire/PulseItem.ui +++ /dev/null @@ -1,192 +0,0 @@ - - - PulseItem - - - - 0 - 0 - 802 - 322 - - - - - 0 - 0 - - - - - 9 - - - - - - - - 2 - - - 2 - - - 2 - - - 2 - - - - - - 0 - 0 - - - - - 0 - 0 - - - - QFrame#frame{border: 2px solid #CCCCCC; -background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, - stop: 0 #EEEEEE, stop: 1 #CCCCCC); -border-radius: 10px} - - - QFrame::StyledPanel - - - QFrame::Raised - - - - 1 - - - 5 - - - 2 - - - 5 - - - 2 - - - - - - - - 20 - 0 - - - - - 0 - 0 - - - - QFrame::StyledPanel - - - - - - - Qt::Vertical - - - - 10 - 0 - - - - - - - - Qt::Horizontal - - - - 30 - 0 - - - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 30 - 0 - - - - - - - - Qt::Vertical - - - - 10 - 0 - - - - - - - - - 20 - 0 - - - - - 0 - 0 - - - - QFrame::StyledPanel - - - - - - - - - - - - - - - diff --git a/retroshare-gui/src/gui/TheWire/PulseTopLevel.cpp b/retroshare-gui/src/gui/TheWire/PulseTopLevel.cpp index a6ceb4a27..a02dfd8fc 100644 --- a/retroshare-gui/src/gui/TheWire/PulseTopLevel.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseTopLevel.cpp @@ -1,5 +1,5 @@ /******************************************************************************* - * gui/TheWire/PulseItem.cpp * + * gui/TheWire/PulseTopLevel.cpp * * * * Copyright (c) 2020-2020 Robert Fernie * * * diff --git a/retroshare-gui/src/gui/TheWire/PulseViewItem.h b/retroshare-gui/src/gui/TheWire/PulseViewItem.h index 8c0c6bbe6..05f23cdb2 100644 --- a/retroshare-gui/src/gui/TheWire/PulseViewItem.h +++ b/retroshare-gui/src/gui/TheWire/PulseViewItem.h @@ -21,7 +21,7 @@ #ifndef MRK_PULSE_VIEW_ITEM_H #define MRK_PULSE_VIEW_ITEM_H -#include "ui_PulseItem.h" +#include #include diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.cpp b/retroshare-gui/src/gui/TheWire/WireDialog.cpp index cf4c93ac5..dc58a410c 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/WireDialog.cpp @@ -61,7 +61,6 @@ WireDialog::WireDialog(QWidget *parent) ui.setupUi(this); mAddDialog = NULL; - mPulseSelected = NULL; mGroupSelected = NULL; connect( ui.toolButton_createAccount, SIGNAL(clicked()), this, SLOT(createGroup())); @@ -96,42 +95,6 @@ void WireDialog::addGroup(QWidget *item) alayout->addWidget(item); } -// PulseHolder interface. -void WireDialog::deletePulseItem(PulseItem * /* item */, uint32_t /* type */) -{ - return; -} - - - // Actions from PulseHolder. -void WireDialog::focus(RsGxsGroupId &groupId, RsGxsMessageId &msgId) -{ - std::cerr << "WireDialog::focus("; - std::cerr << groupId.toStdString() << ","; - std::cerr << msgId.toStdString(); - std::cerr << ")"; - std::cerr << std::endl; - - showPulseFocus(groupId, msgId); -} - - -void WireDialog::follow(RsGxsGroupId &groupId) -{ - std::cerr << "WireDialog::follow("; - std::cerr << groupId.toStdString(); - std::cerr << ")"; - std::cerr << std::endl; -} - -void WireDialog::rate(RsGxsId &authorId) -{ - std::cerr << "WireDialog::rate("; - std::cerr << authorId.toStdString(); - std::cerr << ")"; - std::cerr << std::endl; -} - bool WireDialog::setupPulseAddDialog() { std::cerr << "WireDialog::setupPulseAddDialog()"; @@ -161,37 +124,6 @@ bool WireDialog::setupPulseAddDialog() return true; } -void WireDialog::reply(RsWirePulse &pulse, std::string &groupName) -{ - std::cerr << "WireDialog::reply("; - std::cerr << pulse.mMeta.mGroupId.toStdString(); - std::cerr << ", MsgId:"; - std::cerr << pulse.mMeta.mMsgId.toStdString(); - std::cerr << ", OrigMsgId:"; - std::cerr << pulse.mMeta.mOrigMsgId.toStdString(); - std::cerr << ")"; - std::cerr << std::endl; - - if (setupPulseAddDialog()) - { - mAddDialog->setReplyTo(pulse.mMeta.mGroupId, pulse.mMeta.mMsgId, WIRE_PULSE_TYPE_REPLY); - mAddDialog->show(); - } -} - -void WireDialog::notifyPulseSelection(PulseItem *item) -{ - if (mPulseSelected) - { - std::cerr << "WireDialog::notifyPulseSelection() unselecting old one : " << mPulseSelected; - std::cerr << std::endl; - - mPulseSelected->setSelected(false); - } - mPulseSelected = item; -} - - void WireDialog::subscribe(RsGxsGroupId &groupId) { @@ -285,49 +217,6 @@ void WireDialog::createPulse() mAddDialog->show(); } -void WireDialog::addPulse(RsWirePulse *pulse, RsWireGroup *group, - std::map replies) -{ - std::cerr << "WireDialog::addPulse() GroupId : " << pulse->mMeta.mGroupId; - std::cerr << " OrigMsgId : " << pulse->mMeta.mOrigMsgId; - std::cerr << " Replies : " << replies.size(); - std::cerr << std::endl; - - PulseItem *pulseItem = new PulseItem(this, pulse, group, replies); - - /* ensure its a boxlayout */ - QLayout *alayout = ui.scrollAreaWidgetContents->layout(); - QBoxLayout *boxlayout = dynamic_cast(alayout); - if (boxlayout == NULL) { - std::cerr << "WireDialog::addPulse() ERROR not boxlayout, inserting at end"; - std::cerr << std::endl; - alayout->addWidget(pulseItem); - return; - } - - /* iterate through layout, and insert at the correct time */ - for(int i = 0; i < alayout->count(); i++) - { - QLayoutItem *layoutItem = boxlayout->itemAt(i); - PulseItem *pitem = dynamic_cast(layoutItem->widget()); - if (pitem != NULL) - { - if (pitem->publishTs() < pulseItem->publishTs()) - { - std::cerr << "WireDialog::addPulse() Inserting at index: " << i; - std::cerr << std::endl; - /* insert at this index */ - boxlayout->insertWidget(i, pulseItem); - return; - } - } - } - // last item. - std::cerr << "WireDialog::addPulse() Inserting at end"; - std::cerr << std::endl; - boxlayout->addWidget(pulseItem); -} - void WireDialog::addGroup(const RsWireGroup &group) { std::cerr << "WireDialog::addGroup() GroupId : " << group.mMeta.mGroupId; @@ -336,37 +225,6 @@ void WireDialog::addGroup(const RsWireGroup &group) addGroup(new WireGroupItem(this, group)); } -void WireDialog::deletePulses() -{ - std::cerr << "WireDialog::deletePulses()"; - std::cerr << std::endl; - - QLayout *alayout = ui.scrollAreaWidgetContents->layout(); - QLayoutItem *item; - int i = 0; - while (i < alayout->count()) - { - item = alayout->itemAt(i); - QWidget *widget = item->widget(); - if (NULL != dynamic_cast(widget)) - { - std::cerr << "WireDialog::deletePulses() Removing Item at: " << i; - std::cerr << std::endl; - - item = alayout->takeAt(i); - delete item->widget(); - delete item; - } - else - { - std::cerr << "WireDialog::deletePulses() Leaving Item at: " << i; - std::cerr << std::endl; - - i++; - } - } -} - void WireDialog::deleteGroups() { std::cerr << "WireDialog::deleteGroups()"; @@ -447,11 +305,9 @@ void WireDialog::showSelectedGroups() ui.comboBox_filterTime->setEnabled(false); if (mGroupSelected) { - deletePulses(); // request data. std::list grpIds; grpIds.push_back(mGroupSelected->groupId()); - requestPulseData(grpIds); // show GroupFocus. showGroupFocus(mGroupSelected->groupId()); @@ -466,8 +322,6 @@ void WireDialog::showGroups() { ui.comboBox_filterTime->setEnabled(false); deleteGroups(); - deletePulses(); - std::list allGroupIds; @@ -498,7 +352,6 @@ void WireDialog::showGroups() std::list grpIds; grpIds.push_back(it->second.mMeta.mGroupId); allGroupIds.push_back(it->second.mMeta.mGroupId); - requestPulseData(grpIds); } } @@ -533,62 +386,6 @@ bool WireDialog::loadGroupData(const uint32_t &token) return true; } -void WireDialog::requestPulseData(const std::list& grpIds) -{ - std::cerr << "WireDialog::requestPulseData()"; - std::cerr << std::endl; - - RsTokReqOptions opts; - opts.mReqType = GXS_REQUEST_TYPE_MSG_DATA; - opts.mOptions = RS_TOKREQOPT_MSG_LATEST; - uint32_t token; - mWireQueue->requestMsgInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, grpIds, 0); -} - - -/* LoadPulseData... - * - * group into threads, using std::map - * then sort by publishTS, using std::map - * then add into gui. - * - use pointers to avoid copying everywhere. - * - * should we mutex Groups, or copy so we don't lose a pointer? - * should be fine, as mAllGroups only modified from loadData calls. - ****** - * - * NB: Potentially, this should be changed to use GXS to do the bulk of the work. - * - request Top-Level Msgs, sorted by PublishTS. - * - Insert into GUI. - * - for each request children Msg, and fill in "replies" - * - * This needs sorted option on GXS Data fetch. - */ - -class PulseReplySet -{ -public: - PulseReplySet() : group(NULL), msg(NULL) {} - PulseReplySet(RsWirePulse *m, RsWireGroup *g) - : group(g), msg(m) {} - - RsWireGroup *group; - RsWirePulse *msg; - std::map replies; // orig ID -> replies. -}; - -class PulseOrderedReply -{ -public: - PulseOrderedReply() : group(NULL), msg(NULL) {} - PulseOrderedReply(RsWirePulse *m, RsWireGroup *g) - : group(g), msg(m) {} - - RsWireGroup *group; - RsWirePulse *msg; - std::map replies; // publish -> replies. -}; - rstime_t WireDialog::getFilterTimestamp() { rstime_t filterTimestamp = time(NULL); @@ -612,135 +409,6 @@ rstime_t WireDialog::getFilterTimestamp() return filterTimestamp; } -bool WireDialog::loadPulseData(const uint32_t &token) -{ - std::cerr << "WireDialog::loadPulseData()"; - std::cerr << std::endl; - - std::vector pulses; - rsWire->getPulseData(token, pulses); - - std::cerr << "WireDialog::loadPulseData() pulses.size(): " << pulses.size(); - std::cerr << std::endl; - - std::list references; - std::map pulseGrouping; - - // setup time filtering. - uint32_t filterTimestamp; - bool filterTime = (ui.comboBox_filterTime->currentIndex() > 0); - if (filterTime) - { - filterTimestamp = getFilterTimestamp(); - } - - std::vector::iterator vit = pulses.begin(); - for(; vit != pulses.end(); vit++) - { - RsWirePulse& pulse = *vit; - if (pulse.mPulseType & WIRE_PULSE_TYPE_REFERENCE) - { - // store references to add in later. - std::cerr << "WireDialog::loadPulseData() REF: GroupId: " << pulse.mMeta.mGroupId; - std::cerr << " PulseId: " << pulse.mMeta.mMsgId; - std::cerr << std::endl; - references.push_back(&pulse); - } - else - { - // Filter timestamp now. (as soon as possible). - if (filterTime && (pulse.mMeta.mPublishTs < filterTimestamp)) - { - std::cerr << "WireDialog::loadPulseData() SKipping OLD MSG: GroupId: " << pulse.mMeta.mGroupId; - std::cerr << " PulseId: " << pulse.mMeta.mMsgId; - std::cerr << std::endl; - continue; - } - - RsGxsGroupId &gid = pulse.mMeta.mGroupId; - std::map::iterator git = mAllGroups.find(gid); - if (git != mAllGroups.end()) - { - RsWireGroup &group = git->second; - std::cerr << "WireDialog::loadPulseData() MSG: GroupId: " << pulse.mMeta.mGroupId; - std::cerr << " PulseId: " << pulse.mMeta.mMsgId; - std::cerr << std::endl; - - // install into pulseGrouping. - pulseGrouping[pulse.mMeta.mOrigMsgId] = PulseReplySet(&pulse, &group); - } - else - { - std::cerr << "WireDialog::loadPulseData() ERROR Missing GroupId: " << pulse.mMeta.mGroupId; - std::cerr << " PulseId: " << pulse.mMeta.mMsgId; - std::cerr << std::endl; - } - } - } - - // add references. - std::list::iterator lrit; - for(lrit = references.begin(); lrit != references.end(); lrit++) - { - std::map::iterator pgit; - pgit = pulseGrouping.find((*lrit)->mMeta.mThreadId); - if (pgit != pulseGrouping.end()) - { - // install into reply map. - // TODO handle Edits / Latest MSGS. - std::map::iterator rmit; - rmit = pgit->second.replies.find((*lrit)->mMeta.mOrigMsgId); - if (rmit == pgit->second.replies.end()) - { - std::cerr << "WireDialog::loadPulseData() Installing REF: " << (*lrit)->mMeta.mOrigMsgId; - std::cerr << " to threadId: " << (*lrit)->mMeta.mThreadId; - std::cerr << std::endl; - pgit->second.replies[(*lrit)->mMeta.mOrigMsgId] = (*lrit); - } - else - { - std::cerr << "WireDialog::loadPulseData() ERROR Duplicate reply REF: " << (*lrit)->mMeta.mOrigMsgId; - std::cerr << std::endl; - } - } - else - { - // no original msg for REF. - std::cerr << "WireDialog::loadPulseData() ERROR No matching ThreadId REF: " << (*lrit)->mMeta.mThreadId; - std::cerr << std::endl; - } - } - references.clear(); - - // sort by publish time. - std::map pulseOrdering; - std::map::iterator pgit; - for(pgit = pulseGrouping.begin(); pgit != pulseGrouping.end(); pgit++) - { - - PulseOrderedReply &msg = pulseOrdering[pgit->second.msg->mMeta.mPublishTs] = - PulseOrderedReply(pgit->second.msg, pgit->second.group); - std::map::iterator rmit; - for(rmit = pgit->second.replies.begin(); - rmit != pgit->second.replies.end(); rmit++) - { - msg.replies[rmit->second->mMeta.mPublishTs] = rmit->second; - } - } - - // now add to the GUI. - std::map::reverse_iterator poit; - for (poit = pulseOrdering.rbegin(); poit != pulseOrdering.rend(); poit++) - { - // add into GUI should insert at correct time point, amongst all other ones. - addPulse(poit->second.msg, poit->second.group, poit->second.replies); - } - - // allow filterTime to be changed again - ui.comboBox_filterTime->setEnabled(true); - return true; -} - void WireDialog::acknowledgeGroup(const uint32_t &token, const uint32_t &userType) { /* reload groups */ @@ -769,9 +437,6 @@ void WireDialog::loadRequest(const TokenQueue *queue, const TokenRequest &req) case TOKENREQ_GROUPINFO: switch(req.mAnsType) { - // case RS_TOKREQ_ANSTYPE_LIST: - // loadGroupList(req.mToken); - // break; case RS_TOKREQ_ANSTYPE_DATA: loadGroupData(req.mToken); break; @@ -784,40 +449,6 @@ void WireDialog::loadRequest(const TokenQueue *queue, const TokenRequest &req) break; } break; - case TOKENREQ_MSGINFO: - switch(req.mAnsType) - { -#if 0 - case RS_TOKREQ_ANSTYPE_LIST: - loadPhotoList(req.mToken); - break; - case RS_TOKREQ_ANSTYPE_ACK: - acknowledgeMessage(req.mToken); - break; -#endif - case RS_TOKREQ_ANSTYPE_DATA: - loadPulseData(req.mToken); - break; - default: - std::cerr << "WireDialog::loadRequest() ERROR: MSG: INVALID ANS TYPE"; - std::cerr << std::endl; - break; - } - break; -#if 0 - case TOKENREQ_MSGRELATEDINFO: - switch(req.mAnsType) - { - case RS_TOKREQ_ANSTYPE_DATA: - loadPhotoData(req.mToken); - break; - default: - std::cerr << "WireDialog::loadRequest() ERROR: MSG: INVALID ANS TYPE"; - std::cerr << std::endl; - break; - } - break; -#endif default: std::cerr << "WireDialog::loadRequest() ERROR: INVALID TYPE"; std::cerr << std::endl; @@ -970,7 +601,7 @@ void WireDialog::clearTwitterView() std::cerr << "WireDialog::clearTwitterView()"; std::cerr << std::endl; - QLayout *alayout = ui.scrollAreaWidgetContents_2->layout(); + QLayout *alayout = ui.scrollAreaWidgetContents->layout(); QLayoutItem *item; int i = 0; while (i < alayout->count()) @@ -1002,7 +633,7 @@ void WireDialog::addTwitterView(PulseViewItem *item) std::cerr << std::endl; /* ensure its a boxlayout */ - QLayout *alayout = ui.scrollAreaWidgetContents_2->layout(); + QLayout *alayout = ui.scrollAreaWidgetContents->layout(); QBoxLayout *boxlayout = dynamic_cast(alayout); if (boxlayout == NULL) { std::cerr << "WireDialog::addTwitterView() ERROR not boxlayout, not Inserting"; @@ -1029,7 +660,7 @@ void WireDialog::showPulseFocus(const RsGxsGroupId groupId, const RsGxsMessageId int type = 0; bool success = rsWire->getPulseFocus(groupId, msgId, type, pPulse); - sleep(2); + // sleep(2); /* now insert the pulse + children into the layput */ RsQThreadUtils::postToObject([pPulse,this]() @@ -1103,7 +734,7 @@ void WireDialog::showGroupFocus(const RsGxsGroupId groupId) std::list groupIds = { groupId }; success = rsWire->getPulsesForGroups(groupIds, pulses); - sleep(2); + // sleep(2); /* now insert the pulse + children into the layput */ RsQThreadUtils::postToObject([grp, pulses,this]() @@ -1167,7 +798,7 @@ void WireDialog::showGroupsPulses(const std::list groupIds) std::list pulses; bool success = rsWire->getPulsesForGroups(groupIds, pulses); - sleep(2); + // sleep(2); /* now insert the pulse + children into the layput */ RsQThreadUtils::postToObject([pulses,this]() diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.h b/retroshare-gui/src/gui/TheWire/WireDialog.h index 35351af17..62456398c 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.h +++ b/retroshare-gui/src/gui/TheWire/WireDialog.h @@ -28,7 +28,6 @@ #include -#include "gui/TheWire/PulseItem.h" #include "gui/TheWire/WireGroupItem.h" #include "gui/TheWire/PulseAddDialog.h" @@ -41,7 +40,7 @@ #define IMAGE_WIRE ":/icons/wire.png" -class WireDialog : public MainPage, public TokenResponse, public PulseHolder, public WireGroupHolder, public PulseViewHolder +class WireDialog : public MainPage, public TokenResponse, public WireGroupHolder, public PulseViewHolder { Q_OBJECT @@ -52,16 +51,6 @@ public: virtual QString pageName() const { return tr("The Wire") ; } virtual QString helpText() const { return ""; } - // PulseHolder interface. - virtual void deletePulseItem(PulseItem *, uint32_t type); - virtual void notifyPulseSelection(PulseItem *item); - - virtual void focus(RsGxsGroupId &groupId, RsGxsMessageId &msgId) override; - virtual void follow(RsGxsGroupId &groupId) override; - virtual void rate(RsGxsId &authorId) override; - virtual void reply(RsWirePulse &pulse, std::string &groupName) override; - - // WireGroupHolder interface. virtual void subscribe(RsGxsGroupId &groupId) override; virtual void unsubscribe(RsGxsGroupId &groupId) override; @@ -107,13 +96,8 @@ private: bool setupPulseAddDialog(); void addGroup(QWidget *item); - - void addPulse(RsWirePulse *pulse, RsWireGroup *group, - std::map replies); - void addGroup(const RsWireGroup &group); - void deletePulses(); void deleteGroups(); void showGroups(); void showSelectedGroups(); @@ -127,18 +111,12 @@ private: bool loadGroupData(const uint32_t &token); void acknowledgeGroup(const uint32_t &token, const uint32_t &userType); - void requestPulseData(const std::list& grpIds); - bool loadPulseData(const uint32_t &token); - virtual void loadRequest(const TokenQueue *queue, const TokenRequest &req); int mGroupSet; PulseAddDialog *mAddDialog; - - PulseItem *mPulseSelected; WireGroupItem *mGroupSelected; - TokenQueue *mWireQueue; std::map mAllGroups; diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.ui b/retroshare-gui/src/gui/TheWire/WireDialog.ui index dddbe26e6..2372d1a76 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.ui +++ b/retroshare-gui/src/gui/TheWire/WireDialog.ui @@ -223,11 +223,11 @@ - 1 + 0 - Orig View + HomePage @@ -248,6 +248,13 @@ 0 + + + + Most Recent + + + @@ -362,73 +369,6 @@ - - - Fancy View - - - - - - Most Recent - - - - - - - true - - - Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft - - - - - 0 - 0 - 508 - 443 - - - - QWidget#scrollAreaWidgetContents{border: none;} - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - diff --git a/retroshare-gui/src/retroshare-gui.pro b/retroshare-gui/src/retroshare-gui.pro index d3ccaeb44..8e7a7541d 100644 --- a/retroshare-gui/src/retroshare-gui.pro +++ b/retroshare-gui/src/retroshare-gui.pro @@ -1230,9 +1230,7 @@ gxsthewire { DEFINES += RS_USE_WIRE - HEADERS += gui/TheWire/PulseItem.h \ - gui/TheWire/PulseDetails.h \ - gui/TheWire/WireDialog.h \ + HEADERS += gui/TheWire/WireDialog.h \ gui/TheWire/WireGroupItem.h \ gui/TheWire/WireGroupDialog.h \ gui/TheWire/WireGroupExtra.h \ @@ -1243,12 +1241,10 @@ gxsthewire { gui/TheWire/PulseReply.h \ gui/TheWire/PulseReplySeperator.h \ gui/TheWire/PulseMessage.h \ - - FORMS += gui/TheWire/PulseItem.ui \ - gui/TheWire/PulseDetails.ui \ + + FORMS += gui/TheWire/WireDialog.ui \ gui/TheWire/WireGroupItem.ui \ gui/TheWire/WireGroupExtra.ui \ - gui/TheWire/WireDialog.ui \ gui/TheWire/PulseAddDialog.ui \ gui/TheWire/PulseTopLevel.ui \ gui/TheWire/PulseViewGroup.ui \ @@ -1256,9 +1252,7 @@ gxsthewire { gui/TheWire/PulseReplySeperator.ui \ gui/TheWire/PulseMessage.ui \ - SOURCES += gui/TheWire/PulseItem.cpp \ - gui/TheWire/PulseDetails.cpp \ - gui/TheWire/WireDialog.cpp \ + SOURCES += gui/TheWire/WireDialog.cpp \ gui/TheWire/WireGroupItem.cpp \ gui/TheWire/WireGroupDialog.cpp \ gui/TheWire/WireGroupExtra.cpp \ From 660be58cf2419f701e3c64fa122a86f48f4c2c88 Mon Sep 17 00:00:00 2001 From: drbob Date: Mon, 3 Aug 2020 20:48:44 +1000 Subject: [PATCH 63/95] make image count more robust --- libretroshare/src/services/p3wire.cc | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/libretroshare/src/services/p3wire.cc b/libretroshare/src/services/p3wire.cc index 4a8719415..cdf13cfe6 100644 --- a/libretroshare/src/services/p3wire.cc +++ b/libretroshare/src/services/p3wire.cc @@ -39,19 +39,20 @@ RsWireGroup::RsWireGroup() uint32_t RsWirePulse::ImageCount() { - if (!mImage4.empty()) { - return 4; - } - if (!mImage3.empty()) { - return 3; + uint32_t images = 0; + if (!mImage1.empty()) { + images++; } if (!mImage2.empty()) { - return 2; + images++; } - if (!mImage1.empty()) { - return 1; + if (!mImage3.empty()) { + images++; } - return 0; + if (!mImage4.empty()) { + images++; + } + return images; } p3Wire::p3Wire(RsGeneralDataService* gds, RsNetworkExchangeService* nes, RsGixs *gixs) From 8c7920b5455d4ed78054c7c7753d84ece5d8fb6b Mon Sep 17 00:00:00 2001 From: thunder2 Date: Mon, 3 Aug 2020 18:14:32 +0200 Subject: [PATCH 64/95] Changed Windows build environment - Fixed deploy path with tor - Disabled webui in installer - Optimized file get-gcc-version.bat - Optimized file get-qt-version.bat - Renamed file msys-path.bat to msys2-path.bat - Removed file download-file-wildcard.bat - Removed file winhttpjs.bat - Removed download and usage of wget.exe --- .../Windows/build-libs/build-libs.bat | 6 +- build_scripts/Windows/build/env.bat | 2 +- build_scripts/Windows/env/env.bat | 2 - .../Windows/env/tools/prepare-msys2.bat | 6 +- .../Windows/env/tools/prepare-tools.bat | 38 +- .../Windows/installer/retroshare-Qt5.nsi | 4 +- .../tools/download-file-wildcard.bat.bat | 46 -- build_scripts/Windows/tools/download-file.bat | 3 +- .../Windows/tools/get-gcc-version.bat | 38 +- .../Windows/tools/get-qt-version.bat | 13 +- build_scripts/Windows/tools/msys-path.bat | 20 - build_scripts/Windows/tools/msys2-path.bat | 20 + build_scripts/Windows/tools/winhttpjs.bat | 584 ------------------ 13 files changed, 43 insertions(+), 739 deletions(-) delete mode 100644 build_scripts/Windows/tools/download-file-wildcard.bat.bat delete mode 100644 build_scripts/Windows/tools/msys-path.bat create mode 100644 build_scripts/Windows/tools/msys2-path.bat delete mode 100644 build_scripts/Windows/tools/winhttpjs.bat diff --git a/build_scripts/Windows/build-libs/build-libs.bat b/build_scripts/Windows/build-libs/build-libs.bat index ded716f4a..b0dc51277 100644 --- a/build_scripts/Windows/build-libs/build-libs.bat +++ b/build_scripts/Windows/build-libs/build-libs.bat @@ -29,15 +29,15 @@ if not exist "%EnvMSYS2SH%" %cecho% error "Please install MSYS2 first." & exit / call "%~dp0env.bat" if errorlevel 1 goto error_env -call "%ToolsPath%\msys-path.bat" "%~dp0" MSYS2CurPath -call "%ToolsPath%\msys-path.bat" "%BuildLibsPath%" MSYS2BuildLibsPath +call "%ToolsPath%\msys2-path.bat" "%~dp0" MSYS2CurPath +call "%ToolsPath%\msys2-path.bat" "%BuildLibsPath%" MSYS2BuildLibsPath if not exist "%BuildLibsPath%" mkdir "%BuildLibsPath%" set MSYSTEM=MINGW%MSYS2Base% set MSYS2_PATH_TYPE=inherit -%EnvMSYS2Cmd% "pacman --needed --noconfirm -S diffutils perl tar make mingw-w64-%MSYS2Architecture%-make" +%EnvMSYS2Cmd% "pacman --needed --noconfirm -S diffutils perl tar make wget mingw-w64-%MSYS2Architecture%-make" ::mingw-w64-%MSYS2Architecture%-cmake ::%EnvMSYS2Cmd% "pacman --noconfirm -Rd --nodeps mingw-w64-%MSYS2Architecture%-zlib" diff --git a/build_scripts/Windows/build/env.bat b/build_scripts/Windows/build/env.bat index f9ec9c3f7..ed8662e2e 100644 --- a/build_scripts/Windows/build/env.bat +++ b/build_scripts/Windows/build/env.bat @@ -74,7 +74,7 @@ if "%GCCArchitecture%"=="" %cecho% error "Cannot get gcc architecture." & exit / set BuildLibsPath=%EnvRootPath%\build-libs\gcc-%GCCVersion%\%GCCArchitecture% set RsBuildPath=%BuildPath%\Qt-%QtVersion%-%GCCArchitecture%-%RsBuildConfig% -set RsDeployPath=%DeployPath%\Qt-%QtVersion%%RsType%-%GCCArchitecture%-%RsBuildConfig% +set RsDeployPath=%DeployPath%\Qt-%QtVersion%-%GCCArchitecture%%RsType%-%RsBuildConfig% set RsPackPath=%DeployPath% set RsArchiveAdd= diff --git a/build_scripts/Windows/env/env.bat b/build_scripts/Windows/env/env.bat index 2ba108b94..4a0b8953d 100644 --- a/build_scripts/Windows/env/env.bat +++ b/build_scripts/Windows/env/env.bat @@ -7,8 +7,6 @@ set EnvToolsPath=%EnvRootPath%\tools set EnvTempPath=%EnvRootPath%\tmp set EnvDownloadPath=%EnvRootPath%\download -::set EnvCurlExe=%EnvToolsPath%\curl.exe -set EnvWgetExe=%EnvToolsPath%\wget.exe set EnvSevenZipExe=%EnvToolsPath%\7z.exe set EnvJomExe=%EnvToolsPath%\jom.exe set EnvSedExe=%EnvToolsPath%\sed.exe diff --git a/build_scripts/Windows/env/tools/prepare-msys2.bat b/build_scripts/Windows/env/tools/prepare-msys2.bat index 3003d713d..80d17521f 100644 --- a/build_scripts/Windows/env/tools/prepare-msys2.bat +++ b/build_scripts/Windows/env/tools/prepare-msys2.bat @@ -31,8 +31,10 @@ set CMakeInstall=cmake-3.1.0-win32-x86.zip set CMakeUrl=http://www.cmake.org/files/v3.1/%CMakeInstall% set CMakeUnpackPath=%EnvMSYS2Path%\msys%MSYS2Base% -%cecho% info "Remove previous MSYS2 version" -call "%ToolsPath%\remove-dir.bat" "%EnvMSYS2Path%\msys%MSYS2Base%" +if exist "%EnvMSYS2Path%\msys%MSYS2Base%" ( + %cecho% info "Remove previous MSYS2 version" + call "%ToolsPath%\remove-dir.bat" "%EnvMSYS2Path%\msys%MSYS2Base%" +) %cecho% info "Download installation files" if not exist "%EnvDownloadPath%\%MSYS2Install%" call "%ToolsPath%\download-file.bat" "%MSYS2Url%" "%EnvDownloadPath%\%MSYS2Install%" diff --git a/build_scripts/Windows/env/tools/prepare-tools.bat b/build_scripts/Windows/env/tools/prepare-tools.bat index a1dda4e87..ea124a70e 100644 --- a/build_scripts/Windows/env/tools/prepare-tools.bat +++ b/build_scripts/Windows/env/tools/prepare-tools.bat @@ -6,10 +6,6 @@ set CEchoUrl=https://github.com/lordmulder/cecho/releases/download/2015-10-10/ce set CEchoInstall=cecho.2015-10-10.zip set SevenZipUrl=https://sourceforge.net/projects/sevenzip/files/7-Zip/19.00/7z1900.msi/download set SevenZipInstall=7z1900.msi -::set CurlUrl=https://bintray.com/artifact/download/vszakats/generic/curl-7.50.1-win32-mingw.7z -::set CurlInstall=curl-7.50.1-win32-mingw.7z -set WgetUrl=https://eternallybored.org/misc/wget/1.19.4/32/wget.exe -set WgetInstall=wget.exe set JomUrl=http://download.qt.io/official_releases/jom/jom.zip set JomInstall=jom.zip set DependsUrl=http://www.dependencywalker.com/depends22_x86.zip @@ -27,16 +23,6 @@ set CMakeInstall=%CMakeVersion%.zip set CMakeUrl=http://www.cmake.org/files/v3.1/%CMakeInstall% set CMakeInstallPath=%EnvToolsPath%\cmake -if not exist "%EnvToolsPath%\wget.exe" ( - echo Download Wget installation - - if not exist "%EnvDownloadPath%\%WgetInstall%" call "%ToolsPath%\winhttpjs.bat" %WgetUrl% -saveTo "%EnvDownloadPath%\%WgetInstall%" - if not exist "%EnvDownloadPath%\%WgetInstall%" %cecho% error "Cannot download Wget installation" & goto error - - echo Copy Wget - copy "%EnvDownloadPath%\wget.exe" "%EnvToolsPath%" -) - if not exist "%EnvToolsPath%\7z.exe" ( call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" mkdir "%EnvTempPath%" @@ -70,29 +56,13 @@ if not exist "%EnvToolsPath%\cecho.exe" ( call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" ) -::if not exist "%EnvToolsPath%\curl.exe" ( -:: call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" -:: mkdir "%EnvTempPath%" -:: -:: echo Download Curl installation -:: -:: if not exist "%EnvDownloadPath%\%CurlInstall%" call "%ToolsPath%\winhttpjs.bat" %CurlUrl% -saveTo "%EnvDownloadPath%\%CurlInstall%" -:: if not exist "%EnvDownloadPath%\%CurlInstall%" echo Cannot download Curl installation& goto error -:: -:: echo Unpack Curl -:: "%EnvSevenZipExe%" x -o"%EnvTempPath%" "%EnvDownloadPath%\%CurlInstall%" -:: copy "%EnvTempPath%\curl-7.50.1-win32-mingw\bin\curl.exe" "%EnvToolsPath%" -:: -:: call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" -::) - if not exist "%EnvToolsPath%\jom.exe" ( call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" mkdir "%EnvTempPath%" %cecho% info "Download jom installation" - if not exist "%EnvDownloadPath%\%JomInstall%" call "%ToolsPath%\winhttpjs.bat" %JomUrl% -saveTo "%EnvDownloadPath%\%JomInstall%" + if not exist "%EnvDownloadPath%\%JomInstall%" call "%ToolsPath%\download-file.bat" %JomUrl% "%EnvDownloadPath%\%JomInstall%" if not exist "%EnvDownloadPath%\%JomInstall%" %cecho% error "Cannot download jom installation" & goto error %cecho% info "Unpack jom" @@ -108,7 +78,7 @@ if not exist "%EnvToolsPath%\depends.exe" ( %cecho% info "Download Dependency Walker installation" - if not exist "%EnvDownloadPath%\%DependsInstall%" call "%ToolsPath%\winhttpjs.bat" %DependsUrl% -saveTo "%EnvDownloadPath%\%DependsInstall%" + if not exist "%EnvDownloadPath%\%DependsInstall%" call "%ToolsPath%\download-file.bat" %DependsUrl% "%EnvDownloadPath%\%DependsInstall%" if not exist "%EnvDownloadPath%\%DependsInstall%" %cecho% error "Cannot download Dependendy Walker installation" & goto error %cecho% info "Unpack Dependency Walker" @@ -124,7 +94,7 @@ if not exist "%EnvToolsPath%\cut.exe" ( %cecho% info "Download Unix Tools installation" - if not exist "%EnvDownloadPath%\%UnixToolsInstall%" call "%ToolsPath%\winhttpjs.bat" %UnixToolsUrl% -saveTo "%EnvDownloadPath%\%UnixToolsInstall%" + if not exist "%EnvDownloadPath%\%UnixToolsInstall%" call "%ToolsPath%\download-file.bat" %UnixToolsUrl% "%EnvDownloadPath%\%UnixToolsInstall%" if not exist "%EnvDownloadPath%\%UnixToolsInstall%" %cecho% error "Cannot download Unix Tools installation" & goto error %cecho% info "Unpack Unix Tools" @@ -140,7 +110,7 @@ if not exist "%EnvToolsPath%\sed.exe" ( %cecho% info "Download Unix Tools installation" - if not exist "%EnvDownloadPath%\%UnixToolsInstall%" call "%ToolsPath%\winhttpjs.bat" %UnixToolsUrl% -saveTo "%EnvDownloadPath%\%UnixToolsInstall%" + if not exist "%EnvDownloadPath%\%UnixToolsInstall%" call "%ToolsPath%\download-file.bat" %UnixToolsUrl% "%EnvDownloadPath%\%UnixToolsInstall%" if not exist "%EnvDownloadPath%\%UnixToolsInstall%" %cecho% error "Cannot download Unix Tools installation" & goto error %cecho% info "Unpack Unix Tools" diff --git a/build_scripts/Windows/installer/retroshare-Qt5.nsi b/build_scripts/Windows/installer/retroshare-Qt5.nsi index 64e6585ff..4254c5db0 100644 --- a/build_scripts/Windows/installer/retroshare-Qt5.nsi +++ b/build_scripts/Windows/installer/retroshare-Qt5.nsi @@ -263,8 +263,8 @@ Section $(Section_Main) Section_Main File /r "${QTDIR}\translations\qtxmlpatterns_*.qm" ; WebUI - SetOutPath "$INSTDIR\webui" - File /r "${SOURCEDIR}\libresapi\src\webui\*.*" +; SetOutPath "$INSTDIR\webui" +; File /r "${SOURCEDIR}\libresapi\src\webui\*.*" ; License SetOutPath "$INSTDIR\license" diff --git a/build_scripts/Windows/tools/download-file-wildcard.bat.bat b/build_scripts/Windows/tools/download-file-wildcard.bat.bat deleted file mode 100644 index 90015baf7..000000000 --- a/build_scripts/Windows/tools/download-file-wildcard.bat.bat +++ /dev/null @@ -1,46 +0,0 @@ -:: Usage: -:: call download-file-wildcard.bat url file-wildcard download-path variable - -if "%~4"=="" ( - echo. - echo Parameter error. - exit /B 1 -) - -if "%EnvTempPath%"=="" ( - echo. - echo Environment error. - exit /B 1 -) - -setlocal - -set Url=%~1 -set FileWildcard=%~2 -set DownloadPath=%~3 -set Var=%~4 -set File= - -call "%~dp0remove-dir.bat" "%EnvTempPath%" -mkdir "%EnvTempPath%" - -"%EnvWgetExe%" --recursive --continue --no-directories --no-parent -A "%FileWildcard%" --directory-prefix="%EnvTempPath%" "%Url%" - -if errorlevel 1 ( - call "%~dp0remove-dir.bat" "%EnvTempPath%" - endlocal & set %Var%= - exit /B %ERRORLEVEL% -) - -for %%A in (%EnvTempPath%\%FileWildcard%) do set File=%%~nxA -if "%File%"=="" ( - call "%~dp0remove-dir.bat" "%EnvTempPath%" - endlocal & set %Var%= - exit /B %ERRORLEVEL% -) - -move "%EnvTempPath%\%File%" "%DownloadPath%" -call "%~dp0remove-dir.bat" "%EnvTempPath%" - -endlocal & set %Var%=%File% -exit /B 0 diff --git a/build_scripts/Windows/tools/download-file.bat b/build_scripts/Windows/tools/download-file.bat index 62720c393..dbcecdcbb 100644 --- a/build_scripts/Windows/tools/download-file.bat +++ b/build_scripts/Windows/tools/download-file.bat @@ -7,7 +7,6 @@ if "%~2"=="" ( exit /B 1 ) -::"%EnvCurlExe%" -L -k "%~1" -o "%~2" -"%EnvWgetExe%" --no-check-certificate --continue "%~1" --output-document="%~2" +powershell -NoLogo -NoProfile -Command (New-Object System.Net.WebClient).DownloadFile(\""%~1\"", \""%~2\"") exit /B %ERRORLEVEL% diff --git a/build_scripts/Windows/tools/get-gcc-version.bat b/build_scripts/Windows/tools/get-gcc-version.bat index 5c6ff8162..3977477b7 100644 --- a/build_scripts/Windows/tools/get-gcc-version.bat +++ b/build_scripts/Windows/tools/get-gcc-version.bat @@ -19,45 +19,19 @@ if "%VarArchitecture%"=="" ( set GCCVersion= set GCCArchitecture= +set _Architecture= call "%~dp0find-in-path.bat" GCCPath gcc.exe if "%GCCPath%"=="" ( echo. echo Cannot find gcc.exe in PATH. - goto exit + exit /B 1 ) -gcc --version >"%~dp0gccversion.tmp" -for /F "tokens=1*" %%A in (%~sdp0gccversion.tmp) do ( - if "%%A"=="gcc" ( - call :find_version %%B - call :find_architecture %%B - goto exit - ) -) +for /F "tokens=1-8* delims= " %%A in ('gcc --version') do if "%%A"=="gcc" set _Architecture=%%B& set GCCVersion=%%G -:exit -if exist "%~dp0gccversion.tmp" del /Q "%~dp0gccversion.tmp" - -endlocal & set %VarVersion%=%GCCVersion%& set %VarArchitecture%=%GCCArchitecture% -goto :EOF - -:find_version -:loop_version -if "%2" NEQ "" ( - shift - goto loop_version -) -set GCCVersion=%1 -goto :EOF - -:find_architecture -:loop_architecture -if "%7" NEQ "" ( - shift - goto loop_architecture -) -set _Architecture=%1 if "%_Architecture:~1,4%"=="i686" set GCCArchitecture=x86 if "%_Architecture:~1,6%"=="x86_64" set GCCArchitecture=x64 -goto :EOF + +endlocal & set %VarVersion%=%GCCVersion%& set %VarArchitecture%=%GCCArchitecture% +exit /B 0 diff --git a/build_scripts/Windows/tools/get-qt-version.bat b/build_scripts/Windows/tools/get-qt-version.bat index c49939970..73afedcfc 100644 --- a/build_scripts/Windows/tools/get-qt-version.bat +++ b/build_scripts/Windows/tools/get-qt-version.bat @@ -16,19 +16,10 @@ call "%~dp0find-in-path.bat" QMakePath qmake.exe if "%QMakePath%"=="" ( echo. echo Cannot find qmake.exe in PATH. - goto exit + exit /B 1 ) -qmake.exe -version >"%~dp0qtversion.tmp" -for /F "tokens=1,2,3,4" %%A in (%~sdp0qtversion.tmp) do ( - if "%%A"=="Using" ( - set QtVersion=%%D - goto exit - ) -) - -:exit -if exist "%~dp0qtversion.tmp" del /Q "%~dp0qtversion.tmp" +for /F "tokens=1,2,3,4 delims= " %%A in ('qmake.exe -version') do if "%%A"=="Using" set QtVersion=%%D endlocal & set %Var%=%QtVersion% exit /B 0 \ No newline at end of file diff --git a/build_scripts/Windows/tools/msys-path.bat b/build_scripts/Windows/tools/msys-path.bat deleted file mode 100644 index 3b0c5fd69..000000000 --- a/build_scripts/Windows/tools/msys-path.bat +++ /dev/null @@ -1,20 +0,0 @@ -:: Usage: -:: call msys-path.bat path variable - -setlocal - -set WinPath=%~1 -set MSYSVar=%~2 - -if "%MSYSVar%"=="" ( - echo. - echo Parameter error. - exit /B 1 -) - -set MSYSPath=/%WinPath:~0,1%/%WinPath:~3% -set MSYSPath=%MSYSPath:\=/% - -endlocal & set %MSYSVar%=%MSYSPath% - -exit /B 0 diff --git a/build_scripts/Windows/tools/msys2-path.bat b/build_scripts/Windows/tools/msys2-path.bat new file mode 100644 index 000000000..9904417f6 --- /dev/null +++ b/build_scripts/Windows/tools/msys2-path.bat @@ -0,0 +1,20 @@ +:: Usage: +:: call msys2-path.bat path variable + +setlocal + +set WinPath=%~1 +set MSYS2Var=%~2 + +if "%MSYS2Var%"=="" ( + echo. + echo Parameter error. + exit /B 1 +) + +set MSYS2Path=/%WinPath:~0,1%/%WinPath:~3% +set MSYS2Path=%MSYS2Path:\=/% + +endlocal & set %MSYS2Var%=%MSYS2Path% + +exit /B 0 diff --git a/build_scripts/Windows/tools/winhttpjs.bat b/build_scripts/Windows/tools/winhttpjs.bat deleted file mode 100644 index cdea152eb..000000000 --- a/build_scripts/Windows/tools/winhttpjs.bat +++ /dev/null @@ -1,584 +0,0 @@ -@if (@X) == (@Y) @end /* JScript comment - @echo off - - rem :: the first argument is the script name as it will be used for proper help message - cscript //E:JScript //nologo "%~f0" "%~nx0" %* - - exit /b %errorlevel% - -@if (@X)==(@Y) @end JScript comment */ - -// used resources - -// update 12.10.15 -// osvikvi(https://github.com/osvikvi) has nodited that the -password option is not set , so this is fixed - -//https://msdn.microsoft.com/en-us/library/windows/desktop/aa384058(v=vs.85).aspx -//https://msdn.microsoft.com/en-us/library/windows/desktop/aa384055(v=vs.85).aspx -//https://msdn.microsoft.com/en-us/library/windows/desktop/aa384059(v=vs.85).aspx - -// global variables and constants - - -// ---------------------------------- -// -- asynch requests not included -- -// ---------------------------------- - - -//todo - save responceStream instead of responceBody !! -//todo - set all winthttp options ->//https://msdn.microsoft.com/en-us/library/windows/desktop/aa384108(v=vs.85).aspx -//todo - log all options -//todo - improve help message . eventual verbose option - - -var ARGS = WScript.Arguments; -var scriptName = ARGS.Item(0); - -var url = ""; -var saveTo = ""; - -var user = 0; -var pass = 0; - -var proxy = 0; -var bypass = 0; -var proxy_user = 0; -var proxy_pass = 0; - -var certificate = 0; - -var force = true; - -var body = ""; - -//ActiveX objects -var WinHTTPObj = new ActiveXObject("WinHttp.WinHttpRequest.5.1"); -var FileSystemObj = new ActiveXObject("Scripting.FileSystemObject"); -var AdoDBObj = new ActiveXObject("ADODB.Stream"); - -// HttpRequest SetCredentials flags. -var proxy_settings = 0; - -// -HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0; -HTTPREQUEST_SETCREDENTIALS_FOR_PROXY = 1; - -//timeouts and their default values -var RESOLVE_TIMEOUT = 0; -var CONNECT_TIMEOUT = 90000; -var SEND_TIMEOUT = 90000; -var RECEIVE_TIMEOUT = 90000; - -//HttpRequestMethod -var http_method = 'GET'; - -//header -var header_file = ""; - -//report -var reportfile = ""; - -//test-this: -var use_stream = false; - -//autologon policy -var autologon_policy = 1; //0,1,2 - - -//headers will be stored as multi-dimensional array -var headers = []; - -//user-agent -var ua = ""; - -//escape URL -var escape = false; - -function printHelp() { - WScript.Echo(scriptName + " - sends HTTP request and saves the request body as a file and/or a report of the sent request"); - WScript.Echo(scriptName + " url [-force yes|no] [-user username -password password] [-proxy proxyserver:port] [-bypass bypass_list]"); - WScript.Echo(" [-proxyuser proxy_username -proxypassword proxy_password] [-certificate certificateString]"); - WScript.Echo(" [-method GET|POST|PATCH|DELETE|HEAD|OPTIONS|CONNECT]"); - WScript.Echo(" [-saveTo file] - to print response to console use con"); - - WScript.Echo(" [-sendTimeout int(milliseconds)]"); - WScript.Echo(" [-resolveTimeout int(milliseconds)]"); - WScript.Echo(" [-connectTimeout int(milliseconds)]"); - WScript.Echo(" [-receiveTimeout int(milliseconds)]"); - - WScript.Echo(" [-autologonPolicy 1|2|3]"); - WScript.Echo(" [-proxySettings 1|2|3] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa384059(v=vs.85).aspx)"); - - //header - WScript.Echo(" [-headers-file header_file]"); - //reportfile - WScript.Echo(" [-reportfile reportfile]"); - WScript.Echo(" [-ua user-agent]"); - WScript.Echo(" [-ua-file user-agent-file]"); - - WScript.Echo(" [-escape yes|no]"); - - WScript.Echo(" [-body body-string]"); - WScript.Echo(" [-body-file body-file]"); - - WScript.Echo("-force - decide to not or to overwrite if the local files exists"); - - WScript.Echo("proxyserver:port - the proxy server"); - WScript.Echo("bypass- bypass list"); - WScript.Echo("proxy_user , proxy_password - credentials for proxy server"); - WScript.Echo("user , password - credentials for the server"); - WScript.Echo("certificate - location of SSL certificate"); - WScript.Echo("method - what HTTP method will be used.Default is GET"); - WScript.Echo("saveTo - save the responce as binary file"); - WScript.Echo(" "); - WScript.Echo("Header file should contain key:value pairs.Lines starting with \"#\" will be ignored."); - WScript.Echo("value should NOT be enclosed with quotes"); - WScript.Echo(" "); - WScript.Echo("Examples:"); - - WScript.Echo(scriptName + " http://somelink.com/somefile.zip -saveTo c:\\somefile.zip -certificate \"LOCAL_MACHINE\\Personal\\My Middle-Tier Certificate\""); - WScript.Echo(scriptName + " http://somelink.com/something.html -method POST -certificate \"LOCAL_MACHINE\\Personal\\My Middle-Tier Certificate\" -header c:\\header_file -reportfile c:\\reportfile.txt"); - WScript.Echo(scriptName + "\"http://somelink\" -method POST -header hdrs.txt -reportfile reportfile2.txt -saveTo responsefile2 -ua \"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36\" -body-file some.json"); - -} - -function parseArgs() { - // - if (ARGS.Length < 2) { - WScript.Echo("insufficient arguments"); - printHelp(); - WScript.Quit(43); - } - // !!! - url = ARGS.Item(1); - // !!! - if (ARGS.Length % 2 != 0) { - WScript.Echo("illegal arguments"); - printHelp(); - WScript.Quit(44); - } - - for (var i = 2; i < ARGS.Length - 1; i = i + 2) { - var arg = ARGS.Item(i).toLowerCase(); - var next = ARGS.Item(i + 1); - - - try { - switch (arg) { // the try-catch is set mainly because of the parseInts - case "-force": - if (next == "no") { - force = false; - } - break; - case "-escape": - if (next == "yes") { - escape = true; - } - break; - case "-saveto": - saveTo = next; - break; - case "-user": - case "-u": - user = next; - break; - case "-pass": - case "-password": - case "-p": - pass = next; - break; - case "-proxy": - proxy = next; - break; - case "-bypass": - bypass = next; - break; - case "-proxyuser": - case "-pu": - proxy_user = next; - break; - case "-proxypassword": - case "-pp": - proxy_pass = next; - break; - case "-ua": - ua = next; - break; - case "-ua-file": - ua = readFile(next); - break; - case "-body": - body = next; - break; - case "-usestream": - //WScript.Echo("~~"); - if (next.toLowerCase() === "yes") { - use_stream = true - }; - break; - case "-body-file": - body = readFile(next); - break; - case "-certificate": - certificate = next; - break; - case "-method": - switch (next.toLowerCase()) { - case "post": - http_method = 'POST'; - break; - case "get": - http_method = 'GET'; - break; - case "head": - http_method = 'HEAD'; - break; - case "put": - http_method = 'PUT'; - break; - case "options": - http_method = 'OPTIONS'; - break; - case "connect": - http_method = 'CONNECT'; - break; - case "patch": - http_method = 'PATCH'; - break; - case "delete": - http_method = 'DELETE'; - break; - default: - WScript.Echo("Invalid http method passed " + next); - WScript.Echo("possible values are GET,POST,DELETE,PUT,CONNECT,PATCH,HEAD,OPTIONS"); - WScript.Quit(1326); - break; - } - break; - case "-headers-file": - case "-header": - headers = readPropFile(next); - break; - case "-reportfile": - reportfile = next; - break; - //timeouts - case "-sendtimeout": - SEND_TIMEOUT = parseInt(next); - break; - case "-connecttimeout": - CONNECT_TIMEOUT = parseint(next); - break; - case "-resolvetimeout": - RESOLVE_TIMEOUT = parseInt(next); - break; - case "-receivetimeout": - RECEIVE_TIMEOUT = parseInt(next); - break; - - case "-autologonpolicy": - autologon_policy = parseInt(next); - if (autologon_policy > 2 || autologon_policy < 0) { - WScript.Echo("out of autologon policy range"); - WScript.Quit(87); - }; - break; - case "-proxysettings": - proxy_settings = parseInt(next); - if (proxy_settings > 2 || proxy_settings < 0) { - WScript.Echo("out of proxy settings range"); - WScript.Quit(87); - }; - break; - default: - WScript.Echo("Invalid command line switch: " + arg); - WScript.Quit(1405); - break; - } - } catch (err) { - WScript.Echo(err.message); - WScript.Quit(1348); - } - } -} - -stripTrailingSlash = function(path) { - while (path.substr(path.length - 1, path.length) == '\\') { - path = path.substr(0, path.length - 1); - } - return path; -} - -function existsItem(path) { - return FileSystemObj.FolderExists(path) || FileSystemObj.FileExists(path); -} - -function deleteItem(path) { - if (FileSystemObj.FileExists(path)) { - FileSystemObj.DeleteFile(path); - return true; - } else if (FileSystemObj.FolderExists(path)) { - FileSystemObj.DeleteFolder(stripTrailingSlash(path)); - return true; - } else { - return false; - } -} - -//------------------------------- -//---------------------- -//---------- -//----- -//-- -function request(url) { - - try { - - WinHTTPObj.Open(http_method, url, false); - if (proxy != 0 && bypass != 0) { - WinHTTPObj.SetProxy(proxy_settings, proxy, bypass); - } - - if (proxy != 0) { - WinHTTPObj.SetProxy(proxy_settings, proxy); - } - - if (user != 0 && pass != 0) { - WinHTTPObj.SetCredentials(user, pass, HTTPREQUEST_SETCREDENTIALS_FOR_SERVER); - } - - if (proxy_user != 0 && proxy_pass != 0) { - WinHTTPObj.SetCredentials(proxy_user, proxy_pass, HTTPREQUEST_SETCREDENTIALS_FOR_PROXY); - } - - if (certificate != 0) { - WinHTTPObj.SetClientCertificate(certificate); - } - - //set autologin policy - WinHTTPObj.SetAutoLogonPolicy(autologon_policy); - //set timeouts - WinHTTPObj.SetTimeouts(RESOLVE_TIMEOUT, CONNECT_TIMEOUT, SEND_TIMEOUT, RECEIVE_TIMEOUT); - - if (headers.length !== 0) { - WScript.Echo("Sending with headers:"); - for (var i = 0; i < headers.length; i++) { - WinHTTPObj.SetRequestHeader(headers[i][0], headers[i][1]); - WScript.Echo(headers[i][0] + ":" + headers[i][1]); - } - WScript.Echo(""); - } - - if (ua !== "") { - //user-agent option from: - //WinHttpRequestOption enumeration - // other options can be added like bellow - //https://msdn.microsoft.com/en-us/library/windows/desktop/aa384108(v=vs.85).aspx - WinHTTPObj.Option(0) = ua; - } - if (escape) { - WinHTTPObj.Option(3) = true; - } - if (trim(body) === "") { - WinHTTPObj.Send(); - } else { - WinHTTPObj.Send(body); - } - - var status = WinHTTPObj.Status - } catch (err) { - WScript.Echo(err.message); - WScript.Quit(666); - } - - //////////////////////// - // report // - //////////////////////// - - if (reportfile != "") { - - //var report_string=""; - var n = "\r\n"; - var report_string = "Status:" + n; - report_string = report_string + " " + WinHTTPObj.Status; - report_string = report_string + " " + WinHTTPObj.StatusText + n; - report_string = report_string + " " + n; - report_string = report_string + "Response:" + n; - report_string = report_string + WinHTTPObj.ResponseText + n; - report_string = report_string + " " + n; - report_string = report_string + "Headers:" + n; - report_string = report_string + WinHTTPObj.GetAllResponseHeaders() + n; - - WinHttpRequestOption_UserAgentString = 0; // Name of the user agent - WinHttpRequestOption_URL = 1; // Current URL - WinHttpRequestOption_URLCodePage = 2; // Code page - WinHttpRequestOption_EscapePercentInURL = 3; // Convert percents - // in the URL - // rest of the options can be seen and eventually added using this as reference - // https://msdn.microsoft.com/en-us/library/windows/desktop/aa384108(v=vs.85).aspx - - report_string = report_string + "URL:" + n; - report_string = report_string + WinHTTPObj.Option(WinHttpRequestOption_URL) + n; - - report_string = report_string + "URL Code Page:" + n; - report_string = report_string + WinHTTPObj.Option(WinHttpRequestOption_URLCodePage) + n; - - report_string = report_string + "User Agent:" + n; - report_string = report_string + WinHTTPObj.Option(WinHttpRequestOption_UserAgentString) + n; - - report_string = report_string + "Escapped URL:" + n; - report_string = report_string + WinHTTPObj.Option(WinHttpRequestOption_EscapePercentInURL) + n; - - prepareateFile(force, reportfile); - - WScript.Echo("Writing report to " + reportfile); - - writeFile(reportfile, report_string); - - } - - switch (status) { - case 200: - WScript.Echo("Status: 200 OK"); - break; - default: - WScript.Echo("Status: " + status); - WScript.Echo("Status was not OK. More info -> https://en.wikipedia.org/wiki/List_of_HTTP_status_codes"); - } - - //if as binary - if (saveTo.toLowerCase() === "con") { - WScript.Echo(WinHTTPObj.ResponseText); - } - if (saveTo !== "" && saveTo.toLowerCase() !== "con") { - prepareateFile(force, saveTo); - try { - - if (use_stream) { - writeBinFile(saveTo, WinHTTPObj.ResponseStream); - } else { - writeBinFile(saveTo, WinHTTPObj.ResponseBody); - } - - } catch (err) { - WScript.Echo("Failed to save the file as binary.Attempt to save it as text"); - AdoDBObj.Close(); - prepareateFile(true, saveTo); - writeFile(saveTo, WinHTTPObj.ResponseText); - } - } - WScript.Quit(status); -} - -//-- -//----- -//---------- -//---------------------- -//------------------------------- - -function prepareateFile(force, file) { - if (force && existsItem(file)) { - if (!deleteItem(file)) { - WScript.Echo("Unable to delete " + file); - WScript.Quit(8); - } - } else if (existsItem(file)) { - WScript.Echo("Item " + file + " already exist"); - WScript.Quit(9); - } -} - -function writeBinFile(fileName, data) { - AdoDBObj.Type = 1; - AdoDBObj.Open(); - AdoDBObj.Position = 0; - AdoDBObj.Write(data); - AdoDBObj.SaveToFile(fileName, 2); - AdoDBObj.Close(); -} - -function writeFile(fileName, data) { - AdoDBObj.Type = 2; - AdoDBObj.CharSet = "iso-8859-1"; - AdoDBObj.Open(); - AdoDBObj.Position = 0; - AdoDBObj.WriteText(data); - AdoDBObj.SaveToFile(fileName, 2); - AdoDBObj.Close(); -} - - -function readFile(fileName) { - //check existence - try { - if (!FileSystemObj.FileExists(fileName)) { - WScript.Echo("file " + fileName + " does not exist!"); - WScript.Quit(13); - } - if (FileSystemObj.GetFile(fileName).Size === 0) { - return ""; - } - var fileR = FileSystemObj.OpenTextFile(fileName, 1); - var content = fileR.ReadAll(); - fileR.Close(); - return content; - } catch (err) { - WScript.Echo("Error while reading file: " + fileName); - WScript.Echo(err.message); - WScript.Echo("Will return empty string"); - return ""; - } -} - -function readPropFile(fileName) { - //check existence - resultArray = []; - if (!FileSystemObj.FileExists(fileName)) { - WScript.Echo("(headers)file " + fileName + " does not exist!"); - WScript.Quit(15); - } - if (FileSystemObj.GetFile(fileName).Size === 0) { - return resultArray; - } - var fileR = FileSystemObj.OpenTextFile(fileName, 1); - var line = ""; - var k = ""; - var v = ""; - var lineN = 0; - var index = 0; - try { - WScript.Echo("parsing headers form " + fileName + " property file "); - while (!fileR.AtEndOfStream) { - line = fileR.ReadLine(); - lineN++; - index = line.indexOf(":"); - if (line.indexOf("#") === 0 || trim(line) === "") { - continue; - } - if (index === -1 || index === line.length - 1 || index === 0) { - WScript.Echo("Invalid line " + lineN); - WScript.Quit(93); - } - k = trim(line.substring(0, index)); - v = trim(line.substring(index + 1, line.length)); - resultArray.push([k, v]); - } - fileR.Close(); - return resultArray; - } catch (err) { - WScript.Echo("Error while reading headers file: " + fileName); - WScript.Echo(err.message); - WScript.Echo("Will return empty array"); - return resultArray; - } -} - -function trim(str) { - return str.replace(/^\s+/, '').replace(/\s+$/, ''); -} - -function main() { - parseArgs(); - request(url); -} -main(); From dbd4f4f6c76db4ea52e35be815b1891948260419 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Mon, 3 Aug 2020 22:58:06 +0200 Subject: [PATCH 65/95] Windows build environment - Removed version_detail_bash_script from build.bat --- build_scripts/Windows/build/build.bat | 1 - 1 file changed, 1 deletion(-) diff --git a/build_scripts/Windows/build/build.bat b/build_scripts/Windows/build/build.bat index 62eb5eca6..fe59009aa 100644 --- a/build_scripts/Windows/build/build.bat +++ b/build_scripts/Windows/build/build.bat @@ -50,7 +50,6 @@ echo. title Build - %SourceName%-%RsBuildConfig% [qmake] set RS_QMAKE_CONFIG=%RsBuildConfig% -if "%ParamVersion%"=="1" set RS_QMAKE_CONFIG=%RS_QMAKE_CONFIG% version_detail_bash_script if "%ParamAutologin%"=="1" set RS_QMAKE_CONFIG=%RS_QMAKE_CONFIG% rs_autologin if "%ParamPlugins%"=="1" set RS_QMAKE_CONFIG=%RS_QMAKE_CONFIG% retroshare_plugins From 5649075115dc7416208a8fa6e267a38bc7c3cd9d Mon Sep 17 00:00:00 2001 From: hunbernd Date: Tue, 4 Aug 2020 11:41:46 +0200 Subject: [PATCH 66/95] Updated msys2 version Added instructions how to resolve issues caused by breaking changes in msys2 --- .../Windows-msys2/env/tools/prepare-msys2.bat | 2 +- build_scripts/Windows-msys2/readme.md | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/build_scripts/Windows-msys2/env/tools/prepare-msys2.bat b/build_scripts/Windows-msys2/env/tools/prepare-msys2.bat index ddf8b00a6..2f85c42be 100644 --- a/build_scripts/Windows-msys2/env/tools/prepare-msys2.bat +++ b/build_scripts/Windows-msys2/env/tools/prepare-msys2.bat @@ -25,7 +25,7 @@ if exist "%EnvMSYS2Path%\msys%MSYS2Base%\usr\bin\pacman.exe" ( ) ) -set MSYS2Install=msys2-base-%MSYS2Architecture%-20180531.tar.xz +set MSYS2Install=msys2-base-%MSYS2Architecture%-20200720.tar.xz set MSYS2Url=http://sourceforge.net/projects/msys2/files/Base/%MSYS2Architecture%/%MSYS2Install%/download %cecho% info "Remove previous MSYS2 version" diff --git a/build_scripts/Windows-msys2/readme.md b/build_scripts/Windows-msys2/readme.md index 26ea3675e..5582ec451 100644 --- a/build_scripts/Windows-msys2/readme.md +++ b/build_scripts/Windows-msys2/readme.md @@ -7,6 +7,10 @@ This guide contains information about how to setup your build environment in an If you prefer to setup your environment manually, check this guide: [WindowsMSys2_InstallGuide.md](WindowsMSys2_InstallGuide.md) +Setting up the build environment automatically on a 32 bit OS is not possible anymore. +You can download an older 32 bit [MSYS2 installer](https://sourceforge.net/projects/msys2/files/Base/i686/msys2-base-i686-20180531.tar.xz/download) and follow the manual setup instructions. +Building 32 bit RetroShare from the 64 bit build environment is still possible. + You have to clone this repository (with [git for windows](https://gitforwindows.org/)) to a local folder, then start it in a terminal. @@ -16,7 +20,7 @@ Run the following script: \build_scripts\Windows-msys2\build.bat -It will install all neccessary tools to build RetrosShare, and build it with the default configuration. +It will install all necessary tools to build RetrosShare, and build it with the default configuration. After the script is finished, you can find the resulting .7z package here: @@ -24,7 +28,7 @@ After the script is finished, you can find the resulting .7z package here: ## Advanced building -You can specifiy extra build options if you use the scripts under: +You can specify extra build options if you use the scripts under: \build_scripts\Windows-msys2\build\ @@ -63,7 +67,7 @@ build-installer.bat 64 release autologin ``` ## Troubleshooting -* Run the command again, sometimes it works the second time, specially if it complains about *restbed* during bulding +* Run the command again, sometimes it works the second time, specially if it complains about *restbed* during building * Delete the build artifacts: *<sourcefolder>-msys2\deploy\builds* * Update msys2 manually: 1. Open the terminal: *<sourcefolder>-msys2\msys2\msys64\msys2.exe* @@ -73,11 +77,15 @@ build-installer.bat 64 release autologin 5. Jump to 1. until it doesn't find more updates * Start with a clean path environment variable, run *<sourcefolder>\build_scripts\Windows-msys2\start-clean-env.bat*, you will get a terminal with cleaned path +### Errors during MSYS2 update +MSYS2 developers recently introduced some breaking changes. +If you get PGP related errors during updating the system from pacman, then follow [their guide](https://www.msys2.org/news/#2020-06-29-new-packagers) to resolve the problems. + ## Updating webui -The sripts don't update the webui source code automatically once it is schecked out. +The scripts don't update the webui source code automatically once it is checked out. You have to do it manually with your favourite git client. -You can find the webui sorce code here: +You can find the webui source code here: -webui From 08955c0818b8ac8cca07a0629a7032f8706fffbf Mon Sep 17 00:00:00 2001 From: thunder2 Date: Tue, 4 Aug 2020 19:04:45 +0200 Subject: [PATCH 67/95] Windows build environment - Fixed creating git-log - Added generating of changelog from MSYS2 build --- build_scripts/Windows/build/build.bat | 8 +++ build_scripts/Windows/build/env.bat | 6 +++ build_scripts/Windows/build/git-log.bat | 7 +-- build_scripts/Windows/build/pack.bat | 4 +- .../Windows/installer/retroshare-Qt5.nsi | 6 +-- .../Windows/tools/generate-changelog.bat | 50 +++++++++++++++++++ 6 files changed, 71 insertions(+), 10 deletions(-) create mode 100644 build_scripts/Windows/tools/generate-changelog.bat diff --git a/build_scripts/Windows/build/build.bat b/build_scripts/Windows/build/build.bat index fe59009aa..12cb870db 100644 --- a/build_scripts/Windows/build/build.bat +++ b/build_scripts/Windows/build/build.bat @@ -67,6 +67,14 @@ if exist "%EnvJomExe%" ( ) else ( mingw32-make ) +if errorlevel 1 goto error + +echo. +echo === Changelog +echo. + +title Build - %SourceName%-%RsBuildConfig% [changelog] +call "%ToolsPath%\generate-changelog.bat" "%SourcePath%" "%RsBuildPath%\changelog.txt" :error popd diff --git a/build_scripts/Windows/build/env.bat b/build_scripts/Windows/build/env.bat index ed8662e2e..32e4436ac 100644 --- a/build_scripts/Windows/build/env.bat +++ b/build_scripts/Windows/build/env.bat @@ -4,6 +4,7 @@ set ParamDebug=0 set ParamAutologin=0 set ParamPlugins=0 set ParamTor=0 +set NonInteractive=0 :parameter_loop if "%~1" NEQ "" ( @@ -18,6 +19,8 @@ if "%~1" NEQ "" ( set ParamPlugins=1 ) else if "%%~a"=="tor" ( set ParamTor=1 + ) else if "%%~a"=="non-interactive" ( + set NonInteractive=1 ) else ( echo. echo Unknown parameter %1 @@ -99,4 +102,7 @@ echo. echo Parameter for pack echo tor Pack tor version echo. +echo Parameter for git-log +echo non-interactive Non-interactive mode +echo. exit /B 2 diff --git a/build_scripts/Windows/build/git-log.bat b/build_scripts/Windows/build/git-log.bat index de313adda..f67667b22 100644 --- a/build_scripts/Windows/build/git-log.bat +++ b/build_scripts/Windows/build/git-log.bat @@ -2,9 +2,6 @@ setlocal -set NoAsk= -if "%~2"=="no-ask" set NoAsk=1 - :: Initialize environment call "%~dp0..\env.bat" if errorlevel 1 goto error_env @@ -52,7 +49,7 @@ set RsLastRefFile=%BuildPath%\Qt-%QtVersion%-%GCCArchitecture%%RsType%-%RsBuildC set RsLastRef= if exist "%RsLastRefFile%" set /P RsLastRef=<"%RsLastRefFile%" -if "%NoAsk%"=="1" goto no_ask_for_last_revision +if "%NonInteractive%"=="1" goto no_ask_for_last_revision if not "%RsLastRef%"=="" echo Last Revision was %RsLastRef% set /P RsLastRefInput=Last Revision: if "%RsLastRefInput%" NEQ "" set RsLastRef=%RsLastRefInput% @@ -70,7 +67,7 @@ echo. echo Creating log from %RsLastRef% echo to %RsRef% -if "%NoAsk%"=="1" goto no_confirm +if "%NonInteractive%"=="1" goto no_confirm choice /M "Do you want to proceed?" if %errorlevel%==2 exit /B 1 :no_confirm diff --git a/build_scripts/Windows/build/pack.bat b/build_scripts/Windows/build/pack.bat index c9e800eba..3d0401f60 100644 --- a/build_scripts/Windows/build/pack.bat +++ b/build_scripts/Windows/build/pack.bat @@ -165,8 +165,8 @@ if "%QtMainVersion%"=="5" ( echo copy bdboot.txt copy "%SourcePath%\libbitdht\src\bitdht\bdboot.txt" "%RsDeployPath%" %Quite% -rem echo copy changelog.txt -rem copy "%SourcePath%\retroshare-gui\src\changelog.txt" "%RsDeployPath%" %Quite% +echo copy changelog.txt +copy "%RsBuildPath%\changelog.txt" "%RsDeployPath%" %Quite% if exist "%SourcePath%\libresapi\src\webui" ( echo copy webui diff --git a/build_scripts/Windows/installer/retroshare-Qt5.nsi b/build_scripts/Windows/installer/retroshare-Qt5.nsi index 4254c5db0..d80368a5b 100644 --- a/build_scripts/Windows/installer/retroshare-Qt5.nsi +++ b/build_scripts/Windows/installer/retroshare-Qt5.nsi @@ -110,8 +110,8 @@ Var StyleSheetDir !define MUI_FINISHPAGE_LINK "Visit the RetroShare forum for the latest news and support" !define MUI_FINISHPAGE_LINK_LOCATION "http://retroshare.sourceforge.net/forum/" !define MUI_FINISHPAGE_RUN "$INSTDIR\retroshare.exe" -;!define MUI_FINISHPAGE_SHOWREADME $INSTDIR\changelog.txt -;!define MUI_FINISHPAGE_SHOWREADME_TEXT changelog.txt +!define MUI_FINISHPAGE_SHOWREADME $INSTDIR\changelog.txt +!define MUI_FINISHPAGE_SHOWREADME_TEXT changelog.txt ;!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\orange-uninstall.ico" !define MUI_UNFINISHPAGE_NOAUTOCLOSE @@ -230,7 +230,7 @@ Section $(Section_Main) Section_Main !endif ; Other files -; File "${SOURCEDIR}\retroshare-gui\src\changelog.txt" + File "${RELEASEDIR}\changelog.txt" File "${SOURCEDIR}\libbitdht\src\bitdht\bdboot.txt" ; License diff --git a/build_scripts/Windows/tools/generate-changelog.bat b/build_scripts/Windows/tools/generate-changelog.bat new file mode 100644 index 000000000..c38225045 --- /dev/null +++ b/build_scripts/Windows/tools/generate-changelog.bat @@ -0,0 +1,50 @@ +@echo off +setlocal enabledelayedexpansion + +if "%~2"=="" ( + echo. + echo Parameter error. + echo Usage %~n0 sourcepath outputfile + exit /B 1 +) + +:: Check git executable +set GitPath= +call "%~dp0find-in-path.bat" GitPath git.exe +if "%GitPath%"=="" echo Git executable not found in PATH.& exit /B 1 + +set logfile=%~2 +copy nul %logfile% > nul + +pushd %~1 + +set last=HEAD +for /f %%t in ('git tag --sort=-taggerdate --merged ^| findstr v') do ( + echo generating changelog for !last!..%%t + echo ----------------------------------------------- >> %logfile% + if !last! neq HEAD ( + git tag -n !last! >> %logfile% + ) else ( + echo HEAD >> %logfile% + ) + rem echo !last! ---^> %%t >> %logfile% + echo ----------------------------------------------- >> %logfile% + echo. >> %logfile% + git log %%t..!last! --no-merges "--pretty=format:%%h %%ai %%<(10,trunc)%%an %%s" >> %logfile% + echo. >> %logfile% + echo. >> %logfile% + set last=%%t +) + +echo generating changelog for %last% +echo ----------------------------------------------- >> %logfile% +git tag -n %last% >> %logfile% +echo ----------------------------------------------- >> %logfile% +echo. >> %logfile% +git log %last% --no-merges "--pretty=format:%%h %%ai %%<(10,trunc)%%an %%s" >> %logfile% + +popd + +endlocal enabledelayedexpansion + +exit /B 0 From c64fb331f74e6c15801bb56e0dee0886e7fc96e3 Mon Sep 17 00:00:00 2001 From: drbob Date: Wed, 5 Aug 2020 21:17:44 +1000 Subject: [PATCH 68/95] Add view history to WireDialog. - record views as triggered. - Back and Forward buttons above the view. --- retroshare-gui/src/gui/TheWire/WireDialog.cpp | 128 +++++++++++++++++- retroshare-gui/src/gui/TheWire/WireDialog.h | 42 ++++++ retroshare-gui/src/gui/TheWire/WireDialog.ui | 30 ++++ 3 files changed, 195 insertions(+), 5 deletions(-) diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.cpp b/retroshare-gui/src/gui/TheWire/WireDialog.cpp index dc58a410c..8a0b2a235 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/WireDialog.cpp @@ -62,6 +62,7 @@ WireDialog::WireDialog(QWidget *parent) mAddDialog = NULL; mGroupSelected = NULL; + mHistoryIndex = -1; connect( ui.toolButton_createAccount, SIGNAL(clicked()), this, SLOT(createGroup())); connect( ui.toolButton_createPulse, SIGNAL(clicked()), this, SLOT(createPulse())); @@ -70,6 +71,11 @@ WireDialog::WireDialog(QWidget *parent) connect(ui.comboBox_groupSet, SIGNAL(currentIndexChanged(int)), this, SLOT(selectGroupSet(int))); connect(ui.comboBox_filterTime, SIGNAL(currentIndexChanged(int)), this, SLOT(selectFilterTime(int))); + connect( ui.toolButton_back, SIGNAL(clicked()), this, SLOT(back())); + connect( ui.toolButton_forward, SIGNAL(clicked()), this, SLOT(forward())); + ui.toolButton_back->setEnabled(false); + ui.toolButton_forward->setEnabled(false); + QTimer *timer = new QTimer(this); timer->connect(timer, SIGNAL(timeout()), this, SLOT(checkUpdate())); timer->start(1000); @@ -310,7 +316,7 @@ void WireDialog::showSelectedGroups() grpIds.push_back(mGroupSelected->groupId()); // show GroupFocus. - showGroupFocus(mGroupSelected->groupId()); + requestGroupFocus(mGroupSelected->groupId()); } else { @@ -355,7 +361,7 @@ void WireDialog::showGroups() } } - showGroupsPulses(allGroupIds); + requestGroupsPulses(allGroupIds); } @@ -543,7 +549,7 @@ void WireDialog::PVHviewGroup(const RsGxsGroupId &groupId) std::cerr << ")"; std::cerr << std::endl; - showGroupFocus(groupId); + requestGroupFocus(groupId); } void WireDialog::PVHviewPulse(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) @@ -554,7 +560,7 @@ void WireDialog::PVHviewPulse(const RsGxsGroupId &groupId, const RsGxsMessageId std::cerr << ")"; std::cerr << std::endl; - showPulseFocus(groupId, msgId); + requestPulseFocus(groupId, msgId); } void WireDialog::PVHviewReply(const RsGxsGroupId &groupId, const RsGxsMessageId &msgId) @@ -565,7 +571,7 @@ void WireDialog::PVHviewReply(const RsGxsGroupId &groupId, const RsGxsMessageId std::cerr << ")"; std::cerr << std::endl; - // showPulseFocus(groupId, msgId); + // requestPulseFocus(groupId, msgId); } void WireDialog::PVHfollow(const RsGxsGroupId &groupId) @@ -647,6 +653,98 @@ void WireDialog::addTwitterView(PulseViewItem *item) boxlayout->addWidget(item); } +// HISTORY ------------------------------------------------------------------------------- + +void printWireViewHistory(const WireViewHistory &view) +{ + std::cerr << "WireViewHistory(" << (int) view.viewType << "): "; + switch(view.viewType) { + case WireViewType::PULSE_FOCUS: + std::cerr << " PULSE_FOCUS: grpId: " << view.groupId; + std::cerr << " msgId: " << view.msgId; + std::cerr << std::endl; + break; + case WireViewType::GROUP_FOCUS: + std::cerr << " GROUP_FOCUS: grpId: " << view.groupId; + std::cerr << std::endl; + break; + case WireViewType::GROUPS: + std::cerr << " GROUPS_PULSES: grpIds: TBD"; + std::cerr << std::endl; + break; + default: + break; + } +} + +void WireDialog::AddToHistory(const WireViewHistory &view) +{ + std::cerr << "AddToHistory():"; + printWireViewHistory(view); + + /* clear future history */ + mHistory.resize(mHistoryIndex + 1); + + mHistory.push_back(view); + mHistoryIndex = mHistory.size() - 1; + + // at end of history. + // enable back, disable forward. + ui.toolButton_back->setEnabled(mHistoryIndex > 0); + ui.toolButton_forward->setEnabled(false); +} + +void WireDialog::back() +{ + LoadHistory(mHistoryIndex-1); +} + +void WireDialog::forward() +{ + LoadHistory(mHistoryIndex+1); +} + +void WireDialog::LoadHistory(uint32_t index) +{ + if (index >= mHistory.size()) { + return; + } + + mHistoryIndex = index; + WireViewHistory view = mHistory[index]; + + std::cerr << "LoadHistory:"; + printWireViewHistory(view); + + switch(view.viewType) { + case WireViewType::PULSE_FOCUS: + showPulseFocus(view.groupId, view.msgId); + break; + case WireViewType::GROUP_FOCUS: + showGroupFocus(view.groupId); + break; + case WireViewType::GROUPS: + showGroupsPulses(view.groupIds); + break; + default: + break; + } + + ui.toolButton_back->setEnabled(index > 0); + ui.toolButton_forward->setEnabled(index + 1 < mHistory.size()); +} +// HISTORY ------------------------------------------------------------------------------- + +void WireDialog::requestPulseFocus(const RsGxsGroupId groupId, const RsGxsMessageId msgId) +{ + WireViewHistory view; + view.viewType = WireViewType::PULSE_FOCUS; + view.groupId = groupId; + view.msgId = msgId; + + AddToHistory(view); + showPulseFocus(groupId, msgId); +} void WireDialog::showPulseFocus(const RsGxsGroupId groupId, const RsGxsMessageId msgId) { @@ -719,6 +817,16 @@ void WireDialog::postPulseFocus(RsWirePulseSPtr pPulse) } } +void WireDialog::requestGroupFocus(const RsGxsGroupId groupId) +{ + WireViewHistory view; + view.viewType = WireViewType::GROUP_FOCUS; + view.groupId = groupId; + + AddToHistory(view); + showGroupFocus(groupId); +} + void WireDialog::showGroupFocus(const RsGxsGroupId groupId) { clearTwitterView(); @@ -787,6 +895,16 @@ void WireDialog::postGroupFocus(RsWireGroupSPtr group, std::list groupIds) +{ + WireViewHistory view; + view.viewType = WireViewType::GROUPS; + view.groupIds = groupIds; + + AddToHistory(view); + showGroupsPulses(groupIds); +} + void WireDialog::showGroupsPulses(const std::list groupIds) { clearTwitterView(); diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.h b/retroshare-gui/src/gui/TheWire/WireDialog.h index 62456398c..5a56c19ae 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.h +++ b/retroshare-gui/src/gui/TheWire/WireDialog.h @@ -40,6 +40,34 @@ #define IMAGE_WIRE ":/icons/wire.png" +//--------------------------- Classes for Wire View History +enum class WireViewType +{ + GROUPS, + GROUP_FOCUS, + PULSE_FOCUS, +}; + +enum class WireViewTimeRange +{ + FOREVER, + LAST_DAY, // last 24 hours. + LAST_WEEK, // actually last 7 days. + LAST_MONTH // actually last 30 days. +}; + +class WireViewHistory +{ +public: + WireViewType viewType; + WireViewTimeRange viewTimeRange; + + RsGxsGroupId groupId; + RsGxsMessageId msgId; + std::list groupIds; +}; +//--------------------------------------------------------- + class WireDialog : public MainPage, public TokenResponse, public WireGroupHolder, public PulseViewHolder { Q_OBJECT @@ -73,12 +101,19 @@ public: void clearTwitterView(); void addTwitterView(PulseViewItem *item); + // TwitterView History + void AddToHistory(const WireViewHistory &view); + void LoadHistory(uint32_t index); + + void requestPulseFocus(const RsGxsGroupId groupId, const RsGxsMessageId msgId); void showPulseFocus(const RsGxsGroupId groupId, const RsGxsMessageId msgId); void postPulseFocus(RsWirePulseSPtr pulse); + void requestGroupFocus(const RsGxsGroupId groupId); void showGroupFocus(const RsGxsGroupId groupId); void postGroupFocus(RsWireGroupSPtr group, std::list pulses); + void requestGroupsPulses(const std::list groupIds); void showGroupsPulses(const std::list groupIds); void postGroupsPulses(std::list pulses); @@ -91,6 +126,10 @@ private slots: void selectGroupSet(int index); void selectFilterTime(int index); + // history navigation. + void back(); + void forward(); + private: bool setupPulseAddDialog(); @@ -122,6 +161,9 @@ private: std::map mAllGroups; std::vector mOwnGroups; + int32_t mHistoryIndex; + std::vector mHistory; + /* UI - from Designer */ Ui::WireDialog ui; diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.ui b/retroshare-gui/src/gui/TheWire/WireDialog.ui index 2372d1a76..8b4f1d2a9 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.ui +++ b/retroshare-gui/src/gui/TheWire/WireDialog.ui @@ -248,6 +248,36 @@ 0 + + + + < + + + + + + + > + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 10 + 20 + + + + From 9a90ef694e7b0f04ab45e2aa386ee55941fd4f91 Mon Sep 17 00:00:00 2001 From: drbob Date: Fri, 7 Aug 2020 18:12:06 +1000 Subject: [PATCH 69/95] [TheWire] update GroupPtrs Ensure all possible GroupPtrs are filled in on Pulse Data Requests. * Expand Id collection to include all the additonal RefGroupIds. * Perform intersection(available IDs, pulse GroupIds) before retrieving * Iterate over pulse tree and update GroupPtr references. * Enable GROUP_IDS gxs data fetches. --- .../src/retroshare/rsgxsifacehelper.h | 15 +- libretroshare/src/retroshare/rswire.h | 4 +- libretroshare/src/services/p3wire.cc | 190 +++++++++++------- libretroshare/src/services/p3wire.h | 11 +- 4 files changed, 139 insertions(+), 81 deletions(-) diff --git a/libretroshare/src/retroshare/rsgxsifacehelper.h b/libretroshare/src/retroshare/rsgxsifacehelper.h index 7db596873..4339f95f0 100644 --- a/libretroshare/src/retroshare/rsgxsifacehelper.h +++ b/libretroshare/src/retroshare/rsgxsifacehelper.h @@ -50,12 +50,13 @@ enum class TokenRequestType: uint8_t __NONE = 0x00, /// Used to detect uninitialized GROUP_DATA = 0x01, GROUP_META = 0x02, - POSTS = 0x03, - ALL_POSTS = 0x04, - MSG_RELATED_INFO = 0x05, - GROUP_STATISTICS = 0x06, - SERVICE_STATISTICS = 0x07, - NO_KILL_TYPE = 0x08, + GROUP_IDS = 0x03, + POSTS = 0x04, + ALL_POSTS = 0x05, + MSG_RELATED_INFO = 0x06, + GROUP_STATISTICS = 0x07, + SERVICE_STATISTICS = 0x08, + NO_KILL_TYPE = 0x09, __MAX /// Used to detect out of range }; @@ -263,6 +264,7 @@ public: { case GXS_REQUEST_TYPE_GROUP_DATA: token_request_type = TokenRequestType::GROUP_DATA; break; case GXS_REQUEST_TYPE_GROUP_META: token_request_type = TokenRequestType::GROUP_META; break; + case GXS_REQUEST_TYPE_GROUP_IDS: token_request_type = TokenRequestType::GROUP_IDS; break; default: RsErr() << __PRETTY_FUNCTION__ << "(EE) Unexpected request type " << opts.mReqType << "!!" << std::endl; return false; @@ -292,6 +294,7 @@ public: { case GXS_REQUEST_TYPE_GROUP_DATA: token_request_type = TokenRequestType::GROUP_DATA; break; case GXS_REQUEST_TYPE_GROUP_META: token_request_type = TokenRequestType::GROUP_META; break; + case GXS_REQUEST_TYPE_GROUP_IDS: token_request_type = TokenRequestType::GROUP_IDS; break; default: RsErr() << __PRETTY_FUNCTION__ << "(EE) Unexpected request type " << opts.mReqType << "!!" << std::endl; return false; diff --git a/libretroshare/src/retroshare/rswire.h b/libretroshare/src/retroshare/rswire.h index 03625719f..34c953cee 100644 --- a/libretroshare/src/retroshare/rswire.h +++ b/libretroshare/src/retroshare/rswire.h @@ -176,8 +176,8 @@ class RsWirePulse // Pointer to WireGroups // mRefGroupPtr is opportunistically filled in, but will often be empty. - RsWireGroupSPtr mRefGroupPtr; // ORIG/RESP: N/A , REF: Reply Group - RsWireGroupSPtr mGroupPtr; // ORIG/RESP: Own Group, REF: Parent Group + RsWireGroupSPtr mRefGroupPtr; // ORIG: N/A, RESP: Parent, REF: Reply Group + RsWireGroupSPtr mGroupPtr; // ORIG: Own, RESP: Own, REF: Parent Group // These are the direct children of this message // split into likes, replies and retweets. diff --git a/libretroshare/src/services/p3wire.cc b/libretroshare/src/services/p3wire.cc index cdf13cfe6..283e9a804 100644 --- a/libretroshare/src/services/p3wire.cc +++ b/libretroshare/src/services/p3wire.cc @@ -809,7 +809,7 @@ bool p3Wire::createLikePulse(uint32_t &token, RsWirePulse &pulse) // WireGroup Details. bool p3Wire::getWireGroup(const RsGxsGroupId &groupId, RsWireGroupSPtr &grp) { - std::set groupIds = { groupId }; + std::list groupIds = { groupId }; std::map groups; if (!fetchGroupPtrs(groupIds, groups)) { @@ -885,7 +885,6 @@ bool p3Wire::getPulsesForGroups(const std::list &groupIds, std::li return false; } - std::cerr << "p3Wire::getPulsesForGroups() size = " << pulsePtrs.size(); std::cerr << std::endl; { @@ -911,11 +910,6 @@ bool p3Wire::getPulsesForGroups(const std::list &groupIds, std::li pulsePtrs.resize(N); } - // set to collect groupIds... - // this is only important if updatePulse Level > 1. - // but this is more general. - std::set allGroupIds; - // for each fill in details. std::list::iterator it; for (it = pulsePtrs.begin(); it != pulsePtrs.end(); it++) @@ -926,33 +920,14 @@ bool p3Wire::getPulsesForGroups(const std::list &groupIds, std::li std::cerr << std::endl; return false; } - - if (!extractGroupIds(*it, allGroupIds)) - { - std::cerr << "p3Wire::getPulsesForGroups() failed to extractGroupIds"; - std::cerr << std::endl; - return false; - } - } - - // fetch GroupPtrs for allGroupIds. - std::map groups; - if (!fetchGroupPtrs(allGroupIds, groups)) - { - std::cerr << "p3Wire::getPulsesForGroups() failed to fetchGroupPtrs"; - std::cerr << std::endl; - return false; } // update GroupPtrs for all pulsePtrs. - for (it = pulsePtrs.begin(); it != pulsePtrs.end(); it++) + if (!updateGroups(pulsePtrs)) { - if (!updateGroupPtrs(*it, groups)) - { - std::cerr << "p3Wire::getPulsesForGroups() failed to updateGroupPtrs"; - std::cerr << std::endl; - return false; - } + std::cerr << "p3Wire::getPulsesForGroups() failed to updateGroups"; + std::cerr << std::endl; + return false; } return true; @@ -980,32 +955,13 @@ bool p3Wire::getPulseFocus(const RsGxsGroupId &groupId, const RsGxsMessageId &ms return false; } - /* final stage is to fetch associated groups and reference them from pulses - * this could be done as part of updates, but probably more efficient to do once - * -- Future improvement. - * -- Fetch RefGroups as well, these are not necessarily available, - * so need to add dataRequest FlAG to return okay even if not all groups there. - */ + /* Fill in GroupPtrs */ + std::list pulsePtrs; + pulsePtrs.push_back(pPulse); - std::set groupIds; - if (!extractGroupIds(pPulse, groupIds)) + if (!updateGroups(pulsePtrs)) { - std::cerr << "p3Wire::getPulseFocus() failed to extractGroupIds"; - std::cerr << std::endl; - return false; - } - - std::map groups; - if (!fetchGroupPtrs(groupIds, groups)) - { - std::cerr << "p3Wire::getPulseFocus() failed to fetchGroupPtrs"; - std::cerr << std::endl; - return false; - } - - if (!updateGroupPtrs(pPulse, groups)) - { - std::cerr << "p3Wire::getPulseFocus() failed to updateGroupPtrs"; + std::cerr << "p3Wire::getPulseFocus() failed to updateGroups"; std::cerr << std::endl; return false; } @@ -1171,6 +1127,58 @@ bool p3Wire::updatePulseChildren(RsWirePulseSPtr pParent, uint32_t token) } } +/* High-level utility function to update mGroupPtr / mRefGroupPtr links. + * fetches associated groups and reference them from pulses + * + * extractGroupIds (owner + refs). + * fetch all available GroupIDs. (just IDs - so light). + * do intersection of IDs. + * apply IDs. + */ + +bool p3Wire::updateGroups(std::list &pulsePtrs) +{ + std::set pulseGroupIds; + + std::list::iterator it; + for (it = pulsePtrs.begin(); it != pulsePtrs.end(); it++) + { + if (!extractGroupIds(*it, pulseGroupIds)) + { + std::cerr << "p3Wire::updateGroups() failed to extractGroupIds"; + std::cerr << std::endl; + return false; + } + } + + std::list availGroupIds; + if (!trimToAvailGroupIds(pulseGroupIds, availGroupIds)) + { + std::cerr << "p3Wire::updateGroups() failed to trimToAvailGroupIds"; + std::cerr << std::endl; + return false; + } + + std::map groups; + if (!fetchGroupPtrs(availGroupIds, groups)) + { + std::cerr << "p3Wire::updateGroups() failed to fetchGroupPtrs"; + std::cerr << std::endl; + return false; + } + + for (it = pulsePtrs.begin(); it != pulsePtrs.end(); it++) + { + if (!updateGroupPtrs(*it, groups)) + { + std::cerr << "p3Wire::updateGroups() failed to updateGroupPtrs"; + std::cerr << std::endl; + return false; + } + } + return true; +} + // this function doesn't depend on p3Wire, could make static. bool p3Wire::extractGroupIds(RsWirePulseConstSPtr pPulse, std::set &groupIds) @@ -1184,16 +1192,22 @@ bool p3Wire::extractGroupIds(RsWirePulseConstSPtr pPulse, std::set return false; } + // install own groupId. + groupIds.insert(pPulse->mMeta.mGroupId); + /* do this recursively */ if (pPulse->mPulseType & WIRE_PULSE_TYPE_REFERENCE) { + // REPLY: mRefGroupId, PARENT was in mMeta.mGroupId. + groupIds.insert(pPulse->mRefGroupId); /* skipping */ - std::cerr << "p3Wire::extractGroupIds() skipping ref type"; - std::cerr << std::endl; return true; } - // install own groupId. - groupIds.insert(pPulse->mMeta.mGroupId); + + if (pPulse->mPulseType & WIRE_PULSE_TYPE_RESPONSE) { + // REPLY: meta.mGroupId, PARENT: mRefGroupId + groupIds.insert(pPulse->mRefGroupId); + } /* iterate through children, recursively */ std::list::const_iterator it; @@ -1218,7 +1232,6 @@ bool p3Wire::extractGroupIds(RsWirePulseConstSPtr pPulse, std::set } // not bothering with LIKEs at the moment. TODO. - return true; } @@ -1233,13 +1246,9 @@ bool p3Wire::updateGroupPtrs(RsWirePulseSPtr pPulse, const std::mapmGroupPtr = git->second; - /* if Refs, GroupId refers to parent, so GroupPtr is parent's group - * It should already be in groups lists - if its not... */ + // if REF, fill in mRefGroupPtr based on mRefGroupId. if (pPulse->mPulseType & WIRE_PULSE_TYPE_REFERENCE) { - // if REF is in list, fill in (unlikely but try anyway) - // unlikely, as we are not adding RefGroupId, as can potentially fail to look up. - // need additional flag OKAY_IF_NONEXISTENT or similar. - // no error if its not there. + // if RefGroupId is in list, fill in. No error if its not there. std::map::const_iterator rgit; rgit = groups.find(pPulse->mRefGroupId); if (rgit != groups.end()) { @@ -1250,6 +1259,17 @@ bool p3Wire::updateGroupPtrs(RsWirePulseSPtr pPulse, const std::mapmPulseType & WIRE_PULSE_TYPE_RESPONSE) { + // if RefGroupId is in list, fill in. No error if its not there. + std::map::const_iterator rgit; + rgit = groups.find(pPulse->mRefGroupId); + if (rgit != groups.end()) { + pPulse->mRefGroupPtr = rgit->second; + } + // do children as well. + } + /* recursively apply to children */ std::list::iterator it; for (it = pPulse->mReplies.begin(); it != pPulse->mReplies.end(); it++) @@ -1276,18 +1296,51 @@ bool p3Wire::updateGroupPtrs(RsWirePulseSPtr pPulse, const std::map &groupIds, +bool p3Wire::trimToAvailGroupIds(const std::set &pulseGroupIds, + std::list &availGroupIds) +{ + /* request all groupIds */ + std::cerr << "p3Wire::trimToAvailGroupIds()"; + std::cerr << std::endl; + + uint32_t token; + RsTokReqOptions opts; + opts.mReqType = GXS_REQUEST_TYPE_GROUP_IDS; + + if (!requestGroupInfo(token, opts) || waitToken(token) != RsTokenService::COMPLETE ) + { + std::cerr << "p3Wire::trimToAvailGroupIds() failed to fetch groups"; + std::cerr << std::endl; + return false; + } + + std::list localGroupIds; + if (!RsGenExchange::getGroupList(token, localGroupIds)) + { + std::cerr << "p3Wire::trimToAvailGroupIds() failed to get GroupIds"; + std::cerr << std::endl; + return false; + } + + /* do intersection between result ^ pulseGroups -> availGroupIds */ + std::set_intersection(localGroupIds.begin(), localGroupIds.end(), + pulseGroupIds.begin(), pulseGroupIds.end(), + std::back_inserter(availGroupIds)); + + return true; +} + +bool p3Wire::fetchGroupPtrs(const std::list &groupIds, std::map &groups) { std::cerr << "p3Wire::fetchGroupPtrs()"; std::cerr << std::endl; - std::list groupIdList(groupIds.begin(), groupIds.end()); uint32_t token; RsTokReqOptions opts; opts.mReqType = GXS_REQUEST_TYPE_GROUP_DATA; - if (!requestGroupInfo(token, opts, groupIdList) || waitToken(token) != RsTokenService::COMPLETE ) + if (!requestGroupInfo(token, opts, groupIds) || waitToken(token) != RsTokenService::COMPLETE ) { std::cerr << "p3Wire::fetchGroupPtrs() failed to fetch groups"; std::cerr << std::endl; @@ -1296,4 +1349,3 @@ bool p3Wire::fetchGroupPtrs(const std::set &groupIds, return getGroupPtrData(token, groups); } - diff --git a/libretroshare/src/services/p3wire.h b/libretroshare/src/services/p3wire.h index 897886e67..2e7375578 100644 --- a/libretroshare/src/services/p3wire.h +++ b/libretroshare/src/services/p3wire.h @@ -95,18 +95,21 @@ private: bool updatePulseChildren(RsWirePulseSPtr pParent, uint32_t token); // update GroupPtrs + bool updateGroups(std::list &pulsePtrs); + + // sub utility functions used by updateGroups. bool extractGroupIds(RsWirePulseConstSPtr pPulse, std::set &groupIds); bool updateGroupPtrs(RsWirePulseSPtr pPulse, const std::map &groups); - bool fetchGroupPtrs(const std::set &groupIds, + bool trimToAvailGroupIds(const std::set &pulseGroupIds, + std::list &availGroupIds); + + bool fetchGroupPtrs(const std::list &groupIds, std::map &groups); - - - virtual void generateDummyData(); std::string genRandomId(); From ca2da39167ea995744c24d8a64692f147bbf228a Mon Sep 17 00:00:00 2001 From: drbob Date: Fri, 7 Aug 2020 23:54:14 +1000 Subject: [PATCH 70/95] TheWire fix Show and Follow Buttons * Add Icons to Buttons * Wire up Follow Buttons (add in a couple of places too) * Show / Hide buttons depending on Following status * Handle cases where Msgs / Groups unavailable --- retroshare-gui/src/gui/TheWire/PulseReply.cpp | 21 +++- retroshare-gui/src/gui/TheWire/PulseReply.h | 2 +- retroshare-gui/src/gui/TheWire/PulseReply.ui | 43 ++++++- .../src/gui/TheWire/PulseTopLevel.cpp | 20 +-- .../src/gui/TheWire/PulseTopLevel.h | 2 +- .../src/gui/TheWire/PulseTopLevel.ui | 116 +++++++++++++++++- .../src/gui/TheWire/PulseViewGroup.cpp | 14 +++ .../src/gui/TheWire/PulseViewGroup.h | 4 + .../src/gui/TheWire/PulseViewGroup.ui | 9 +- .../src/gui/TheWire/PulseViewItem.cpp | 51 ++++++-- .../src/gui/TheWire/PulseViewItem.h | 9 +- .../src/gui/TheWire/TheWire_images.qrc | 3 + retroshare-gui/src/gui/TheWire/WireDialog.cpp | 6 +- .../src/gui/TheWire/images/external-link.svg | 1 + .../src/gui/TheWire/images/invite.png | Bin 0 -> 5218 bytes .../src/gui/TheWire/images/link.svg | 1 + 16 files changed, 276 insertions(+), 26 deletions(-) create mode 100644 retroshare-gui/src/gui/TheWire/images/external-link.svg create mode 100644 retroshare-gui/src/gui/TheWire/images/invite.png create mode 100644 retroshare-gui/src/gui/TheWire/images/link.svg diff --git a/retroshare-gui/src/gui/TheWire/PulseReply.cpp b/retroshare-gui/src/gui/TheWire/PulseReply.cpp index 76ce49d90..92dccabf5 100644 --- a/retroshare-gui/src/gui/TheWire/PulseReply.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseReply.cpp @@ -114,10 +114,25 @@ void PulseReply::setRepliesString(QString reply) label_replies->setText(reply); } -void PulseReply::showResponseStats(bool enable) +void PulseReply::setPulseStatus(PulseStatus status) { - widget_actions->setVisible(enable); - widget_follow->setVisible(!enable); + widget_actions->setVisible(status == PulseStatus::FULL); + widget_follow->setVisible(status != PulseStatus::FULL); + toolButton_follow->setEnabled(status == PulseStatus::UNSUBSCRIBED); + + switch(status) + { + case PulseStatus::FULL: + break; + case PulseStatus::UNSUBSCRIBED: + break; + case PulseStatus::NO_GROUP: + label_follow_msg->setText("Group unavailable"); + break; + case PulseStatus::REF_MSG: + label_follow_msg->setText("Full Pulse unavailable"); + break; + } } void PulseReply::setReferenceString(QString ref) diff --git a/retroshare-gui/src/gui/TheWire/PulseReply.h b/retroshare-gui/src/gui/TheWire/PulseReply.h index da3c0337b..c2c9545f5 100644 --- a/retroshare-gui/src/gui/TheWire/PulseReply.h +++ b/retroshare-gui/src/gui/TheWire/PulseReply.h @@ -56,7 +56,7 @@ protected: // virtual void setReferenceString(QString ref) override; - virtual void showResponseStats(bool enable) override; + virtual void setPulseStatus(PulseStatus status) override; // PulseDataInterface =========== void mousePressEvent(QMouseEvent *event); diff --git a/retroshare-gui/src/gui/TheWire/PulseReply.ui b/retroshare-gui/src/gui/TheWire/PulseReply.ui index 78a6d7ab7..582ceb269 100644 --- a/retroshare-gui/src/gui/TheWire/PulseReply.ui +++ b/retroshare-gui/src/gui/TheWire/PulseReply.ui @@ -154,6 +154,13 @@ border-radius: 10px} REPLY + + + :/images/reply.png:/images/reply.png + + + Qt::ToolButtonTextBesideIcon + @@ -198,6 +205,13 @@ border-radius: 10px} REPUBLISH + + + :/images/retweet.png:/images/retweet.png + + + Qt::ToolButtonTextBesideIcon + @@ -242,6 +256,13 @@ border-radius: 10px} LIKE + + + :/images/like.png:/images/like.png + + + Qt::ToolButtonTextBesideIcon + @@ -286,6 +307,13 @@ border-radius: 10px} SHOW + + + :/images/external-link.svg:/images/external-link.svg + + + Qt::ToolButtonTextBesideIcon + @@ -339,10 +367,23 @@ border-radius: 10px} FOLLOW + + + :/images/invite.png:/images/invite.png + + + + 16 + 16 + + + + Qt::ToolButtonTextBesideIcon + - + for response statistics diff --git a/retroshare-gui/src/gui/TheWire/PulseTopLevel.cpp b/retroshare-gui/src/gui/TheWire/PulseTopLevel.cpp index a02dfd8fc..d66b90eb3 100644 --- a/retroshare-gui/src/gui/TheWire/PulseTopLevel.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseTopLevel.cpp @@ -45,10 +45,9 @@ PulseTopLevel::PulseTopLevel(PulseViewHolder *holder, RsWirePulseSPtr pulse) void PulseTopLevel::setup() { - connect(pushButton_tmpViewGroup, SIGNAL(clicked()), this, SLOT(actionViewGroup())); - connect(pushButton_tmpViewParent, SIGNAL(clicked()), this, SLOT(actionViewParent())); - - // connect(toolButton_follow, SIGNAL(clicked()), this, SLOT(follow())); + connect(toolButton_viewGroup, SIGNAL(clicked()), this, SLOT(actionViewGroup())); + connect(toolButton_viewParent, SIGNAL(clicked()), this, SLOT(actionViewParent())); + connect(toolButton_follow, SIGNAL(clicked()), this, SLOT(actionFollow())); // connect(toolButton_rate, SIGNAL(clicked()), this, SLOT(rate())); connect(toolButton_reply, SIGNAL(clicked()), this, SLOT(actionReply())); @@ -107,10 +106,11 @@ void PulseTopLevel::setRepliesString(QString reply) label_replies->setText(reply); } -void PulseTopLevel::showResponseStats(bool enable) +void PulseTopLevel::setPulseStatus(PulseStatus status) { - widget_replies->setVisible(enable); - widget_actions->setVisible(enable); + widget_replies->setVisible(true); // this is only reachable if we have ORIG so show always. + widget_actions->setVisible(status == PulseStatus::FULL); + widget_actionsFollow->setVisible(status == PulseStatus::UNSUBSCRIBED); } void PulseTopLevel::setReferenceString(QString ref) @@ -123,6 +123,12 @@ void PulseTopLevel::setReferenceString(QString ref) { label_reference->setText(ref); } + + if (mPulse->mRefGroupPtr) { + toolButton_viewParent->setVisible(true); + } else { + toolButton_viewParent->setVisible(false); + } } void PulseTopLevel::mousePressEvent(QMouseEvent *event) diff --git a/retroshare-gui/src/gui/TheWire/PulseTopLevel.h b/retroshare-gui/src/gui/TheWire/PulseTopLevel.h index e43fe012d..c04550023 100644 --- a/retroshare-gui/src/gui/TheWire/PulseTopLevel.h +++ b/retroshare-gui/src/gui/TheWire/PulseTopLevel.h @@ -55,7 +55,7 @@ protected: // virtual void setReferenceString(QString ref) override; - virtual void showResponseStats(bool enable) override; + virtual void setPulseStatus(PulseStatus status) override; // PulseDataInterface =========== protected: diff --git a/retroshare-gui/src/gui/TheWire/PulseTopLevel.ui b/retroshare-gui/src/gui/TheWire/PulseTopLevel.ui index feb31abee..884300c64 100644 --- a/retroshare-gui/src/gui/TheWire/PulseTopLevel.ui +++ b/retroshare-gui/src/gui/TheWire/PulseTopLevel.ui @@ -104,10 +104,23 @@ border-radius: 10px} - + + + open Parent Pulse + SHOW PARENT + + + :/images/external-link.svg:/images/external-link.svg + + + + 24 + 24 + + @@ -228,16 +241,29 @@ border-radius: 10px} - + 0 25 + + open Group + SHOW GROUP + + + :/images/external-link.svg:/images/external-link.svg + + + + 24 + 24 + + @@ -472,6 +498,13 @@ border-radius: 10px} REPLY + + + :/images/reply.png:/images/reply.png + + + Qt::ToolButtonTextBesideIcon + @@ -516,6 +549,13 @@ border-radius: 10px} REPUBLISH + + + :/images/retweet.png:/images/retweet.png + + + Qt::ToolButtonTextBesideIcon + @@ -560,6 +600,13 @@ border-radius: 10px} LIKE + + + :/images/like.png:/images/like.png + + + Qt::ToolButtonTextBesideIcon + @@ -604,6 +651,13 @@ border-radius: 10px} SHOW + + + :/images/external-link.svg:/images/external-link.svg + + + Qt::ToolButtonTextBesideIcon + @@ -624,6 +678,64 @@ border-radius: 10px} + + + + + 0 + 0 + + + + + 0 + 40 + + + + + + + Qt::Horizontal + + + + 298 + 20 + + + + + + + + FOLLOW + + + + :/images/invite.png:/images/invite.png + + + Qt::ToolButtonTextBesideIcon + + + + + + + Qt::Horizontal + + + + 297 + 20 + + + + + + + diff --git a/retroshare-gui/src/gui/TheWire/PulseViewGroup.cpp b/retroshare-gui/src/gui/TheWire/PulseViewGroup.cpp index 715bc8ff6..25d393295 100644 --- a/retroshare-gui/src/gui/TheWire/PulseViewGroup.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseViewGroup.cpp @@ -41,6 +41,8 @@ PulseViewGroup::PulseViewGroup(PulseViewHolder *holder, RsWireGroupSPtr group) void PulseViewGroup::setup() { if (mGroup) { + connect(toolButton_follow, SIGNAL(clicked()), this, SLOT(actionFollow())); + label_groupName->setText("@" + QString::fromStdString(mGroup->mMeta.mGroupName)); label_authorName->setText(BoldString(QString::fromStdString(mGroup->mMeta.mAuthorId.toStdString()))); label_date->setText(DateTime::formatDateTime(mGroup->mMeta.mPublishTs)); @@ -92,3 +94,15 @@ void PulseViewGroup::setup() } } +void PulseViewGroup::actionFollow() +{ + RsGxsGroupId groupId = mGroup->mMeta.mGroupId; + std::cerr << "PulseViewGroup::actionFollow() following "; + std::cerr << groupId; + std::cerr << std::endl; + + if (mHolder) { + mHolder->PVHfollow(groupId); + } +} + diff --git a/retroshare-gui/src/gui/TheWire/PulseViewGroup.h b/retroshare-gui/src/gui/TheWire/PulseViewGroup.h index 94b3f1031..4d00090ca 100644 --- a/retroshare-gui/src/gui/TheWire/PulseViewGroup.h +++ b/retroshare-gui/src/gui/TheWire/PulseViewGroup.h @@ -33,9 +33,13 @@ class PulseViewGroup : public PulseViewItem, private Ui::PulseViewGroup public: PulseViewGroup(PulseViewHolder *holder, RsWireGroupSPtr group); +private slots: + void actionFollow(); + protected: void setup(); + protected: RsWireGroupSPtr mGroup; }; diff --git a/retroshare-gui/src/gui/TheWire/PulseViewGroup.ui b/retroshare-gui/src/gui/TheWire/PulseViewGroup.ui index 6dc0a25cf..7f808dd44 100644 --- a/retroshare-gui/src/gui/TheWire/PulseViewGroup.ui +++ b/retroshare-gui/src/gui/TheWire/PulseViewGroup.ui @@ -508,10 +508,17 @@ border-radius: 10px} - + FOLLOW + + + :/images/invite.png:/images/invite.png + + + Qt::ToolButtonTextBesideIcon + diff --git a/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp b/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp index 1395883bf..3a42f5ba9 100644 --- a/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp @@ -183,8 +183,18 @@ void PulseDataItem::actionFollow() std::cerr << "PulseDataItem::actionFollow()"; std::cerr << std::endl; - // TODO RsGxsGroupId groupId; + if (mPulse->mPulseType & WIRE_PULSE_TYPE_REFERENCE) { + std::cerr << "PulseDataItem::actionFollow() REF following Replier: "; + std::cerr << mPulse->mRefGroupId; + std::cerr << std::endl; + groupId = mPulse->mRefGroupId; + } else { + std::cerr << "PulseDataItem::actionFollow() RESPONSE following Group: "; + std::cerr << mPulse->mMeta.mGroupId; + std::cerr << std::endl; + groupId = mPulse->mMeta.mGroupId; + } if (mHolder) { mHolder->PVHfollow(groupId); @@ -260,15 +270,28 @@ void PulseDataItem::showPulse() setRefMessage(QString::fromStdString(mPulse->mRefPulseText), mPulse->mRefImageCount); setDate(mPulse->mRefPublishTs); - // References (unknown for a REFERENCE) - // show FOLLOW button instead. - showResponseStats(false); + // Workout Pulse status for Stats/Follow/Msgs. + // Its a REF so cannot be FULL. + PulseStatus status = PulseStatus::REF_MSG; + if (mPulse->mRefGroupPtr) { + // bitwise comparisons. + if (mPulse->mRefGroupPtr->mMeta.mSubscribeFlags & + (GXS_SERV::GROUP_SUBSCRIBE_ADMIN | + GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED)) { + status = PulseStatus::REF_MSG; + } else { + status = PulseStatus::UNSUBSCRIBED; + } + } else { + status = PulseStatus::NO_GROUP; + } + + setPulseStatus(status); - // if (mPulse->mGroupPtr) { setReference(mPulse->mPulseType & WIRE_PULSE_RESPONSE_MASK, mPulse->mMeta.mGroupId, mPulse->mGroupPtr->mMeta.mGroupName); } else { - setReference(mPulse->mPulseType & WIRE_PULSE_RESPONSE_MASK, mPulse->mMeta.mGroupId, "REF GROUP MISSING"); + setReference(mPulse->mPulseType & WIRE_PULSE_RESPONSE_MASK, mPulse->mMeta.mGroupId, "UNKNOWN"); } } @@ -310,8 +333,19 @@ void PulseDataItem::showPulse() setMessage(mPulse); setDate(mPulse->mMeta.mPublishTs); - // References - showResponseStats(true); + // Possible to have ORIG and be UNSUBSCRIBED. + PulseStatus status = PulseStatus::FULL; + if (mPulse->mGroupPtr) { + // bitwise comparisons. + if (mPulse->mGroupPtr->mMeta.mSubscribeFlags & + (GXS_SERV::GROUP_SUBSCRIBE_ADMIN | + GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED)) { + status = PulseStatus::FULL; + } else { + status = PulseStatus::UNSUBSCRIBED; + } + } + setPulseStatus(status); setLikes(mPulse->mLikes.size()); setReplies(mPulse->mReplies.size()); setRepublishes(mPulse->mRepublishes.size()); @@ -322,6 +356,7 @@ void PulseDataItem::showPulse() } else { + // NO Parent, so only 0 is important. setReference(0, mPulse->mRefGroupId, mPulse->mRefGroupName); } } diff --git a/retroshare-gui/src/gui/TheWire/PulseViewItem.h b/retroshare-gui/src/gui/TheWire/PulseViewItem.h index 05f23cdb2..549c2d34a 100644 --- a/retroshare-gui/src/gui/TheWire/PulseViewItem.h +++ b/retroshare-gui/src/gui/TheWire/PulseViewItem.h @@ -50,6 +50,13 @@ class PulseDataInterface public: virtual ~PulseDataInterface() {} + enum class PulseStatus { + FULL, // have Msg + Group: Show Stats + UNSUBSCRIBED, // Ref + unsubscribed to Group: Show Follow + NO_GROUP, // Ref Msg, unknown group: Show Missing Group. + REF_MSG // Subscribed, only Ref Msg: Show Missing Msg. + }; + protected: // Group virtual void setHeadshot(const QPixmap &pixmap) = 0; @@ -68,7 +75,7 @@ protected: // virtual void setReferenceString(QString ref) = 0; - virtual void showResponseStats(bool enable) = 0; + virtual void setPulseStatus(PulseStatus status) = 0; }; diff --git a/retroshare-gui/src/gui/TheWire/TheWire_images.qrc b/retroshare-gui/src/gui/TheWire/TheWire_images.qrc index b26e6b7da..2c344c6bd 100644 --- a/retroshare-gui/src/gui/TheWire/TheWire_images.qrc +++ b/retroshare-gui/src/gui/TheWire/TheWire_images.qrc @@ -4,5 +4,8 @@ images/like.png images/reply.png images/retweet.png + images/link.svg + images/external-link.svg + images/invite.png diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.cpp b/retroshare-gui/src/gui/TheWire/WireDialog.cpp index 8a0b2a235..cc0e3d840 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/WireDialog.cpp @@ -578,8 +578,12 @@ void WireDialog::PVHfollow(const RsGxsGroupId &groupId) { std::cerr << "WireDialog::PVHfollow("; std::cerr << groupId.toStdString(); - std::cerr << ") TODO"; + std::cerr << ")"; std::cerr << std::endl; + + uint32_t token; + rsWire->subscribeToGroup(token, groupId, true); + mWireQueue->queueRequest(token, TOKENREQ_GROUPINFO, RS_TOKREQ_ANSTYPE_ACK, WIRE_TOKEN_TYPE_SUBSCRIBE_CHANGE); } void WireDialog::PVHrate(const RsGxsId &authorId) diff --git a/retroshare-gui/src/gui/TheWire/images/external-link.svg b/retroshare-gui/src/gui/TheWire/images/external-link.svg new file mode 100644 index 000000000..d3a249f34 --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/images/external-link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/retroshare-gui/src/gui/TheWire/images/invite.png b/retroshare-gui/src/gui/TheWire/images/invite.png new file mode 100644 index 0000000000000000000000000000000000000000..5fda4753e62a963203073ce59fb8097f0360f1e0 GIT binary patch literal 5218 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 literal 0 HcmV?d00001 diff --git a/retroshare-gui/src/gui/TheWire/images/link.svg b/retroshare-gui/src/gui/TheWire/images/link.svg new file mode 100644 index 000000000..fdee24b3c --- /dev/null +++ b/retroshare-gui/src/gui/TheWire/images/link.svg @@ -0,0 +1 @@ + \ No newline at end of file From 75695bf3669b8949b8f2f5835de8aa47f6ef2ecf Mon Sep 17 00:00:00 2001 From: defnax Date: Sat, 8 Aug 2020 00:24:44 +0200 Subject: [PATCH 71/95] Enabled Text markable & links clickable --- retroshare-gui/src/gui/gxs/GxsCreateCommentDialog.ui | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/retroshare-gui/src/gui/gxs/GxsCreateCommentDialog.ui b/retroshare-gui/src/gui/gxs/GxsCreateCommentDialog.ui index 550610748..27d128867 100644 --- a/retroshare-gui/src/gui/gxs/GxsCreateCommentDialog.ui +++ b/retroshare-gui/src/gui/gxs/GxsCreateCommentDialog.ui @@ -112,6 +112,12 @@ p, li { white-space: pre-wrap; } true + + true + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + From d0104e03645fcd13c05685e9c47c87694890db09 Mon Sep 17 00:00:00 2001 From: drbob Date: Sat, 8 Aug 2020 15:52:31 +1000 Subject: [PATCH 72/95] Get Republishing Pulses working * Copy Original Pulse data for Republished Pulses * Add LHS | to indicate republish * Update Ref Icon in PulseTopLevel * Add FollowParent button in PulseTopLevel * display republished pulses as part of PulseFocus view --- .../src/gui/TheWire/PulseAddDialog.cpp | 12 +++++++ .../src/gui/TheWire/PulseMessage.cpp | 4 +++ .../src/gui/TheWire/PulseMessage.ui | 34 +++++++++++++++++-- .../src/gui/TheWire/PulseTopLevel.cpp | 19 ++++++++++- .../src/gui/TheWire/PulseTopLevel.ui | 34 ++++++++++++++++++- .../src/gui/TheWire/PulseViewItem.cpp | 23 +++++++++++++ .../src/gui/TheWire/PulseViewItem.h | 1 + retroshare-gui/src/gui/TheWire/WireDialog.cpp | 20 +++++++++++ 8 files changed, 142 insertions(+), 5 deletions(-) diff --git a/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp b/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp index 41ad2be75..dc09a11f1 100644 --- a/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseAddDialog.cpp @@ -302,6 +302,18 @@ void PulseAddDialog::postReplyPulse() pPulse->mImage3 = mImage3; pPulse->mImage4 = mImage4; + if (mReplyType & WIRE_PULSE_TYPE_REPUBLISH) { + // Copy details from parent, and override + pPulse->mSentiment = mReplyToPulse.mSentiment; + pPulse->mPulseText = mReplyToPulse.mPulseText; + + // Copy images. + pPulse->mImage1 = mReplyToPulse.mImage1; + pPulse->mImage2 = mReplyToPulse.mImage2; + pPulse->mImage3 = mReplyToPulse.mImage3; + pPulse->mImage4 = mReplyToPulse.mImage4; + } + // this should be in async thread, so doesn't block UI thread. if (!rsWire->createReplyPulse(mReplyToPulse.mMeta.mGroupId, mReplyToPulse.mMeta.mOrigMsgId, diff --git a/retroshare-gui/src/gui/TheWire/PulseMessage.cpp b/retroshare-gui/src/gui/TheWire/PulseMessage.cpp index 0cf986b86..91af09b3a 100644 --- a/retroshare-gui/src/gui/TheWire/PulseMessage.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseMessage.cpp @@ -36,6 +36,10 @@ void PulseMessage::setup(RsWirePulseSPtr pulse) setMessage(QString::fromStdString(pulse->mPulseText)); + // show indent if republish (both RESPONSE or REF) + bool showIndent = (pulse->mPulseType & WIRE_PULSE_TYPE_REPUBLISH); + widget_indent->setVisible(showIndent); + // setup images. int width = 256; int height = 128; diff --git a/retroshare-gui/src/gui/TheWire/PulseMessage.ui b/retroshare-gui/src/gui/TheWire/PulseMessage.ui index a85f602c6..a1ce9831d 100644 --- a/retroshare-gui/src/gui/TheWire/PulseMessage.ui +++ b/retroshare-gui/src/gui/TheWire/PulseMessage.ui @@ -13,11 +13,39 @@ Form - - + + + + + true + + + + + + + 20 + 0 + + + + QFrame::Plain + + + 5 + + + Qt::Vertical + + + + + + + - + QFrame::StyledPanel diff --git a/retroshare-gui/src/gui/TheWire/PulseTopLevel.cpp b/retroshare-gui/src/gui/TheWire/PulseTopLevel.cpp index d66b90eb3..859a4d735 100644 --- a/retroshare-gui/src/gui/TheWire/PulseTopLevel.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseTopLevel.cpp @@ -48,6 +48,7 @@ void PulseTopLevel::setup() connect(toolButton_viewGroup, SIGNAL(clicked()), this, SLOT(actionViewGroup())); connect(toolButton_viewParent, SIGNAL(clicked()), this, SLOT(actionViewParent())); connect(toolButton_follow, SIGNAL(clicked()), this, SLOT(actionFollow())); + connect(toolButton_followParent, SIGNAL(clicked()), this, SLOT(actionFollowParent())); // connect(toolButton_rate, SIGNAL(clicked()), this, SLOT(rate())); connect(toolButton_reply, SIGNAL(clicked()), this, SLOT(actionReply())); @@ -122,12 +123,28 @@ void PulseTopLevel::setReferenceString(QString ref) else { label_reference->setText(ref); + + // set ref icon + if (mPulse->mPulseType & WIRE_PULSE_TYPE_REPUBLISH) { + label_reficon->setPixmap(QPixmap(":/images/retweet.png")); + } else { + label_reficon->setPixmap(QPixmap(":/images/reply.png")); + } } if (mPulse->mRefGroupPtr) { - toolButton_viewParent->setVisible(true); + if (mPulse->mRefGroupPtr->mMeta.mSubscribeFlags & + (GXS_SERV::GROUP_SUBSCRIBE_ADMIN | + GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED)) { + toolButton_viewParent->setVisible(true); + toolButton_followParent->setVisible(false); + } else { + toolButton_viewParent->setVisible(false); + toolButton_followParent->setVisible(true); + } } else { toolButton_viewParent->setVisible(false); + toolButton_followParent->setVisible(false); } } diff --git a/retroshare-gui/src/gui/TheWire/PulseTopLevel.ui b/retroshare-gui/src/gui/TheWire/PulseTopLevel.ui index 884300c64..77d32218a 100644 --- a/retroshare-gui/src/gui/TheWire/PulseTopLevel.ui +++ b/retroshare-gui/src/gui/TheWire/PulseTopLevel.ui @@ -91,8 +91,20 @@ border-radius: 10px} 0 + + + 20 + 20 + + - icn + + + + :/images/reply.png + + + true @@ -123,6 +135,26 @@ border-radius: 10px} + + + + follow Parent Group + + + ... + + + + :/images/invite.png:/images/invite.png + + + + 24 + 24 + + + + diff --git a/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp b/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp index 3a42f5ba9..12568dc49 100644 --- a/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseViewItem.cpp @@ -201,6 +201,29 @@ void PulseDataItem::actionFollow() } } +void PulseDataItem::actionFollowParent() +{ + std::cerr << "PulseDataItem::actionFollowParent()"; + std::cerr << std::endl; + + RsGxsGroupId groupId; + if (mPulse->mPulseType & WIRE_PULSE_TYPE_REFERENCE) { + std::cerr << "PulseDataItem::actionFollowParent() REF following Group: "; + std::cerr << mPulse->mMeta.mGroupId; + std::cerr << std::endl; + groupId = mPulse->mMeta.mGroupId; + } else { + std::cerr << "PulseDataItem::actionFollowParent() RESPONSE following RefGroup: "; + std::cerr << mPulse->mRefGroupId; + std::cerr << std::endl; + groupId = mPulse->mRefGroupId; + } + + if (mHolder) { + mHolder->PVHfollow(groupId); + } +} + void PulseDataItem::actionRate() { std::cerr << "PulseDataItem::actionRate()"; diff --git a/retroshare-gui/src/gui/TheWire/PulseViewItem.h b/retroshare-gui/src/gui/TheWire/PulseViewItem.h index 549c2d34a..bee96f14b 100644 --- a/retroshare-gui/src/gui/TheWire/PulseViewItem.h +++ b/retroshare-gui/src/gui/TheWire/PulseViewItem.h @@ -112,6 +112,7 @@ private slots: void actionViewPulse(); void actionFollow(); + void actionFollowParent(); void actionRate(); // Action interfaces -------------------------- diff --git a/retroshare-gui/src/gui/TheWire/WireDialog.cpp b/retroshare-gui/src/gui/TheWire/WireDialog.cpp index cc0e3d840..06fa6ba6c 100644 --- a/retroshare-gui/src/gui/TheWire/WireDialog.cpp +++ b/retroshare-gui/src/gui/TheWire/WireDialog.cpp @@ -819,6 +819,26 @@ void WireDialog::postPulseFocus(RsWirePulseSPtr pPulse) addTwitterView(new PulseReplySeperator()); } + + // Add big separator, and republishes. + if (pPulse->mReplies.size() > 0 && pPulse->mRepublishes.size() > 0) + { + addTwitterView(new PulseReplySeperator()); + addTwitterView(new PulseReplySeperator()); + } + + for(it = pPulse->mRepublishes.begin(); it != pPulse->mRepublishes.end(); it++) + { + RsWirePulseSPtr repub = *it; + + PulseReply *firstRepub = new PulseReply(this, repub); + firstRepub->showReplyLine(false); + + addTwitterView(firstRepub); + addTwitterView(new PulseReplySeperator()); + } + + } void WireDialog::requestGroupFocus(const RsGxsGroupId groupId) From d38e7d2e703e6ad4d51045fa3c5457d2b72fb685 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Sat, 8 Aug 2020 15:05:05 +0200 Subject: [PATCH 73/95] Windows build environment - Use date of last git commit instead of current date for filename - Added download of Tor installation - Added section Tor to installer --- .../Windows/build/build-installer.bat | 9 ++++++ build_scripts/Windows/build/git-log.bat | 20 +++--------- build_scripts/Windows/build/pack.bat | 27 ++++++---------- build_scripts/Windows/env/env.bat | 1 + .../Windows/env/tools/prepare-tools.bat | 25 +++++++++++++++ .../Windows/installer/lang/ca_ES.nsh | 2 ++ build_scripts/Windows/installer/lang/de.nsh | 2 ++ build_scripts/Windows/installer/lang/en.nsh | 2 ++ build_scripts/Windows/installer/lang/es.nsh | 2 ++ build_scripts/Windows/installer/lang/fr.nsh | 2 ++ build_scripts/Windows/installer/lang/pl.nsh | 2 ++ build_scripts/Windows/installer/lang/ru.nsh | 2 ++ build_scripts/Windows/installer/lang/tr.nsh | 2 ++ build_scripts/Windows/installer/lang/ts/en.ts | 14 ++++++++ .../Windows/installer/lang/zh_CN.nsh | 2 ++ .../Windows/installer/retroshare-Qt5.nsi | 23 +++++++++++-- build_scripts/Windows/tools/get-git-ref.bat | 2 +- build_scripts/Windows/tools/get-rs-date.bat | 32 +++++++++++++++++++ 18 files changed, 135 insertions(+), 36 deletions(-) create mode 100644 build_scripts/Windows/tools/get-rs-date.bat diff --git a/build_scripts/Windows/build/build-installer.bat b/build_scripts/Windows/build/build-installer.bat index 4a011025c..b34e76157 100644 --- a/build_scripts/Windows/build/build-installer.bat +++ b/build_scripts/Windows/build/build-installer.bat @@ -21,6 +21,12 @@ if not exist "%BuildLibsPath%\libs\gcc-version" %cecho% error "Cannot get gcc ve set /P LibsGCCVersion=<"%BuildLibsPath%\libs\gcc-version" if "%LibsGCCVersion%" NEQ "%GCCVersion%" %cecho% error "Please use correct version of external libraries. (gcc %GCCVersion% ^<^> libs %LibsGCCVersion%)." & exit /B 1 +:: Get date +call "%ToolsPath%\get-rs-date.bat" "%SourcePath%" RsDate +if errorlevel 1 %cecho% error "Could not get date."& goto error + +if "%RsDate%"=="" %cecho% error "Could not get date."& goto error + :: Build defines for script set NSIS_PARAM= @@ -31,6 +37,9 @@ set NSIS_PARAM=%NSIS_PARAM% /DOUTDIR="%RsPackPath%" set NSIS_PARAM=%NSIS_PARAM% /DINSTALLERADD="%RsArchiveAdd%" set NSIS_PARAM=%NSIS_PARAM% /DEXTERNAL_LIB_DIR="%BuildLibsPath%\libs" set NSIS_PARAM=%NSIS_PARAM% /DARCHITECTURE="%GCCArchitecture%" +set NSIS_PARAM=%NSIS_PARAM% /DDATE="%RsDate%" + +if exist "%EnvTorPath%\Tor\tor.exe" set NSIS_PARAM=%NSIS_PARAM% /DTORDIR="%EnvTorPath%\Tor" :: Get compiled version call "%ToolsPath%\get-rs-version.bat" "%RsBuildPath%\retroshare-gui\src\%RsBuildConfig%\retroshare.exe" RsVersion diff --git a/build_scripts/Windows/build/git-log.bat b/build_scripts/Windows/build/git-log.bat index f67667b22..4d479fc3f 100644 --- a/build_scripts/Windows/build/git-log.bat +++ b/build_scripts/Windows/build/git-log.bat @@ -17,16 +17,8 @@ set GitPath= call "%ToolsPath%\find-in-path.bat" GitPath git.exe if "%GitPath%"=="" echo Git executable not found in PATH.& exit /B 1 -:: Get compiled revision -set GetRsVersion=%SourcePath%\build_scripts\Windows\tools\get-rs-version.bat -if not exist "%GetRsVersion%" ( - echo File not found - echo %GetRsVersion% - exit /B 1 -) - :: Get compiled version -call "%GetRsVersion%" "%RsBuildPath%\retroshare-gui\src\%RsBuildConfig%\retroshare.exe" RsVersion +call "%ToolsPath%\get-rs-version.bat" "%RsBuildPath%\retroshare-gui\src\%RsBuildConfig%\retroshare.exe" RsVersion if errorlevel 1 %cecho% error "Version not found."& goto error if "%RsVersion.Major%"=="" %cecho% error "Major version not found."& goto error @@ -36,13 +28,11 @@ if "%RsVersion.Extra%"=="" %cecho% error "Extra number not found".& goto error set RsVersion=%RsVersion.Major%.%RsVersion.Minor%.%RsVersion.Mini% -:: Check WMIC is available -wmic.exe alias /? >nul 2>&1 || echo WMIC is not available.&& exit /B 1 +:: Get date +call "%ToolsPath%\get-rs-date.bat" "%SourcePath%" RsDate +if errorlevel 1 %cecho% error "Could not get date."& goto error -:: Use WMIC to retrieve date in format YYYYMMDD -set RsDate= -for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set RsDate=%%I -set RsDate=%RsDate:~0,4%%RsDate:~4,2%%RsDate:~6,2% +if "%RsDate%"=="" %cecho% error "Could not get date."& goto error :: Get last revision set RsLastRefFile=%BuildPath%\Qt-%QtVersion%-%GCCArchitecture%%RsType%-%RsBuildConfig%-LastRef.txt diff --git a/build_scripts/Windows/build/pack.bat b/build_scripts/Windows/build/pack.bat index 3d0401f60..c7208a799 100644 --- a/build_scripts/Windows/build/pack.bat +++ b/build_scripts/Windows/build/pack.bat @@ -29,16 +29,8 @@ if exist "%RsDeployPath%" rmdir /S /Q "%RsDeployPath%" :: Check compilation if not exist "%RsBuildPath%\Makefile" echo Project is not compiled.& goto error -:: Get compiled revision -set GetRsVersion=%SourcePath%\build_scripts\Windows\tools\get-rs-version.bat -if not exist "%GetRsVersion%" ( - %cecho% error "File not found" - echo %GetRsVersion% - goto error -) - :: Get compiled version -call "%GetRsVersion%" "%RsBuildPath%\retroshare-gui\src\%RsBuildConfig%\retroshare.exe" RsVersion +call "%ToolsPath%\get-rs-version.bat" "%RsBuildPath%\retroshare-gui\src\%RsBuildConfig%\retroshare.exe" RsVersion if errorlevel 1 %cecho% error "Version not found."& goto error if "%RsVersion.Major%"=="" %cecho% error "Major version not found."& goto error @@ -48,18 +40,17 @@ if "%RsVersion.Extra%"=="" %cecho% error "Extra number not found".& goto error set RsVersion=%RsVersion.Major%.%RsVersion.Minor%.%RsVersion.Mini% -:: Check WMIC is available -wmic.exe alias /? >nul 2>&1 || echo WMIC is not available.&& goto error +:: Get date +call "%ToolsPath%\get-rs-date.bat" "%SourcePath%" RsDate +if errorlevel 1 %cecho% error "Could not get date."& goto error -:: Use WMIC to retrieve date in format YYYYMMDD -set RsDate= -for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set RsDate=%%I -set RsDate=%RsDate:~0,4%%RsDate:~4,2%%RsDate:~6,2% +if "%RsDate%"=="" %cecho% error "Could not get date."& goto error +rem Tor if "%ParamTor%"=="1" ( :: Check for tor executable - if not exist "%EnvDownloadPath%\tor\Tor\tor.exe" ( - %cecho% error "Tor binary not found. Please download Tor Expert Bundle from\nhttps://www.torproject.org/download/download.html.en\nand unpack to\n%EnvDownloadPath:\=\\%\\tor" + if not exist "%EnvTorPath%\Tor\tor.exe" ( + %cecho% error "Tor binary not found. Please download Tor Expert Bundle from\nhttps://www.torproject.org/download/download.html.en\nand unpack to\n%EnvTorPath:\=\\%" goto error ) ) @@ -176,7 +167,7 @@ if exist "%SourcePath%\libresapi\src\webui" ( if "%ParamTor%"=="1" ( echo copy tor - echo n | copy /-y "%EnvDownloadPath%\tor\Tor\*.*" "%RsDeployPath%" %Quite% + echo n | copy /-y "%EnvTorPath%\*.*" "%RsDeployPath%" %Quite% ) rem pack files diff --git a/build_scripts/Windows/env/env.bat b/build_scripts/Windows/env/env.bat index 4a0b8953d..b19346c6e 100644 --- a/build_scripts/Windows/env/env.bat +++ b/build_scripts/Windows/env/env.bat @@ -6,6 +6,7 @@ set EnvRootPath=%RootPath%\%SourceName%-env set EnvToolsPath=%EnvRootPath%\tools set EnvTempPath=%EnvRootPath%\tmp set EnvDownloadPath=%EnvRootPath%\download +set EnvTorPath=%EnvDownloadPath%\tor set EnvSevenZipExe=%EnvToolsPath%\7z.exe set EnvJomExe=%EnvToolsPath%\jom.exe diff --git a/build_scripts/Windows/env/tools/prepare-tools.bat b/build_scripts/Windows/env/tools/prepare-tools.bat index ea124a70e..4230c3dfa 100644 --- a/build_scripts/Windows/env/tools/prepare-tools.bat +++ b/build_scripts/Windows/env/tools/prepare-tools.bat @@ -22,6 +22,8 @@ set CMakeVersion=cmake-3.1.0-win32-x86 set CMakeInstall=%CMakeVersion%.zip set CMakeUrl=http://www.cmake.org/files/v3.1/%CMakeInstall% set CMakeInstallPath=%EnvToolsPath%\cmake +set TorProjectUrl=https://www.torproject.org +set TorDownloadIndexUrl=%TorProjectUrl%/download/tor if not exist "%EnvToolsPath%\7z.exe" ( call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" @@ -170,10 +172,33 @@ if not exist "%CMakeInstallPath%\bin\cmake.exe" ( call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" ) +rem Tor +rem Get download link and filename from download page +mkdir "%EnvTempPath%" +call "%ToolsPath%\download-file.bat" "%TorDownloadIndexUrl%" "%EnvTempPath%\index.html" +if not exist "%EnvTempPath%\index.html" %cecho% error "Cannot download Tor installation" & goto error + +for /F "tokens=1,2 delims= " %%A in ('%EnvSedExe% -r -n -e"s/.*href=\"^(.*^)^(tor-win32.*\.zip^)\".*/\2 \1\2/p" "%EnvTempPath%\index.html"') do set TorInstall=%%A& set TorDownloadUrl=%TorProjectUrl%%%B +call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" +if "%TorInstall%"=="" %cecho% error "Cannot download Tor installation" & goto error +if "%TorDownloadUrl%"=="" %cecho% error "Cannot download Tor installation" & goto error + +if not exist "%EnvDownloadPath%\%TorInstall%" call "%ToolsPath%\remove-dir.bat" "%EnvTorPath%" +if not exist "%EnvTorPath%\Tor\tor.exe" ( + %cecho% info "Download Tor installation" + + if not exist "%EnvDownloadPath%\%TorInstall%" call "%ToolsPath%\download-file.bat" "%TorDownloadUrl%" "%EnvDownloadPath%\%TorInstall%" + if not exist "%EnvDownloadPath%\%TorInstall%" %cecho% error "Cannot download Tor installation" & goto error + + %cecho% info "Unpack Tor" + "%EnvSevenZipExe%" x -o"%EnvTorPath%" "%EnvDownloadPath%\%TorInstall%" +) + :exit endlocal exit /B 0 :error +call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" endlocal exit /B 1 diff --git a/build_scripts/Windows/installer/lang/ca_ES.nsh b/build_scripts/Windows/installer/lang/ca_ES.nsh index acb11b5a4..74f92ffe5 100644 --- a/build_scripts/Windows/installer/lang/ca_ES.nsh +++ b/build_scripts/Windows/installer/lang/ca_ES.nsh @@ -1,5 +1,7 @@ !insertmacro LANG_STRING Section_Main "${APPNAME}" !insertmacro LANG_STRING Section_Main_Desc "Instal·la ${APPNAME} i els components necessaris." +!insertmacro LANG_STRING Section_Tor "Tor" +!insertmacro LANG_STRING Section_Tor_Desc "Installs Tor." !insertmacro LANG_STRING Section_Data "Pells" !insertmacro LANG_STRING Section_Data_Desc "Instal·la pells." !insertmacro LANG_STRING Section_Shortcuts "Icones d'accés directe" diff --git a/build_scripts/Windows/installer/lang/de.nsh b/build_scripts/Windows/installer/lang/de.nsh index c5323f523..663e9e786 100644 --- a/build_scripts/Windows/installer/lang/de.nsh +++ b/build_scripts/Windows/installer/lang/de.nsh @@ -1,5 +1,7 @@ !insertmacro LANG_STRING Section_Main "${APPNAME}" !insertmacro LANG_STRING Section_Main_Desc "Installiert ${APPNAME} und die benötigten Komponenten." +!insertmacro LANG_STRING Section_Tor "Tor" +!insertmacro LANG_STRING Section_Tor_Desc "Installiert Tor." !insertmacro LANG_STRING Section_Data "Skins" !insertmacro LANG_STRING Section_Data_Desc "Skins installieren." !insertmacro LANG_STRING Section_Shortcuts "Verknüpfungssymbole" diff --git a/build_scripts/Windows/installer/lang/en.nsh b/build_scripts/Windows/installer/lang/en.nsh index b01f43baa..a709eec24 100644 --- a/build_scripts/Windows/installer/lang/en.nsh +++ b/build_scripts/Windows/installer/lang/en.nsh @@ -1,5 +1,7 @@ !insertmacro LANG_STRING Section_Main "${APPNAME}" !insertmacro LANG_STRING Section_Main_Desc "Installs ${APPNAME} and required components." +!insertmacro LANG_STRING Section_Tor "Tor" +!insertmacro LANG_STRING Section_Tor_Desc "Installs Tor." !insertmacro LANG_STRING Section_Data "Skins" !insertmacro LANG_STRING Section_Data_Desc "Installs skins." !insertmacro LANG_STRING Section_Shortcuts "Shortcut icons" diff --git a/build_scripts/Windows/installer/lang/es.nsh b/build_scripts/Windows/installer/lang/es.nsh index 68900ec62..66021c14e 100644 --- a/build_scripts/Windows/installer/lang/es.nsh +++ b/build_scripts/Windows/installer/lang/es.nsh @@ -1,5 +1,7 @@ !insertmacro LANG_STRING Section_Main "${APPNAME}" !insertmacro LANG_STRING Section_Main_Desc "Instala ${APPNAME} y los componentes requeridos." +!insertmacro LANG_STRING Section_Tor "Tor" +!insertmacro LANG_STRING Section_Tor_Desc "Installs Tor." !insertmacro LANG_STRING Section_Data "Coberturas (skins)" !insertmacro LANG_STRING Section_Data_Desc "Instalar coberturas" !insertmacro LANG_STRING Section_Shortcuts "Iconos de accesos directos" diff --git a/build_scripts/Windows/installer/lang/fr.nsh b/build_scripts/Windows/installer/lang/fr.nsh index d4c797833..680746da0 100644 --- a/build_scripts/Windows/installer/lang/fr.nsh +++ b/build_scripts/Windows/installer/lang/fr.nsh @@ -1,5 +1,7 @@ !insertmacro LANG_STRING Section_Main "${APPNAME}" !insertmacro LANG_STRING Section_Main_Desc "Installe ${APPNAME} et les composants requis." +!insertmacro LANG_STRING Section_Tor "Tor" +!insertmacro LANG_STRING Section_Tor_Desc "Installs Tor." !insertmacro LANG_STRING Section_Data "Habillages" !insertmacro LANG_STRING Section_Data_Desc "Installe des habillages." !insertmacro LANG_STRING Section_Shortcuts "Icônes de raccourci" diff --git a/build_scripts/Windows/installer/lang/pl.nsh b/build_scripts/Windows/installer/lang/pl.nsh index 9f6d4305e..53fc42934 100644 --- a/build_scripts/Windows/installer/lang/pl.nsh +++ b/build_scripts/Windows/installer/lang/pl.nsh @@ -1,5 +1,7 @@ !insertmacro LANG_STRING Section_Main "${APPNAME}" !insertmacro LANG_STRING Section_Main_Desc "Instaluje ${APPNAME} oraz wymagane komponenty." +!insertmacro LANG_STRING Section_Tor "Tor" +!insertmacro LANG_STRING Section_Tor_Desc "Installs Tor." !insertmacro LANG_STRING Section_Data "Skórki" !insertmacro LANG_STRING Section_Data_Desc "Instaluje skórki." !insertmacro LANG_STRING Section_Shortcuts "Ikony skrótów" diff --git a/build_scripts/Windows/installer/lang/ru.nsh b/build_scripts/Windows/installer/lang/ru.nsh index 09c578cb8..b8ba2df89 100644 --- a/build_scripts/Windows/installer/lang/ru.nsh +++ b/build_scripts/Windows/installer/lang/ru.nsh @@ -1,5 +1,7 @@ !insertmacro LANG_STRING Section_Main "${APPNAME}" !insertmacro LANG_STRING Section_Main_Desc "Установка ${APPNAME} и необходимых компонентов." +!insertmacro LANG_STRING Section_Tor "Tor" +!insertmacro LANG_STRING Section_Tor_Desc "Installs Tor." !insertmacro LANG_STRING Section_Data "Оболочки" !insertmacro LANG_STRING Section_Data_Desc "Установка оболочек." !insertmacro LANG_STRING Section_Shortcuts "Ярлыки" diff --git a/build_scripts/Windows/installer/lang/tr.nsh b/build_scripts/Windows/installer/lang/tr.nsh index f893ac076..85abeaac2 100644 --- a/build_scripts/Windows/installer/lang/tr.nsh +++ b/build_scripts/Windows/installer/lang/tr.nsh @@ -1,5 +1,7 @@ !insertmacro LANG_STRING Section_Main "${APPNAME}" !insertmacro LANG_STRING Section_Main_Desc "${APPNAME} ve gerekli bileşenleri kurar." +!insertmacro LANG_STRING Section_Tor "Tor" +!insertmacro LANG_STRING Section_Tor_Desc "Installs Tor." !insertmacro LANG_STRING Section_Data "Temalar" !insertmacro LANG_STRING Section_Data_Desc "Tema yükleyin." !insertmacro LANG_STRING Section_Shortcuts "Kısayol simgeleri" diff --git a/build_scripts/Windows/installer/lang/ts/en.ts b/build_scripts/Windows/installer/lang/ts/en.ts index 763636d3d..e95f6939f 100644 --- a/build_scripts/Windows/installer/lang/ts/en.ts +++ b/build_scripts/Windows/installer/lang/ts/en.ts @@ -8,6 +8,20 @@ + + Section_Tor + + Tor + + + + + Section_Tor_Desc + + Installs Tor. + + + Section_Data diff --git a/build_scripts/Windows/installer/lang/zh_CN.nsh b/build_scripts/Windows/installer/lang/zh_CN.nsh index 1075f7a1a..330de33ab 100644 --- a/build_scripts/Windows/installer/lang/zh_CN.nsh +++ b/build_scripts/Windows/installer/lang/zh_CN.nsh @@ -1,5 +1,7 @@ !insertmacro LANG_STRING Section_Main "${APPNAME}" !insertmacro LANG_STRING Section_Main_Desc "Installs ${APPNAME} and required components." +!insertmacro LANG_STRING Section_Tor "Tor" +!insertmacro LANG_STRING Section_Tor_Desc "Installs Tor." !insertmacro LANG_STRING Section_Data "皮肤" !insertmacro LANG_STRING Section_Data_Desc "安装皮肤" !insertmacro LANG_STRING Section_Shortcuts "快捷方式图标" diff --git a/build_scripts/Windows/installer/retroshare-Qt5.nsi b/build_scripts/Windows/installer/retroshare-Qt5.nsi index d80368a5b..ba4f3d0d2 100644 --- a/build_scripts/Windows/installer/retroshare-Qt5.nsi +++ b/build_scripts/Windows/installer/retroshare-Qt5.nsi @@ -56,7 +56,17 @@ !endif # Date -!define /date Date "%Y%m%d" +!ifndef DATE +!define /date DATE "%Y%m%d" +!endif + +# Tor +!ifdef TORDIR +${!defineifexist} TOR_EXISTS "${TORDIR}\tor.exe" +!ifndef TOR_EXISTS +!error "tor.exe not found" +!endif +!endif # Application name and version !define APPNAME "RetroShare" @@ -78,7 +88,7 @@ # Main Install settings Name "${APPNAMEANDVERSION}" InstallDirRegKey HKLM "Software\${APPNAME}" "" -OutFile "${OUTDIR_}RetroShare-${VERSION}-${Date}-${REVISION}-Qt-${QTVERSION}-${ARCHITECTURE}${INSTALLERADD}-setup.exe" +OutFile "${OUTDIR_}RetroShare-${VERSION}-${DATE}-${REVISION}-Qt-${QTVERSION}-${ARCHITECTURE}${INSTALLERADD}-setup.exe" BrandingText "${APPNAMEANDVERSION}" RequestExecutionlevel highest # Use compression @@ -271,6 +281,14 @@ Section $(Section_Main) Section_Main File /r "${SOURCEDIR}\retroshare-gui\src\license\*.*" SectionEnd +# Tor +!ifdef TOR_EXISTS + Section /o $(Section_Tor) Section_Tor + SetOutPath "$INSTDIR" + File /r "${TORDIR}\*" + SectionEnd +!endif + # Plugins ${!defineifexist} PLUGIN_FEEDREADER_EXISTS "${RELEASEDIR}\plugins\FeedReader\release\FeedReader.dll" ${!defineifexist} PLUGIN_VOIP_EXISTS "${RELEASEDIR}\plugins\VOIP\release\VOIP.dll" @@ -385,6 +403,7 @@ SectionEnd !insertmacro MUI_DESCRIPTION_TEXT ${Section_Plugin_VOIP} $(Section_Plugin_VOIP_Desc) ; !insertmacro MUI_DESCRIPTION_TEXT ${Section_Link} $(Section_Link_Desc) !insertmacro MUI_DESCRIPTION_TEXT ${Section_AutoStart} $(Section_AutoStart_Desc) + !insertmacro MUI_DESCRIPTION_TEXT ${Section_Tor} $(Section_Tor_Desc) !insertmacro MUI_FUNCTION_DESCRIPTION_END # Uninstall diff --git a/build_scripts/Windows/tools/get-git-ref.bat b/build_scripts/Windows/tools/get-git-ref.bat index f8f6efdeb..f0047e486 100644 --- a/build_scripts/Windows/tools/get-git-ref.bat +++ b/build_scripts/Windows/tools/get-git-ref.bat @@ -18,7 +18,7 @@ call "%~dp0find-in-path.bat" GitPath git.exe if "%GitPath%"=="" ( echo. echo Git executable not found in PATH. - goto exit + exit /B 1 ) set GitParameter= diff --git a/build_scripts/Windows/tools/get-rs-date.bat b/build_scripts/Windows/tools/get-rs-date.bat new file mode 100644 index 000000000..6fecc48f9 --- /dev/null +++ b/build_scripts/Windows/tools/get-rs-date.bat @@ -0,0 +1,32 @@ +REM Usage: +REM call get-rs-date.bat SourcePath Variable + +setlocal + +set SourcePath=%~1 +set Variable=%~2 +if "%Variable%"=="" ( + echo. + echo Parameter error + exit /B 1 +) + +:: Check git executable +set GitPath= +call "%~dp0find-in-path.bat" GitPath git.exe +if "%GitPath%"=="" ( + echo. + echo Git executable not found in PATH. + exit /B 1 +) + +set Date= + +pushd "%SourcePath%" +rem This doesn't work: git log -1 --date=format:"%Y%m%d" --format="%ad" +for /F "tokens=1,2,3* delims=-" %%A in ('git log -1 --date^=short --format^="%%ad"') do set Date=%%A%%B%%C +popd + +:exit +endlocal & set %Variable%=%Date% +exit /B 0 From 2a5b35fbcaea5d7dff0c412d5ce054d3149b45a7 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Mon, 10 Aug 2020 03:23:49 +0200 Subject: [PATCH 74/95] Merge branch 'master' of github.com:RetroShare/RetroShare --- .../src/gui/connect/ConfCertDialog.ui | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/retroshare-gui/src/gui/connect/ConfCertDialog.ui b/retroshare-gui/src/gui/connect/ConfCertDialog.ui index 5862464c7..5c6fdabde 100644 --- a/retroshare-gui/src/gui/connect/ConfCertDialog.ui +++ b/retroshare-gui/src/gui/connect/ConfCertDialog.ui @@ -446,6 +446,27 @@ 1 + + stabWidget + pgpfingerprint + peerid + loc + statusline + crypto_info + lastcontact + version + statusmessage + localAddress + localPort + extAddress + extPort + dynDNS + ipAddressList + userCertificateText + _shouldAddSignatures_CB + _shortFormat_CB + _includeIPHistory_CB + From 1760f819c8202f7f20b4c0ef12bc8dc756f101d7 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Mon, 10 Aug 2020 22:12:13 +0200 Subject: [PATCH 75/95] Added git update of submodule supportlibs/udp-discovery-cpp for MinGW compile --- libretroshare/src/libretroshare.pro | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 4141484f0..ab9a4c437 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -858,14 +858,14 @@ rs_jsonapi { genrestbedlib.output = $$clean_path($${RESTBED_BUILD_PATH}/librestbed.a) genrestbedlib.CONFIG += target_predeps combine genrestbedlib.variable_out = PRE_TARGETDEPS - genrestbedlib.commands = \ - cd $${RS_SRC_PATH} && ( \ - git submodule update --init supportlibs/restbed ; \ - cd $${RESTBED_SRC_PATH} ; \ - git submodule update --init dependency/asio ; \ - git submodule update --init dependency/catch ; \ - git submodule update --init dependency/kashmir ; \ - true ) && \ + genrestbedlib.commands = \ + cd $${RS_SRC_PATH} && ( \ + git submodule update --init supportlibs/restbed ; \ + cd $${RESTBED_SRC_PATH} ; \ + git submodule update --init dependency/asio ; \ + git submodule update --init dependency/catch ; \ + git submodule update --init dependency/kashmir ; \ + true ) && \ mkdir -p $${RESTBED_BUILD_PATH} && cd $${RESTBED_BUILD_PATH} && \ cmake \ -DCMAKE_CXX_COMPILER=$$QMAKE_CXX \ @@ -962,8 +962,10 @@ rs_broadcast_discovery { udpdiscoverycpplib.output = $$clean_path($${UDP_DISCOVERY_BUILD_PATH}/libudp-discovery.a) udpdiscoverycpplib.CONFIG += target_predeps combine udpdiscoverycpplib.variable_out = PRE_TARGETDEPS - isEmpty(QMAKE_SH) { + win32-g++:isEmpty(QMAKE_SH) { udpdiscoverycpplib.commands = \ + cd $$shell_path($${RS_SRC_PATH}) $$escape_expand(\\n\\t) \ + git submodule update --init supportlibs/udp-discovery-cpp || cd . $$escape_expand(\\n\\t) \ $(CHK_DIR_EXISTS) $$shell_path($$UDP_DISCOVERY_BUILD_PATH) $(MKDIR) $$shell_path($${UDP_DISCOVERY_BUILD_PATH}) $$escape_expand(\\n\\t) } else { udpdiscoverycpplib.commands = \ From 4c4648e3e2c2e020cbc36609996e3fe7e4510107 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Mon, 10 Aug 2020 22:26:02 +0200 Subject: [PATCH 76/95] Fixed compile of jsonapi with MinGW --- libretroshare/src/libretroshare.pro | 45 ++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index ab9a4c437..05c5af436 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -852,12 +852,28 @@ rs_jsonapi { no_rs_cross_compiling { DUMMYRESTBEDINPUT = FORCE CMAKE_GENERATOR_OVERRIDE="" - win32-g++|win32-clang-g++:CMAKE_GENERATOR_OVERRIDE="-G \"MSYS Makefiles\"" + win32-g++|win32-clang-g++ { + isEmpty(QMAKE_SH) { + CMAKE_GENERATOR_OVERRIDE="-G \"MinGW Makefiles\"" + } else { + CMAKE_GENERATOR_OVERRIDE="-G \"MSYS Makefiles\"" + } + } genrestbedlib.name = Generating librestbed. genrestbedlib.input = DUMMYRESTBEDINPUT genrestbedlib.output = $$clean_path($${RESTBED_BUILD_PATH}/librestbed.a) genrestbedlib.CONFIG += target_predeps combine genrestbedlib.variable_out = PRE_TARGETDEPS + win32-g++:isEmpty(QMAKE_SH) { + genrestbedlib.commands = \ + cd $$shell_path($${RS_SRC_PATH}) $$escape_expand(\\n\\t) \ + git submodule update --init supportlibs/restbed || cd . $$escape_expand(\\n\\t) \ + cd $$shell_path($${RESTBED_SRC_PATH}) $$escape_expand(\\n\\t) \ + git submodule update --init dependency/asio || cd . $$escape_expand(\\n\\t) \ + git submodule update --init dependency/catch || cd . $$escape_expand(\\n\\t )\ + git submodule update --init dependency/kashmir || cd . $$escape_expand(\\n\\t) \ + $(CHK_DIR_EXISTS) $$shell_path($$UDP_DISCOVERY_BUILD_PATH) $(MKDIR) $$shell_path($${UDP_DISCOVERY_BUILD_PATH}) $$escape_expand(\\n\\t) + } else { genrestbedlib.commands = \ cd $${RS_SRC_PATH} && ( \ git submodule update --init supportlibs/restbed ; \ @@ -866,7 +882,10 @@ rs_jsonapi { git submodule update --init dependency/catch ; \ git submodule update --init dependency/kashmir ; \ true ) && \ - mkdir -p $${RESTBED_BUILD_PATH} && cd $${RESTBED_BUILD_PATH} && \ + mkdir -p $${RESTBED_BUILD_PATH} && + } + genrestbedlib.commands += \ + cd $$shell_path($${RESTBED_BUILD_PATH}) && \ cmake \ -DCMAKE_CXX_COMPILER=$$QMAKE_CXX \ \"-DCMAKE_CXX_FLAGS=$${QMAKE_CXXFLAGS}\" \ @@ -882,7 +901,7 @@ rs_jsonapi { genrestbedheader.output = $${RESTBED_HEADER_FILE} genrestbedheader.CONFIG += target_predeps no_link genrestbedheader.variable_out = HEADERS - genrestbedheader.commands = cd $${RESTBED_BUILD_PATH} && $(MAKE) install + genrestbedheader.commands = cd $$shell_path($${RESTBED_BUILD_PATH}) && $(MAKE) install QMAKE_EXTRA_COMPILERS += genrestbedheader } @@ -898,13 +917,19 @@ rs_jsonapi { genjsonapi.clean = $${WRAPPERS_INCL_FILE} $${WRAPPERS_REG_FILE} genjsonapi.CONFIG += target_predeps combine no_link genjsonapi.variable_out = HEADERS - genjsonapi.commands = \ - mkdir -p $${JSONAPI_GENERATOR_OUT} && \ - cp $${DOXIGEN_CONFIG_SRC} $${DOXIGEN_CONFIG_OUT} && \ - echo OUTPUT_DIRECTORY=$${JSONAPI_GENERATOR_OUT} >> $${DOXIGEN_CONFIG_OUT} && \ - echo INPUT=$${DOXIGEN_INPUT_DIRECTORY} >> $${DOXIGEN_CONFIG_OUT} && \ - doxygen $${DOXIGEN_CONFIG_OUT} && \ - $${JSONAPI_GENERATOR_EXE} $${JSONAPI_GENERATOR_SRC} $${JSONAPI_GENERATOR_OUT}; + win32-g++:isEmpty(QMAKE_SH) { + genjsonapi.commands = \ + $(CHK_DIR_EXISTS) $$shell_path($$JSONAPI_GENERATOR_OUT) $(MKDIR) $$shell_path($${JSONAPI_GENERATOR_OUT}) $$escape_expand(\\n\\t) + } else { + genjsonapi.commands = \ + mkdir -p $${JSONAPI_GENERATOR_OUT} && \ + cp $${DOXIGEN_CONFIG_SRC} $${DOXIGEN_CONFIG_OUT} && \ + echo OUTPUT_DIRECTORY=$${JSONAPI_GENERATOR_OUT} >> $${DOXIGEN_CONFIG_OUT} && \ + echo INPUT=$${DOXIGEN_INPUT_DIRECTORY} >> $${DOXIGEN_CONFIG_OUT} && \ + doxygen $${DOXIGEN_CONFIG_OUT} && + } + genjsonapi.commands += \ + $${JSONAPI_GENERATOR_EXE} $${JSONAPI_GENERATOR_SRC} $${JSONAPI_GENERATOR_OUT} QMAKE_EXTRA_COMPILERS += genjsonapi # Force recalculation of libretroshare dependencies see https://stackoverflow.com/a/47884045 From f85bf388d20095ded46a4a8e94322e7fc62e5094 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Tue, 11 Aug 2020 00:23:25 +0200 Subject: [PATCH 77/95] Enabled jsonapi in Windows build environment --- build_scripts/Windows/build.bat | 2 +- build_scripts/Windows/build/build.bat | 1 + build_scripts/Windows/build/env.bat | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/build_scripts/Windows/build.bat b/build_scripts/Windows/build.bat index 4f491d907..89179e22c 100644 --- a/build_scripts/Windows/build.bat +++ b/build_scripts/Windows/build.bat @@ -13,7 +13,7 @@ call "%~dp0build-libs\build-libs.bat" if errorlevel 1 %cecho% error "Failed to build libraries." & exit /B %ERRORLEVEL% %cecho% info "Build %SourceName%" -call "%~dp0build\build.bat" release autologin +call "%~dp0build\build.bat" release autologin jsonapi rem plugins if errorlevel 1 %cecho% error "Failed to build %SourceName%." & exit /B %ERRORLEVEL% diff --git a/build_scripts/Windows/build/build.bat b/build_scripts/Windows/build/build.bat index 12cb870db..6d1448750 100644 --- a/build_scripts/Windows/build/build.bat +++ b/build_scripts/Windows/build/build.bat @@ -51,6 +51,7 @@ title Build - %SourceName%-%RsBuildConfig% [qmake] set RS_QMAKE_CONFIG=%RsBuildConfig% if "%ParamAutologin%"=="1" set RS_QMAKE_CONFIG=%RS_QMAKE_CONFIG% rs_autologin +if "%ParamJsonApi%"=="1" set RS_QMAKE_CONFIG=%RS_QMAKE_CONFIG% rs_jsonapi if "%ParamPlugins%"=="1" set RS_QMAKE_CONFIG=%RS_QMAKE_CONFIG% retroshare_plugins qmake "%SourcePath%\RetroShare.pro" -r -spec win32-g++ "CONFIG+=%RS_QMAKE_CONFIG%" "EXTERNAL_LIB_DIR=%BuildLibsPath%\libs" diff --git a/build_scripts/Windows/build/env.bat b/build_scripts/Windows/build/env.bat index 32e4436ac..8547bfeef 100644 --- a/build_scripts/Windows/build/env.bat +++ b/build_scripts/Windows/build/env.bat @@ -3,6 +3,7 @@ set ParamRelease=0 set ParamDebug=0 set ParamAutologin=0 set ParamPlugins=0 +set ParamJsonApi=0 set ParamTor=0 set NonInteractive=0 @@ -15,6 +16,8 @@ if "%~1" NEQ "" ( set ParamDebug=1 ) else if "%%~a"=="autologin" ( set ParamAutologin=1 + ) else if "%%~a"=="jsonapi" ( + set ParamJsonApi=1 ) else if "%%~a"=="plugins" ( set ParamPlugins=1 ) else if "%%~a"=="tor" ( @@ -97,6 +100,7 @@ echo release^|debug Build release or debug version echo. echo Optional parameter (need clean when changed) echo autologin Build with autologin +echo jsonapi Build with jsonapi echo plugins Build plugins echo. echo Parameter for pack From 532c11404802ae332d0965a47c0c21665c942d4a Mon Sep 17 00:00:00 2001 From: thunder2 Date: Tue, 11 Aug 2020 11:41:10 +0200 Subject: [PATCH 78/95] Windows build environment - Fixed pack of tor bundle - Removed external tool jom.exe - Added parameter "singlethread" for build from MSYS2 build --- build_scripts/Windows/build/build.bat | 6 +----- build_scripts/Windows/build/env.bat | 6 ++++++ build_scripts/Windows/build/pack.bat | 2 +- build_scripts/Windows/env/env.bat | 1 - .../Windows/env/tools/prepare-tools.bat | 18 ------------------ 5 files changed, 8 insertions(+), 25 deletions(-) diff --git a/build_scripts/Windows/build/build.bat b/build_scripts/Windows/build/build.bat index 6d1448750..a7f02027f 100644 --- a/build_scripts/Windows/build/build.bat +++ b/build_scripts/Windows/build/build.bat @@ -63,11 +63,7 @@ echo. title Build - %SourceName%-%RsBuildConfig% [make] -if exist "%EnvJomExe%" ( - "%EnvJomExe%" -) else ( - mingw32-make -) +mingw32-make -j %CoreCount% if errorlevel 1 goto error echo. diff --git a/build_scripts/Windows/build/env.bat b/build_scripts/Windows/build/env.bat index 8547bfeef..100fa32cd 100644 --- a/build_scripts/Windows/build/env.bat +++ b/build_scripts/Windows/build/env.bat @@ -6,6 +6,7 @@ set ParamPlugins=0 set ParamJsonApi=0 set ParamTor=0 set NonInteractive=0 +set CoreCount=%NUMBER_OF_PROCESSORS% :parameter_loop if "%~1" NEQ "" ( @@ -24,6 +25,8 @@ if "%~1" NEQ "" ( set ParamTor=1 ) else if "%%~a"=="non-interactive" ( set NonInteractive=1 + ) else if "%%~a"=="singlethread" ( + set CoreCount=1 ) else ( echo. echo Unknown parameter %1 @@ -103,6 +106,9 @@ echo autologin Build with autologin echo jsonapi Build with jsonapi echo plugins Build plugins echo. +echo Optional parameter +echo singlethread Use only 1 thread for building +echo. echo Parameter for pack echo tor Pack tor version echo. diff --git a/build_scripts/Windows/build/pack.bat b/build_scripts/Windows/build/pack.bat index c7208a799..d48d93a65 100644 --- a/build_scripts/Windows/build/pack.bat +++ b/build_scripts/Windows/build/pack.bat @@ -167,7 +167,7 @@ if exist "%SourcePath%\libresapi\src\webui" ( if "%ParamTor%"=="1" ( echo copy tor - echo n | copy /-y "%EnvTorPath%\*.*" "%RsDeployPath%" %Quite% + echo n | copy /-y "%EnvTorPath%\Tor\*.*" "%RsDeployPath%" %Quite% ) rem pack files diff --git a/build_scripts/Windows/env/env.bat b/build_scripts/Windows/env/env.bat index b19346c6e..bc95045b0 100644 --- a/build_scripts/Windows/env/env.bat +++ b/build_scripts/Windows/env/env.bat @@ -9,7 +9,6 @@ set EnvDownloadPath=%EnvRootPath%\download set EnvTorPath=%EnvDownloadPath%\tor set EnvSevenZipExe=%EnvToolsPath%\7z.exe -set EnvJomExe=%EnvToolsPath%\jom.exe set EnvSedExe=%EnvToolsPath%\sed.exe set EnvCutExe=%EnvToolsPath%\cut.exe set EnvDependsExe=%EnvToolsPath%\depends.exe diff --git a/build_scripts/Windows/env/tools/prepare-tools.bat b/build_scripts/Windows/env/tools/prepare-tools.bat index 4230c3dfa..8b48d7c32 100644 --- a/build_scripts/Windows/env/tools/prepare-tools.bat +++ b/build_scripts/Windows/env/tools/prepare-tools.bat @@ -6,8 +6,6 @@ set CEchoUrl=https://github.com/lordmulder/cecho/releases/download/2015-10-10/ce set CEchoInstall=cecho.2015-10-10.zip set SevenZipUrl=https://sourceforge.net/projects/sevenzip/files/7-Zip/19.00/7z1900.msi/download set SevenZipInstall=7z1900.msi -set JomUrl=http://download.qt.io/official_releases/jom/jom.zip -set JomInstall=jom.zip set DependsUrl=http://www.dependencywalker.com/depends22_x86.zip set DependsInstall=depends22_x86.zip set UnixToolsUrl=http://unxutils.sourceforge.net/UnxUpdates.zip @@ -58,22 +56,6 @@ if not exist "%EnvToolsPath%\cecho.exe" ( call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" ) -if not exist "%EnvToolsPath%\jom.exe" ( - call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" - mkdir "%EnvTempPath%" - - %cecho% info "Download jom installation" - - if not exist "%EnvDownloadPath%\%JomInstall%" call "%ToolsPath%\download-file.bat" %JomUrl% "%EnvDownloadPath%\%JomInstall%" - if not exist "%EnvDownloadPath%\%JomInstall%" %cecho% error "Cannot download jom installation" & goto error - - %cecho% info "Unpack jom" - "%EnvSevenZipExe%" x -o"%EnvTempPath%" "%EnvDownloadPath%\%JomInstall%" - copy "%EnvTempPath%\jom.exe" "%EnvToolsPath%" - - call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" -) - if not exist "%EnvToolsPath%\depends.exe" ( call "%ToolsPath%\remove-dir.bat" "%EnvTempPath%" mkdir "%EnvTempPath%" From 0df86aa416adf131dfbf1ce41645f32851b95835 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Tue, 11 Aug 2020 12:36:15 +0200 Subject: [PATCH 79/95] Fixed update of submodule supportlibs/udp-discovery-cpp and supportlibs/restbed with mingw32-make compile --- libretroshare/src/libretroshare.pro | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 05c5af436..2606e4083 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -866,12 +866,10 @@ rs_jsonapi { genrestbedlib.variable_out = PRE_TARGETDEPS win32-g++:isEmpty(QMAKE_SH) { genrestbedlib.commands = \ - cd $$shell_path($${RS_SRC_PATH}) $$escape_expand(\\n\\t) \ - git submodule update --init supportlibs/restbed || cd . $$escape_expand(\\n\\t) \ - cd $$shell_path($${RESTBED_SRC_PATH}) $$escape_expand(\\n\\t) \ - git submodule update --init dependency/asio || cd . $$escape_expand(\\n\\t) \ - git submodule update --init dependency/catch || cd . $$escape_expand(\\n\\t )\ - git submodule update --init dependency/kashmir || cd . $$escape_expand(\\n\\t) \ + cd $$shell_path($${RS_SRC_PATH}) && git submodule update --init supportlibs/restbed || cd . $$escape_expand(\\n\\t) \ + cd $$shell_path($${RESTBED_SRC_PATH}) && git submodule update --init dependency/asio || cd . $$escape_expand(\\n\\t) \ + cd $$shell_path($${RESTBED_SRC_PATH}) && git submodule update --init dependency/catch || cd . $$escape_expand(\\n\\t )\ + cd $$shell_path($${RESTBED_SRC_PATH}) && git submodule update --init dependency/kashmir || cd . $$escape_expand(\\n\\t) \ $(CHK_DIR_EXISTS) $$shell_path($$UDP_DISCOVERY_BUILD_PATH) $(MKDIR) $$shell_path($${UDP_DISCOVERY_BUILD_PATH}) $$escape_expand(\\n\\t) } else { genrestbedlib.commands = \ @@ -989,8 +987,7 @@ rs_broadcast_discovery { udpdiscoverycpplib.variable_out = PRE_TARGETDEPS win32-g++:isEmpty(QMAKE_SH) { udpdiscoverycpplib.commands = \ - cd $$shell_path($${RS_SRC_PATH}) $$escape_expand(\\n\\t) \ - git submodule update --init supportlibs/udp-discovery-cpp || cd . $$escape_expand(\\n\\t) \ + cd $$shell_path($${RS_SRC_PATH}) && git submodule update --init supportlibs/udp-discovery-cpp || cd . $$escape_expand(\\n\\t) \ $(CHK_DIR_EXISTS) $$shell_path($$UDP_DISCOVERY_BUILD_PATH) $(MKDIR) $$shell_path($${UDP_DISCOVERY_BUILD_PATH}) $$escape_expand(\\n\\t) } else { udpdiscoverycpplib.commands = \ From 82ba488574dfa730de28847bdb79c7958d8b4cea Mon Sep 17 00:00:00 2001 From: Gioacchino Mazzurco Date: Thu, 13 Aug 2020 20:27:03 +0200 Subject: [PATCH 80/95] Update Android debugging script and README --- build_scripts/Android/README.asciidoc | 2 +- build_scripts/Android/start_gdbserver.sh | 37 +++++++++++++++++------- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/build_scripts/Android/README.asciidoc b/build_scripts/Android/README.asciidoc index 474d2f3ee..3f978cfd1 100644 --- a/build_scripts/Android/README.asciidoc +++ b/build_scripts/Android/README.asciidoc @@ -247,7 +247,7 @@ ${RS_SOURCE_DIR}/build_scripts/Android/pull_sysroot.sh [source,bash] -------------------------------------------------------------------------------- ## Optionally set Qt version variable consistently with your installation -export QT_VERSION="5.12.4" +export QT_VERSION="5.12.7" ## Optionally set Qt architecture variable consistently with Android device export QT_ARCH="arm64_v8a" diff --git a/build_scripts/Android/start_gdbserver.sh b/build_scripts/Android/start_gdbserver.sh index dce913568..af25e3be1 100755 --- a/build_scripts/Android/start_gdbserver.sh +++ b/build_scripts/Android/start_gdbserver.sh @@ -41,41 +41,56 @@ function define_default_value() define_default_value ANDROID_APK_PACKAGE "org.retroshare.service" define_default_value ANDROID_PROCESS_NAME "org.retroshare.service:rs" +define_default_value ANDROID_INSTALL_PATH "" +define_default_value LIB_GDB_SERVER_PATH "" define_default_value ANDROID_SERIAL "$(adb devices | head -n 2 | tail -n 1 | awk '{print $1}')" define_default_value GDB_SERVER_PORT 5039 -adb_shell() +adb_ushell() { adb shell run-as ${ANDROID_APK_PACKAGE} $@ } +[ -z "${ANDROID_INSTALL_PATH}" ] && +{ + ANDROID_INSTALL_PATH="$(adb_ushell pm path "${ANDROID_APK_PACKAGE}")" + ANDROID_INSTALL_PATH="$(dirname ${ANDROID_INSTALL_PATH#"package:"})" + [ -z "${ANDROID_INSTALL_PATH}" ] && + cat < Date: Sat, 15 Aug 2020 12:56:27 +0200 Subject: [PATCH 81/95] fixed memory leak due to QPainter::save() called twice but restore() called only once --- .../src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp index cc60e003b..2a44ba985 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp @@ -102,7 +102,6 @@ void ChannelPostDelegate::paint(QPainter * painter, const QStyleOptionViewItem & RsGxsChannelPost post = index.data(Qt::UserRole).value() ; - painter->save(); painter->fillRect( option.rect, option.backgroundBrush); painter->restore(); From 98edbc55d2e30c9726234bff20e1a6bfcfb5b110 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 15 Aug 2020 13:18:39 +0200 Subject: [PATCH 82/95] fixed memory leak in SharedFilesDialog where destructor was not freeing the tree models --- .../gui/FileTransfer/SharedFilesDialog.cpp | 1407 +++++++++-------- .../src/gui/FileTransfer/SharedFilesDialog.h | 4 +- 2 files changed, 708 insertions(+), 703 deletions(-) diff --git a/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.cpp b/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.cpp index 68978c8f2..90860ff2c 100644 --- a/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.cpp +++ b/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.cpp @@ -146,45 +146,50 @@ public: } }; +SharedFilesDialog::~SharedFilesDialog() +{ + delete tree_model; + delete flat_model; + delete tree_proxyModel; +} /** Constructor */ -SharedFilesDialog::SharedFilesDialog(RetroshareDirModel *_tree_model,RetroshareDirModel *_flat_model,QWidget *parent) +SharedFilesDialog::SharedFilesDialog(bool remote_mode, QWidget *parent) : RsAutoUpdatePage(1000,parent), model(NULL) { - /* Invoke the Qt Designer generated object setup routine */ - ui.setupUi(this); + /* Invoke the Qt Designer generated object setup routine */ + ui.setupUi(this); - NotifyQt *notify = NotifyQt::getInstance(); - connect(notify, SIGNAL(filesPreModChanged(bool)), this, SLOT(preModDirectories(bool))); - connect(notify, SIGNAL(filesPostModChanged(bool)), this, SLOT(postModDirectories(bool))); + NotifyQt *notify = NotifyQt::getInstance(); + connect(notify, SIGNAL(filesPreModChanged(bool)), this, SLOT(preModDirectories(bool))); + connect(notify, SIGNAL(filesPostModChanged(bool)), this, SLOT(postModDirectories(bool))); - connect(ui.viewType_CB, SIGNAL(currentIndexChanged(int)), this, SLOT(changeCurrentViewModel(int))); + connect(ui.viewType_CB, SIGNAL(currentIndexChanged(int)), this, SLOT(changeCurrentViewModel(int))); + connect(ui.dirTreeView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT( spawnCustomPopupMenu( QPoint ) ) ); + connect(ui.indicatorCBox, SIGNAL(currentIndexChanged(int)), this, SLOT(indicatorChanged(int))); - connect( ui.dirTreeView, SIGNAL( customContextMenuRequested( QPoint ) ), this, SLOT( spawnCustomPopupMenu( QPoint ) ) ); + tree_model = new TreeStyle_RDM(remote_mode); + flat_model = new FlatStyle_RDM(remote_mode); - connect(ui.indicatorCBox, SIGNAL(currentIndexChanged(int)), this, SLOT(indicatorChanged(int))); + connect(flat_model, SIGNAL(layoutChanged()), this, SLOT(updateDirTreeView()) ); - tree_model = _tree_model ; - flat_model = _flat_model ; - connect(flat_model, SIGNAL(layoutChanged()), this, SLOT(updateDirTreeView()) ); + // For filtering items we use a trick: the underlying model will use this FilterRole role to highlight selected items + // while the filterProxyModel will select them using the pre-chosen string "filtered". - // For filtering items we use a trick: the underlying model will use this FilterRole role to highlight selected items - // while the filterProxyModel will select them using the pre-chosen string "filtered". - - tree_proxyModel = new SFDSortFilterProxyModel(tree_model, this); - tree_proxyModel->setSourceModel(tree_model); - tree_proxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); - tree_proxyModel->setSortRole(RetroshareDirModel::SortRole); - tree_proxyModel->sort(COLUMN_NAME); - tree_proxyModel->setFilterRole(RetroshareDirModel::FilterRole); - tree_proxyModel->setFilterRegExp(QRegExp(QString(RETROSHARE_DIR_MODEL_FILTER_STRING))) ; + tree_proxyModel = new SFDSortFilterProxyModel(tree_model, this); + tree_proxyModel->setSourceModel(tree_model); + tree_proxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); + tree_proxyModel->setSortRole(RetroshareDirModel::SortRole); + tree_proxyModel->sort(COLUMN_NAME); + tree_proxyModel->setFilterRole(RetroshareDirModel::FilterRole); + tree_proxyModel->setFilterRegExp(QRegExp(QString(RETROSHARE_DIR_MODEL_FILTER_STRING))) ; flat_proxyModel = new SFDSortFilterProxyModel(flat_model, this); flat_proxyModel->setSourceModel(flat_model); flat_proxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); flat_proxyModel->setSortRole(RetroshareDirModel::SortRole); flat_proxyModel->sort(COLUMN_NAME); - flat_proxyModel->setFilterRole(RetroshareDirModel::FilterRole); - flat_proxyModel->setFilterRegExp(QRegExp(QString(RETROSHARE_DIR_MODEL_FILTER_STRING))) ; + flat_proxyModel->setFilterRole(RetroshareDirModel::FilterRole); + flat_proxyModel->setFilterRegExp(QRegExp(QString(RETROSHARE_DIR_MODEL_FILTER_STRING))) ; // Mr.Alice: I removed this because it causes a crash for some obscur reason. Apparently when the model is changed, the proxy model cannot // deal with the change by itself. Should I call something specific? I've no idea. Removing this does not seem to cause any harm either. @@ -193,31 +198,31 @@ SharedFilesDialog::SharedFilesDialog(RetroshareDirModel *_tree_model,RetroshareD flat_proxyModel->setDynamicSortFilter(false); connect(ui.filterClearButton, SIGNAL(clicked()), this, SLOT(clearFilter())); - connect(ui.filterStartButton, SIGNAL(clicked()), this, SLOT(startFilter())); - connect(ui.filterPatternLineEdit, SIGNAL(returnPressed()), this, SLOT(startFilter())); - connect(ui.filterPatternLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(onFilterTextEdited())); - //Hidden by default, shown on onFilterTextEdited - ui.filterClearButton->hide(); - ui.filterStartButton->hide(); + connect(ui.filterStartButton, SIGNAL(clicked()), this, SLOT(startFilter())); + connect(ui.filterPatternLineEdit, SIGNAL(returnPressed()), this, SLOT(startFilter())); + connect(ui.filterPatternLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(onFilterTextEdited())); + //Hidden by default, shown on onFilterTextEdited + ui.filterClearButton->hide(); + ui.filterStartButton->hide(); // mFilterTimer = new RsProtectedTimer( this ); // mFilterTimer->setSingleShot( true ); // Ensure the timer will fire only once after it was started // connect(mFilterTimer, SIGNAL(timeout()), this, SLOT(filterRegExpChanged())); - /* Set header resize modes and initial section sizes */ - QHeaderView * header = ui.dirTreeView->header () ; + /* Set header resize modes and initial section sizes */ + QHeaderView * header = ui.dirTreeView->header () ; - header->resizeSection ( COLUMN_NAME, 490 ); - header->resizeSection ( COLUMN_FILENB, 70 ); - header->resizeSection ( COLUMN_SIZE, 70 ); - header->resizeSection ( COLUMN_AGE, 100 ); - header->resizeSection ( COLUMN_FRIEND_ACCESS,100); - header->resizeSection ( COLUMN_WN_VISU_DIR, 100 ); + header->resizeSection ( COLUMN_NAME, 490 ); + header->resizeSection ( COLUMN_FILENB, 70 ); + header->resizeSection ( COLUMN_SIZE, 70 ); + header->resizeSection ( COLUMN_AGE, 100 ); + header->resizeSection ( COLUMN_FRIEND_ACCESS,100); + header->resizeSection ( COLUMN_WN_VISU_DIR, 100 ); - header->setStretchLastSection(false); + header->setStretchLastSection(false); - /* Set Multi Selection */ - ui.dirTreeView->setSelectionMode(QAbstractItemView::ExtendedSelection); + /* Set Multi Selection */ + ui.dirTreeView->setSelectionMode(QAbstractItemView::ExtendedSelection); /* Hide platform specific features */ copylinkAct = new QAction(QIcon(IMAGE_COPYLINK), tr( "Copy retroshare Links to Clipboard" ), this ); @@ -230,36 +235,36 @@ SharedFilesDialog::SharedFilesDialog(RetroshareDirModel *_tree_model,RetroshareD removeExtraFileAct = new QAction(QIcon(), tr( "Stop sharing this file" ), this ); connect( removeExtraFileAct , SIGNAL( triggered() ), this, SLOT( removeExtraFile() ) ); - collCreateAct= new QAction(QIcon(IMAGE_COLLCREATE), tr("Create Collection..."), this) ; - connect(collCreateAct,SIGNAL(triggered()),this,SLOT(collCreate())) ; - collModifAct= new QAction(QIcon(IMAGE_COLLMODIF), tr("Modify Collection..."), this) ; - connect(collModifAct,SIGNAL(triggered()),this,SLOT(collModif())) ; - collViewAct= new QAction(QIcon(IMAGE_COLLVIEW), tr("View Collection..."), this) ; - connect(collViewAct,SIGNAL(triggered()),this,SLOT(collView())) ; - collOpenAct = new QAction(QIcon(IMAGE_COLLOPEN), tr( "Download from collection file..." ), this ) ; - connect(collOpenAct, SIGNAL(triggered()), this, SLOT(collOpen())) ; + collCreateAct= new QAction(QIcon(IMAGE_COLLCREATE), tr("Create Collection..."), this) ; + connect(collCreateAct,SIGNAL(triggered()),this,SLOT(collCreate())) ; + collModifAct= new QAction(QIcon(IMAGE_COLLMODIF), tr("Modify Collection..."), this) ; + connect(collModifAct,SIGNAL(triggered()),this,SLOT(collModif())) ; + collViewAct= new QAction(QIcon(IMAGE_COLLVIEW), tr("View Collection..."), this) ; + connect(collViewAct,SIGNAL(triggered()),this,SLOT(collView())) ; + collOpenAct = new QAction(QIcon(IMAGE_COLLOPEN), tr( "Download from collection file..." ), this ) ; + connect(collOpenAct, SIGNAL(triggered()), this, SLOT(collOpen())) ; } LocalSharedFilesDialog::LocalSharedFilesDialog(QWidget *parent) - : SharedFilesDialog(new TreeStyle_RDM(false),new FlatStyle_RDM(false),parent) + : SharedFilesDialog(false,parent) { - // Hide columns after loading the settings - ui.dirTreeView->setColumnHidden(COLUMN_WN_VISU_DIR, false) ; - ui.downloadButton->hide() ; + // Hide columns after loading the settings + ui.dirTreeView->setColumnHidden(COLUMN_WN_VISU_DIR, false) ; + ui.downloadButton->hide() ; - // load settings - processSettings(true); - // Setup the current view model. - // - changeCurrentViewModel(ui.viewType_CB->currentIndex()) ; + // load settings + processSettings(true); + // Setup the current view model. + // + changeCurrentViewModel(ui.viewType_CB->currentIndex()) ; - connect(ui.addShares_PB, SIGNAL(clicked()), this, SLOT(addShares())) ; - connect(ui.checkButton, SIGNAL(clicked()), this, SLOT(forceCheck())) ; + connect(ui.addShares_PB, SIGNAL(clicked()), this, SLOT(addShares())) ; + connect(ui.checkButton, SIGNAL(clicked()), this, SLOT(forceCheck())) ; - openfileAct = new QAction(QIcon(IMAGE_OPENFILE), tr("Open File"), this) ; - connect(openfileAct, SIGNAL(triggered()), this, SLOT(openfile())) ; - openfolderAct = new QAction(QIcon(IMAGE_OPENFOLDER), tr("Open Folder"), this) ; - connect(openfolderAct, SIGNAL(triggered()), this, SLOT(openfolder())) ; + openfileAct = new QAction(QIcon(IMAGE_OPENFILE), tr("Open File"), this) ; + connect(openfileAct, SIGNAL(triggered()), this, SLOT(openfile())) ; + openfolderAct = new QAction(QIcon(IMAGE_OPENFOLDER), tr("Open Folder"), this) ; + connect(openfolderAct, SIGNAL(triggered()), this, SLOT(openfolder())) ; ui.titleBarPixmap->setPixmap(QPixmap(IMAGE_MYFILES)) ; @@ -267,46 +272,46 @@ LocalSharedFilesDialog::LocalSharedFilesDialog(QWidget *parent) } RemoteSharedFilesDialog::RemoteSharedFilesDialog(QWidget *parent) - : SharedFilesDialog(new TreeStyle_RDM(true),new FlatStyle_RDM(true),parent) + : SharedFilesDialog(true,parent) { - ui.dirTreeView->setColumnHidden(COLUMN_FRIEND_ACCESS, false) ; - ui.dirTreeView->setColumnHidden(COLUMN_WN_VISU_DIR, true) ; - ui.checkButton->hide() ; + ui.dirTreeView->setColumnHidden(COLUMN_FRIEND_ACCESS, false) ; + ui.dirTreeView->setColumnHidden(COLUMN_WN_VISU_DIR, true) ; + ui.checkButton->hide() ; - connect(ui.downloadButton, SIGNAL(clicked()), this, SLOT(downloadRemoteSelected())); + connect(ui.downloadButton, SIGNAL(clicked()), this, SLOT(downloadRemoteSelected())); connect(ui.dirTreeView, SIGNAL( expanded(const QModelIndex & ) ), this, SLOT( expanded(const QModelIndex & ) ) ); connect(ui.dirTreeView, SIGNAL( doubleClicked(const QModelIndex & ) ), this, SLOT( expanded(const QModelIndex & ) ) ); - // load settings - processSettings(true); - // Setup the current view model. - // - changeCurrentViewModel(ui.viewType_CB->currentIndex()) ; + // load settings + processSettings(true); + // Setup the current view model. + // + changeCurrentViewModel(ui.viewType_CB->currentIndex()) ; - ui.addShares_PB->hide() ; + ui.addShares_PB->hide() ; } void LocalSharedFilesDialog::addShares() { - ShareManager::showYourself(); + ShareManager::showYourself(); } void SharedFilesDialog::hideEvent(QHideEvent *) { - if(model!=NULL) - model->setVisible(false) ; + if(model!=NULL) + model->setVisible(false) ; } void SharedFilesDialog::showEvent(QShowEvent *) { - if(model!=NULL) - { + if(model!=NULL) + { std::set expanded_indexes,hidden_indexes,selected_indexes ; saveExpandedPathsAndSelection(expanded_indexes,hidden_indexes,selected_indexes); - model->setVisible(true) ; - model->update() ; + model->setVisible(true) ; + model->update() ; restoreExpandedPathsAndSelection(expanded_indexes,hidden_indexes,selected_indexes); } @@ -325,63 +330,63 @@ LocalSharedFilesDialog::~LocalSharedFilesDialog() void LocalSharedFilesDialog::processSettings(bool bLoad) { - Settings->beginGroup("LocalSharedFilesDialog"); + Settings->beginGroup("LocalSharedFilesDialog"); - if (bLoad) { - // load settings + if (bLoad) { + // load settings - // state of the trees - ui.dirTreeView->header()->restoreState(Settings->value("LocalDirTreeView").toByteArray()); + // state of the trees + ui.dirTreeView->header()->restoreState(Settings->value("LocalDirTreeView").toByteArray()); - // state of splitter - ui.splitter->restoreState(Settings->value("LocalSplitter").toByteArray()); + // state of splitter + ui.splitter->restoreState(Settings->value("LocalSplitter").toByteArray()); - // view type - ui.viewType_CB->setCurrentIndex(Settings->value("LocalViewType").toInt()); - } else { - // save settings + // view type + ui.viewType_CB->setCurrentIndex(Settings->value("LocalViewType").toInt()); + } else { + // save settings - // state of trees - Settings->setValue("LocalDirTreeView", ui.dirTreeView->header()->saveState()); + // state of trees + Settings->setValue("LocalDirTreeView", ui.dirTreeView->header()->saveState()); - // state of splitter - Settings->setValue("LocalSplitter", ui.splitter->saveState()); + // state of splitter + Settings->setValue("LocalSplitter", ui.splitter->saveState()); - // view type - Settings->setValue("LocalViewType", ui.viewType_CB->currentIndex()); - } + // view type + Settings->setValue("LocalViewType", ui.viewType_CB->currentIndex()); + } - Settings->endGroup(); + Settings->endGroup(); } void RemoteSharedFilesDialog::processSettings(bool bLoad) { - Settings->beginGroup("RemoteSharedFilesDialog"); + Settings->beginGroup("RemoteSharedFilesDialog"); - if (bLoad) { - // load settings + if (bLoad) { + // load settings - // state of the trees - ui.dirTreeView->header()->restoreState(Settings->value("RemoteDirTreeView").toByteArray()); + // state of the trees + ui.dirTreeView->header()->restoreState(Settings->value("RemoteDirTreeView").toByteArray()); - // state of splitter - ui.splitter->restoreState(Settings->value("RemoteSplitter").toByteArray()); + // state of splitter + ui.splitter->restoreState(Settings->value("RemoteSplitter").toByteArray()); - // view type - ui.viewType_CB->setCurrentIndex(Settings->value("RemoteViewType").toInt()); - } else { - // save settings + // view type + ui.viewType_CB->setCurrentIndex(Settings->value("RemoteViewType").toInt()); + } else { + // save settings - // state of trees - Settings->setValue("RemoteDirTreeView", ui.dirTreeView->header()->saveState()); + // state of trees + Settings->setValue("RemoteDirTreeView", ui.dirTreeView->header()->saveState()); - // state of splitter - Settings->setValue("RemoteSplitter", ui.splitter->saveState()); + // state of splitter + Settings->setValue("RemoteSplitter", ui.splitter->saveState()); - // view type - Settings->setValue("RemoteViewType", ui.viewType_CB->currentIndex()); - } + // view type + Settings->setValue("RemoteViewType", ui.viewType_CB->currentIndex()); + } - Settings->endGroup(); + Settings->endGroup(); } void SharedFilesDialog::changeCurrentViewModel(int viewTypeIndex) @@ -389,195 +394,195 @@ void SharedFilesDialog::changeCurrentViewModel(int viewTypeIndex) // disconnect( ui.dirTreeView, SIGNAL( collapsed(const QModelIndex & ) ), NULL, NULL ); // disconnect( ui.dirTreeView, SIGNAL( expanded(const QModelIndex & ) ), NULL, NULL ); - if(model!=NULL) - model->setVisible(false) ; + if(model!=NULL) + model->setVisible(false) ; - if(viewTypeIndex==VIEW_TYPE_TREE) - { - model = tree_model ; + if(viewTypeIndex==VIEW_TYPE_TREE) + { + model = tree_model ; proxyModel = tree_proxyModel ; - } - else - { - model = flat_model ; + } + else + { + model = flat_model ; proxyModel = flat_proxyModel ; } - showProperColumns() ; + showProperColumns() ; std::set expanded_indexes,hidden_indexes,selected_indexes ; saveExpandedPathsAndSelection(expanded_indexes,hidden_indexes,selected_indexes); if(isVisible()) - { + { model->setVisible(true) ; - model->update() ; - } + model->update() ; + } // connect( ui.dirTreeView, SIGNAL( collapsed(const QModelIndex & ) ), this, SLOT( collapsed(const QModelIndex & ) ) ); - ui.dirTreeView->setModel(proxyModel); - ui.dirTreeView->update(); + ui.dirTreeView->setModel(proxyModel); + ui.dirTreeView->update(); restoreExpandedPathsAndSelection(expanded_indexes,hidden_indexes,selected_indexes); QHeaderView * header = ui.dirTreeView->header () ; - QHeaderView_setSectionResizeModeColumn(header, COLUMN_NAME, QHeaderView::Interactive); + QHeaderView_setSectionResizeModeColumn(header, COLUMN_NAME, QHeaderView::Interactive); - ui.dirTreeView->header()->headerDataChanged(Qt::Horizontal, COLUMN_NAME, COLUMN_WN_VISU_DIR) ; + ui.dirTreeView->header()->headerDataChanged(Qt::Horizontal, COLUMN_NAME, COLUMN_WN_VISU_DIR) ; // recursRestoreExpandedItems(ui.dirTreeView->rootIndex(),expanded_indexes); - FilterItems(); + FilterItems(); } void LocalSharedFilesDialog::showProperColumns() { - if(model == tree_model) - { - ui.dirTreeView->setColumnHidden(COLUMN_FILENB, false) ; - ui.dirTreeView->setColumnHidden(COLUMN_FRIEND_ACCESS, false) ; - ui.dirTreeView->setColumnHidden(COLUMN_WN_VISU_DIR, false) ; + if(model == tree_model) + { + ui.dirTreeView->setColumnHidden(COLUMN_FILENB, false) ; + ui.dirTreeView->setColumnHidden(COLUMN_FRIEND_ACCESS, false) ; + ui.dirTreeView->setColumnHidden(COLUMN_WN_VISU_DIR, false) ; #ifdef DONT_USE_SEARCH_IN_TREE_VIEW - ui.filterLabel->hide(); - ui.filterPatternLineEdit->hide(); - ui.filterStartButton->hide(); - ui.filterClearButton->hide(); + ui.filterLabel->hide(); + ui.filterPatternLineEdit->hide(); + ui.filterStartButton->hide(); + ui.filterClearButton->hide(); #endif - } - else - { - ui.dirTreeView->setColumnHidden(COLUMN_FILENB, true) ; - ui.dirTreeView->setColumnHidden(COLUMN_FRIEND_ACCESS, true) ; - ui.dirTreeView->setColumnHidden(COLUMN_WN_VISU_DIR, false) ; + } + else + { + ui.dirTreeView->setColumnHidden(COLUMN_FILENB, true) ; + ui.dirTreeView->setColumnHidden(COLUMN_FRIEND_ACCESS, true) ; + ui.dirTreeView->setColumnHidden(COLUMN_WN_VISU_DIR, false) ; #ifdef DONT_USE_SEARCH_IN_TREE_VIEW - ui.filterLabel->show(); - ui.filterPatternLineEdit->show(); + ui.filterLabel->show(); + ui.filterPatternLineEdit->show(); #endif - } + } } void RemoteSharedFilesDialog::showProperColumns() { - if(model == tree_model) - { - ui.dirTreeView->setColumnHidden(COLUMN_FILENB, false) ; - ui.dirTreeView->setColumnHidden(COLUMN_FRIEND_ACCESS, true) ; - ui.dirTreeView->setColumnHidden(COLUMN_WN_VISU_DIR, true) ; + if(model == tree_model) + { + ui.dirTreeView->setColumnHidden(COLUMN_FILENB, false) ; + ui.dirTreeView->setColumnHidden(COLUMN_FRIEND_ACCESS, true) ; + ui.dirTreeView->setColumnHidden(COLUMN_WN_VISU_DIR, true) ; #ifdef DONT_USE_SEARCH_IN_TREE_VIEW - ui.filterLabel->hide(); - ui.filterPatternLineEdit->hide(); - ui.filterStartButton->hide(); - ui.filterClearButton->hide(); + ui.filterLabel->hide(); + ui.filterPatternLineEdit->hide(); + ui.filterStartButton->hide(); + ui.filterClearButton->hide(); #endif - } - else - { - ui.dirTreeView->setColumnHidden(COLUMN_FILENB, true) ; - ui.dirTreeView->setColumnHidden(COLUMN_FRIEND_ACCESS, false) ; - ui.dirTreeView->setColumnHidden(COLUMN_WN_VISU_DIR, false) ; + } + else + { + ui.dirTreeView->setColumnHidden(COLUMN_FILENB, true) ; + ui.dirTreeView->setColumnHidden(COLUMN_FRIEND_ACCESS, false) ; + ui.dirTreeView->setColumnHidden(COLUMN_WN_VISU_DIR, false) ; #ifdef DONT_USE_SEARCH_IN_TREE_VIEW - ui.filterLabel->show(); - ui.filterPatternLineEdit->show(); + ui.filterLabel->show(); + ui.filterPatternLineEdit->show(); #endif - } + } } void LocalSharedFilesDialog::checkUpdate() { - /* update */ - if (rsFiles->InDirectoryCheck()) - { - ui.checkButton->setText(tr("Checking...")); - } - else - { - ui.checkButton->setText(tr("Check files")); - ui.hashLabel->setPixmap(QPixmap(IMAGE_HASH_DONE)); - ui.hashLabel->setToolTip("") ; - } + /* update */ + if (rsFiles->InDirectoryCheck()) + { + ui.checkButton->setText(tr("Checking...")); + } + else + { + ui.checkButton->setText(tr("Check files")); + ui.hashLabel->setPixmap(QPixmap(IMAGE_HASH_DONE)); + ui.hashLabel->setToolTip("") ; + } - return; + return; } void LocalSharedFilesDialog::forceCheck() { - rsFiles->ForceDirectoryCheck(); - return; + rsFiles->ForceDirectoryCheck(); + return; } void RemoteSharedFilesDialog::spawnCustomPopupMenu( QPoint point ) { - if (!rsPeers) return; /* not ready yet! */ + if (!rsPeers) return; /* not ready yet! */ - QMenu *contextMenu = new QMenu(this); + QMenu *contextMenu = new QMenu(this); - QModelIndex idx = ui.dirTreeView->indexAt(point) ; - if (idx.isValid()) - { + QModelIndex idx = ui.dirTreeView->indexAt(point) ; + if (idx.isValid()) + { - QModelIndex midx = proxyModel->mapToSource(idx) ; - if (midx.isValid()) - { + QModelIndex midx = proxyModel->mapToSource(idx) ; + if (midx.isValid()) + { - currentFile = model->data(midx, RetroshareDirModel::FileNameRole).toString() ; - int type = model->getType(midx) ; - if ( (type == DIR_TYPE_DIR) || (type == DIR_TYPE_FILE) ) - { - collCreateAct->setEnabled(true); - collOpenAct->setEnabled(true); + currentFile = model->data(midx, RetroshareDirModel::FileNameRole).toString() ; + int type = model->getType(midx) ; + if ( (type == DIR_TYPE_DIR) || (type == DIR_TYPE_FILE) ) + { + collCreateAct->setEnabled(true); + collOpenAct->setEnabled(true); - QModelIndexList list = ui.dirTreeView->selectionModel()->selectedRows() ; + QModelIndexList list = ui.dirTreeView->selectionModel()->selectedRows() ; - if(type == DIR_TYPE_DIR || list.size() > 1) - { - QAction *downloadActI = new QAction(QIcon(IMAGE_DOWNLOAD), tr( "Download..." ), contextMenu ) ; - connect( downloadActI , SIGNAL( triggered() ), this, SLOT( downloadRemoteSelectedInteractive() ) ) ; - contextMenu->addAction( downloadActI) ; - } - else - { - QAction *downloadAct = new QAction(QIcon(IMAGE_DOWNLOAD), tr( "Download" ), contextMenu ) ; - connect( downloadAct , SIGNAL( triggered() ), this, SLOT( downloadRemoteSelected() ) ) ; - contextMenu->addAction( downloadAct) ; - } + if(type == DIR_TYPE_DIR || list.size() > 1) + { + QAction *downloadActI = new QAction(QIcon(IMAGE_DOWNLOAD), tr( "Download..." ), contextMenu ) ; + connect( downloadActI , SIGNAL( triggered() ), this, SLOT( downloadRemoteSelectedInteractive() ) ) ; + contextMenu->addAction( downloadActI) ; + } + else + { + QAction *downloadAct = new QAction(QIcon(IMAGE_DOWNLOAD), tr( "Download" ), contextMenu ) ; + connect( downloadAct , SIGNAL( triggered() ), this, SLOT( downloadRemoteSelected() ) ) ; + contextMenu->addAction( downloadAct) ; + } - contextMenu->addSeparator() ;//------------------------------------ - contextMenu->addAction( copylinkAct) ; - contextMenu->addAction( sendlinkAct) ; - contextMenu->addSeparator() ;//------------------------------------ - contextMenu->addAction(QIcon(IMAGE_MSG), tr("Recommend in a message to..."), this, SLOT(recommendFilesToMsg())) ; + contextMenu->addSeparator() ;//------------------------------------ + contextMenu->addAction( copylinkAct) ; + contextMenu->addAction( sendlinkAct) ; + contextMenu->addSeparator() ;//------------------------------------ + contextMenu->addAction(QIcon(IMAGE_MSG), tr("Recommend in a message to..."), this, SLOT(recommendFilesToMsg())) ; - contextMenu->addSeparator() ;//------------------------------------ + contextMenu->addSeparator() ;//------------------------------------ - QMenu collectionMenu(tr("Collection"), this); - collectionMenu.setIcon(QIcon(IMAGE_LIBRARY)); - collectionMenu.addAction(collCreateAct); - collectionMenu.addAction(collOpenAct); - contextMenu->addMenu(&collectionMenu) ; + QMenu collectionMenu(tr("Collection"), this); + collectionMenu.setIcon(QIcon(IMAGE_LIBRARY)); + collectionMenu.addAction(collCreateAct); + collectionMenu.addAction(collOpenAct); + contextMenu->addMenu(&collectionMenu) ; - } + } - } - } + } + } - contextMenu = model->getContextMenu(contextMenu); + contextMenu = model->getContextMenu(contextMenu); - if (!contextMenu->children().isEmpty()) - contextMenu->exec(QCursor::pos()) ; + if (!contextMenu->children().isEmpty()) + contextMenu->exec(QCursor::pos()) ; - delete contextMenu; + delete contextMenu; } QModelIndexList SharedFilesDialog::getSelected() { - QModelIndexList list = ui.dirTreeView->selectionModel()->selectedIndexes() ; - QModelIndexList proxyList ; - for (QModelIndexList::iterator index = list.begin(); index != list.end(); ++index ) { - proxyList.append(proxyModel->mapToSource(*index)) ; - } + QModelIndexList list = ui.dirTreeView->selectionModel()->selectedIndexes() ; + QModelIndexList proxyList ; + for (QModelIndexList::iterator index = list.begin(); index != list.end(); ++index ) { + proxyList.append(proxyModel->mapToSource(*index)) ; + } - return proxyList ; + return proxyList ; } void RemoteSharedFilesDialog::expanded(const QModelIndex& indx) @@ -590,69 +595,69 @@ void RemoteSharedFilesDialog::expanded(const QModelIndex& indx) } void RemoteSharedFilesDialog::downloadRemoteSelectedInteractive() { - /* call back to the model (which does all the interfacing? */ + /* call back to the model (which does all the interfacing? */ - std::cerr << "Downloading Files" ; - std::cerr << std::endl ; + std::cerr << "Downloading Files" ; + std::cerr << std::endl ; - QModelIndexList lst = getSelected() ; - model -> downloadSelected(lst,true) ; + QModelIndexList lst = getSelected() ; + model -> downloadSelected(lst,true) ; } void RemoteSharedFilesDialog::downloadRemoteSelected() { - /* call back to the model (which does all the interfacing? */ + /* call back to the model (which does all the interfacing? */ - std::cerr << "Downloading Files" ; - std::cerr << std::endl ; + std::cerr << "Downloading Files" ; + std::cerr << std::endl ; - QModelIndexList lst = getSelected() ; - model -> downloadSelected(lst,false) ; + QModelIndexList lst = getSelected() ; + model -> downloadSelected(lst,false) ; } void SharedFilesDialog::copyLinks(const QModelIndexList& lst, bool remote,QList& urls,bool& has_unhashed_files) { - std::vector dirVec; + std::vector dirVec; - model->getDirDetailsFromSelect(lst, dirVec); + model->getDirDetailsFromSelect(lst, dirVec); - has_unhashed_files = false; + has_unhashed_files = false; - for (int i = 0, n = dirVec.size(); i < n; ++i) - { - const DirDetails& details = dirVec[i]; + for (int i = 0, n = dirVec.size(); i < n; ++i) + { + const DirDetails& details = dirVec[i]; - if (details.type == DIR_TYPE_DIR) - { - auto ft = RsFileTree::fromDirDetails(details,remote); + if (details.type == DIR_TYPE_DIR) + { + auto ft = RsFileTree::fromDirDetails(details,remote); - QString dir_name = QDir(QString::fromUtf8(details.name.c_str())).dirName(); + QString dir_name = QDir(QString::fromUtf8(details.name.c_str())).dirName(); - RetroShareLink link = RetroShareLink::createFileTree(dir_name,ft->mTotalSize,ft->mTotalFiles,QString::fromStdString(ft->toRadix64())) ; + RetroShareLink link = RetroShareLink::createFileTree(dir_name,ft->mTotalSize,ft->mTotalFiles,QString::fromStdString(ft->toRadix64())) ; - if(link.valid()) - urls.push_back(link) ; - } - else - { - if(details.hash.isNull()) - { - has_unhashed_files = true; - continue; - } - RetroShareLink link = RetroShareLink::createFile(QString::fromUtf8(details.name.c_str()), details.count, details.hash.toStdString().c_str()); - if (link.valid()) { - urls.push_back(link) ; - } - } - } + if(link.valid()) + urls.push_back(link) ; + } + else + { + if(details.hash.isNull()) + { + has_unhashed_files = true; + continue; + } + RetroShareLink link = RetroShareLink::createFile(QString::fromUtf8(details.name.c_str()), details.count, details.hash.toStdString().c_str()); + if (link.valid()) { + urls.push_back(link) ; + } + } + } } void SharedFilesDialog::copyLink (const QModelIndexList& lst, bool remote) { - QList urls ; - bool has_unhashed_files = false; + QList urls ; + bool has_unhashed_files = false; - copyLinks(lst,remote,urls,has_unhashed_files) ; + copyLinks(lst,remote,urls,has_unhashed_files) ; RSLinkClipboard::copyLinks(urls) ; if(has_unhashed_files) @@ -699,108 +704,108 @@ void SharedFilesDialog::sendLinkTo() void SharedFilesDialog::collCreate() { - QModelIndexList lst = getSelected(); - model->createCollectionFile(this, lst); + QModelIndexList lst = getSelected(); + model->createCollectionFile(this, lst); } void SharedFilesDialog::collModif() { - std::list files_info ; + std::list files_info ; - model->getFileInfoFromIndexList(getSelected(),files_info); + model->getFileInfoFromIndexList(getSelected(),files_info); - if(files_info.size() != 1) return ; + if(files_info.size() != 1) return ; - /* make path for downloaded files */ - std::list::iterator it = files_info.begin(); - DirDetails details = (*it); - FileInfo info; - if (!rsFiles->FileDetails(details.hash, RS_FILE_HINTS_EXTRA | RS_FILE_HINTS_LOCAL - | RS_FILE_HINTS_BROWSABLE | RS_FILE_HINTS_NETWORK_WIDE - | RS_FILE_HINTS_SPEC_ONLY, info)) return; + /* make path for downloaded files */ + std::list::iterator it = files_info.begin(); + DirDetails details = (*it); + FileInfo info; + if (!rsFiles->FileDetails(details.hash, RS_FILE_HINTS_EXTRA | RS_FILE_HINTS_LOCAL + | RS_FILE_HINTS_BROWSABLE | RS_FILE_HINTS_NETWORK_WIDE + | RS_FILE_HINTS_SPEC_ONLY, info)) return; - std::string path; - path = info.path; + std::string path; + path = info.path; - /* open file with a suitable application */ - QFileInfo qinfo; - qinfo.setFile(QString::fromUtf8(path.c_str())); - if (qinfo.exists()) { - if (qinfo.absoluteFilePath().endsWith(RsCollection::ExtensionString)) { - RsCollection collection; - collection.openColl(qinfo.absoluteFilePath()); - } - } + /* open file with a suitable application */ + QFileInfo qinfo; + qinfo.setFile(QString::fromUtf8(path.c_str())); + if (qinfo.exists()) { + if (qinfo.absoluteFilePath().endsWith(RsCollection::ExtensionString)) { + RsCollection collection; + collection.openColl(qinfo.absoluteFilePath()); + } + } } void SharedFilesDialog::collView() { - std::list files_info ; + std::list files_info ; - model->getFileInfoFromIndexList(getSelected(),files_info); + model->getFileInfoFromIndexList(getSelected(),files_info); - if(files_info.size() != 1) return ; + if(files_info.size() != 1) return ; - /* make path for downloaded files */ - std::list::iterator it = files_info.begin(); - DirDetails details = (*it); - FileInfo info; - if (!rsFiles->FileDetails(details.hash, RS_FILE_HINTS_EXTRA | RS_FILE_HINTS_LOCAL - | RS_FILE_HINTS_BROWSABLE | RS_FILE_HINTS_NETWORK_WIDE - | RS_FILE_HINTS_SPEC_ONLY, info)) return; + /* make path for downloaded files */ + std::list::iterator it = files_info.begin(); + DirDetails details = (*it); + FileInfo info; + if (!rsFiles->FileDetails(details.hash, RS_FILE_HINTS_EXTRA | RS_FILE_HINTS_LOCAL + | RS_FILE_HINTS_BROWSABLE | RS_FILE_HINTS_NETWORK_WIDE + | RS_FILE_HINTS_SPEC_ONLY, info)) return; - std::string path; - path = info.path; + std::string path; + path = info.path; - /* open file with a suitable application */ - QFileInfo qinfo; - qinfo.setFile(QString::fromUtf8(path.c_str())); - if (qinfo.exists()) { - if (qinfo.absoluteFilePath().endsWith(RsCollection::ExtensionString)) { - RsCollection collection; - collection.openColl(qinfo.absoluteFilePath(), true); - } - } + /* open file with a suitable application */ + QFileInfo qinfo; + qinfo.setFile(QString::fromUtf8(path.c_str())); + if (qinfo.exists()) { + if (qinfo.absoluteFilePath().endsWith(RsCollection::ExtensionString)) { + RsCollection collection; + collection.openColl(qinfo.absoluteFilePath(), true); + } + } } void SharedFilesDialog::collOpen() { - std::list files_info ; + std::list files_info ; - model->getFileInfoFromIndexList(getSelected(),files_info); + model->getFileInfoFromIndexList(getSelected(),files_info); - if(files_info.size() == 1) { + if(files_info.size() == 1) { - /* make path for downloaded files */ - std::list::iterator it = files_info.begin(); - DirDetails details = (*it); - FileInfo info; - if (rsFiles->FileDetails(details.hash, RS_FILE_HINTS_EXTRA | RS_FILE_HINTS_LOCAL - | RS_FILE_HINTS_BROWSABLE | RS_FILE_HINTS_NETWORK_WIDE - | RS_FILE_HINTS_SPEC_ONLY, info)) { + /* make path for downloaded files */ + std::list::iterator it = files_info.begin(); + DirDetails details = (*it); + FileInfo info; + if (rsFiles->FileDetails(details.hash, RS_FILE_HINTS_EXTRA | RS_FILE_HINTS_LOCAL + | RS_FILE_HINTS_BROWSABLE | RS_FILE_HINTS_NETWORK_WIDE + | RS_FILE_HINTS_SPEC_ONLY, info)) { - std::string path; - path = info.path; + std::string path; + path = info.path; - /* open file with a suitable application */ - QFileInfo qinfo; - qinfo.setFile(QString::fromUtf8(path.c_str())); - if (qinfo.exists()) { - if (qinfo.absoluteFilePath().endsWith(RsCollection::ExtensionString)) { - RsCollection collection; - if (collection.load(qinfo.absoluteFilePath())) { - collection.downloadFiles(); - return; - } - } - } - } - } + /* open file with a suitable application */ + QFileInfo qinfo; + qinfo.setFile(QString::fromUtf8(path.c_str())); + if (qinfo.exists()) { + if (qinfo.absoluteFilePath().endsWith(RsCollection::ExtensionString)) { + RsCollection collection; + if (collection.load(qinfo.absoluteFilePath())) { + collection.downloadFiles(); + return; + } + } + } + } + } - RsCollection collection; - if (collection.load(this)) { - collection.downloadFiles(); - } + RsCollection collection; + if (collection.load(this)) { + collection.downloadFiles(); + } } void LocalSharedFilesDialog::playselectedfiles() @@ -817,12 +822,12 @@ void LocalSharedFilesDialog::playselectedfiles() QStringList fullpaths; for(it = paths.begin(); it != paths.end(); ++it) { - std::string fullpath; - rsFiles->ConvertSharedFilePath(*it, fullpath); - fullpaths.push_back(QString::fromStdString(fullpath)); + std::string fullpath; + rsFiles->ConvertSharedFilePath(*it, fullpath); + fullpaths.push_back(QString::fromStdString(fullpath)); - std::cerr << "Playing: " << fullpath; - std::cerr << std::endl; + std::cerr << "Playing: " << fullpath; + std::cerr << std::endl; } playFiles(fullpaths); @@ -857,27 +862,27 @@ void SharedFilesDialog::recommendFilesToMsg() void LocalSharedFilesDialog::openfile() { - /* call back to the model (which does all the interfacing? */ + /* call back to the model (which does all the interfacing? */ - std::cerr << "SharedFilesDialog::openfile" << std::endl; + std::cerr << "SharedFilesDialog::openfile" << std::endl; - QModelIndexList qmil = getSelected(); - model->openSelected(qmil); + QModelIndexList qmil = getSelected(); + model->openSelected(qmil); } void LocalSharedFilesDialog::openfolder() { - std::cerr << "SharedFilesDialog::openfolder" << std::endl; + std::cerr << "SharedFilesDialog::openfolder" << std::endl; - QModelIndexList qmil = getSelected(); - model->openSelected(qmil); + QModelIndexList qmil = getSelected(); + model->openSelected(qmil); } void SharedFilesDialog::preModDirectories(bool local) { - if (isRemote() == local) - return; + if (isRemote() == local) + return; #ifdef DEBUG_SHARED_FILES_DIALOG std::cerr << "About to modify directories. Local=" << local << ". Temporarily disabling sorting" << std::endl; @@ -888,9 +893,9 @@ void SharedFilesDialog::preModDirectories(bool local) std::set expanded_indexes,hidden_indexes,selected_indexes; saveExpandedPathsAndSelection(expanded_indexes,hidden_indexes,selected_indexes) ; - /* Notify both models, only one is visible */ - tree_model->preMods(); - flat_model->preMods(); + /* Notify both models, only one is visible */ + tree_model->preMods(); + flat_model->preMods(); restoreExpandedPathsAndSelection(expanded_indexes,hidden_indexes,selected_indexes) ; } @@ -959,15 +964,15 @@ void SharedFilesDialog::expandAll() void SharedFilesDialog::recursExpandAll(const QModelIndex& index) { - ui.dirTreeView->setExpanded(index,true) ; + ui.dirTreeView->setExpanded(index,true) ; - for(int row=0;rowmodel()->rowCount(index);++row) - { - QModelIndex idx(index.child(row,0)) ; + for(int row=0;rowmodel()->rowCount(index);++row) + { + QModelIndex idx(index.child(row,0)) ; - if(ui.dirTreeView->model()->rowCount(idx) > 0) - recursExpandAll(idx) ; - } + if(ui.dirTreeView->model()->rowCount(idx) > 0) + recursExpandAll(idx) ; + } } void SharedFilesDialog::recursSaveExpandedItems(const QModelIndex& index,const std::string& path, @@ -976,39 +981,39 @@ void SharedFilesDialog::recursSaveExpandedItems(const QModelIndex& index,const s std::set& sel ) { - std::string local_path = path+"/"+index.data(Qt::DisplayRole).toString().toStdString(); + std::string local_path = path+"/"+index.data(Qt::DisplayRole).toString().toStdString(); #ifdef DEBUG_SHARED_FILES_DIALOG - std::cerr << "at index " << index.row() << ". data[1]=" << local_path << std::endl; + std::cerr << "at index " << index.row() << ". data[1]=" << local_path << std::endl; #endif - if(ui.dirTreeView->selectionModel()->selection().contains(index)) - sel.insert(local_path) ; + if(ui.dirTreeView->selectionModel()->selection().contains(index)) + sel.insert(local_path) ; - // Disable hidden check as we don't use it and Qt bug: https://bugreports.qt.io/browse/QTBUG-11438 - /*if(ui.dirTreeView->isRowHidden(index.row(),index.parent())) - { - hid.insert(local_path) ; - return ; - }*/ + // Disable hidden check as we don't use it and Qt bug: https://bugreports.qt.io/browse/QTBUG-11438 + /*if(ui.dirTreeView->isRowHidden(index.row(),index.parent())) + { + hid.insert(local_path) ; + return ; + }*/ - if(ui.dirTreeView->isExpanded(index)) - { + if(ui.dirTreeView->isExpanded(index)) + { #ifdef DEBUG_SHARED_FILES_DIALOG - std::cerr << "Index " << local_path << " is expanded." << std::endl; + std::cerr << "Index " << local_path << " is expanded." << std::endl; #endif - if(index.isValid()) - exp.insert(local_path) ; + if(index.isValid()) + exp.insert(local_path) ; - for(int row=0;rowmodel()->rowCount(index);++row) + for(int row=0;rowmodel()->rowCount(index);++row) #if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0) - recursSaveExpandedItems(ui.dirTreeView->model()->index(row,0,index),local_path,exp,hid,sel) ; + recursSaveExpandedItems(ui.dirTreeView->model()->index(row,0,index),local_path,exp,hid,sel) ; #else - recursSaveExpandedItems(index.child(row,0),local_path,exp,hid,sel) ; + recursSaveExpandedItems(index.child(row,0),local_path,exp,hid,sel) ; #endif - } + } #ifdef DEBUG_SHARED_FILES_DIALOG - else - std::cerr << "Index is not expanded." << std::endl; + else + std::cerr << "Index is not expanded." << std::endl; #endif } @@ -1017,42 +1022,42 @@ void SharedFilesDialog::recursRestoreExpandedItems(const QModelIndex& index, con const std::set& hid, const std::set &sel) { - std::string local_path = path+"/"+index.data(Qt::DisplayRole).toString().toStdString(); + std::string local_path = path+"/"+index.data(Qt::DisplayRole).toString().toStdString(); #ifdef DEBUG_SHARED_FILES_DIALOG - std::cerr << "at index " << index.row() << ". data[1]=" << local_path << std::endl; + std::cerr << "at index " << index.row() << ". data[1]=" << local_path << std::endl; #endif - if(sel.find(local_path) != sel.end()) - ui.dirTreeView->selectionModel()->select(index, QItemSelectionModel::Select | QItemSelectionModel::Rows); + if(sel.find(local_path) != sel.end()) + ui.dirTreeView->selectionModel()->select(index, QItemSelectionModel::Select | QItemSelectionModel::Rows); - // Disable hidden check as we don't use it and Qt bug: https://bugreports.qt.io/browse/QTBUG-11438 - /*bool invisible = hid.find(local_path) != hid.end(); - ui.dirTreeView->setRowHidden(index.row(),index.parent(),invisible ) ;*/ + // Disable hidden check as we don't use it and Qt bug: https://bugreports.qt.io/browse/QTBUG-11438 + /*bool invisible = hid.find(local_path) != hid.end(); + ui.dirTreeView->setRowHidden(index.row(),index.parent(),invisible ) ;*/ - // if(invisible) - // mHiddenIndexes.push_back(proxyModel->mapToSource(index)); + // if(invisible) + // mHiddenIndexes.push_back(proxyModel->mapToSource(index)); - if(/*!invisible &&*/ exp.find(local_path) != exp.end()) - { + if(/*!invisible &&*/ exp.find(local_path) != exp.end()) + { #ifdef DEBUG_SHARED_FILES_DIALOG - std::cerr << "re expanding index " << local_path << std::endl; + std::cerr << "re expanding index " << local_path << std::endl; #endif - ui.dirTreeView->setExpanded(index,true) ; + ui.dirTreeView->setExpanded(index,true) ; - for(int row=0;rowmodel()->rowCount(index);++row) + for(int row=0;rowmodel()->rowCount(index);++row) #if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0) - recursRestoreExpandedItems(ui.dirTreeView->model()->index(row,0,index),local_path,exp,hid,sel) ; + recursRestoreExpandedItems(ui.dirTreeView->model()->index(row,0,index),local_path,exp,hid,sel) ; #else - recursRestoreExpandedItems(index.child(row,0),local_path,exp,hid,sel) ; + recursRestoreExpandedItems(index.child(row,0),local_path,exp,hid,sel) ; #endif - } + } } void SharedFilesDialog::postModDirectories(bool local) { - if (isRemote() == local) - return; + if (isRemote() == local) + return; std::set expanded_indexes,selected_indexes,hidden_indexes; @@ -1062,183 +1067,183 @@ void SharedFilesDialog::postModDirectories(bool local) #endif /* Notify both models, only one is visible */ - tree_model->postMods(); - flat_model->postMods(); - ui.dirTreeView->update() ; + tree_model->postMods(); + flat_model->postMods(); + ui.dirTreeView->update() ; - if (ui.filterPatternLineEdit->text().isEmpty() == false) - FilterItems(); + if (ui.filterPatternLineEdit->text().isEmpty() == false) + FilterItems(); - ui.dirTreeView->setSortingEnabled(true); + ui.dirTreeView->setSortingEnabled(true); - restoreExpandedPathsAndSelection(expanded_indexes,hidden_indexes,selected_indexes) ; + restoreExpandedPathsAndSelection(expanded_indexes,hidden_indexes,selected_indexes) ; #ifdef DEBUG_SHARED_FILES_DIALOG std::cerr << "****** updated directories! Re-enabling sorting ******" << std::endl; #endif - QCoreApplication::flush(); + QCoreApplication::flush(); } class ChannelCompare { public: - bool operator()(const std::pair& id1,const std::pair& id2) const - { - return id1.first < id2.first ; - } + bool operator()(const std::pair& id1,const std::pair& id2) const + { + return id1.first < id2.first ; + } }; void LocalSharedFilesDialog::spawnCustomPopupMenu( QPoint point ) { - if (!rsPeers) return; /* not ready yet! */ + if (!rsPeers) return; /* not ready yet! */ - QModelIndex idx = ui.dirTreeView->indexAt(point) ; - if (!idx.isValid()) return ; + QModelIndex idx = ui.dirTreeView->indexAt(point) ; + if (!idx.isValid()) return ; - QModelIndex midx = proxyModel->mapToSource(idx) ; - if (!midx.isValid()) return ; + QModelIndex midx = proxyModel->mapToSource(idx) ; + if (!midx.isValid()) return ; - currentFile = model->data(midx, RetroshareDirModel::FileNameRole).toString() ; - int type = model->getType(midx) ; - if (type != DIR_TYPE_DIR && type != DIR_TYPE_FILE && type != DIR_TYPE_EXTRA_FILE) return; + currentFile = model->data(midx, RetroshareDirModel::FileNameRole).toString() ; + int type = model->getType(midx) ; + if (type != DIR_TYPE_DIR && type != DIR_TYPE_FILE && type != DIR_TYPE_EXTRA_FILE) return; - QMenu contextMnu(this) ; + QMenu contextMnu(this) ; - bool bIsRsColl = currentFile.endsWith(RsCollection::ExtensionString); - collCreateAct->setEnabled(true); - collModifAct->setEnabled(bIsRsColl); - collViewAct->setEnabled(bIsRsColl); - collOpenAct->setEnabled(true); + bool bIsRsColl = currentFile.endsWith(RsCollection::ExtensionString); + collCreateAct->setEnabled(true); + collModifAct->setEnabled(bIsRsColl); + collViewAct->setEnabled(bIsRsColl); + collOpenAct->setEnabled(true); - QMenu collectionMenu(tr("Collection"), this); - collectionMenu.setIcon(QIcon(IMAGE_LIBRARY)); - collectionMenu.addAction(collCreateAct); - collectionMenu.addAction(collModifAct); - collectionMenu.addAction(collViewAct); - collectionMenu.addAction(collOpenAct); + QMenu collectionMenu(tr("Collection"), this); + collectionMenu.setIcon(QIcon(IMAGE_LIBRARY)); + collectionMenu.addAction(collCreateAct); + collectionMenu.addAction(collModifAct); + collectionMenu.addAction(collViewAct); + collectionMenu.addAction(collOpenAct); - switch (type) { - case DIR_TYPE_DIR : - contextMnu.addAction(openfolderAct) ; - contextMnu.addAction(copylinkAct) ; - contextMnu.addSeparator() ;//------------------------------------ - contextMnu.addMenu(&collectionMenu) ; - break ; + switch (type) { + case DIR_TYPE_DIR : + contextMnu.addAction(openfolderAct) ; + contextMnu.addAction(copylinkAct) ; + contextMnu.addSeparator() ;//------------------------------------ + contextMnu.addMenu(&collectionMenu) ; + break ; - case DIR_TYPE_FILE : - contextMnu.addAction(openfileAct) ; - contextMnu.addSeparator() ;//------------------------------------ - contextMnu.addAction(copylinkAct) ; - contextMnu.addAction(sendlinkAct) ; - contextMnu.addSeparator() ;//------------------------------------ - contextMnu.addMenu(&collectionMenu) ; - contextMnu.addSeparator() ;//------------------------------------ - contextMnu.addAction(QIcon(IMAGE_MSG), tr("Recommend in a message to..."), this, SLOT(recommendFilesToMsg())) ; + case DIR_TYPE_FILE : + contextMnu.addAction(openfileAct) ; + contextMnu.addSeparator() ;//------------------------------------ + contextMnu.addAction(copylinkAct) ; + contextMnu.addAction(sendlinkAct) ; + contextMnu.addSeparator() ;//------------------------------------ + contextMnu.addMenu(&collectionMenu) ; + contextMnu.addSeparator() ;//------------------------------------ + contextMnu.addAction(QIcon(IMAGE_MSG), tr("Recommend in a message to..."), this, SLOT(recommendFilesToMsg())) ; break; case DIR_TYPE_EXTRA_FILE: - contextMnu.addAction(openfileAct) ; - contextMnu.addSeparator() ;//------------------------------------ - contextMnu.addAction(copylinkAct) ; - contextMnu.addAction(sendlinkAct) ; - contextMnu.addAction(removeExtraFileAct) ; + contextMnu.addAction(openfileAct) ; + contextMnu.addSeparator() ;//------------------------------------ + contextMnu.addAction(copylinkAct) ; + contextMnu.addAction(sendlinkAct) ; + contextMnu.addAction(removeExtraFileAct) ; - break ; + break ; - default : - return ; - } + default : + return ; + } - QMenu shareChannelMenu(tr("Share on channel...")) ; // added here because the shareChannelMenu QMenu object is deleted afterwards - QMenu shareForumMenu(tr("Share on forum...")) ; // added here because the shareChannelMenu QMenu object is deleted afterwards + QMenu shareChannelMenu(tr("Share on channel...")) ; // added here because the shareChannelMenu QMenu object is deleted afterwards + QMenu shareForumMenu(tr("Share on forum...")) ; // added here because the shareChannelMenu QMenu object is deleted afterwards if(type != DIR_TYPE_EXTRA_FILE) - { - GxsChannelDialog *channelDialog = dynamic_cast(MainWindow::getPage(MainWindow::Channels)); + { + GxsChannelDialog *channelDialog = dynamic_cast(MainWindow::getPage(MainWindow::Channels)); - if(channelDialog != NULL) - { - shareChannelMenu.setIcon(QIcon(IMAGE_CHANNEL)); + if(channelDialog != NULL) + { + shareChannelMenu.setIcon(QIcon(IMAGE_CHANNEL)); - std::map grp_metas ; - channelDialog->getGroupList(grp_metas) ; + std::map grp_metas ; + channelDialog->getGroupList(grp_metas) ; - std::vector > grplist ; // I dont use a std::map because two or more channels may have the same name. + std::vector > grplist ; // I dont use a std::map because two or more channels may have the same name. - for(auto it(grp_metas.begin());it!=grp_metas.end();++it) - if(IS_GROUP_PUBLISHER((*it).second.mSubscribeFlags) && IS_GROUP_SUBSCRIBED((*it).second.mSubscribeFlags)) - grplist.push_back(std::make_pair((*it).second.mGroupName, (*it).second.mGroupId)); + for(auto it(grp_metas.begin());it!=grp_metas.end();++it) + if(IS_GROUP_PUBLISHER((*it).second.mSubscribeFlags) && IS_GROUP_SUBSCRIBED((*it).second.mSubscribeFlags)) + grplist.push_back(std::make_pair((*it).second.mGroupName, (*it).second.mGroupId)); - std::sort(grplist.begin(),grplist.end(),ChannelCompare()) ; + std::sort(grplist.begin(),grplist.end(),ChannelCompare()) ; - for(auto it(grplist.begin());it!=grplist.end();++it) - shareChannelMenu.addAction(QString::fromUtf8((*it).first.c_str()), this, SLOT(shareOnChannel()))->setData(QString::fromStdString((*it).second.toStdString())) ; + for(auto it(grplist.begin());it!=grplist.end();++it) + shareChannelMenu.addAction(QString::fromUtf8((*it).first.c_str()), this, SLOT(shareOnChannel()))->setData(QString::fromStdString((*it).second.toStdString())) ; - contextMnu.addMenu(&shareChannelMenu) ; - } + contextMnu.addMenu(&shareChannelMenu) ; + } - GxsForumsDialog *forumsDialog = dynamic_cast(MainWindow::getPage(MainWindow::Forums)); + GxsForumsDialog *forumsDialog = dynamic_cast(MainWindow::getPage(MainWindow::Forums)); - if(forumsDialog != NULL) - { - shareForumMenu.setIcon(QIcon(IMAGE_FORUMS)); + if(forumsDialog != NULL) + { + shareForumMenu.setIcon(QIcon(IMAGE_FORUMS)); - std::map grp_metas ; - forumsDialog->getGroupList(grp_metas) ; + std::map grp_metas ; + forumsDialog->getGroupList(grp_metas) ; - std::vector > grplist ; // I dont use a std::map because two or more channels may have the same name. + std::vector > grplist ; // I dont use a std::map because two or more channels may have the same name. - for(auto it(grp_metas.begin());it!=grp_metas.end();++it) - if(IS_GROUP_SUBSCRIBED((*it).second.mSubscribeFlags)) - grplist.push_back(std::make_pair((*it).second.mGroupName, (*it).second.mGroupId)); + for(auto it(grp_metas.begin());it!=grp_metas.end();++it) + if(IS_GROUP_SUBSCRIBED((*it).second.mSubscribeFlags)) + grplist.push_back(std::make_pair((*it).second.mGroupName, (*it).second.mGroupId)); - std::sort(grplist.begin(),grplist.end(),ChannelCompare()) ; + std::sort(grplist.begin(),grplist.end(),ChannelCompare()) ; - for(auto it(grplist.begin());it!=grplist.end();++it) - shareForumMenu.addAction(QString::fromUtf8((*it).first.c_str()), this, SLOT(shareInForum()))->setData(QString::fromStdString((*it).second.toStdString())) ; + for(auto it(grplist.begin());it!=grplist.end();++it) + shareForumMenu.addAction(QString::fromUtf8((*it).first.c_str()), this, SLOT(shareInForum()))->setData(QString::fromStdString((*it).second.toStdString())) ; - contextMnu.addMenu(&shareForumMenu) ; - } - } + contextMnu.addMenu(&shareForumMenu) ; + } + } - contextMnu.exec(QCursor::pos()) ; + contextMnu.exec(QCursor::pos()) ; } void LocalSharedFilesDialog::shareOnChannel() { - RsGxsGroupId groupId(qobject_cast(sender())->data().toString().toStdString()); + RsGxsGroupId groupId(qobject_cast(sender())->data().toString().toStdString()); - GxsChannelDialog *channelDialog = dynamic_cast(MainWindow::getPage(MainWindow::Channels)); + GxsChannelDialog *channelDialog = dynamic_cast(MainWindow::getPage(MainWindow::Channels)); - if(channelDialog == NULL) - return ; + if(channelDialog == NULL) + return ; - std::list files_info ; + std::list files_info ; - QList file_links_list ; - bool has_unhashed_files ; + QList file_links_list ; + bool has_unhashed_files ; - copyLinks(getSelected(),false,file_links_list,has_unhashed_files) ; + copyLinks(getSelected(),false,file_links_list,has_unhashed_files) ; - channelDialog->shareOnChannel(groupId,file_links_list) ; + channelDialog->shareOnChannel(groupId,file_links_list) ; } void LocalSharedFilesDialog::shareInForum() { - RsGxsGroupId groupId(qobject_cast(sender())->data().toString().toStdString()); + RsGxsGroupId groupId(qobject_cast(sender())->data().toString().toStdString()); - GxsForumsDialog *forumsDialog = dynamic_cast(MainWindow::getPage(MainWindow::Forums)); + GxsForumsDialog *forumsDialog = dynamic_cast(MainWindow::getPage(MainWindow::Forums)); - if(forumsDialog == NULL) - return ; + if(forumsDialog == NULL) + return ; - std::list files_info ; + std::list files_info ; - QList file_links_list ; - bool has_unhashed_files ; + QList file_links_list ; + bool has_unhashed_files ; - copyLinks(getSelected(),false,file_links_list,has_unhashed_files) ; + copyLinks(getSelected(),false,file_links_list,has_unhashed_files) ; - forumsDialog->shareInMessage(groupId,file_links_list) ; + forumsDialog->shareInMessage(groupId,file_links_list) ; } //============================================================================ @@ -1304,90 +1309,90 @@ LocalSharedFilesDialog::tryToAddNewAssotiation() void SharedFilesDialog::indicatorChanged(int index) { - static uint32_t correct_indicator[4] = { IND_ALWAYS,IND_LAST_DAY,IND_LAST_WEEK,IND_LAST_MONTH } ; + static uint32_t correct_indicator[4] = { IND_ALWAYS,IND_LAST_DAY,IND_LAST_WEEK,IND_LAST_MONTH } ; - model->changeAgeIndicator(correct_indicator[index]); + model->changeAgeIndicator(correct_indicator[index]); - ui.dirTreeView->update(ui.dirTreeView->rootIndex()); + ui.dirTreeView->update(ui.dirTreeView->rootIndex()); - if (correct_indicator[index] != IND_ALWAYS) - ui.dirTreeView->sortByColumn(COLUMN_AGE, Qt::AscendingOrder); - else - ui.dirTreeView->sortByColumn(COLUMN_NAME, Qt::AscendingOrder); + if (correct_indicator[index] != IND_ALWAYS) + ui.dirTreeView->sortByColumn(COLUMN_AGE, Qt::AscendingOrder); + else + ui.dirTreeView->sortByColumn(COLUMN_NAME, Qt::AscendingOrder); - updateDisplay() ; + updateDisplay() ; } void SharedFilesDialog::onFilterTextEdited() { - QString text = ui.filterPatternLineEdit->text(); + QString text = ui.filterPatternLineEdit->text(); - if (text.isEmpty()) { - ui.filterClearButton->hide(); - } else { - ui.filterClearButton->show(); - } + if (text.isEmpty()) { + ui.filterClearButton->hide(); + } else { + ui.filterClearButton->show(); + } - if (text == lastFilterString) { - ui.filterStartButton->hide(); - } else { - ui.filterStartButton->show(); - } + if (text == lastFilterString) { + ui.filterStartButton->hide(); + } else { + ui.filterStartButton->show(); + } - if(text.length() > 0 && text.length() < 3) - { - ui.filterStartButton->setEnabled(false) ; - ui.filterPatternFrame->setToolTip(tr("Search string should be at least 3 characters long.")) ; - return ; - } + if(text.length() > 0 && text.length() < 3) + { + ui.filterStartButton->setEnabled(false) ; + ui.filterPatternFrame->setToolTip(tr("Search string should be at least 3 characters long.")) ; + return ; + } - ui.filterStartButton->setEnabled(true) ; - ui.filterPatternFrame->setToolTip(QString()); + ui.filterStartButton->setEnabled(true) ; + ui.filterPatternFrame->setToolTip(QString()); - //FilterItems(); + //FilterItems(); #ifndef DISABLE_SEARCH_WHILE_TYPING - mFilterTimer->start( 500 ); // This will fire filterRegExpChanged after 500 ms. - // If the user types something before it fires, the timer restarts counting + mFilterTimer->start( 500 ); // This will fire filterRegExpChanged after 500 ms. + // If the user types something before it fires, the timer restarts counting #endif } #ifdef DEPRECATED_CODE void SharedFilesDialog::filterRegExpChanged() { - QString text = ui.filterPatternLineEdit->text(); + QString text = ui.filterPatternLineEdit->text(); - if(text.length() > 0 && proxyModel == tree_proxyModel) - { - std::list result_list ; - std::list keywords; + if(text.length() > 0 && proxyModel == tree_proxyModel) + { + std::list result_list ; + std::list keywords; - QStringList lst = text.split(" ",QString::SkipEmptyParts) ; + QStringList lst = text.split(" ",QString::SkipEmptyParts) ; - for(auto it(lst.begin());it!=lst.end();++it) - keywords.push_back((*it).toStdString()); + for(auto it(lst.begin());it!=lst.end();++it) + keywords.push_back((*it).toStdString()); - FileSearchFlags flags = isRemote()?RS_FILE_HINTS_REMOTE:RS_FILE_HINTS_LOCAL; + FileSearchFlags flags = isRemote()?RS_FILE_HINTS_REMOTE:RS_FILE_HINTS_LOCAL; - if(keywords.size() > 1) - { - RsRegularExpression::NameExpression exp(RsRegularExpression::ContainsAllStrings,keywords,true); - rsFiles->SearchBoolExp(&exp,result_list, flags) ; - } - else - rsFiles->SearchKeywords(keywords,result_list, flags) ; + if(keywords.size() > 1) + { + RsRegularExpression::NameExpression exp(RsRegularExpression::ContainsAllStrings,keywords,true); + rsFiles->SearchBoolExp(&exp,result_list, flags) ; + } + else + rsFiles->SearchKeywords(keywords,result_list, flags) ; - uint32_t nb_results = result_list.size(); + uint32_t nb_results = result_list.size(); - if(nb_results > MAX_SEARCH_RESULTS) - { - ui.filterStartButton->setEnabled(false) ; - ui.filterPatternFrame->setToolTip(tr("More than 3000 results. Add more/longer search words to select less.")) ; - return ; - } - } + if(nb_results > MAX_SEARCH_RESULTS) + { + ui.filterStartButton->setEnabled(false) ; + ui.filterPatternFrame->setToolTip(tr("More than 3000 results. Add more/longer search words to select less.")) ; + return ; + } + } - ui.filterStartButton->setEnabled(true) ; - ui.filterPatternFrame->setToolTip(QString()); + ui.filterStartButton->setEnabled(true) ; + ui.filterPatternFrame->setToolTip(QString()); } #endif @@ -1403,25 +1408,25 @@ void SharedFilesDialog::clearFilter() /* clear Filter */ void SharedFilesDialog::startFilter() { - ui.filterStartButton->hide(); - lastFilterString = ui.filterPatternLineEdit->text(); + ui.filterStartButton->hide(); + lastFilterString = ui.filterPatternLineEdit->text(); - FilterItems(); + FilterItems(); } void SharedFilesDialog::updateDirTreeView() { - if (model == flat_model) - { - size_t maxSize = 0; - FlatStyle_RDM* flat = dynamic_cast(flat_model); - if (flat && flat->isMaxRefsTableSize(&maxSize)) - { - ui.dirTreeView->setToolTip(tr("Warning: You reach max (%1) files in flat list. No more will be added.").arg(maxSize)); - return; - } - } - ui.dirTreeView->setToolTip(""); + if (model == flat_model) + { + size_t maxSize = 0; + FlatStyle_RDM* flat = dynamic_cast(flat_model); + if (flat && flat->isMaxRefsTableSize(&maxSize)) + { + ui.dirTreeView->setToolTip(tr("Warning: You reach max (%1) files in flat list. No more will be added.").arg(maxSize)); + return; + } + } + ui.dirTreeView->setToolTip(""); } //#define DEBUG_SHARED_FILES_DIALOG @@ -1435,90 +1440,90 @@ void SharedFilesDialog::updateDirTreeView() void recursMakeVisible(QTreeView *tree,const QSortFilterProxyModel *proxyModel,const QModelIndex& indx,uint32_t depth,const std::vector >& pointers,QList& hidden_list) { #ifdef DEBUG_SHARED_FILES_DIALOG - for(uint32_t i=0;isetRowHidden(indx.row(), indx.parent(), false) ; + tree->setRowHidden(indx.row(), indx.parent(), false) ; #ifdef EXPAND_WHILE_SEARCHING - tree->setExpanded(indx,true) ; + tree->setExpanded(indx,true) ; #endif - bool found = false ; + bool found = false ; for (int row = 0; row < rowCount; ++row) - { - QModelIndex child_index = indx.child(row,0); + { + QModelIndex child_index = indx.child(row,0); - if(ptrs.find(proxyModel->mapToSource(child_index).internalPointer()) != ptrs.end()) - { + if(ptrs.find(proxyModel->mapToSource(child_index).internalPointer()) != ptrs.end()) + { #ifdef DEBUG_SHARED_FILES_DIALOG - for(uint32_t i=0;imapToSource(child_index).internalPointer() << " visible" << std::endl; + for(uint32_t i=0;imapToSource(child_index).internalPointer() << " visible" << std::endl; #endif - recursMakeVisible(tree,proxyModel,child_index,depth+1,pointers,hidden_list) ; - found = true ; - } - else - { - tree->setRowHidden(child_index.row(), indx, true) ; - hidden_list.push_back(proxyModel->mapToSource(child_index)) ; + recursMakeVisible(tree,proxyModel,child_index,depth+1,pointers,hidden_list) ; + found = true ; + } + else + { + tree->setRowHidden(child_index.row(), indx, true) ; + hidden_list.push_back(proxyModel->mapToSource(child_index)) ; #ifdef EXPAND_WHILE_SEARCHING - tree->setExpanded(child_index,false) ; + tree->setExpanded(child_index,false) ; #endif #ifdef DEBUG_SHARED_FILES_DIALOG - for(uint32_t i=0;imapToSource(child_index).internalPointer() << " hidden" << std::endl; + for(uint32_t i=0;imapToSource(child_index).internalPointer() << " hidden" << std::endl; #endif - } - } + } + } - if(!found && depth == 0) - { - tree->setRowHidden(indx.row(), indx.parent(), true) ; - hidden_list.push_back(proxyModel->mapToSource(indx)) ; - } + if(!found && depth == 0) + { + tree->setRowHidden(indx.row(), indx.parent(), true) ; + hidden_list.push_back(proxyModel->mapToSource(indx)) ; + } } void SharedFilesDialog::restoreInvisibleItems() { - std::cerr << "Restoring " << mHiddenIndexes.size() << " invisible indexes" << std::endl; + std::cerr << "Restoring " << mHiddenIndexes.size() << " invisible indexes" << std::endl; - for(QList::const_iterator it(mHiddenIndexes.begin());it!=mHiddenIndexes.end();++it) - { - QModelIndex indx = proxyModel->mapFromSource(*it); + for(QList::const_iterator it(mHiddenIndexes.begin());it!=mHiddenIndexes.end();++it) + { + QModelIndex indx = proxyModel->mapFromSource(*it); - if(indx.isValid()) - ui.dirTreeView->setRowHidden(indx.row(), indx.parent(), false) ; - } + if(indx.isValid()) + ui.dirTreeView->setRowHidden(indx.row(), indx.parent(), false) ; + } - mHiddenIndexes.clear(); + mHiddenIndexes.clear(); } #endif class QCursorContextBlocker { - public: - QCursorContextBlocker(QWidget *w) - : mW(w) - { - mW->setCursor(Qt::WaitCursor); - mW->blockSignals(true) ; - } + public: + QCursorContextBlocker(QWidget *w) + : mW(w) + { + mW->setCursor(Qt::WaitCursor); + mW->blockSignals(true) ; + } - ~QCursorContextBlocker() - { - mW->setCursor(Qt::ArrowCursor); - mW->blockSignals(false) ; - } + ~QCursorContextBlocker() + { + mW->setCursor(Qt::ArrowCursor); + mW->blockSignals(false) ; + } - private: - QWidget *mW ; + private: + QWidget *mW ; }; void SharedFilesDialog::FilterItems() @@ -1528,68 +1533,68 @@ void SharedFilesDialog::FilterItems() return; #endif - QString text = ui.filterPatternLineEdit->text(); + QString text = ui.filterPatternLineEdit->text(); - if(mLastFilterText == text) // do not filter again if we already did. This is an optimization - { + if(mLastFilterText == text) // do not filter again if we already did. This is an optimization + { #ifdef DEBUG_SHARED_FILES_DIALOG - std::cerr << "Last text is equal to text. skipping" << std::endl; + std::cerr << "Last text is equal to text. skipping" << std::endl; #endif - return ; - } + return ; + } #ifdef DEBUG_SHARED_FILES_DIALOG - std::cerr << "New last text. Performing the filter on string \"" << text.toStdString() << "\"" << std::endl; + std::cerr << "New last text. Performing the filter on string \"" << text.toStdString() << "\"" << std::endl; #endif - mLastFilterText = text ; + mLastFilterText = text ; - QCursorContextBlocker q(ui.dirTreeView) ; + QCursorContextBlocker q(ui.dirTreeView) ; - QCoreApplication::processEvents() ; + QCoreApplication::processEvents() ; - std::list result_list ; - uint32_t found = 0 ; + std::list result_list ; + uint32_t found = 0 ; - if(text == "") - { - model->filterItems(std::list(),found) ; - model->update() ; - return ; - } + if(text == "") + { + model->filterItems(std::list(),found) ; + model->update() ; + return ; + } - if(text.length() < 3) - return ; + if(text.length() < 3) + return ; - //FileSearchFlags flags = isRemote()?RS_FILE_HINTS_REMOTE:RS_FILE_HINTS_LOCAL; - QStringList lst = text.split(" ",QString::SkipEmptyParts) ; - std::list keywords ; + //FileSearchFlags flags = isRemote()?RS_FILE_HINTS_REMOTE:RS_FILE_HINTS_LOCAL; + QStringList lst = text.split(" ",QString::SkipEmptyParts) ; + std::list keywords ; - for(auto it(lst.begin());it!=lst.end();++it) - keywords.push_back((*it).toStdString()); + for(auto it(lst.begin());it!=lst.end();++it) + keywords.push_back((*it).toStdString()); - model->filterItems(keywords,found) ; - model->update() ; + model->filterItems(keywords,found) ; + model->update() ; - if(found > 0) - expandAll(); + if(found > 0) + expandAll(); - if(found == 0) - ui.filterPatternFrame->setToolTip(tr("No result.")) ; - else if(found > MAX_SEARCH_RESULTS) - ui.filterPatternFrame->setToolTip(tr("More than %1 results. Add more/longer search words to select less.").arg(MAX_SEARCH_RESULTS)) ; - else - ui.filterPatternFrame->setToolTip(tr("Found %1 results.").arg(found)) ; + if(found == 0) + ui.filterPatternFrame->setToolTip(tr("No result.")) ; + else if(found > MAX_SEARCH_RESULTS) + ui.filterPatternFrame->setToolTip(tr("More than %1 results. Add more/longer search words to select less.").arg(MAX_SEARCH_RESULTS)) ; + else + ui.filterPatternFrame->setToolTip(tr("Found %1 results.").arg(found)) ; #ifdef DEBUG_SHARED_FILES_DIALOG - std::cerr << found << " results found by search." << std::endl; + std::cerr << found << " results found by search." << std::endl; #endif } void SharedFilesDialog::removeExtraFile() { - std::list files_info ; + std::list files_info ; - model->getFileInfoFromIndexList(getSelected(),files_info); + model->getFileInfoFromIndexList(getSelected(),files_info); for(auto it(files_info.begin());it!=files_info.end();++it) { @@ -1602,17 +1607,17 @@ void SharedFilesDialog::removeExtraFile() #ifdef DEPRECATED_CODE bool SharedFilesDialog::flat_FilterItem(const QModelIndex &index, const QString &text, int /*level*/) { - if(index.data(RetroshareDirModel::FileNameRole).toString().contains(text, Qt::CaseInsensitive)) - { - ui.dirTreeView->setRowHidden(index.row(), index.parent(), false); - return false ; - } - else - { - ui.dirTreeView->setRowHidden(index.row(), index.parent(), true); - mHiddenIndexes.push_back(proxyModel->mapToSource(index)); - return true ; - } + if(index.data(RetroshareDirModel::FileNameRole).toString().contains(text, Qt::CaseInsensitive)) + { + ui.dirTreeView->setRowHidden(index.row(), index.parent(), false); + return false ; + } + else + { + ui.dirTreeView->setRowHidden(index.row(), index.parent(), true); + mHiddenIndexes.push_back(proxyModel->mapToSource(index)); + return true ; + } } bool SharedFilesDialog::tree_FilterItem(const QModelIndex &index, const QString &text, int level) @@ -1641,10 +1646,10 @@ bool SharedFilesDialog::tree_FilterItem(const QModelIndex &index, const QString if (visible || visibleChildCount) { ui.dirTreeView->setRowHidden(index.row(), index.parent(), false); } else { - { + { ui.dirTreeView->setRowHidden(index.row(), index.parent(), true); - mHiddenIndexes.push_back(proxyModel->mapToSource(index)); - } + mHiddenIndexes.push_back(proxyModel->mapToSource(index)); + } } return (visible || visibleChildCount); diff --git a/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.h b/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.h index 5206e1d06..6ee989170 100644 --- a/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.h +++ b/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.h @@ -38,10 +38,10 @@ class SharedFilesDialog : public RsAutoUpdatePage public: /** Default Constructor */ - SharedFilesDialog(RetroshareDirModel *tree_model,RetroshareDirModel *flat_model,QWidget *parent = 0); + SharedFilesDialog(bool remote_mode,QWidget *parent = 0); /** Default Destructor */ - ~SharedFilesDialog() {} + ~SharedFilesDialog() ; virtual void hideEvent(QHideEvent *) ; virtual void showEvent(QShowEvent *) ; From 243ba595f05fd3311368ab8b8be5f727acd94d09 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 15 Aug 2020 13:41:21 +0200 Subject: [PATCH 83/95] added missing virtual destructors possibly causing memory leaks --- retroshare-gui/src/gui/common/FriendListModel.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/retroshare-gui/src/gui/common/FriendListModel.h b/retroshare-gui/src/gui/common/FriendListModel.h index 5e8d84930..871dc14b9 100644 --- a/retroshare-gui/src/gui/common/FriendListModel.h +++ b/retroshare-gui/src/gui/common/FriendListModel.h @@ -39,8 +39,16 @@ public: explicit RsFriendListModel(QObject *parent = NULL); ~RsFriendListModel(){} - class RsNodeDetails: public RsPeerDetails {};// in the near future, there will be a specific class for Profile/Node details in replacement of RsPeerDetails - class RsProfileDetails: public RsPeerDetails {}; + class RsNodeDetails: public RsPeerDetails + { + public: + virtual ~RsNodeDetails() {} + };// in the near future, there will be a specific class for Profile/Node details in replacement of RsPeerDetails + class RsProfileDetails: public RsPeerDetails + { + public: + virtual ~RsProfileDetails() {} + }; struct HierarchicalGroupInformation { @@ -55,6 +63,7 @@ public: struct HierarchicalNodeInformation { HierarchicalNodeInformation() : last_update_ts(0) {} + virtual ~HierarchicalNodeInformation() {} rstime_t last_update_ts; RsNodeDetails node_info; From bb6706e996cb97d6717725383b4009512df28245 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 15 Aug 2020 18:54:00 +0200 Subject: [PATCH 84/95] added missing destructor in MsgMetaCache --- libretroshare/src/gxs/rsdataservice.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libretroshare/src/gxs/rsdataservice.h b/libretroshare/src/gxs/rsdataservice.h index 56dc8dea6..bf532afae 100644 --- a/libretroshare/src/gxs/rsdataservice.h +++ b/libretroshare/src/gxs/rsdataservice.h @@ -39,6 +39,14 @@ template class t_MetaDataCache { public: t_MetaDataCache() : mCache_ContainsAllMetas(false) {} + virtual ~t_MetaDataCache() + { + for(auto it: mMetas) + delete it.second; + + for(auto it: mOldCachedItems) + delete it.second; + } bool isCacheUpToDate() const { return mCache_ContainsAllMetas ; } void setCacheUpToDate(bool b) { mCache_ContainsAllMetas = b; } From dcbcc95e4187de4ab3b297861b3b8068db1ad0d5 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 15 Aug 2020 21:11:11 +0200 Subject: [PATCH 85/95] fixed missing delete of Files delegate in channel model --- .../src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp | 3 ++- .../src/gui/gxschannels/GxsChannelPostsWidgetWithModel.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp index 2a44ba985..d07f4ad74 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp @@ -245,7 +245,7 @@ GxsChannelPostsWidgetWithModel::GxsChannelPostsWidgetWithModel(const RsGxsGroupI ui->channelPostFiles_TV->sortByColumn(0, Qt::AscendingOrder); ui->channelFiles_TV->setModel(mChannelFilesModel = new RsGxsChannelPostFilesModel()); - ui->channelFiles_TV->setItemDelegate(new ChannelPostFilesDelegate()); + ui->channelFiles_TV->setItemDelegate(mFilesDelegate = new ChannelPostFilesDelegate()); ui->channelFiles_TV->setPlaceholderText(tr("No files in the channel, or no channel selected")); ui->channelFiles_TV->setSortingEnabled(true); ui->channelFiles_TV->sortByColumn(0, Qt::AscendingOrder); @@ -631,6 +631,7 @@ GxsChannelPostsWidgetWithModel::~GxsChannelPostsWidgetWithModel() processSettings(false); delete(mAutoDownloadAction); + delete mFilesDelegate; delete ui; } diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.h b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.h index be2ccdf6c..5fb04bb6f 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.h +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.h @@ -174,6 +174,7 @@ private: RsGxsChannelPostFilesModel *mChannelPostFilesModel; RsGxsChannelPostFilesModel *mChannelFilesModel; ChannelPostDelegate *mChannelPostsDelegate; + ChannelPostFilesDelegate *mFilesDelegate; RsGxsMessageId mSelectedPost; From 209355b9a5d39817588bb57d7b714c43d6e5b72a Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 15 Aug 2020 22:17:52 +0200 Subject: [PATCH 86/95] converted all calls to QIcon("somefile.png") into FilesDefs::getIconFromQtResourcePath("somefile.png") to save memory duplicated by Qt --- retroshare-gui/src/gui/ChatLobbyWidget.cpp | 35 ++++----- retroshare-gui/src/gui/Identity/IdDialog.cpp | 28 ++++---- .../src/gui/Posted/PostedDialog.cpp | 2 +- .../src/gui/chat/ChatLobbyDialog.cpp | 10 +-- .../src/gui/chat/ChatLobbyUserNotify.cpp | 7 +- retroshare-gui/src/gui/chat/ChatTabWidget.cpp | 9 +-- .../src/gui/chat/ChatUserNotify.cpp | 5 +- retroshare-gui/src/gui/chat/ChatWidget.cpp | 4 +- .../src/gui/chat/PopupChatDialog.cpp | 5 +- .../src/gui/chat/PopupChatWindow.cpp | 11 +-- .../src/gui/chat/PopupDistantChatDialog.cpp | 9 +-- retroshare-gui/src/gui/common/Emoticons.cpp | 7 +- retroshare-gui/src/gui/common/FriendList.cpp | 40 +++++------ .../src/gui/common/FriendSelectionWidget.cpp | 11 +-- .../src/gui/common/GroupFlagsWidget.cpp | 19 +++-- .../src/gui/common/GroupFlagsWidget.h | 2 +- .../src/gui/common/GroupTreeWidget.cpp | 5 +- .../src/gui/common/LineEditClear.cpp | 8 +-- .../src/gui/common/MimeTextEdit.cpp | 5 +- .../src/gui/common/NewFriendList.cpp | 35 ++++----- .../src/gui/common/PopularityDefs.cpp | 13 ++-- .../src/gui/common/RsCollectionDialog.cpp | 3 +- .../src/gui/common/SubscribeToolButton.cpp | 7 +- .../src/gui/connect/ConnectFriendWizard.cpp | 5 +- .../src/gui/connect/PGPKeyDialog.cpp | 5 +- retroshare-gui/src/gui/elastic/elnode.cpp | 7 +- .../src/gui/feeds/GxsChannelGroupItem.cpp | 5 +- .../src/gui/feeds/GxsForumGroupItem.cpp | 5 +- .../src/gui/feeds/GxsForumMsgItem.cpp | 5 +- retroshare-gui/src/gui/feeds/MsgItem.cpp | 5 +- .../src/gui/feeds/NewsFeedUserNotify.cpp | 3 +- retroshare-gui/src/gui/feeds/PeerItem.cpp | 5 +- .../src/gui/feeds/PostedGroupItem.cpp | 5 +- .../src/gui/feeds/SecurityIpItem.cpp | 5 +- retroshare-gui/src/gui/feeds/SecurityItem.cpp | 5 +- .../src/gui/gxs/GxsCommentTreeWidget.cpp | 8 +-- .../src/gui/gxs/GxsGroupFrameDialog.cpp | 72 +++++++++---------- retroshare-gui/src/gui/gxs/GxsIdChooser.cpp | 5 +- retroshare-gui/src/gui/gxs/GxsIdDetails.cpp | 33 ++++----- .../src/gui/gxs/GxsIdTreeWidgetItem.cpp | 2 +- .../gui/gxschannels/CreateGxsChannelMsg.cpp | 4 +- .../src/gui/gxschannels/GxsChannelDialog.cpp | 12 ++-- .../gui/gxschannels/GxsChannelPostsWidget.cpp | 4 +- .../gui/gxsforums/GxsForumThreadWidget.cpp | 2 +- .../src/gui/gxsforums/GxsForumsDialog.cpp | 4 +- .../src/gui/msgs/MessageComposer.cpp | 17 ++--- .../src/gui/msgs/MessageUserNotify.cpp | 5 +- retroshare-gui/src/gui/msgs/MessageWidget.cpp | 8 +-- retroshare-gui/src/gui/msgs/MessageWindow.cpp | 7 +- .../src/gui/msgs/MessagesDialog.cpp | 30 ++++---- retroshare-gui/src/gui/notifyqt.cpp | 3 +- .../src/gui/profile/ProfileManager.cpp | 3 +- .../src/gui/settings/AppearancePage.cpp | 3 +- .../src/gui/settings/FileAssociationsPage.cpp | 7 +- .../src/gui/settings/ServerPage.cpp | 6 +- .../src/gui/settings/rsettingswin.h | 3 +- .../gui/statistics/GlobalRouterStatistics.cpp | 2 +- .../src/gui/statistics/StatisticsWindow.cpp | 17 ++--- .../src/gui/statusbar/SoundStatus.cpp | 3 +- .../src/gui/statusbar/SysTrayStatus.cpp | 3 +- .../src/gui/unfinished/ApplicationWindow.cpp | 8 +-- retroshare-gui/src/main.cpp | 7 +- retroshare-gui/src/rshare.cpp | 3 +- 63 files changed, 330 insertions(+), 291 deletions(-) diff --git a/retroshare-gui/src/gui/ChatLobbyWidget.cpp b/retroshare-gui/src/gui/ChatLobbyWidget.cpp index bd802bae4..475495674 100644 --- a/retroshare-gui/src/gui/ChatLobbyWidget.cpp +++ b/retroshare-gui/src/gui/ChatLobbyWidget.cpp @@ -34,6 +34,7 @@ #include "gui/settings/rsharesettings.h" #include "util/HandleRichText.h" #include "util/QtVersion.h" +#include "gui/common/FilesDefs.h" #include "retroshare/rsmsgs.h" #include "retroshare/rspeers.h" @@ -281,7 +282,7 @@ void ChatLobbyWidget::lobbyTreeWidgetCustomPopupMenu(QPoint) QMenu contextMnu(this); if (item && item->type() == TYPE_FOLDER) { - QAction *action = contextMnu.addAction(QIcon(IMAGE_CREATE), tr("Create chat room"), this, SLOT(createChatLobby())); + QAction *action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_CREATE), tr("Create chat room"), this, SLOT(createChatLobby())); action->setData(item->data(COLUMN_DATA, ROLE_PRIVACYLEVEL).toInt()); } @@ -291,7 +292,7 @@ void ChatLobbyWidget::lobbyTreeWidgetCustomPopupMenu(QPoint) rsIdentity->getOwnIds(own_identities) ; if (item->data(COLUMN_DATA, ROLE_SUBSCRIBED).toBool()) - contextMnu.addAction(QIcon(IMAGE_UNSUBSCRIBE), tr("Leave this room"), this, SLOT(unsubscribeItem())); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_UNSUBSCRIBE), tr("Leave this room"), this, SLOT(unsubscribeItem())); else { QTreeWidgetItem *item = ui.lobbyTreeWidget->currentItem(); @@ -306,18 +307,18 @@ void ChatLobbyWidget::lobbyTreeWidgetCustomPopupMenu(QPoint) if(own_identities.empty()) { if(removed) - contextMnu.addAction(QIcon(IMAGE_SUBSCRIBE), tr("Create a non anonymous identity and enter this room"), this, SLOT(createIdentityAndSubscribe())); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_SUBSCRIBE), tr("Create a non anonymous identity and enter this room"), this, SLOT(createIdentityAndSubscribe())); else - contextMnu.addAction(QIcon(IMAGE_SUBSCRIBE), tr("Create an identity and enter this chat room"), this, SLOT(createIdentityAndSubscribe())); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_SUBSCRIBE), tr("Create an identity and enter this chat room"), this, SLOT(createIdentityAndSubscribe())); } else if(own_identities.size() == 1) { - QAction *action = contextMnu.addAction(QIcon(IMAGE_SUBSCRIBE), tr("Enter this chat room"), this, SLOT(subscribeChatLobbyAs())); + QAction *action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_SUBSCRIBE), tr("Enter this chat room"), this, SLOT(subscribeChatLobbyAs())); action->setData(QString::fromStdString((own_identities.front()).toStdString())) ; } else { - QMenu *mnu = contextMnu.addMenu(QIcon(IMAGE_SUBSCRIBE),tr("Enter this chat room as...")) ; + QMenu *mnu = contextMnu.addMenu(FilesDefs::getIconFromQtResourcePath(IMAGE_SUBSCRIBE),tr("Enter this chat room as...")) ; for(std::list::const_iterator it=own_identities.begin();it!=own_identities.end();++it) { @@ -344,7 +345,7 @@ void ChatLobbyWidget::lobbyTreeWidgetCustomPopupMenu(QPoint) contextMnu.addAction(QIcon(IMAGE_SUBSCRIBE), tr("Add Auto Subscribe"), this, SLOT(autoSubscribeItem())); #endif - contextMnu.addAction(QIcon(IMAGE_COPYRSLINK), tr("Copy RetroShare Link"), this, SLOT(copyItemLink())); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_COPYRSLINK), tr("Copy RetroShare Link"), this, SLOT(copyItemLink())); } contextMnu.addSeparator();//------------------------------------------------------------------- @@ -435,7 +436,7 @@ void ChatLobbyWidget::addChatPage(ChatLobbyDialog *d) ChatLobbyInfo linfo ; if(rsMsgs->getChatLobbyInfo(id,linfo)) - _lobby_infos[id].default_icon = (linfo.lobby_flags & RS_CHAT_LOBBY_FLAGS_PUBLIC) ? QIcon(IMAGE_PUBLIC):QIcon(IMAGE_PRIVATE) ; + _lobby_infos[id].default_icon = (linfo.lobby_flags & RS_CHAT_LOBBY_FLAGS_PUBLIC) ? FilesDefs::getIconFromQtResourcePath(IMAGE_PUBLIC):FilesDefs::getIconFromQtResourcePath(IMAGE_PRIVATE) ; else std::cerr << "(EE) cannot find info for room " << std::hex << id << std::dec << std::endl; } @@ -615,7 +616,7 @@ void ChatLobbyWidget::updateDisplay() if (item == NULL) { item = new RSTreeWidgetItem(compareRole, TYPE_LOBBY); - icon = (lobby.lobby_flags & RS_CHAT_LOBBY_FLAGS_PUBLIC) ? QIcon(IMAGE_PUBLIC) : QIcon(IMAGE_PRIVATE); + icon = (lobby.lobby_flags & RS_CHAT_LOBBY_FLAGS_PUBLIC) ? FilesDefs::getIconFromQtResourcePath(IMAGE_PUBLIC) : FilesDefs::getIconFromQtResourcePath(IMAGE_PRIVATE); lobby_item->addChild(item); } @@ -623,7 +624,7 @@ void ChatLobbyWidget::updateDisplay() { if (item->data(COLUMN_DATA, ROLE_SUBSCRIBED).toBool() != subscribed) { // Replace icon - icon = (lobby.lobby_flags & RS_CHAT_LOBBY_FLAGS_PUBLIC) ? QIcon(IMAGE_PUBLIC) : QIcon(IMAGE_PRIVATE); + icon = (lobby.lobby_flags & RS_CHAT_LOBBY_FLAGS_PUBLIC) ? FilesDefs::getIconFromQtResourcePath(IMAGE_PUBLIC) : FilesDefs::getIconFromQtResourcePath(IMAGE_PRIVATE); } } if (!icon.isNull()) { @@ -683,12 +684,12 @@ void ChatLobbyWidget::updateDisplay() if (item == NULL) { item = new RSTreeWidgetItem(compareRole, TYPE_LOBBY); - icon = (lobby.lobby_flags & RS_CHAT_LOBBY_FLAGS_PUBLIC) ? QIcon(IMAGE_PUBLIC) : QIcon(IMAGE_PRIVATE); + icon = (lobby.lobby_flags & RS_CHAT_LOBBY_FLAGS_PUBLIC) ? FilesDefs::getIconFromQtResourcePath(IMAGE_PUBLIC) : FilesDefs::getIconFromQtResourcePath(IMAGE_PRIVATE); itemParent->addChild(item); } else { if (!item->data(COLUMN_DATA, ROLE_SUBSCRIBED).toBool()) { // Replace icon - icon = (lobby.lobby_flags & RS_CHAT_LOBBY_FLAGS_PUBLIC) ? QIcon(IMAGE_PUBLIC) : QIcon(IMAGE_PRIVATE); + icon = (lobby.lobby_flags & RS_CHAT_LOBBY_FLAGS_PUBLIC) ? FilesDefs::getIconFromQtResourcePath(IMAGE_PUBLIC) : FilesDefs::getIconFromQtResourcePath(IMAGE_PRIVATE); } } if (!icon.isNull()) { @@ -996,7 +997,7 @@ void ChatLobbyWidget::updateTypingStatus(ChatLobbyId id) if(item != NULL) { - item->setIcon(COLUMN_NAME,QIcon(IMAGE_TYPING)) ; + item->setIcon(COLUMN_NAME,FilesDefs::getIconFromQtResourcePath(IMAGE_TYPING)) ; _lobby_infos[id].last_typing_event = time(NULL) ; QTimer::singleShot(5000,this,SLOT(resetLobbyTreeIcons())) ; @@ -1008,7 +1009,7 @@ void ChatLobbyWidget::updatePeerLeaving(ChatLobbyId id) if(item != NULL) { - item->setIcon(COLUMN_NAME,QIcon(IMAGE_PEER_LEAVING)) ; + item->setIcon(COLUMN_NAME,FilesDefs::getIconFromQtResourcePath(IMAGE_PEER_LEAVING)) ; _lobby_infos[id].last_typing_event = time(NULL) ; QTimer::singleShot(5000,this,SLOT(resetLobbyTreeIcons())) ; @@ -1020,7 +1021,7 @@ void ChatLobbyWidget::updatePeerEntering(ChatLobbyId id) if(item != NULL) { - item->setIcon(COLUMN_NAME,QIcon(IMAGE_PEER_ENTERING)) ; + item->setIcon(COLUMN_NAME,FilesDefs::getIconFromQtResourcePath(IMAGE_PEER_ENTERING)) ; _lobby_infos[id].last_typing_event = time(NULL) ; QTimer::singleShot(5000,this,SLOT(resetLobbyTreeIcons())) ; @@ -1105,7 +1106,7 @@ void ChatLobbyWidget::updateCurrentLobby() if(_lobby_infos.find(id) != _lobby_infos.end()) { int iPrivacyLevel= item->parent()->data(COLUMN_DATA, ROLE_PRIVACYLEVEL).toInt(); - QIcon icon = (iPrivacyLevel==CHAT_LOBBY_PRIVACY_LEVEL_PUBLIC) ? QIcon(IMAGE_PUBLIC) : QIcon(IMAGE_PRIVATE); + QIcon icon = (iPrivacyLevel==CHAT_LOBBY_PRIVACY_LEVEL_PUBLIC) ? FilesDefs::getIconFromQtResourcePath(IMAGE_PUBLIC) : FilesDefs::getIconFromQtResourcePath(IMAGE_PRIVATE); _lobby_infos[id].default_icon = icon ; item->setIcon(COLUMN_NAME, icon) ; } @@ -1129,7 +1130,7 @@ void ChatLobbyWidget::updateMessageChanged(bool incoming, ChatLobbyId id, QDateT if(bIsCurrentItem) return ; - _lobby_infos[id].default_icon = QIcon(IMAGE_MESSAGE) ; + _lobby_infos[id].default_icon = FilesDefs::getIconFromQtResourcePath(IMAGE_MESSAGE) ; QTreeWidgetItem *item = getTreeWidgetItem(id) ; diff --git a/retroshare-gui/src/gui/Identity/IdDialog.cpp b/retroshare-gui/src/gui/Identity/IdDialog.cpp index d87f1d6e7..f66f9d6af 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdDialog.cpp @@ -321,10 +321,10 @@ IdDialog::IdDialog(QWidget *parent) : MainPage(parent), ui(new Ui::IdDialog) connect(idTWHAction, SIGNAL(toggled(bool)), this, SLOT(filterToggled(bool))); idTWHMenu->addAction(idTWHAction); - QAction *CreateIDAction = new QAction(QIcon(":/icons/png/person.png"),tr("Create new Identity"), this); + QAction *CreateIDAction = new QAction(FilesDefs::getIconFromQtResourcePath(":/icons/png/person.png"),tr("Create new Identity"), this); connect(CreateIDAction, SIGNAL(triggered()), this, SLOT(addIdentity())); - QAction *CreateCircleAction = new QAction(QIcon(":/icons/png/circles.png"),tr("Create new circle"), this); + QAction *CreateCircleAction = new QAction(FilesDefs::getIconFromQtResourcePath(":/icons/png/circles.png"),tr("Create new circle"), this); connect(CreateCircleAction, SIGNAL(triggered()), this, SLOT(createExternalCircle())); QMenu *menu = new QMenu(); @@ -1017,11 +1017,11 @@ void IdDialog::CircleListCustomPopupMenu( QPoint ) #endif if(group_flags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN) { - contextMnu.addAction(QIcon(IMAGE_EDIT), tr("Edit Circle"), this, SLOT(showEditExistingCircle())); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_EDIT), tr("Edit Circle"), this, SLOT(showEditExistingCircle())); am_I_circle_admin = true ; } else - contextMnu.addAction(QIcon(IMAGE_INFO), tr("See details"), this, SLOT(showEditExistingCircle())); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_INFO), tr("See details"), this, SLOT(showEditExistingCircle())); #ifdef CIRCLE_MEMBERSHIP_CATEGORIES } #endif @@ -1109,9 +1109,9 @@ void IdDialog::CircleListCustomPopupMenu( QPoint ) QAction *action ; if(is_circle) - action = new QAction(QIcon(image_names[i]), menu_titles[i] + " " + id_name,this) ; + action = new QAction(FilesDefs::getIconFromQtResourcePath(image_names[i]), menu_titles[i] + " " + id_name,this) ; else - action = new QAction(QIcon(image_names[i]), menu_titles[i],this) ; + action = new QAction(FilesDefs::getIconFromQtResourcePath(image_names[i]), menu_titles[i],this) ; if(i <2) QObject::connect(action,SIGNAL(triggered()), this, SLOT(acceptCircleSubscription())); @@ -1134,7 +1134,7 @@ void IdDialog::CircleListCustomPopupMenu( QPoint ) else id_name = tr("for identity ")+QString::fromStdString(ids[i][j].toStdString()) ; - QAction *action = new QAction(QIcon(image_names[i]), id_name,this) ; + QAction *action = new QAction(FilesDefs::getIconFromQtResourcePath(image_names[i]), id_name,this) ; if(i <2) QObject::connect(action,SIGNAL(triggered()), this, SLOT(acceptCircleSubscription())); @@ -2195,7 +2195,7 @@ void IdDialog::IdListCustomPopupMenu( QPoint ) { if(own_identities.size() <= 1) { - QAction *action = contextMenu->addAction(QIcon(":/icons/png/chats.png"), tr("Chat with this person"), this, SLOT(chatIdentity())); + QAction *action = contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(":/icons/png/chats.png"), tr("Chat with this person"), this, SLOT(chatIdentity())); if(own_identities.empty()) action->setEnabled(false) ; @@ -2204,7 +2204,7 @@ void IdDialog::IdListCustomPopupMenu( QPoint ) } else { - QMenu *mnu = contextMenu->addMenu(QIcon(":/icons/png/chats.png"),tr("Chat with this person as...")) ; + QMenu *mnu = contextMenu->addMenu(FilesDefs::getIconFromQtResourcePath(":/icons/png/chats.png"),tr("Chat with this person as...")) ; for(std::list::const_iterator it=own_identities.begin();it!=own_identities.end();++it) { @@ -2222,7 +2222,7 @@ void IdDialog::IdListCustomPopupMenu( QPoint ) } } // always allow to send messages - contextMenu->addAction(QIcon(":/icons/mail/write-mail.png"), tr("Send message"), this, SLOT(sendMsg())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(":/icons/mail/write-mail.png"), tr("Send message"), this, SLOT(sendMsg())); contextMenu->addSeparator(); @@ -2233,18 +2233,18 @@ void IdDialog::IdListCustomPopupMenu( QPoint ) contextMenu->addAction(QIcon(""),tr("Copy identity to clipboard"),this,SLOT(copyRetroshareLink())) ; if(n_is_not_a_contact == 0) - contextMenu->addAction(QIcon(":/images/cancel.png"), tr("Remove from Contacts"), this, SLOT(removefromContacts())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(":/images/cancel.png"), tr("Remove from Contacts"), this, SLOT(removefromContacts())); contextMenu->addSeparator(); if(n_positive_reputations == 0) // only unban when all items are banned - contextMenu->addAction(QIcon(":/icons/png/thumbs-up.png"), tr("Set positive opinion"), this, SLOT(positivePerson())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(":/icons/png/thumbs-up.png"), tr("Set positive opinion"), this, SLOT(positivePerson())); if(n_neutral_reputations == 0) // only unban when all items are banned - contextMenu->addAction(QIcon(":/icons/png/thumbs-neutral.png"), tr("Set neutral opinion"), this, SLOT(neutralPerson())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(":/icons/png/thumbs-neutral.png"), tr("Set neutral opinion"), this, SLOT(neutralPerson())); if(n_negative_reputations == 0) - contextMenu->addAction(QIcon(":/icons/png/thumbs-down.png"), tr("Set negative opinion"), this, SLOT(negativePerson())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(":/icons/png/thumbs-down.png"), tr("Set negative opinion"), this, SLOT(negativePerson())); } if(one_item_owned_by_you && n_selected_items==1) diff --git a/retroshare-gui/src/gui/Posted/PostedDialog.cpp b/retroshare-gui/src/gui/Posted/PostedDialog.cpp index 6c2772276..fa5826151 100644 --- a/retroshare-gui/src/gui/Posted/PostedDialog.cpp +++ b/retroshare-gui/src/gui/Posted/PostedDialog.cpp @@ -255,7 +255,7 @@ void PostedDialog::groupInfoToGroupItemInfo(const RsGxsGenericGroupData *groupDa groupItemInfo.icon = image; } else - groupItemInfo.icon = QIcon(":icons/png/postedlinks.png"); + groupItemInfo.icon = FilesDefs::getIconFromQtResourcePath(":icons/png/postedlinks.png"); groupItemInfo.description = QString::fromUtf8(postedGroupData->mDescription.c_str()); } diff --git a/retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp b/retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp index b45c448fe..bfd2ad379 100644 --- a/retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp +++ b/retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp @@ -92,11 +92,11 @@ ChatLobbyDialog::ChatLobbyDialog(const ChatLobbyId& lid, QWidget *parent, Qt::Wi QHeaderView_setSectionResizeModeColumn(header, COLUMN_NAME, QHeaderView::Stretch); muteAct = new QAction(QIcon(), tr("Mute participant"), this); - voteNegativeAct = new QAction(QIcon(":/icons/png/thumbs-down.png"), tr("Ban this person (Sets negative opinion)"), this); - voteNeutralAct = new QAction(QIcon(":/icons/png/thumbs-neutral.png"), tr("Give neutral opinion"), this); - votePositiveAct = new QAction(QIcon(":/icons/png/thumbs-up.png"), tr("Give positive opinion"), this); - distantChatAct = new QAction(QIcon(":/icons/png/chats.png"), tr("Start private chat"), this); - sendMessageAct = new QAction(QIcon(":/icons/mail/write-mail.png"), tr("Send Message"), this); + voteNegativeAct = new QAction(FilesDefs::getIconFromQtResourcePath(":/icons/png/thumbs-down.png"), tr("Ban this person (Sets negative opinion)"), this); + voteNeutralAct = new QAction(FilesDefs::getIconFromQtResourcePath(":/icons/png/thumbs-neutral.png"), tr("Give neutral opinion"), this); + votePositiveAct = new QAction(FilesDefs::getIconFromQtResourcePath(":/icons/png/thumbs-up.png"), tr("Give positive opinion"), this); + distantChatAct = new QAction(FilesDefs::getIconFromQtResourcePath(":/icons/png/chats.png"), tr("Start private chat"), this); + sendMessageAct = new QAction(FilesDefs::getIconFromQtResourcePath(":/icons/mail/write-mail.png"), tr("Send Message"), this); showInPeopleAct = new QAction(QIcon(), tr("Show author in people tab"), this); QActionGroup *sortgrp = new QActionGroup(this); diff --git a/retroshare-gui/src/gui/chat/ChatLobbyUserNotify.cpp b/retroshare-gui/src/gui/chat/ChatLobbyUserNotify.cpp index 81cb47846..64798a011 100644 --- a/retroshare-gui/src/gui/chat/ChatLobbyUserNotify.cpp +++ b/retroshare-gui/src/gui/chat/ChatLobbyUserNotify.cpp @@ -23,6 +23,7 @@ #include #include +#include "gui/common/FilesDefs.h" #include "ChatLobbyUserNotify.h" #include "gui/ChatLobbyWidget.h" @@ -104,12 +105,12 @@ void ChatLobbyUserNotify::setTextCaseSensitive(bool value) QIcon ChatLobbyUserNotify::getIcon() { - return QIcon(":/icons/png/chat-lobbies.png"); + return FilesDefs::getIconFromQtResourcePath(":/icons/png/chat-lobbies.png"); } QIcon ChatLobbyUserNotify::getMainIcon(bool hasNew) { - return hasNew ? QIcon(":/icons/png/chat-lobbies-notify.png") : QIcon(":/icons/png/chat-lobbies.png"); + return hasNew ? FilesDefs::getIconFromQtResourcePath(":/icons/png/chat-lobbies-notify.png") : FilesDefs::getIconFromQtResourcePath(":/icons/png/chat-lobbies.png"); } unsigned int ChatLobbyUserNotify::getNewCount() @@ -164,7 +165,7 @@ void ChatLobbyUserNotify::iconClicked() ChatLobbyInfo clInfo; if (rsMsgs->getChatLobbyInfo(clId,clInfo)) strLobbyName=QString::fromUtf8(clInfo.lobby_name.c_str()) ; - icoLobby=(clInfo.lobby_flags & RS_CHAT_LOBBY_FLAGS_PUBLIC) ? QIcon(":/images/chat_red24.png") : QIcon(":/images/chat_x24.png"); + icoLobby=(clInfo.lobby_flags & RS_CHAT_LOBBY_FLAGS_PUBLIC) ? FilesDefs::getIconFromQtResourcePath(":/images/chat_red24.png") : FilesDefs::getIconFromQtResourcePath(":/images/chat_x24.png"); bFound=true; break; } diff --git a/retroshare-gui/src/gui/chat/ChatTabWidget.cpp b/retroshare-gui/src/gui/chat/ChatTabWidget.cpp index ad15fb905..03357a3e4 100644 --- a/retroshare-gui/src/gui/chat/ChatTabWidget.cpp +++ b/retroshare-gui/src/gui/chat/ChatTabWidget.cpp @@ -22,6 +22,7 @@ #include +#include "gui/common/FilesDefs.h" #include "ChatTabWidget.h" #include "ui_ChatTabWidget.h" #include "ChatDialog.h" @@ -102,9 +103,9 @@ void ChatTabWidget::tabInfoChanged(ChatDialog *dialog) if (tab >= 0) { if (dialog->isTyping()) { setBlinking(tab, false); - setTabIcon(tab, QIcon(IMAGE_TYPING)); + setTabIcon(tab, FilesDefs::getIconFromQtResourcePath(IMAGE_TYPING)); } else if (dialog->hasNewMessages()) { - setTabIcon(tab, QIcon(IMAGE_CHAT)); + setTabIcon(tab, FilesDefs::getIconFromQtResourcePath(IMAGE_CHAT)); if (dialog->notifyBlink()) { setBlinking(tab, true); } else { @@ -148,9 +149,9 @@ void ChatTabWidget::getInfo(bool &isTyping, bool &hasNewMessage, QIcon *icon) if (icon) { if (isTyping) { - *icon = QIcon(IMAGE_TYPING); + *icon = FilesDefs::getIconFromQtResourcePath(IMAGE_TYPING); } else if (hasNewMessage) { - *icon = QIcon(IMAGE_CHAT); + *icon = FilesDefs::getIconFromQtResourcePath(IMAGE_CHAT); } else { cd = dynamic_cast(currentWidget()); if (cd && cd->hasPeerStatus()) { diff --git a/retroshare-gui/src/gui/chat/ChatUserNotify.cpp b/retroshare-gui/src/gui/chat/ChatUserNotify.cpp index ecb563938..2e9fb2d1a 100644 --- a/retroshare-gui/src/gui/chat/ChatUserNotify.cpp +++ b/retroshare-gui/src/gui/chat/ChatUserNotify.cpp @@ -20,6 +20,7 @@ * * *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include "ChatUserNotify.h" #include "gui/notifyqt.h" #include "gui/MainWindow.h" @@ -75,12 +76,12 @@ bool ChatUserNotify::hasSetting(QString *name, QString *group) QIcon ChatUserNotify::getIcon() { - return QIcon(":/images/chat.png"); + return FilesDefs::getIconFromQtResourcePath(":/images/chat.png"); } QIcon ChatUserNotify::getMainIcon(bool hasNew) { - return hasNew ? QIcon(":/icons/png/network-notify.png") : QIcon(":/icons/png/network.png"); + return hasNew ? FilesDefs::getIconFromQtResourcePath(":/icons/png/network-notify.png") : FilesDefs::getIconFromQtResourcePath(":/icons/png/network.png"); } unsigned int ChatUserNotify::getNewCount() diff --git a/retroshare-gui/src/gui/chat/ChatWidget.cpp b/retroshare-gui/src/gui/chat/ChatWidget.cpp index 6c36a392b..5506dedfb 100644 --- a/retroshare-gui/src/gui/chat/ChatWidget.cpp +++ b/retroshare-gui/src/gui/chat/ChatWidget.cpp @@ -245,7 +245,7 @@ ChatWidget::ChatWidget(QWidget *parent) //#ifdef ENABLE_DISTANT_CHAT_AND_MSGS // contextMnu->addSeparator(); -// QAction *action = new QAction(QIcon(":/images/pasterslink.png"), tr("Paste/Create private chat or Message link..."), this); +// QAction *action = new QAction(FilesDefs::getIconFromQtResourcePath(":/images/pasterslink.png"), tr("Paste/Create private chat or Message link..."), this); // connect(action, SIGNAL(triggered()), this, SLOT(pasteCreateMsgLink())); // ui->chatTextEdit->addContextMenuAction(action); //#endif @@ -1067,7 +1067,7 @@ void ChatWidget::addChatMsg(bool incoming, const QString &name, const RsGxsId gx rsIdentity->getIdDetails(gxsId, details); bool isUnsigned = !(details.mFlags & RS_IDENTITY_FLAGS_PGP_LINKED); if(isUnsigned && ui->textBrowser->getShowImages()) { - QIcon icon = QIcon(":/icons/anonymous_blue_128.png"); + QIcon icon = FilesDefs::getIconFromQtResourcePath(":/icons/anonymous_blue_128.png"); int height = ui->textBrowser->fontMetrics().height()*0.8; QImage image(icon.pixmap(height,height).toImage()); QByteArray byteArray; diff --git a/retroshare-gui/src/gui/chat/PopupChatDialog.cpp b/retroshare-gui/src/gui/chat/PopupChatDialog.cpp index 1591669f4..9cb422a8f 100644 --- a/retroshare-gui/src/gui/chat/PopupChatDialog.cpp +++ b/retroshare-gui/src/gui/chat/PopupChatDialog.cpp @@ -23,6 +23,7 @@ #include "PopupChatDialog.h" #include "PopupChatWindow.h" +#include "gui/common/FilesDefs.h" #include "gui/settings/rsharesettings.h" #include "gui/settings/RsharePeerSettings.h" #include "gui/notifyqt.h" @@ -149,10 +150,10 @@ void PopupChatDialog::showAvatarFrame(bool show) if (show) { ui.avatarFrameButton->setToolTip(tr("Hide Avatar")); - ui.avatarFrameButton->setIcon(QIcon(":images/hide_toolbox_frame.png")); + ui.avatarFrameButton->setIcon(FilesDefs::getIconFromQtResourcePath(":images/hide_toolbox_frame.png")); } else { ui.avatarFrameButton->setToolTip(tr("Show Avatar")); - ui.avatarFrameButton->setIcon(QIcon(":images/show_toolbox_frame.png")); + ui.avatarFrameButton->setIcon(FilesDefs::getIconFromQtResourcePath(":images/show_toolbox_frame.png")); } PeerSettings->setShowAvatarFrame(mChatId, show); diff --git a/retroshare-gui/src/gui/chat/PopupChatWindow.cpp b/retroshare-gui/src/gui/chat/PopupChatWindow.cpp index 6d6502c5f..6c1f9128d 100644 --- a/retroshare-gui/src/gui/chat/PopupChatWindow.cpp +++ b/retroshare-gui/src/gui/chat/PopupChatWindow.cpp @@ -24,6 +24,7 @@ #include #include +#include "gui/common/FilesDefs.h" #include "PopupChatWindow.h" #include "ChatDialog.h" #include "gui/settings/rsharesettings.h" @@ -113,14 +114,14 @@ PopupChatWindow::PopupChatWindow(bool tabbed, QWidget *parent, Qt::WindowFlags f void PopupChatWindow::showContextMenu(QPoint) { QMenu contextMnu(this); - contextMnu.addAction(QIcon(":/images/highlight.png"),tr("Choose window color..."),this,SLOT(setStyle())); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(":/images/highlight.png"),tr("Choose window color..."),this,SLOT(setStyle())); if (Settings->getChatFlags() & RS_CHAT_TABBED_WINDOW) { if(tabbedWindow) - contextMnu.addAction(QIcon(":/images/tab-dock.png"),tr("Dock window"),this,SLOT(docTab())); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(":/images/tab-dock.png"),tr("Dock window"),this,SLOT(docTab())); - contextMnu.addAction(QIcon(":/images/tab-undock.png"),tr("Dock window"),this,SLOT(undockTab())); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(":/images/tab-undock.png"),tr("Dock window"),this,SLOT(undockTab())); } contextMnu.exec(QCursor::pos()); } @@ -295,9 +296,9 @@ void PopupChatWindow::calculateTitle(ChatDialog *dialog) QIcon icon; if (isTyping) { mBlinkIcon = QIcon(); - icon = QIcon(IMAGE_TYPING); + icon = FilesDefs::getIconFromQtResourcePath(IMAGE_TYPING); } else if (hasNewMessages) { - icon = QIcon(IMAGE_CHAT); + icon = FilesDefs::getIconFromQtResourcePath(IMAGE_CHAT); if (Settings->getChatFlags() & RS_CHAT_BLINK) { mBlinkIcon = icon; } else { diff --git a/retroshare-gui/src/gui/chat/PopupDistantChatDialog.cpp b/retroshare-gui/src/gui/chat/PopupDistantChatDialog.cpp index b93c2d438..ff02ebae2 100644 --- a/retroshare-gui/src/gui/chat/PopupDistantChatDialog.cpp +++ b/retroshare-gui/src/gui/chat/PopupDistantChatDialog.cpp @@ -26,6 +26,7 @@ #include +#include "gui/common/FilesDefs.h" #include #include #include @@ -112,7 +113,7 @@ void PopupDistantChatDialog::updateDisplay() { case RS_DISTANT_CHAT_STATUS_UNKNOWN: - _status_label->setIcon(QIcon(IMAGE_GRY_LED)); + _status_label->setIcon(FilesDefs::getIconFromQtResourcePath(IMAGE_GRY_LED)); msg = tr("Remote status unknown."); _status_label->setToolTip(msg); getChatWidget()->updateStatusString("%1", msg, true); @@ -123,7 +124,7 @@ void PopupDistantChatDialog::updateDisplay() break ; case RS_DISTANT_CHAT_STATUS_REMOTELY_CLOSED: std::cerr << "Chat remotely closed. " << std::endl; - _status_label->setIcon(QIcon(IMAGE_RED_LED)); + _status_label->setIcon(FilesDefs::getIconFromQtResourcePath(IMAGE_RED_LED)); _status_label->setToolTip( QObject::tr("Distant peer has closed the chat") ); getChatWidget()->updateStatusString("%1", tr( "Your partner closed the conversation." ), true ); @@ -134,7 +135,7 @@ void PopupDistantChatDialog::updateDisplay() case RS_DISTANT_CHAT_STATUS_TUNNEL_DN: - _status_label->setIcon(QIcon(IMAGE_YEL_LED)); + _status_label->setIcon(FilesDefs::getIconFromQtResourcePath(IMAGE_YEL_LED)); msg = QObject::tr( "Tunnel is pending"); if(tinfo.pending_items > 0) @@ -147,7 +148,7 @@ void PopupDistantChatDialog::updateDisplay() break; case RS_DISTANT_CHAT_STATUS_CAN_TALK: - _status_label->setIcon(QIcon(IMAGE_GRN_LED)); + _status_label->setIcon(FilesDefs::getIconFromQtResourcePath(IMAGE_GRN_LED)); msg = QObject::tr( "End-to-end encrypted conversation established"); _status_label->setToolTip(msg); getChatWidget()->unblockSending(); diff --git a/retroshare-gui/src/gui/common/Emoticons.cpp b/retroshare-gui/src/gui/common/Emoticons.cpp index 347d88b6e..47a1d67bf 100644 --- a/retroshare-gui/src/gui/common/Emoticons.cpp +++ b/retroshare-gui/src/gui/common/Emoticons.cpp @@ -37,6 +37,7 @@ #include "Emoticons.h" #include "util/HandleRichText.h" #include "retroshare/rsinit.h" +#include "gui/common/FilesDefs.h" #define ICONNAME "groupicon.png" @@ -210,7 +211,7 @@ void Emoticons::showSmileyWidget(QWidget *parent, QWidget *button, const char *s smTab->setStyleSheet("QTabBar::tab { height: 44px; width: 44px; }"); if (groupName.right(4).toLower() == ".png") - smTab->addTab( tabGrpWidget, QIcon(groupName), ""); + smTab->addTab( tabGrpWidget, FilesDefs::getIconFromQtResourcePath(groupName), ""); else smTab->addTab( tabGrpWidget, groupName); } else { @@ -371,9 +372,9 @@ void Emoticons::showStickerWidget(QWidget *parent, QWidget *button, const char * int index; if (groupDir.exists(ICONNAME)) //use groupicon.png if exists, else the first png as a group icon - index = smTab->addTab( tabGrpWidget, QIcon(groupDir.absoluteFilePath(ICONNAME)), ""); + index = smTab->addTab( tabGrpWidget, FilesDefs::getIconFromQtResourcePath(groupDir.absoluteFilePath(ICONNAME)), ""); else - index = smTab->addTab( tabGrpWidget, QIcon(groupDir.entryInfoList(QDir::Files)[0].canonicalFilePath()), ""); + index = smTab->addTab( tabGrpWidget, FilesDefs::getIconFromQtResourcePath(groupDir.entryInfoList(QDir::Files)[0].canonicalFilePath()), ""); smTab->setTabToolTip(index, groupName); } else { tabGrpWidget = smWidget; diff --git a/retroshare-gui/src/gui/common/FriendList.cpp b/retroshare-gui/src/gui/common/FriendList.cpp index 967d8df5d..257a0349a 100644 --- a/retroshare-gui/src/gui/common/FriendList.cpp +++ b/retroshare-gui/src/gui/common/FriendList.cpp @@ -352,25 +352,25 @@ void FriendList::peerTreeWidgetCustomPopupMenu() { bool standard = c->data(COLUMN_DATA, ROLE_STANDARD).toBool(); #ifdef RS_DIRECT_CHAT - contextMenu->addAction(QIcon(IMAGE_MSG), tr("Send message to whole group"), this, SLOT(msgfriend())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_MSG), tr("Send message to whole group"), this, SLOT(msgfriend())); contextMenu->addSeparator(); #endif // RS_DIRECT_CHAT - contextMenu->addAction(QIcon(IMAGE_EDIT), tr("Edit Group"), this, SLOT(editGroup())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_EDIT), tr("Edit Group"), this, SLOT(editGroup())); - QAction *action = contextMenu->addAction(QIcon(IMAGE_REMOVE), tr("Remove Group"), this, SLOT(removeGroup())); + QAction *action = contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_REMOVE), tr("Remove Group"), this, SLOT(removeGroup())); action->setDisabled(standard); } break; case TYPE_GPG: { #ifdef RS_DIRECT_CHAT - contextMenu->addAction(QIcon(IMAGE_CHAT), tr("Chat"), this, SLOT(chatfriendproxy())); - contextMenu->addAction(QIcon(IMAGE_MSG), tr("Send message"), this, SLOT(msgfriend())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_CHAT), tr("Chat"), this, SLOT(chatfriendproxy())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_MSG), tr("Send message"), this, SLOT(msgfriend())); contextMenu->addSeparator(); #endif // RS_DIRECT_CHAT - contextMenu->addAction(QIcon(IMAGE_FRIENDINFO), tr("Profile details"), this, SLOT(configurefriend())); - contextMenu->addAction(QIcon(IMAGE_DENYFRIEND), tr("Deny connections"), this, SLOT(removefriend())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_FRIENDINFO), tr("Profile details"), this, SLOT(configurefriend())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_DENYFRIEND), tr("Deny connections"), this, SLOT(removefriend())); if(mShowGroups) { @@ -412,8 +412,8 @@ void FriendList::peerTreeWidgetCustomPopupMenu() } } - QMenu *groupsMenu = contextMenu->addMenu(QIcon(IMAGE_GROUP16), tr("Groups")); - groupsMenu->addAction(QIcon(IMAGE_EXPAND), tr("Create new group"), this, SLOT(createNewGroup())); + QMenu *groupsMenu = contextMenu->addMenu(FilesDefs::getIconFromQtResourcePath(IMAGE_GROUP16), tr("Groups")); + groupsMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_EXPAND), tr("Create new group"), this, SLOT(createNewGroup())); if (addToGroupMenu || moveToGroupMenu || foundGroup) { if (addToGroupMenu) { @@ -445,24 +445,24 @@ void FriendList::peerTreeWidgetCustomPopupMenu() case TYPE_SSL: { #ifdef RS_DIRECT_CHAT - contextMenu->addAction(QIcon(IMAGE_CHAT), tr("Chat"), this, SLOT(chatfriendproxy())); - contextMenu->addAction(QIcon(IMAGE_MSG), tr("Send message to this node"), this, SLOT(msgfriend())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_CHAT), tr("Chat"), this, SLOT(chatfriendproxy())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_MSG), tr("Send message to this node"), this, SLOT(msgfriend())); contextMenu->addSeparator(); #endif // RS_DIRECT_CHAT - contextMenu->addAction(QIcon(IMAGE_FRIENDINFO), tr("Node details"), this, SLOT(configurefriend())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_FRIENDINFO), tr("Node details"), this, SLOT(configurefriend())); if (type == TYPE_GPG || type == TYPE_SSL) { - contextMenu->addAction(QIcon(IMAGE_EXPORTFRIEND), tr("Recommend this node to..."), this, SLOT(recommendfriend())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_EXPORTFRIEND), tr("Recommend this node to..."), this, SLOT(recommendfriend())); } if(!rsPeers->isHiddenNode(rsPeers->getOwnId()) || rsPeers->isHiddenNode( RsPeerId(getRsId(c)) )) - contextMenu->addAction(QIcon(IMAGE_CONNECT), tr("Attempt to connect"), this, SLOT(connectfriend())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_CONNECT), tr("Attempt to connect"), this, SLOT(connectfriend())); - contextMenu->addAction(QIcon(IMAGE_COPYLINK), tr("Copy certificate link"), this, SLOT(copyFullCertificate())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_COPYLINK), tr("Copy certificate link"), this, SLOT(copyFullCertificate())); //this is a SSL key - contextMenu->addAction(QIcon(IMAGE_REMOVEFRIEND), tr("Remove Friend Node"), this, SLOT(removefriend())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_REMOVEFRIEND), tr("Remove Friend Node"), this, SLOT(removefriend())); } } @@ -471,12 +471,12 @@ void FriendList::peerTreeWidgetCustomPopupMenu() contextMenu->addSeparator(); - QAction *action = contextMenu->addAction(QIcon(IMAGE_PASTELINK), tr("Paste certificate link"), this, SLOT(pastePerson())); + QAction *action = contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_PASTELINK), tr("Paste certificate link"), this, SLOT(pastePerson())); if (RSLinkClipboard::empty(RetroShareLink::TYPE_CERTIFICATE)) action->setDisabled(true); - contextMenu->addAction(QIcon(IMAGE_EXPAND), tr("Expand all"), ui->peerTreeWidget, SLOT(expandAll())); - contextMenu->addAction(QIcon(IMAGE_COLLAPSE), tr("Collapse all"), ui->peerTreeWidget, SLOT(collapseAll())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_EXPAND), tr("Expand all"), ui->peerTreeWidget, SLOT(expandAll())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_COLLAPSE), tr("Collapse all"), ui->peerTreeWidget, SLOT(collapseAll())); contextMenu = ui->peerTreeWidget->createStandardContextMenu(contextMenu); @@ -716,7 +716,7 @@ void FriendList::insertPeers() groupItem->setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicatorWhenChildless); groupItem->setTextAlignment(COLUMN_NAME, Qt::AlignLeft | Qt::AlignVCenter); - groupItem->setIcon(COLUMN_NAME, QIcon(IMAGE_GROUP24)); + groupItem->setIcon(COLUMN_NAME, FilesDefs::getIconFromQtResourcePath(IMAGE_GROUP24)); groupItem->setData(COLUMN_NAME, Qt::ForegroundRole, textColorGroup()); /* used to find back the item */ diff --git a/retroshare-gui/src/gui/common/FriendSelectionWidget.cpp b/retroshare-gui/src/gui/common/FriendSelectionWidget.cpp index 4043fe424..d253691bf 100644 --- a/retroshare-gui/src/gui/common/FriendSelectionWidget.cpp +++ b/retroshare-gui/src/gui/common/FriendSelectionWidget.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include #include #include "FriendSelectionWidget.h" @@ -219,7 +220,7 @@ static void initSslItem(QTreeWidgetItem *item, const RsPeerDetails &detail, cons item->setData(COLUMN_NAME, Qt::ForegroundRole, textColorOnline); } - item->setIcon(COLUMN_NAME, QIcon(StatusDefs::imageUser(state))); + item->setIcon(COLUMN_NAME, FilesDefs::getIconFromQtResourcePath(StatusDefs::imageUser(state))); item->setData(COLUMN_DATA, ROLE_ID, QString::fromStdString(detail.id.toStdString())); item->setData(COLUMN_NAME, ROLE_SORT_GROUP, 1); @@ -381,7 +382,7 @@ void FriendSelectionWidget::secured_fillList() groupItem->setFlags(Qt::ItemIsUserCheckable | groupItem->flags()); groupItem->setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicatorWhenChildless); groupItem->setTextAlignment(COLUMN_NAME, Qt::AlignLeft | Qt::AlignVCenter); - groupItem->setIcon(COLUMN_NAME, QIcon(IMAGE_GROUP16)); + groupItem->setIcon(COLUMN_NAME, FilesDefs::getIconFromQtResourcePath(IMAGE_GROUP16)); groupItem->setData(COLUMN_DATA, ROLE_ID, QString::fromStdString(groupInfo->id.toStdString())); @@ -454,7 +455,7 @@ void FriendSelectionWidget::secured_fillList() } gpgItem->setFlags(Qt::ItemIsUserCheckable | gpgItem->flags()); - gpgItem->setIcon(COLUMN_NAME, QIcon(StatusDefs::imageUser(state))); + gpgItem->setIcon(COLUMN_NAME, FilesDefs::getIconFromQtResourcePath(StatusDefs::imageUser(state))); gpgItem->setData(COLUMN_DATA, ROLE_ID, QString::fromStdString(detail.gpg_id.toStdString())); gpgItem->setData(COLUMN_NAME, ROLE_SORT_GROUP, 1); @@ -773,7 +774,7 @@ void FriendSelectionWidget::peerStatusChanged(const QString& peerId, int status) item->setData(COLUMN_NAME, Qt::ForegroundRole, QVariant()); } - item->setIcon(COLUMN_NAME, QIcon(StatusDefs::imageUser(gpgStatus))); + item->setIcon(COLUMN_NAME, FilesDefs::getIconFromQtResourcePath(StatusDefs::imageUser(gpgStatus))); item->setData(COLUMN_NAME, ROLE_SORT_STATE, gpgStatus); @@ -790,7 +791,7 @@ void FriendSelectionWidget::peerStatusChanged(const QString& peerId, int status) item->setData(COLUMN_NAME, Qt::ForegroundRole, QVariant()); } - item->setIcon(COLUMN_NAME, QIcon(StatusDefs::imageUser(status))); + item->setIcon(COLUMN_NAME, FilesDefs::getIconFromQtResourcePath(StatusDefs::imageUser(status))); item->setData(COLUMN_NAME, ROLE_SORT_STATE, status); diff --git a/retroshare-gui/src/gui/common/GroupFlagsWidget.cpp b/retroshare-gui/src/gui/common/GroupFlagsWidget.cpp index d4142f886..9b40df3d0 100644 --- a/retroshare-gui/src/gui/common/GroupFlagsWidget.cpp +++ b/retroshare-gui/src/gui/common/GroupFlagsWidget.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include #include #include "GroupFlagsWidget.h" @@ -54,12 +55,12 @@ GroupFlagsWidget::GroupFlagsWidget(QWidget *parent,FileStorageFlags flags) setMaximumSize(128 * QFontMetricsF(font()).height()/14.0,32 * QFontMetricsF(font()).height()/14.0) ; setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); - _icons[2*INDEX_BROWSABLE+0] = new QIcon(FLAGS_BROWSABLE_OFF) ; - _icons[2*INDEX_BROWSABLE+1] = new QIcon(FLAGS_BROWSABLE_ON) ; - _icons[2*INDEX_ANON_SEARCH+0] = new QIcon(FLAGS_ANONYMOUS_SEARCH_OFF) ; - _icons[2*INDEX_ANON_SEARCH+1] = new QIcon(FLAGS_ANONYMOUS_SEARCH_ON) ; - _icons[2*INDEX_ANON_DL+0] = new QIcon(FLAGS_ANONYMOUS_DL_OFF) ; - _icons[2*INDEX_ANON_DL+1] = new QIcon(FLAGS_ANONYMOUS_DL_ON) ; + _icons[2*INDEX_BROWSABLE+0] = FilesDefs::getIconFromQtResourcePath(FLAGS_BROWSABLE_OFF) ; + _icons[2*INDEX_BROWSABLE+1] = FilesDefs::getIconFromQtResourcePath(FLAGS_BROWSABLE_ON) ; + _icons[2*INDEX_ANON_SEARCH+0] = FilesDefs::getIconFromQtResourcePath(FLAGS_ANONYMOUS_SEARCH_OFF) ; + _icons[2*INDEX_ANON_SEARCH+1] = FilesDefs::getIconFromQtResourcePath(FLAGS_ANONYMOUS_SEARCH_ON) ; + _icons[2*INDEX_ANON_DL+0] = FilesDefs::getIconFromQtResourcePath(FLAGS_ANONYMOUS_DL_OFF) ; + _icons[2*INDEX_ANON_DL+1] = FilesDefs::getIconFromQtResourcePath(FLAGS_ANONYMOUS_DL_ON) ; setLayout(_layout) ; @@ -136,7 +137,7 @@ void GroupFlagsWidget::update_button_state(bool b,int button_id) tip_on = ""; tip_off = ""; } - _buttons[button_id]->setIcon(*_icons[2*button_id+(int)b]) ; + _buttons[button_id]->setIcon(_icons[2*button_id+(int)b]) ; _buttons[button_id]->setToolTip(b?tip_on:tip_off) ; } @@ -183,10 +184,6 @@ void GroupFlagsWidget::update_BR_button(bool b) { update_button_state(b,INDEX_BR GroupFlagsWidget::~GroupFlagsWidget() { for(int i=0;i<3;++i) - { delete _buttons[i] ; - delete _icons[2*i+0] ; - delete _icons[2*i+1] ; - } } diff --git a/retroshare-gui/src/gui/common/GroupFlagsWidget.h b/retroshare-gui/src/gui/common/GroupFlagsWidget.h index 4703d124d..d4ef95295 100644 --- a/retroshare-gui/src/gui/common/GroupFlagsWidget.h +++ b/retroshare-gui/src/gui/common/GroupFlagsWidget.h @@ -55,7 +55,7 @@ class GroupFlagsWidget: public QWidget QPushButton *_buttons[4] ; QLayout *_layout ; - QIcon *_icons[6] ; + QIcon _icons[6] ; FileStorageFlags _flags[4] ; static QString _tooltips_on[4] ; diff --git a/retroshare-gui/src/gui/common/GroupTreeWidget.cpp b/retroshare-gui/src/gui/common/GroupTreeWidget.cpp index db9b487b4..aa9b76023 100644 --- a/retroshare-gui/src/gui/common/GroupTreeWidget.cpp +++ b/retroshare-gui/src/gui/common/GroupTreeWidget.cpp @@ -21,6 +21,7 @@ #include "GroupTreeWidget.h" #include "ui_GroupTreeWidget.h" +#include "gui/common/FilesDefs.h" #include "retroshare/rsgxsflags.h" #include "PopularityDefs.h" @@ -250,11 +251,11 @@ void GroupTreeWidget::initDisplayMenu(QToolButton *toolButton) displayMenu = new QMenu(); QActionGroup *actionGroupAsc = new QActionGroup(displayMenu); - actionSortDescending = displayMenu->addAction(QIcon(":/images/sort_decrease.png"), tr("Sort Descending Order"), this, SLOT(sort())); + actionSortDescending = displayMenu->addAction(FilesDefs::getIconFromQtResourcePath(":/images/sort_decrease.png"), tr("Sort Descending Order"), this, SLOT(sort())); actionSortDescending->setCheckable(true); actionSortDescending->setActionGroup(actionGroupAsc); - actionSortAscending = displayMenu->addAction(QIcon(":/images/sort_incr.png"), tr("Sort Ascending Order"), this, SLOT(sort())); + actionSortAscending = displayMenu->addAction(FilesDefs::getIconFromQtResourcePath(":/images/sort_incr.png"), tr("Sort Ascending Order"), this, SLOT(sort())); actionSortAscending->setCheckable(true); actionSortAscending->setActionGroup(actionGroupAsc); diff --git a/retroshare-gui/src/gui/common/LineEditClear.cpp b/retroshare-gui/src/gui/common/LineEditClear.cpp index 05bdca90b..b439aaa07 100644 --- a/retroshare-gui/src/gui/common/LineEditClear.cpp +++ b/retroshare-gui/src/gui/common/LineEditClear.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include "LineEditClear.h" #include @@ -124,9 +125,8 @@ void LineEditClear::showFilterIcon() mFilterButton = new QToolButton(this); mFilterButton->setFixedSize(16, 16); - QPixmap filterPixmap(IMAGE_FILTER); - mFilterButton->setIcon(QIcon(filterPixmap)); - mFilterButton->setIconSize(filterPixmap.size()); + mFilterButton->setIcon(FilesDefs::getIconFromQtResourcePath(IMAGE_FILTER)); + //mFilterButton->setIconSize(filterPixmap.size()); mFilterButton->setCursor(Qt::ArrowCursor); mFilterButton->setStyleSheet("QToolButton { border: none; padding: 0px; }" "QToolButton[popupMode=\"2\"] { padding-right: 10px; }" @@ -224,7 +224,7 @@ void LineEditClear::activateAction(QAction *action) QIcon icon = action->icon(); if (icon.isNull()) { - icon = QIcon(IMAGE_FILTER); + icon = FilesDefs::getIconFromQtResourcePath(IMAGE_FILTER); } mFilterButton->setIcon(icon); diff --git a/retroshare-gui/src/gui/common/MimeTextEdit.cpp b/retroshare-gui/src/gui/common/MimeTextEdit.cpp index cac02dc3e..b24a65879 100644 --- a/retroshare-gui/src/gui/common/MimeTextEdit.cpp +++ b/retroshare-gui/src/gui/common/MimeTextEdit.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include #include #include @@ -250,8 +251,8 @@ void MimeTextEdit::contextMenuEvent(QContextMenuEvent *e) QAction *spoilerAction = contextMenu->addAction(tr("Spoiler"), this, SLOT(spoiler())); spoilerAction->setToolTip(tr("Select text to hide, then push this button")); contextMenu->addSeparator(); - QAction *pasteLinkAction = contextMenu->addAction(QIcon(":/images/pasterslink.png"), tr("Paste RetroShare Link"), this, SLOT(pasteLink())); - contextMenu->addAction(QIcon(":/images/pasterslink.png"), tr("Paste my certificate link"), this, SLOT(pasteOwnCertificateLink())); + QAction *pasteLinkAction = contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(":/images/pasterslink.png"), tr("Paste RetroShare Link"), this, SLOT(pasteLink())); + contextMenu->addAction(FilesDefs::getIconFromQtResourcePath(":/images/pasterslink.png"), tr("Paste my certificate link"), this, SLOT(pasteOwnCertificateLink())); if (RSLinkClipboard::empty()) { pasteLinkAction->setDisabled(true); diff --git a/retroshare-gui/src/gui/common/NewFriendList.cpp b/retroshare-gui/src/gui/common/NewFriendList.cpp index 9d9908642..2dd216383 100644 --- a/retroshare-gui/src/gui/common/NewFriendList.cpp +++ b/retroshare-gui/src/gui/common/NewFriendList.cpp @@ -32,6 +32,7 @@ #include "GroupDefs.h" #include "gui/chat/ChatDialog.h" #include "gui/common/AvatarDefs.h" +#include "gui/common/FilesDefs.h" #include "gui/connect/ConfCertDialog.h" #include "gui/connect/PGPKeyDialog.h" @@ -577,20 +578,20 @@ void NewFriendList::peerTreeWidgetCustomPopupMenu() bool standard = group_info.flag & RS_GROUP_FLAG_STANDARD; #ifdef RS_DIRECT_CHAT - contextMenu.addAction(QIcon(IMAGE_MSG), tr("Send message to whole group"), this, SLOT(msgGroup())); + contextMenu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_MSG), tr("Send message to whole group"), this, SLOT(msgGroup())); contextMenu.addSeparator(); #endif // RS_DIRECT_CHAT - contextMenu.addAction(QIcon(IMAGE_EDIT), tr("Edit Group"), this, SLOT(editGroup())); + contextMenu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_EDIT), tr("Edit Group"), this, SLOT(editGroup())); - QAction *action = contextMenu.addAction(QIcon(IMAGE_REMOVE), tr("Remove Group"), this, SLOT(removeGroup())); + QAction *action = contextMenu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_REMOVE), tr("Remove Group"), this, SLOT(removeGroup())); action->setDisabled(standard); } break; case RsFriendListModel::ENTRY_TYPE_PROFILE: { - contextMenu.addAction(QIcon(IMAGE_FRIENDINFO), tr("Profile details"), this, SLOT(configureProfile())); - contextMenu.addAction(QIcon(IMAGE_DENYFRIEND), tr("Deny connections"), this, SLOT(removeProfile())); + contextMenu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_FRIENDINFO), tr("Profile details"), this, SLOT(configureProfile())); + contextMenu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_DENYFRIEND), tr("Deny connections"), this, SLOT(removeProfile())); RsFriendListModel::RsProfileDetails details; mModel->getProfileData(index,details); @@ -636,8 +637,8 @@ void NewFriendList::peerTreeWidgetCustomPopupMenu() } } - QMenu *groupsMenu = contextMenu.addMenu(QIcon(IMAGE_GROUP16), tr("Groups")); - groupsMenu->addAction(QIcon(IMAGE_EXPAND), tr("Create new group"), this, SLOT(createNewGroup())); + QMenu *groupsMenu = contextMenu.addMenu(FilesDefs::getIconFromQtResourcePath(IMAGE_GROUP16), tr("Groups")); + groupsMenu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_EXPAND), tr("Create new group"), this, SLOT(createNewGroup())); if (addToGroupMenu || moveToGroupMenu || foundGroup) { if (addToGroupMenu) { @@ -674,26 +675,26 @@ void NewFriendList::peerTreeWidgetCustomPopupMenu() case RsFriendListModel::ENTRY_TYPE_NODE: { #ifdef RS_DIRECT_CHAT - contextMenu.addAction(QIcon(IMAGE_CHAT), tr("Chat"), this, SLOT(chatNode())); - contextMenu.addAction(QIcon(IMAGE_MSG), tr("Send message to this node"), this, SLOT(msgNode())); + contextMenu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_CHAT), tr("Chat"), this, SLOT(chatNode())); + contextMenu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_MSG), tr("Send message to this node"), this, SLOT(msgNode())); contextMenu.addSeparator(); #endif // RS_DIRECT_CHAT - contextMenu.addAction(QIcon(IMAGE_FRIENDINFO), tr("Node details"), this, SLOT(configureNode())); + contextMenu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_FRIENDINFO), tr("Node details"), this, SLOT(configureNode())); if (type == RsFriendListModel::ENTRY_TYPE_PROFILE || type == RsFriendListModel::ENTRY_TYPE_NODE) - contextMenu.addAction(QIcon(IMAGE_EXPORTFRIEND), tr("Recommend this node to..."), this, SLOT(recommendNode())); + contextMenu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_EXPORTFRIEND), tr("Recommend this node to..."), this, SLOT(recommendNode())); RsFriendListModel::RsNodeDetails details; mModel->getNodeData(index,details); if(!rsPeers->isHiddenNode(rsPeers->getOwnId()) || rsPeers->isHiddenNode( details.id )) - contextMenu.addAction(QIcon(IMAGE_CONNECT), tr("Attempt to connect"), this, SLOT(connectNode())); + contextMenu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_CONNECT), tr("Attempt to connect"), this, SLOT(connectNode())); - contextMenu.addAction(QIcon(IMAGE_COPYLINK), tr("Copy certificate link"), this, SLOT(copyFullCertificate())); + contextMenu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_COPYLINK), tr("Copy certificate link"), this, SLOT(copyFullCertificate())); //this is a SSL key - contextMenu.addAction(QIcon(IMAGE_REMOVEFRIEND), tr("Remove Friend Node"), this, SLOT(removeNode())); + contextMenu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_REMOVEFRIEND), tr("Remove Friend Node"), this, SLOT(removeNode())); } } @@ -702,12 +703,12 @@ void NewFriendList::peerTreeWidgetCustomPopupMenu() contextMenu.addSeparator(); - QAction *action = contextMenu.addAction(QIcon(IMAGE_PASTELINK), tr("Paste certificate link"), this, SLOT(pastePerson())); + QAction *action = contextMenu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_PASTELINK), tr("Paste certificate link"), this, SLOT(pastePerson())); if (RSLinkClipboard::empty(RetroShareLink::TYPE_CERTIFICATE)) action->setDisabled(true); - contextMenu.addAction(QIcon(IMAGE_EXPAND), tr("Expand all"), ui->peerTreeWidget, SLOT(expandAll())); - contextMenu.addAction(QIcon(IMAGE_COLLAPSE), tr("Collapse all"), ui->peerTreeWidget, SLOT(collapseAll())); + contextMenu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_EXPAND), tr("Expand all"), ui->peerTreeWidget, SLOT(expandAll())); + contextMenu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_COLLAPSE), tr("Collapse all"), ui->peerTreeWidget, SLOT(collapseAll())); contextMenu.addSeparator(); diff --git a/retroshare-gui/src/gui/common/PopularityDefs.cpp b/retroshare-gui/src/gui/common/PopularityDefs.cpp index 096cdc1cf..d027c4248 100644 --- a/retroshare-gui/src/gui/common/PopularityDefs.cpp +++ b/retroshare-gui/src/gui/common/PopularityDefs.cpp @@ -20,22 +20,23 @@ #include +#include "FilesDefs.h" #include "PopularityDefs.h" QIcon PopularityDefs::icon(int popularity) { if (popularity <= 1) - return QIcon(":/images/hot_0.png"); + return FilesDefs::getIconFromQtResourcePath(":/images/hot_0.png"); else if (popularity <= 2) /* 1-1 */ - return QIcon(":/images/hot_1.png"); + return FilesDefs::getIconFromQtResourcePath(":/images/hot_1.png"); else if (popularity <= 5) /* 2-2 */ - return QIcon(":/images/hot_2.png"); + return FilesDefs::getIconFromQtResourcePath(":/images/hot_2.png"); else if (popularity <= 10) /* 3-5 */ - return QIcon(":/images/hot_3.png"); + return FilesDefs::getIconFromQtResourcePath(":/images/hot_3.png"); else if (popularity <= 20) /* 6-10 */ - return QIcon(":/images/hot_4.png"); + return FilesDefs::getIconFromQtResourcePath(":/images/hot_4.png"); else /* >10 */ - return QIcon(":/images/hot_5.png"); + return FilesDefs::getIconFromQtResourcePath(":/images/hot_5.png"); } QString PopularityDefs::tooltip(int popularity) diff --git a/retroshare-gui/src/gui/common/RsCollectionDialog.cpp b/retroshare-gui/src/gui/common/RsCollectionDialog.cpp index b9a84b7a1..89976f6e8 100644 --- a/retroshare-gui/src/gui/common/RsCollectionDialog.cpp +++ b/retroshare-gui/src/gui/common/RsCollectionDialog.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include "RsCollectionDialog.h" #include "RsCollection.h" @@ -254,7 +255,7 @@ void RsCollectionDialog::openDestinationDirectoryMenu() contextMnu.addAction(QString::fromUtf8((*it).filename.c_str()), this, SLOT(setDestinationDirectory()))->setData(QString::fromUtf8( (*it).filename.c_str() ) ) ; } - contextMnu.addAction( QIcon(IMAGE_SEARCH),tr("Specify..."),this,SLOT(chooseDestinationDirectory())); + contextMnu.addAction( FilesDefs::getIconFromQtResourcePath(IMAGE_SEARCH),tr("Specify..."),this,SLOT(chooseDestinationDirectory())); contextMnu.exec(QCursor::pos()) ; } diff --git a/retroshare-gui/src/gui/common/SubscribeToolButton.cpp b/retroshare-gui/src/gui/common/SubscribeToolButton.cpp index 4bb0147e6..4015e641c 100644 --- a/retroshare-gui/src/gui/common/SubscribeToolButton.cpp +++ b/retroshare-gui/src/gui/common/SubscribeToolButton.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include #include "SubscribeToolButton.h" @@ -64,14 +65,14 @@ void SubscribeToolButton::updateUi() #else setPopupMode(QToolButton::InstantPopup); #endif - //setIcon(QIcon(":/images/accepted16.png")); + //setIcon(FilesDefs::getIconFromQtResourcePath(":/images/accepted16.png")); setText(tr("Subscribed")); if(mMenu != NULL) // that's because setMenu does not give away memory ownership delete mMenu ; mMenu = new QMenu; - mMenu->addAction(QIcon(":/images/cancel.png"), tr("Unsubscribe"), this, SLOT(unsubscribePrivate())); + mMenu->addAction(FilesDefs::getIconFromQtResourcePath(":/images/cancel.png"), tr("Unsubscribe"), this, SLOT(unsubscribePrivate())); if (!mSubscribedActions.empty()) { mMenu->addSeparator(); @@ -86,7 +87,7 @@ void SubscribeToolButton::updateUi() } else { setPopupMode(QToolButton::DelayedPopup); setMenu(NULL); - //setIcon(QIcon(":/images/RSS_004_32.png")); + //setIcon(FilesDefs::getIconFromQtResourcePath(":/images/RSS_004_32.png")); setText(tr("Subscribe")); #ifndef USE_MENUBUTTONPOPUP diff --git a/retroshare-gui/src/gui/connect/ConnectFriendWizard.cpp b/retroshare-gui/src/gui/connect/ConnectFriendWizard.cpp index 4ad6315b9..c225d3eac 100755 --- a/retroshare-gui/src/gui/connect/ConnectFriendWizard.cpp +++ b/retroshare-gui/src/gui/connect/ConnectFriendWizard.cpp @@ -33,6 +33,7 @@ #include #endif +#include "gui/common/FilesDefs.h" #include "gui/settings/rsharesettings.h" #include "util/misc.h" #include "ConnectFriendWizard.h" @@ -145,11 +146,11 @@ ConnectFriendWizard::ConnectFriendWizard(QWidget *parent) : switch (rsFiles->filePermDirectDL()) { case RS_FILE_PERM_DIRECT_DL_YES: - ui->_direct_transfer_CB_2->setIcon(QIcon(":/icons/warning_yellow_128.png")); + ui->_direct_transfer_CB_2->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/warning_yellow_128.png")); ui->_direct_transfer_CB_2->setToolTip(ui->_direct_transfer_CB_2->toolTip().append(tr("\nWarning: In your File-Transfer option, you select allow direct download to Yes."))); break ; case RS_FILE_PERM_DIRECT_DL_NO: - ui->_direct_transfer_CB_2->setIcon(QIcon(":/icons/warning_yellow_128.png")); + ui->_direct_transfer_CB_2->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/warning_yellow_128.png")); ui->_direct_transfer_CB_2->setToolTip(ui->_direct_transfer_CB_2->toolTip().append(tr("\nWarning: In your File-Transfer option, you select allow direct download to No."))); break ; diff --git a/retroshare-gui/src/gui/connect/PGPKeyDialog.cpp b/retroshare-gui/src/gui/connect/PGPKeyDialog.cpp index d27e779fd..5dde6822c 100644 --- a/retroshare-gui/src/gui/connect/PGPKeyDialog.cpp +++ b/retroshare-gui/src/gui/connect/PGPKeyDialog.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include "PGPKeyDialog.h" #include @@ -156,11 +157,11 @@ void PGPKeyDialog::load() switch (rsFiles->filePermDirectDL()) { case RS_FILE_PERM_DIRECT_DL_YES: - ui._direct_transfer_CB->setIcon(QIcon(":/icons/warning_yellow_128.png")); + ui._direct_transfer_CB->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/warning_yellow_128.png")); ui._direct_transfer_CB->setToolTip(ui._direct_transfer_CB->toolTip().append(tr("\nWarning: In your File-Transfer option, you select allow direct download to Yes."))); break ; case RS_FILE_PERM_DIRECT_DL_NO: - ui._direct_transfer_CB->setIcon(QIcon(":/icons/warning_yellow_128.png")); + ui._direct_transfer_CB->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/warning_yellow_128.png")); ui._direct_transfer_CB->setToolTip(ui._direct_transfer_CB->toolTip().append(tr("\nWarning: In your File-Transfer option, you select allow direct download to No."))); break ; diff --git a/retroshare-gui/src/gui/elastic/elnode.cpp b/retroshare-gui/src/gui/elastic/elnode.cpp index 0fef49cba..86bb4e31e 100644 --- a/retroshare-gui/src/gui/elastic/elnode.cpp +++ b/retroshare-gui/src/gui/elastic/elnode.cpp @@ -20,6 +20,7 @@ // This code is inspired from http://doc.qt.io/qt-5/qtwidgets-graphicsview-elasticnodes-node-cpp.html +#include "gui/common/FilesDefs.h" #include #include @@ -366,11 +367,11 @@ void Node::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) QMenu contextMnu ; if(_type == GraphWidget::ELASTIC_NODE_TYPE_FRIEND) - contextMnu.addAction(QIcon(IMAGE_DENIED), QObject::tr( "Deny friend" ), this, SLOT(denyFriend()) ); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_DENIED), QObject::tr( "Deny friend" ), this, SLOT(denyFriend()) ); else if(_type != GraphWidget::ELASTIC_NODE_TYPE_OWN) - contextMnu.addAction(QIcon(IMAGE_MAKEFRIEND), QObject::tr( "Make friend" ), this, SLOT(makeFriend()) ); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_MAKEFRIEND), QObject::tr( "Make friend" ), this, SLOT(makeFriend()) ); - contextMnu.addAction(QIcon(IMAGE_MAKEFRIEND), QObject::tr( "Peer details" ), this, SLOT(peerDetails()) ); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_MAKEFRIEND), QObject::tr( "Peer details" ), this, SLOT(peerDetails()) ); contextMnu.exec(event->screenPos()); } diff --git a/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.cpp b/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.cpp index e1c9a028f..8f53b5fe4 100644 --- a/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.cpp +++ b/retroshare-gui/src/gui/feeds/GxsChannelGroupItem.cpp @@ -24,6 +24,7 @@ #include "FeedHolder.h" #include "util/qtthreadsutils.h" +#include "gui/common/FilesDefs.h" #include "gui/NewsFeed.h" #include "gui/RetroShareLink.h" @@ -187,13 +188,13 @@ void GxsChannelGroupItem::doExpand(bool open) if (open) { ui->expandFrame->show(); - ui->expandButton->setIcon(QIcon(QString(":/icons/png/up-arrow.png"))); + ui->expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/up-arrow.png"))); ui->expandButton->setToolTip(tr("Hide")); } else { ui->expandFrame->hide(); - ui->expandButton->setIcon(QIcon(QString(":/icons/png/down-arrow.png"))); + ui->expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/down-arrow.png"))); ui->expandButton->setToolTip(tr("Expand")); } diff --git a/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp b/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp index 4a559e001..5df1a8906 100644 --- a/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp +++ b/retroshare-gui/src/gui/feeds/GxsForumGroupItem.cpp @@ -22,6 +22,7 @@ #include "ui_GxsForumGroupItem.h" #include "gui/NewsFeed.h" +#include "gui/common/FilesDefs.h" #include "FeedHolder.h" #include "gui/RetroShareLink.h" #include "util/qtthreadsutils.h" @@ -251,13 +252,13 @@ void GxsForumGroupItem::doExpand(bool open) if (open) { ui->expandFrame->show(); - ui->expandButton->setIcon(QIcon(QString(":/icons/png/up-arrow.png"))); + ui->expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/up-arrow.png"))); ui->expandButton->setToolTip(tr("Hide")); } else { ui->expandFrame->hide(); - ui->expandButton->setIcon(QIcon(QString(":/icons/png/down-arrow.png"))); + ui->expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/down-arrow.png"))); ui->expandButton->setToolTip(tr("Expand")); } diff --git a/retroshare-gui/src/gui/feeds/GxsForumMsgItem.cpp b/retroshare-gui/src/gui/feeds/GxsForumMsgItem.cpp index f6afc8cdd..4d4bdd661 100644 --- a/retroshare-gui/src/gui/feeds/GxsForumMsgItem.cpp +++ b/retroshare-gui/src/gui/feeds/GxsForumMsgItem.cpp @@ -28,6 +28,7 @@ #include "FeedHolder.h" #include "gui/RetroShareLink.h" +#include "gui/common/FilesDefs.h" #include "gui/gxs/GxsIdDetails.h" #include "util/HandleRichText.h" #include "util/qtthreadsutils.h" @@ -421,7 +422,7 @@ void GxsForumMsgItem::doExpand(bool open) if (open) { ui->expandFrame->show(); - ui->expandButton->setIcon(QIcon(QString(":/icons/png/up-arrow.png"))); + ui->expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/up-arrow.png"))); ui->expandButton->setToolTip(tr("Hide")); if (!mParentMessage.mMeta.mMsgId.isNull()) { @@ -434,7 +435,7 @@ void GxsForumMsgItem::doExpand(bool open) { ui->expandFrame->hide(); ui->parentFrame->hide(); - ui->expandButton->setIcon(QIcon(QString(":/icons/png/down-arrow.png"))); + ui->expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/down-arrow.png"))); ui->expandButton->setToolTip(tr("Expand")); } diff --git a/retroshare-gui/src/gui/feeds/MsgItem.cpp b/retroshare-gui/src/gui/feeds/MsgItem.cpp index 181774a00..a25e97873 100644 --- a/retroshare-gui/src/gui/feeds/MsgItem.cpp +++ b/retroshare-gui/src/gui/feeds/MsgItem.cpp @@ -29,6 +29,7 @@ #include "util/HandleRichText.h" #include "util/DateTime.h" #include "gui/common/AvatarDefs.h" +#include "gui/common/FilesDefs.h" #include "gui/notifyqt.h" #include @@ -231,7 +232,7 @@ void MsgItem::doExpand(bool open) if (open) { expandFrame->show(); - expandButton->setIcon(QIcon(QString(":/icons/png/up-arrow.png"))); + expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/up-arrow.png"))); expandButton->setToolTip(tr("Hide")); mCloseOnRead = false; @@ -241,7 +242,7 @@ void MsgItem::doExpand(bool open) else { expandFrame->hide(); - expandButton->setIcon(QIcon(QString(":/icons/png/down-arrow.png"))); + expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/down-arrow.png"))); expandButton->setToolTip(tr("Expand")); } diff --git a/retroshare-gui/src/gui/feeds/NewsFeedUserNotify.cpp b/retroshare-gui/src/gui/feeds/NewsFeedUserNotify.cpp index e71c166f2..65a377edf 100644 --- a/retroshare-gui/src/gui/feeds/NewsFeedUserNotify.cpp +++ b/retroshare-gui/src/gui/feeds/NewsFeedUserNotify.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include "NewsFeedUserNotify.h" #include "gui/NewsFeed.h" @@ -37,7 +38,7 @@ void NewsFeedUserNotify::newsFeedChanged(int count) QIcon NewsFeedUserNotify::getMainIcon(bool hasNew) { - return hasNew ? QIcon(":/icons/png/newsfeed-notify.png") : QIcon(":/icons/png/newsfeed.png"); + return hasNew ? FilesDefs::getIconFromQtResourcePath(":/icons/png/newsfeed-notify.png") : FilesDefs::getIconFromQtResourcePath(":/icons/png/newsfeed.png"); } unsigned int NewsFeedUserNotify::getNewCount() diff --git a/retroshare-gui/src/gui/feeds/PeerItem.cpp b/retroshare-gui/src/gui/feeds/PeerItem.cpp index 2a6f0b19d..a03572f61 100644 --- a/retroshare-gui/src/gui/feeds/PeerItem.cpp +++ b/retroshare-gui/src/gui/feeds/PeerItem.cpp @@ -26,6 +26,7 @@ #include "retroshare-gui/RsAutoUpdatePage.h" #include "gui/msgs/MessageComposer.h" #include "gui/common/StatusDefs.h" +#include "gui/common/FilesDefs.h" #include "gui/common/AvatarDefs.h" #include "util/DateTime.h" @@ -243,13 +244,13 @@ void PeerItem::doExpand(bool open) if (open) { expandFrame->show(); - expandButton->setIcon(QIcon(QString(":/icons/png/up-arrow.png"))); + expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/up-arrow.png"))); expandButton->setToolTip(tr("Hide")); } else { expandFrame->hide(); - expandButton->setIcon(QIcon(QString(":/icons/png/down-arrow.png"))); + expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/down-arrow.png"))); expandButton->setToolTip(tr("Expand")); } diff --git a/retroshare-gui/src/gui/feeds/PostedGroupItem.cpp b/retroshare-gui/src/gui/feeds/PostedGroupItem.cpp index 6b39566aa..90d766bc2 100644 --- a/retroshare-gui/src/gui/feeds/PostedGroupItem.cpp +++ b/retroshare-gui/src/gui/feeds/PostedGroupItem.cpp @@ -25,6 +25,7 @@ #include "util/qtthreadsutils.h" #include "gui/RetroShareLink.h" #include "gui/gxs/GxsIdDetails.h" +#include "gui/common/FilesDefs.h" /**** * #define DEBUG_ITEM 1 @@ -204,13 +205,13 @@ void PostedGroupItem::doExpand(bool open) if (open) { ui->expandFrame->show(); - ui->expandButton->setIcon(QIcon(QString(":/icons/png/up-arrow.png"))); + ui->expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/up-arrow.png"))); ui->expandButton->setToolTip(tr("Hide")); } else { ui->expandFrame->hide(); - ui->expandButton->setIcon(QIcon(QString(":/icons/png/down-arrow.png"))); + ui->expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/down-arrow.png"))); ui->expandButton->setToolTip(tr("Expand")); } diff --git a/retroshare-gui/src/gui/feeds/SecurityIpItem.cpp b/retroshare-gui/src/gui/feeds/SecurityIpItem.cpp index 590bd0588..6e543108d 100644 --- a/retroshare-gui/src/gui/feeds/SecurityIpItem.cpp +++ b/retroshare-gui/src/gui/feeds/SecurityIpItem.cpp @@ -29,6 +29,7 @@ #include "util/DateTime.h" #include "gui/common/PeerDefs.h" #include "gui/common/RsBanListDefs.h" +#include "gui/common/FilesDefs.h" #include #include @@ -199,13 +200,13 @@ void SecurityIpItem::doExpand(bool open) if (open) { ui->expandFrame->show(); - ui->expandButton->setIcon(QIcon(":/icons/png/up-arrow.png")); + ui->expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/up-arrow.png")); ui->expandButton->setToolTip(tr("Hide")); } else { ui->expandFrame->hide(); - ui->expandButton->setIcon(QIcon(":/icons/png/down-arrow.png")); + ui->expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/down-arrow.png")); ui->expandButton->setToolTip(tr("Expand")); } diff --git a/retroshare-gui/src/gui/feeds/SecurityItem.cpp b/retroshare-gui/src/gui/feeds/SecurityItem.cpp index aedfd4e6c..b2bbc2cf3 100644 --- a/retroshare-gui/src/gui/feeds/SecurityItem.cpp +++ b/retroshare-gui/src/gui/feeds/SecurityItem.cpp @@ -29,6 +29,7 @@ #include "gui/common/StatusDefs.h" #include "gui/connect/ConfCertDialog.h" #include "gui/connect/PGPKeyDialog.h" +#include "gui/common/FilesDefs.h" #include "gui/connect/ConnectFriendWizard.h" #include "gui/common/AvatarDefs.h" #include "util/DateTime.h" @@ -295,13 +296,13 @@ void SecurityItem::doExpand(bool open) if (open) { expandFrame->show(); - expandButton->setIcon(QIcon(QString(":/icons/png/up-arrow.png"))); + expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/up-arrow.png"))); expandButton->setToolTip(tr("Hide")); } else { expandFrame->hide(); - expandButton->setIcon(QIcon(QString(":/icons/png/down-arrow.png"))); + expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/down-arrow.png"))); expandButton->setToolTip(tr("Expand")); } diff --git a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp index a1f824e9a..dfdd9bd04 100644 --- a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp +++ b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp @@ -211,14 +211,14 @@ void GxsCommentTreeWidget::customPopUpMenu(const QPoint& /*point*/) contextMnu.addSeparator(); QMenu *rep_menu = contextMnu.addMenu(tr("Reputation")); - action = rep_menu->addAction(QIcon(IMAGE_MESSAGE), tr("Show Reputation"), this, SLOT(showReputation())); + action = rep_menu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_MESSAGE), tr("Show Reputation"), this, SLOT(showReputation())); contextMnu.addSeparator(); - action = rep_menu->addAction(QIcon(IMAGE_MESSAGE), tr("Interesting User"), this, SLOT(markInteresting())); + action = rep_menu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_MESSAGE), tr("Interesting User"), this, SLOT(markInteresting())); contextMnu.addSeparator(); - action = rep_menu->addAction(QIcon(IMAGE_MESSAGE), tr("Mark Spammy"), this, SLOT(markSpammer())); - action = rep_menu->addAction(QIcon(IMAGE_MESSAGE), tr("Ban User"), this, SLOT(banUser())); + action = rep_menu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_MESSAGE), tr("Mark Spammy"), this, SLOT(markSpammer())); + action = rep_menu->addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_MESSAGE), tr("Ban User"), this, SLOT(banUser())); */ } diff --git a/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp b/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp index b7f3fcf20..1021a3937 100644 --- a/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp +++ b/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp @@ -151,16 +151,16 @@ void GxsGroupFrameDialog::initUi() /* Initialize group tree */ QToolButton *newGroupButton = new QToolButton(this); - newGroupButton->setIcon(QIcon(icon(ICON_NEW))); + newGroupButton->setIcon(FilesDefs::getIconFromQtResourcePath(icon(ICON_NEW))); newGroupButton->setToolTip(text(TEXT_NEW)); connect(newGroupButton, SIGNAL(clicked()), this, SLOT(newGroup())); ui->groupTreeWidget->addToolButton(newGroupButton); /* Create group tree */ - mYourGroups = ui->groupTreeWidget->addCategoryItem(text(TEXT_YOUR_GROUP), QIcon(icon(ICON_YOUR_GROUP)), true); - mSubscribedGroups = ui->groupTreeWidget->addCategoryItem(text(TEXT_SUBSCRIBED_GROUP), QIcon(icon(ICON_SUBSCRIBED_GROUP)), true); - mPopularGroups = ui->groupTreeWidget->addCategoryItem(text(TEXT_POPULAR_GROUP), QIcon(icon(ICON_POPULAR_GROUP)), false); - mOtherGroups = ui->groupTreeWidget->addCategoryItem(text(TEXT_OTHER_GROUP), QIcon(icon(ICON_OTHER_GROUP)), false); + mYourGroups = ui->groupTreeWidget->addCategoryItem(text(TEXT_YOUR_GROUP), FilesDefs::getIconFromQtResourcePath(icon(ICON_YOUR_GROUP)), true); + mSubscribedGroups = ui->groupTreeWidget->addCategoryItem(text(TEXT_SUBSCRIBED_GROUP), FilesDefs::getIconFromQtResourcePath(icon(ICON_SUBSCRIBED_GROUP)), true); + mPopularGroups = ui->groupTreeWidget->addCategoryItem(text(TEXT_POPULAR_GROUP), FilesDefs::getIconFromQtResourcePath(icon(ICON_POPULAR_GROUP)), false); + mOtherGroups = ui->groupTreeWidget->addCategoryItem(text(TEXT_OTHER_GROUP), FilesDefs::getIconFromQtResourcePath(icon(ICON_OTHER_GROUP)), false); if (text(TEXT_TODO).isEmpty()) { ui->todoPushButton->hide(); @@ -410,8 +410,8 @@ void GxsGroupFrameDialog::groupTreeCustomPopupMenu(QPoint point) { QMenu contextMnu(this); - contextMnu.addAction(QIcon(IMAGE_DELETE), tr("Remove this search"), this, SLOT(removeCurrentSearch()))->setData(search_request_id); - contextMnu.addAction(QIcon(IMAGE_DELETE), tr("Remove all searches"), this, SLOT(removeAllSearches())); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_DELETE), tr("Remove this search"), this, SLOT(removeCurrentSearch()))->setData(search_request_id); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_DELETE), tr("Remove all searches"), this, SLOT(removeAllSearches())); contextMnu.exec(QCursor::pos()); return ; } @@ -424,7 +424,7 @@ void GxsGroupFrameDialog::groupTreeCustomPopupMenu(QPoint point) { QMenu contextMnu(this); - contextMnu.addAction(QIcon(IMAGE_RETRIEVE), tr("Request data"), this, SLOT(distantRequestGroupData()))->setData(group_id_s); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_RETRIEVE), tr("Request data"), this, SLOT(distantRequestGroupData()))->setData(group_id_s); contextMnu.exec(QCursor::pos()); return ; } @@ -442,27 +442,27 @@ void GxsGroupFrameDialog::groupTreeCustomPopupMenu(QPoint point) QMenu contextMnu(this); QAction *action; - action = contextMnu.addAction(QIcon(IMAGE_TABNEW), tr("Open in new tab"), this, SLOT(openInNewTab())); + action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_TABNEW), tr("Open in new tab"), this, SLOT(openInNewTab())); if(mGroupId.isNull()) // dont enable the open in tab if a tab is already here action->setEnabled(false); if (isSubscribed) { - action = contextMnu.addAction(QIcon(IMAGE_UNSUBSCRIBE), tr("Unsubscribe"), this, SLOT(unsubscribeGroup())); + action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_UNSUBSCRIBE), tr("Unsubscribe"), this, SLOT(unsubscribeGroup())); action->setEnabled (!mGroupId.isNull() && IS_GROUP_SUBSCRIBED(subscribeFlags)); } else { - action = contextMnu.addAction(QIcon(IMAGE_SUBSCRIBE), tr("Subscribe"), this, SLOT(subscribeGroup())); + action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_SUBSCRIBE), tr("Subscribe"), this, SLOT(subscribeGroup())); action->setDisabled (mGroupId.isNull() || IS_GROUP_SUBSCRIBED(subscribeFlags)); } contextMnu.addSeparator(); - contextMnu.addAction(QIcon(icon(ICON_NEW)), text(TEXT_NEW), this, SLOT(newGroup())); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(icon(ICON_NEW)), text(TEXT_NEW), this, SLOT(newGroup())); - action = contextMnu.addAction(QIcon(IMAGE_INFO), tr("Show Details"), this, SLOT(showGroupDetails())); + action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_INFO), tr("Show Details"), this, SLOT(showGroupDetails())); action->setEnabled (!mGroupId.isNull()); - action = contextMnu.addAction(QIcon(IMAGE_EDIT), tr("Edit Details"), this, SLOT(editGroupDetails())); + action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_EDIT), tr("Edit Details"), this, SLOT(editGroupDetails())); action->setEnabled (!mGroupId.isNull() && isAdmin); uint32_t current_store_time = checkDelay(mInterface->getStoragePeriod(mGroupId))/86400 ; @@ -472,39 +472,39 @@ void GxsGroupFrameDialog::groupTreeCustomPopupMenu(QPoint point) QAction *actnn = NULL; QMenu *ctxMenu2 = contextMnu.addMenu(tr("Synchronise posts of last...")) ; - actnn = ctxMenu2->addAction(tr(" 5 days" ),this,SLOT(setSyncPostsDelay())) ; actnn->setData(QVariant( 5)) ; if(current_sync_time == 5) { actnn->setEnabled(false);actnn->setIcon(QIcon(":/images/start.png"));} - actnn = ctxMenu2->addAction(tr(" 2 weeks" ),this,SLOT(setSyncPostsDelay())) ; actnn->setData(QVariant( 15)) ; if(current_sync_time == 15) { actnn->setEnabled(false);actnn->setIcon(QIcon(":/images/start.png"));} - actnn = ctxMenu2->addAction(tr(" 1 month" ),this,SLOT(setSyncPostsDelay())) ; actnn->setData(QVariant( 30)) ; if(current_sync_time == 30) { actnn->setEnabled(false);actnn->setIcon(QIcon(":/images/start.png"));} - actnn = ctxMenu2->addAction(tr(" 3 months" ),this,SLOT(setSyncPostsDelay())) ; actnn->setData(QVariant( 90)) ; if(current_sync_time == 90) { actnn->setEnabled(false);actnn->setIcon(QIcon(":/images/start.png"));} - actnn = ctxMenu2->addAction(tr(" 6 months" ),this,SLOT(setSyncPostsDelay())) ; actnn->setData(QVariant(180)) ; if(current_sync_time ==180) { actnn->setEnabled(false);actnn->setIcon(QIcon(":/images/start.png"));} - actnn = ctxMenu2->addAction(tr(" 1 year " ),this,SLOT(setSyncPostsDelay())) ; actnn->setData(QVariant(365)) ; if(current_sync_time ==365) { actnn->setEnabled(false);actnn->setIcon(QIcon(":/images/start.png"));} - actnn = ctxMenu2->addAction(tr(" Indefinitly"),this,SLOT(setSyncPostsDelay())) ; actnn->setData(QVariant( 0)) ; if(current_sync_time == 0) { actnn->setEnabled(false);actnn->setIcon(QIcon(":/images/start.png"));} + actnn = ctxMenu2->addAction(tr(" 5 days" ),this,SLOT(setSyncPostsDelay())) ; actnn->setData(QVariant( 5)) ; if(current_sync_time == 5) { actnn->setEnabled(false);actnn->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/start.png"));} + actnn = ctxMenu2->addAction(tr(" 2 weeks" ),this,SLOT(setSyncPostsDelay())) ; actnn->setData(QVariant( 15)) ; if(current_sync_time == 15) { actnn->setEnabled(false);actnn->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/start.png"));} + actnn = ctxMenu2->addAction(tr(" 1 month" ),this,SLOT(setSyncPostsDelay())) ; actnn->setData(QVariant( 30)) ; if(current_sync_time == 30) { actnn->setEnabled(false);actnn->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/start.png"));} + actnn = ctxMenu2->addAction(tr(" 3 months" ),this,SLOT(setSyncPostsDelay())) ; actnn->setData(QVariant( 90)) ; if(current_sync_time == 90) { actnn->setEnabled(false);actnn->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/start.png"));} + actnn = ctxMenu2->addAction(tr(" 6 months" ),this,SLOT(setSyncPostsDelay())) ; actnn->setData(QVariant(180)) ; if(current_sync_time ==180) { actnn->setEnabled(false);actnn->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/start.png"));} + actnn = ctxMenu2->addAction(tr(" 1 year " ),this,SLOT(setSyncPostsDelay())) ; actnn->setData(QVariant(365)) ; if(current_sync_time ==365) { actnn->setEnabled(false);actnn->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/start.png"));} + actnn = ctxMenu2->addAction(tr(" Indefinitly"),this,SLOT(setSyncPostsDelay())) ; actnn->setData(QVariant( 0)) ; if(current_sync_time == 0) { actnn->setEnabled(false);actnn->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/start.png"));} ctxMenu2 = contextMnu.addMenu(tr("Store posts for at most...")) ; - actnn = ctxMenu2->addAction(tr(" 5 days" ),this,SLOT(setStorePostsDelay())) ; actnn->setData(QVariant( 5)) ; if(current_store_time == 5) { actnn->setEnabled(false);actnn->setIcon(QIcon(":/images/start.png"));} - actnn = ctxMenu2->addAction(tr(" 2 weeks" ),this,SLOT(setStorePostsDelay())) ; actnn->setData(QVariant( 15)) ; if(current_store_time == 15) { actnn->setEnabled(false);actnn->setIcon(QIcon(":/images/start.png"));} - actnn = ctxMenu2->addAction(tr(" 1 month" ),this,SLOT(setStorePostsDelay())) ; actnn->setData(QVariant( 30)) ; if(current_store_time == 30) { actnn->setEnabled(false);actnn->setIcon(QIcon(":/images/start.png"));} - actnn = ctxMenu2->addAction(tr(" 3 months" ),this,SLOT(setStorePostsDelay())) ; actnn->setData(QVariant( 90)) ; if(current_store_time == 90) { actnn->setEnabled(false);actnn->setIcon(QIcon(":/images/start.png"));} - actnn = ctxMenu2->addAction(tr(" 6 months" ),this,SLOT(setStorePostsDelay())) ; actnn->setData(QVariant(180)) ; if(current_store_time ==180) { actnn->setEnabled(false);actnn->setIcon(QIcon(":/images/start.png"));} - actnn = ctxMenu2->addAction(tr(" 1 year " ),this,SLOT(setStorePostsDelay())) ; actnn->setData(QVariant(365)) ; if(current_store_time ==365) { actnn->setEnabled(false);actnn->setIcon(QIcon(":/images/start.png"));} - actnn = ctxMenu2->addAction(tr(" Indefinitly"),this,SLOT(setStorePostsDelay())) ; actnn->setData(QVariant( 0)) ; if(current_store_time == 0) { actnn->setEnabled(false);actnn->setIcon(QIcon(":/images/start.png"));} + actnn = ctxMenu2->addAction(tr(" 5 days" ),this,SLOT(setStorePostsDelay())) ; actnn->setData(QVariant( 5)) ; if(current_store_time == 5) { actnn->setEnabled(false);actnn->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/start.png"));} + actnn = ctxMenu2->addAction(tr(" 2 weeks" ),this,SLOT(setStorePostsDelay())) ; actnn->setData(QVariant( 15)) ; if(current_store_time == 15) { actnn->setEnabled(false);actnn->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/start.png"));} + actnn = ctxMenu2->addAction(tr(" 1 month" ),this,SLOT(setStorePostsDelay())) ; actnn->setData(QVariant( 30)) ; if(current_store_time == 30) { actnn->setEnabled(false);actnn->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/start.png"));} + actnn = ctxMenu2->addAction(tr(" 3 months" ),this,SLOT(setStorePostsDelay())) ; actnn->setData(QVariant( 90)) ; if(current_store_time == 90) { actnn->setEnabled(false);actnn->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/start.png"));} + actnn = ctxMenu2->addAction(tr(" 6 months" ),this,SLOT(setStorePostsDelay())) ; actnn->setData(QVariant(180)) ; if(current_store_time ==180) { actnn->setEnabled(false);actnn->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/start.png"));} + actnn = ctxMenu2->addAction(tr(" 1 year " ),this,SLOT(setStorePostsDelay())) ; actnn->setData(QVariant(365)) ; if(current_store_time ==365) { actnn->setEnabled(false);actnn->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/start.png"));} + actnn = ctxMenu2->addAction(tr(" Indefinitly"),this,SLOT(setStorePostsDelay())) ; actnn->setData(QVariant( 0)) ; if(current_store_time == 0) { actnn->setEnabled(false);actnn->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/start.png"));} if (shareKeyType()) { - action = contextMnu.addAction(QIcon(IMAGE_SHARE), tr("Share publish permissions..."), this, SLOT(sharePublishKey())); + action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_SHARE), tr("Share publish permissions..."), this, SLOT(sharePublishKey())); action->setEnabled(!mGroupId.isNull() && isPublisher); } if (getLinkType() != RetroShareLink::TYPE_UNKNOWN) { - action = contextMnu.addAction(QIcon(IMAGE_COPYLINK), tr("Copy RetroShare Link"), this, SLOT(copyGroupLink())); + action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_COPYLINK), tr("Copy RetroShare Link"), this, SLOT(copyGroupLink())); action->setEnabled(!mGroupId.isNull()); } contextMnu.addSeparator(); - action = contextMnu.addAction(QIcon(":/images/message-mail-read.png"), tr("Mark all as read"), this, SLOT(markMsgAsRead())); + action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(":/images/message-mail-read.png"), tr("Mark all as read"), this, SLOT(markMsgAsRead())); action->setEnabled (!mGroupId.isNull() && isSubscribed); - action = contextMnu.addAction(QIcon(":/images/message-mail.png"), tr("Mark all as unread"), this, SLOT(markMsgAsUnread())); + action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(":/images/message-mail.png"), tr("Mark all as unread"), this, SLOT(markMsgAsUnread())); action->setEnabled (!mGroupId.isNull() && isSubscribed); /* Add special actions */ @@ -739,7 +739,7 @@ void GxsGroupFrameDialog::loadComment(const RsGxsGroupId &grpId, const QVectorcommentLoad(grpId, msgv,most_recent_msgId); int index = ui->messageTabWidget->addTab(commentDialog, comments); - ui->messageTabWidget->setTabIcon(index, QIcon(IMAGE_COMMENT)); + ui->messageTabWidget->setTabIcon(index, FilesDefs::getIconFromQtResourcePath(IMAGE_COMMENT)); } ui->messageTabWidget->setCurrentWidget(commentDialog); @@ -956,12 +956,12 @@ void GxsGroupFrameDialog::groupInfoToGroupItemInfo(const RsGxsGenericGroupData * #if TOGXS if (groupInfo.mGroupFlags & RS_DISTRIB_AUTHEN_REQ) { groupItemInfo.name += " (" + tr("AUTHD") + ")"; - groupItemInfo.icon = QIcon(IMAGE_GROUPAUTHD); + groupItemInfo.icon = FilesDefs::getIconFromQtResourcePath(IMAGE_GROUPAUTHD); } else #endif { - groupItemInfo.icon = QIcon(icon(ICON_DEFAULT)); + groupItemInfo.icon = FilesDefs::getIconFromQtResourcePath(icon(ICON_DEFAULT)); } } @@ -1209,7 +1209,7 @@ void GxsGroupFrameDialog::searchNetwork(const QString& search_string) if(request_id == 0) return ; - mSearchGroupsItems[request_id] = ui->groupTreeWidget->addSearchItem(tr("Search for")+ " \"" + search_string + "\"",(uint32_t)request_id,QIcon(icon(ICON_SEARCH))); + mSearchGroupsItems[request_id] = ui->groupTreeWidget->addSearchItem(tr("Search for")+ " \"" + search_string + "\"",(uint32_t)request_id,FilesDefs::getIconFromQtResourcePath(icon(ICON_SEARCH))); } void GxsGroupFrameDialog::distantRequestGroupData() diff --git a/retroshare-gui/src/gui/gxs/GxsIdChooser.cpp b/retroshare-gui/src/gui/gxs/GxsIdChooser.cpp index 2db5d8534..6235c025f 100644 --- a/retroshare-gui/src/gui/gxs/GxsIdChooser.cpp +++ b/retroshare-gui/src/gui/gxs/GxsIdChooser.cpp @@ -22,6 +22,7 @@ #include "GxsIdDetails.h" #include "RsGxsUpdateBroadcastBase.h" #include "gui/Identity/IdEditDialog.h" +#include "gui/common/FilesDefs.h" #include "util/misc.h" #include @@ -162,7 +163,7 @@ static void loadPrivateIdsCallback(GxsIdDetailsType type, const RsIdentityDetail break; case GXS_ID_DETAILS_TYPE_BANNED: - icons.push_back(QIcon(BANNED_ICON)) ; + icons.push_back(FilesDefs::getIconFromQtResourcePath(BANNED_ICON)) ; break; } @@ -285,7 +286,7 @@ void GxsIdChooser::loadPrivateIds() QString str = tr("Create new Identity"); QString id = ""; - addItem(QIcon(":/icons/png/add-identity.png"), str, id); + addItem(FilesDefs::getIconFromQtResourcePath(":/icons/png/add-identity.png"), str, id); setItemData(count() - 1, QString("%1_%2").arg(TYPE_CREATE_ID).arg(str), ROLE_SORT); setItemData(count() - 1, TYPE_CREATE_ID, ROLE_TYPE); diff --git a/retroshare-gui/src/gui/gxs/GxsIdDetails.cpp b/retroshare-gui/src/gui/gxs/GxsIdDetails.cpp index 701a9153d..a7d050dd5 100644 --- a/retroshare-gui/src/gui/gxs/GxsIdDetails.cpp +++ b/retroshare-gui/src/gui/gxs/GxsIdDetails.cpp @@ -21,6 +21,7 @@ #include "GxsIdDetails.h" #include "gui/common/AvatarDialog.h" +#include "gui/common/FilesDefs.h" #include "retroshare-gui/RsAutoUpdatePage.h" #include @@ -375,10 +376,10 @@ static bool findTagIcon(int tag_class, int /*tag_type*/, QIcon &icon) { default: case 0: - icon = QIcon(IMAGE_DEV_AMBASSADOR); + icon = FilesDefs::getIconFromQtResourcePath(IMAGE_DEV_AMBASSADOR); break; case 1: - icon = QIcon(IMAGE_DEV_CONTRIBUTOR); + icon = FilesDefs::getIconFromQtResourcePath(IMAGE_DEV_CONTRIBUTOR); break; } return true; @@ -974,7 +975,7 @@ QString GxsIdDetails::getNameForType(GxsIdDetailsType type, const RsIdentityDeta QIcon GxsIdDetails::getLoadingIcon(const RsGxsId &/*id*/) { - return QIcon(IMAGE_LOADING); + return FilesDefs::getIconFromQtResourcePath(IMAGE_LOADING); } bool GxsIdDetails::MakeIdDesc(const RsGxsId &id, bool doIcons, QString &str, QList &icons, QString& comment,uint32_t icon_types) @@ -1005,9 +1006,9 @@ bool GxsIdDetails::MakeIdDesc(const RsGxsId &id, bool doIcons, QString &str, QLi // Cyril: I disabled these three which I believe to have been put for testing purposes. // -// icons.push_back(QIcon(IMAGE_ANON)); -// icons.push_back(QIcon(IMAGE_ANON)); -// icons.push_back(QIcon(IMAGE_ANON)); +// icons.push_back(FilesDefs::getIconFromQtResourcePath(IMAGE_ANON)); +// icons.push_back(FilesDefs::getIconFromQtResourcePath(IMAGE_ANON)); +// icons.push_back(FilesDefs::getIconFromQtResourcePath(IMAGE_ANON)); // std::cerr << "GxsIdTreeWidget::MakeIdDesc() ID Ok. Comment: " << comment.toStdString() ; // std::cerr << std::endl; @@ -1083,20 +1084,20 @@ QIcon GxsIdDetails::getReputationIcon( RsReputationLevel icon_index, uint32_t min_reputation ) { if( static_cast(icon_index) >= min_reputation ) - return QIcon(REPUTATION_VOID); + return FilesDefs::getIconFromQtResourcePath(REPUTATION_VOID); switch(icon_index) { case RsReputationLevel::LOCALLY_NEGATIVE: - return QIcon(REPUTATION_LOCALLY_NEGATIVE_ICON); + return FilesDefs::getIconFromQtResourcePath(REPUTATION_LOCALLY_NEGATIVE_ICON); case RsReputationLevel::LOCALLY_POSITIVE: - return QIcon(REPUTATION_LOCALLY_POSITIVE_ICON); + return FilesDefs::getIconFromQtResourcePath(REPUTATION_LOCALLY_POSITIVE_ICON); case RsReputationLevel::REMOTELY_POSITIVE: - return QIcon(REPUTATION_REMOTELY_POSITIVE_ICON); + return FilesDefs::getIconFromQtResourcePath(REPUTATION_REMOTELY_POSITIVE_ICON); case RsReputationLevel::REMOTELY_NEGATIVE: - return QIcon(REPUTATION_REMOTELY_NEGATIVE_ICON); + return FilesDefs::getIconFromQtResourcePath(REPUTATION_REMOTELY_NEGATIVE_ICON); case RsReputationLevel::NEUTRAL: - return QIcon(REPUTATION_NEUTRAL_ICON); + return FilesDefs::getIconFromQtResourcePath(REPUTATION_NEUTRAL_ICON); default: std::cerr << "Asked for unidentified icon index " << static_cast(icon_index) << std::endl; @@ -1112,7 +1113,7 @@ void GxsIdDetails::getIcons(const RsIdentityDetails &details, QList &icon RsReputationLevel::LOCALLY_NEGATIVE ) { icons.clear() ; - icons.push_back(QIcon(IMAGE_BANNED)) ; + icons.push_back(FilesDefs::getIconFromQtResourcePath(IMAGE_BANNED)) ; return ; } @@ -1141,12 +1142,12 @@ void GxsIdDetails::getIcons(const RsIdentityDetails &details, QList &icon if (details.mFlags & RS_IDENTITY_FLAGS_PGP_LINKED) { if (details.mFlags & RS_IDENTITY_FLAGS_PGP_KNOWN) - baseIcon = QIcon(IMAGE_PGPKNOWN); + baseIcon = FilesDefs::getIconFromQtResourcePath(IMAGE_PGPKNOWN); else - baseIcon = QIcon(IMAGE_PGPUNKNOWN); + baseIcon = FilesDefs::getIconFromQtResourcePath(IMAGE_PGPUNKNOWN); } else - baseIcon = QIcon(IMAGE_ANON); + baseIcon = FilesDefs::getIconFromQtResourcePath(IMAGE_ANON); icons.push_back(baseIcon); } diff --git a/retroshare-gui/src/gui/gxs/GxsIdTreeWidgetItem.cpp b/retroshare-gui/src/gui/gxs/GxsIdTreeWidgetItem.cpp index 413aef616..aa9201e95 100644 --- a/retroshare-gui/src/gui/gxs/GxsIdTreeWidgetItem.cpp +++ b/retroshare-gui/src/gui/gxs/GxsIdTreeWidgetItem.cpp @@ -67,7 +67,7 @@ static void fillGxsIdRSTreeWidgetItemCallback(GxsIdDetailsType type, const RsIde break; case GXS_ID_DETAILS_TYPE_BANNED: - icons.push_back(QIcon("BANNED_IMAGE")) ; + icons.push_back(FilesDefs::getIconFromQtResourcePath("BANNED_IMAGE")) ; break ; } diff --git a/retroshare-gui/src/gui/gxschannels/CreateGxsChannelMsg.cpp b/retroshare-gui/src/gui/gxschannels/CreateGxsChannelMsg.cpp index ef1a6271e..177289f09 100644 --- a/retroshare-gui/src/gui/gxschannels/CreateGxsChannelMsg.cpp +++ b/retroshare-gui/src/gui/gxschannels/CreateGxsChannelMsg.cpp @@ -122,9 +122,9 @@ void CreateGxsChannelMsg::contextMenu(QPoint /*point*/) QAction *action ; if(n_file > 1) - action = contextMnu.addAction(QIcon(":/images/pasterslink.png"), tr("Paste RetroShare Links"), this, SLOT(pasteLink())); + action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(":/images/pasterslink.png"), tr("Paste RetroShare Links"), this, SLOT(pasteLink())); else - action = contextMnu.addAction(QIcon(":/images/pasterslink.png"), tr("Paste RetroShare Link"), this, SLOT(pasteLink())); + action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(":/images/pasterslink.png"), tr("Paste RetroShare Link"), this, SLOT(pasteLink())); action->setDisabled(n_file < 1) ; contextMnu.exec(QCursor::pos()); diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp index 5e1c40fe4..a70fdf395 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp @@ -251,8 +251,8 @@ void GxsChannelDialog::groupTreeCustomActions(RsGxsGroupId grpId, int subscribeF if (isSubscribed) { - QAction *action = autoDownload ? (new QAction(QIcon(":/images/redled.png"), tr("Disable Auto-Download"), this)) - : (new QAction(QIcon(":/images/start.png"),tr("Enable Auto-Download"), this)); + QAction *action = autoDownload ? (new QAction(FilesDefs::getIconFromQtResourcePath(":/images/redled.png"), tr("Disable Auto-Download"), this)) + : (new QAction(FilesDefs::getIconFromQtResourcePath(":/images/start.png"),tr("Enable Auto-Download"), this)); connect(action, SIGNAL(triggered()), this, SLOT(toggleAutoDownload())); actions.append(action); @@ -263,7 +263,7 @@ void GxsChannelDialog::groupTreeCustomActions(RsGxsGroupId grpId, int subscribeF QMenu *mnu = new QMenu(tr("Set download directory")) ; if(dl_directory.empty()) - mnu->addAction(QIcon(":/images/start.png"),tr("[Default directory]"), this, SLOT(setDefaultDirectory())) ; + mnu->addAction(FilesDefs::getIconFromQtResourcePath(":/images/start.png"),tr("[Default directory]"), this, SLOT(setDefaultDirectory())) ; else mnu->addAction(tr("[Default directory]"), this, SLOT(setDefaultDirectory())) ; @@ -277,7 +277,7 @@ void GxsChannelDialog::groupTreeCustomActions(RsGxsGroupId grpId, int subscribeF if(dl_directory == it->filename) { - action = new QAction(QIcon(":/images/start.png"),QString::fromUtf8(it->filename.c_str()),NULL) ; + action = new QAction(FilesDefs::getIconFromQtResourcePath(":/images/start.png"),QString::fromUtf8(it->filename.c_str()),NULL) ; found = true ; } else @@ -291,7 +291,7 @@ void GxsChannelDialog::groupTreeCustomActions(RsGxsGroupId grpId, int subscribeF if(!found && !dl_directory.empty()) { - QAction *action = new QAction(QIcon(":/images/start.png"),QString::fromUtf8(dl_directory.c_str()),NULL) ; + QAction *action = new QAction(FilesDefs::getIconFromQtResourcePath(":/images/start.png"),QString::fromUtf8(dl_directory.c_str()),NULL) ; connect(action,SIGNAL(triggered()),this,SLOT(setDownloadDirectory())) ; action->setData(QString::fromUtf8(dl_directory.c_str())) ; @@ -391,7 +391,7 @@ void GxsChannelDialog::groupInfoToGroupItemInfo(const RsGxsGenericGroupData *gro groupItemInfo.icon = image; } else - groupItemInfo.icon = QIcon(":icons/png/channel.png"); + groupItemInfo.icon = FilesDefs::getIconFromQtResourcePath(":icons/png/channel.png"); groupItemInfo.description = QString::fromUtf8(channelGroupData->mDescription.c_str()); } diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidget.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidget.cpp index bbbb26a42..a393b1d38 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidget.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidget.cpp @@ -220,11 +220,11 @@ void GxsChannelPostsWidget::groupNameChanged(const QString &name) QIcon GxsChannelPostsWidget::groupIcon() { if (mStateHelper->isLoading(mTokenTypeGroupData) || mStateHelper->isLoading(mTokenTypeAllPosts)) { - return QIcon(":/images/kalarm.png"); + return FilesDefs::getIconFromQtResourcePath(":/images/kalarm.png"); } // if (mNewCount) { -// return QIcon(":/images/message-state-new.png"); +// return FilesDefs::getIconFromQtResourcePath(":/images/message-state-new.png"); // } return QIcon(); diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp index fd9c591ca..04777fa8c 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp @@ -775,7 +775,7 @@ void GxsForumThreadWidget::togglethreadview_internal() ui->expandButton->setToolTip(tr("Hide")); // } else { // ui->postText->setVisible(false); -// ui->expandButton->setIcon(QIcon(QString(":/images/edit_add24.png"))); +// ui->expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/images/edit_add24.png"))); // ui->expandButton->setToolTip(tr("Expand")); // } } diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumsDialog.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumsDialog.cpp index b0dcc0402..7ce84ea5c 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumsDialog.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumsDialog.cpp @@ -228,8 +228,8 @@ void GxsForumsDialog::groupInfoToGroupItemInfo(const RsGxsGenericGroupData *grou groupItemInfo.description = QString::fromUtf8(forumGroupData->mDescription.c_str()); if(IS_GROUP_ADMIN(groupData->mMeta.mSubscribeFlags)) - groupItemInfo.icon = QIcon(":icons/png/forums.png"); + groupItemInfo.icon = FilesDefs::getIconFromQtResourcePath(":icons/png/forums.png"); else if ((IS_GROUP_PGP_AUTHED(groupData->mMeta.mSignFlags)) || (IS_GROUP_MESSAGE_TRACKING(groupData->mMeta.mSignFlags)) ) - groupItemInfo.icon = QIcon(":icons/png/forums-signed.png"); + groupItemInfo.icon = FilesDefs::getIconFromQtResourcePath(":icons/png/forums-signed.png"); } diff --git a/retroshare-gui/src/gui/msgs/MessageComposer.cpp b/retroshare-gui/src/gui/msgs/MessageComposer.cpp index 92f4de457..db3083686 100644 --- a/retroshare-gui/src/gui/msgs/MessageComposer.cpp +++ b/retroshare-gui/src/gui/msgs/MessageComposer.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include #include #include @@ -696,7 +697,7 @@ void MessageComposer::contextMenuFileList(QPoint) { QMenu contextMnu(this); - QAction *action = contextMnu.addAction(QIcon(":/images/pasterslink.png"), tr("Paste RetroShare Link"), this, SLOT(pasteRecommended())); + QAction *action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(":/images/pasterslink.png"), tr("Paste RetroShare Link"), this, SLOT(pasteRecommended())); action->setDisabled(RSLinkClipboard::empty(RetroShareLink::TYPE_FILE)); contextMnu.exec(QCursor::pos()); @@ -805,7 +806,7 @@ void MessageComposer::peerStatusChanged(const QString& peer_id, int status) { QTableWidgetItem *item = ui.recipientWidget->item(row, COLUMN_RECIPIENT_ICON); if (item) - item->setIcon(QIcon(StatusDefs::imageUser(status))); + item->setIcon(FilesDefs::getIconFromQtResourcePath(StatusDefs::imageUser(status))); } } } @@ -1606,7 +1607,7 @@ void MessageComposer::setRecipientToRow(int row, enumType type, destinationType switch(dest_type) { case PEER_TYPE_GROUP: { - icon = QIcon(IMAGE_GROUP16); + icon = FilesDefs::getIconFromQtResourcePath(IMAGE_GROUP16); RsGroupInfo groupInfo; if (rsPeers->getGroupInfo(RsNodeGroupId(id), groupInfo)) { @@ -1652,7 +1653,7 @@ void MessageComposer::setRecipientToRow(int row, enumType type, destinationType // No check of return value. Non existing status info is handled as offline. rsStatus->getStatus(RsPeerId(id), peerStatusInfo); - icon = QIcon(StatusDefs::imageUser(peerStatusInfo.status)); + icon = FilesDefs::getIconFromQtResourcePath(StatusDefs::imageUser(peerStatusInfo.status)); } break ; default: @@ -1928,7 +1929,7 @@ void MessageComposer::setupFileActions() connect(a, SIGNAL(triggered()), this, SLOT(filePrint())); menu->addAction(a); - /*a = new QAction(QIcon(":/images/textedit/fileprint.png"), tr("Print Preview..."), this); + /*a = new QAction(FilesDefs::getIconFromQtResourcePath(":/images/textedit/fileprint.png"), tr("Print Preview..."), this); connect(a, SIGNAL(triggered()), this, SLOT(filePrintPreview())); menu->addAction(a);*/ @@ -2021,7 +2022,7 @@ void MessageComposer::setupContactActions() connect(mActionAddBCC, SIGNAL(triggered(bool)), this, SLOT(addBcc())); mActionAddRecommend = new QAction(tr("Add as Recommend"), this); connect(mActionAddRecommend, SIGNAL(triggered(bool)), this, SLOT(addRecommend())); - mActionContactDetails = new QAction(QIcon(IMAGE_FRIENDINFO), tr("Details"), this); + mActionContactDetails = new QAction(FilesDefs::getIconFromQtResourcePath(IMAGE_FRIENDINFO), tr("Details"), this); connect(mActionContactDetails, SIGNAL(triggered(bool)), this, SLOT(contactDetails())); ui.friendSelectionWidget->addContextMenuAction(mActionAddTo); @@ -2435,9 +2436,9 @@ void MessageComposer::on_contactsdockWidget_visibilityChanged(bool visible) void MessageComposer::updatecontactsviewicons() { if(!ui.contactsdockWidget->isVisible()){ - ui.actionContactsView->setIcon(QIcon(":/icons/mail/contacts.png")); + ui.actionContactsView->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/mail/contacts.png")); }else{ - ui.actionContactsView->setIcon(QIcon(":/icons/mail/contacts.png")); + ui.actionContactsView->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/mail/contacts.png")); } } diff --git a/retroshare-gui/src/gui/msgs/MessageUserNotify.cpp b/retroshare-gui/src/gui/msgs/MessageUserNotify.cpp index fa586f1c8..4144867c6 100644 --- a/retroshare-gui/src/gui/msgs/MessageUserNotify.cpp +++ b/retroshare-gui/src/gui/msgs/MessageUserNotify.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include "MessageUserNotify.h" #include "gui/notifyqt.h" #include "gui/MainWindow.h" @@ -40,12 +41,12 @@ bool MessageUserNotify::hasSetting(QString *name, QString *group) QIcon MessageUserNotify::getIcon() { - return QIcon(":/icons/png/messages.png"); + return FilesDefs::getIconFromQtResourcePath(":/icons/png/messages.png"); } QIcon MessageUserNotify::getMainIcon(bool hasNew) { - return hasNew ? QIcon(":/icons/png/messages-notify.png") : QIcon(":/icons/png/messages.png"); + return hasNew ? FilesDefs::getIconFromQtResourcePath(":/icons/png/messages-notify.png") : FilesDefs::getIconFromQtResourcePath(":/icons/png/messages.png"); } unsigned int MessageUserNotify::getNewCount() diff --git a/retroshare-gui/src/gui/msgs/MessageWidget.cpp b/retroshare-gui/src/gui/msgs/MessageWidget.cpp index 086986230..d3f3af131 100644 --- a/retroshare-gui/src/gui/msgs/MessageWidget.cpp +++ b/retroshare-gui/src/gui/msgs/MessageWidget.cpp @@ -315,8 +315,8 @@ void MessageWidget::msgfilelistWidgetCostumPopupMenu( QPoint /*point*/ ) { QMenu contextMnu(this); - contextMnu.addAction(QIcon(IMAGE_DOWNLOAD), tr("Download"), this, SLOT(getcurrentrecommended())); - contextMnu.addAction(QIcon(IMAGE_DOWNLOADALL), tr("Download all"), this, SLOT(getallrecommended())); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_DOWNLOAD), tr("Download"), this, SLOT(getcurrentrecommended())); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_DOWNLOADALL), tr("Download all"), this, SLOT(getallrecommended())); contextMnu.exec(QCursor::pos()); } @@ -328,10 +328,10 @@ void MessageWidget::togglefileview(bool noUpdate/*=false*/) */ if (ui.expandFilesButton->isChecked()) { - ui.expandFilesButton->setIcon(QIcon(QString(":/icons/png/down-arrow.png"))); + ui.expandFilesButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/down-arrow.png"))); ui.expandFilesButton->setToolTip(tr("Hide the attachment pane")); } else { - ui.expandFilesButton->setIcon(QIcon(QString(":/icons/png/up-arrow.png"))); + ui.expandFilesButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/up-arrow.png"))); ui.expandFilesButton->setToolTip(tr("Show the attachment pane")); } if (!noUpdate) diff --git a/retroshare-gui/src/gui/msgs/MessageWindow.cpp b/retroshare-gui/src/gui/msgs/MessageWindow.cpp index 17355143f..ad1067367 100644 --- a/retroshare-gui/src/gui/msgs/MessageWindow.cpp +++ b/retroshare-gui/src/gui/msgs/MessageWindow.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include "MessageWindow.h" #include "MessageWidget.h" #include "MessageComposer.h" @@ -180,12 +181,12 @@ void MessageWindow::setupFileActions() menuBar()->addMenu(menu); actionSaveAs = menu->addAction(tr("Save &As File")); - actionPrint = menu->addAction(QIcon(":/images/textedit/fileprint.png"), tr("&Print...")); + actionPrint = menu->addAction(FilesDefs::getIconFromQtResourcePath(":/images/textedit/fileprint.png"), tr("&Print...")); actionPrint->setShortcut(QKeySequence::Print); - actionPrintPreview = menu->addAction(QIcon(":/images/textedit/fileprint.png"), tr("Print Preview...")); + actionPrintPreview = menu->addAction(FilesDefs::getIconFromQtResourcePath(":/images/textedit/fileprint.png"), tr("Print Preview...")); -// a = new QAction(QIcon(":/images/textedit/exportpdf.png"), tr("&Export PDF..."), this); +// a = new QAction(FilesDefs::getIconFromQtResourcePath(":/images/textedit/exportpdf.png"), tr("&Export PDF..."), this); // a->setShortcut(Qt::CTRL + Qt::Key_D); // connect(a, SIGNAL(triggered()), this, SLOT(filePrintPdf())); // menu->addAction(a); diff --git a/retroshare-gui/src/gui/msgs/MessagesDialog.cpp b/retroshare-gui/src/gui/msgs/MessagesDialog.cpp index 40b61739a..acb19d900 100644 --- a/retroshare-gui/src/gui/msgs/MessagesDialog.cpp +++ b/retroshare-gui/src/gui/msgs/MessagesDialog.cpp @@ -422,7 +422,7 @@ void MessagesDialog::fillQuickView() // add static items item = new QListWidgetItem(tr("Starred"), ui.quickViewWidget); - item->setIcon(QIcon(IMAGE_STAR_ON)); + item->setIcon(FilesDefs::getIconFromQtResourcePath(IMAGE_STAR_ON)); item->setData(ROLE_QUICKVIEW_TYPE, QUICKVIEW_TYPE_STATIC); item->setData(ROLE_QUICKVIEW_ID, QUICKVIEW_STATIC_ID_STARRED); item->setData(ROLE_QUICKVIEW_TEXT, item->text()); // for updateMessageSummaryList @@ -432,7 +432,7 @@ void MessagesDialog::fillQuickView() } item = new QListWidgetItem(tr("System"), ui.quickViewWidget); - item->setIcon(QIcon(IMAGE_NOTFICATION)); + item->setIcon(FilesDefs::getIconFromQtResourcePath(IMAGE_NOTFICATION)); item->setData(ROLE_QUICKVIEW_TYPE, QUICKVIEW_TYPE_STATIC); item->setData(ROLE_QUICKVIEW_ID, QUICKVIEW_STATIC_ID_SYSTEM); item->setData(ROLE_QUICKVIEW_TEXT, item->text()); // for updateMessageSummaryList @@ -442,7 +442,7 @@ void MessagesDialog::fillQuickView() } item = new QListWidgetItem(tr("Spam"), ui.quickViewWidget); - item->setIcon(QIcon(IMAGE_SPAM_ON)); + item->setIcon(FilesDefs::getIconFromQtResourcePath(IMAGE_SPAM_ON)); item->setData(ROLE_QUICKVIEW_TYPE, QUICKVIEW_TYPE_STATIC); item->setData(ROLE_QUICKVIEW_ID, QUICKVIEW_STATIC_ID_SPAM); item->setData(ROLE_QUICKVIEW_TEXT, item->text()); // for updateMessageSummaryList @@ -452,7 +452,7 @@ void MessagesDialog::fillQuickView() } item = new QListWidgetItem(tr("Attachment"), ui.quickViewWidget); - item->setIcon(QIcon(IMAGE_ATTACHMENT)); + item->setIcon(FilesDefs::getIconFromQtResourcePath(IMAGE_ATTACHMENT)); item->setData(ROLE_QUICKVIEW_TYPE, QUICKVIEW_TYPE_STATIC); item->setData(ROLE_QUICKVIEW_ID, QUICKVIEW_STATIC_ID_ATTACHMENT); item->setData(ROLE_QUICKVIEW_TEXT, item->text()); // for updateMessageSummaryList @@ -584,13 +584,13 @@ void MessagesDialog::messageTreeWidgetCustomPopupMenu(QPoint /*point*/) QMenu contextMnu( this ); - QAction *action = contextMnu.addAction(QIcon(":/images/view_split_top_bottom.png"), tr("Open in a new window"), this, SLOT(openAsWindow())); + QAction *action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(":/images/view_split_top_bottom.png"), tr("Open in a new window"), this, SLOT(openAsWindow())); if (nCount != 1) { action->setDisabled(true); } - action = contextMnu.addAction(QIcon(":/images/tab-dock.png"), tr("Open in a new tab"), this, SLOT(openAsTab())); + action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(":/images/tab-dock.png"), tr("Open in a new tab"), this, SLOT(openAsTab())); if (nCount != 1) { action->setDisabled(true); } @@ -608,12 +608,12 @@ void MessagesDialog::messageTreeWidgetCustomPopupMenu(QPoint /*point*/) contextMnu.addSeparator(); - action = contextMnu.addAction(QIcon(":/images/message-mail-read.png"), tr("Mark as read"), this, SLOT(markAsRead())); + action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(":/images/message-mail-read.png"), tr("Mark as read"), this, SLOT(markAsRead())); if (itemsUnread.isEmpty()) { action->setDisabled(true); } - action = contextMnu.addAction(QIcon(":/images/message-mail.png"), tr("Mark as unread"), this, SLOT(markAsUnread())); + action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(":/images/message-mail.png"), tr("Mark as unread"), this, SLOT(markAsUnread())); if (itemsRead.isEmpty()) { action->setDisabled(true); @@ -647,7 +647,7 @@ void MessagesDialog::messageTreeWidgetCustomPopupMenu(QPoint /*point*/) action->setDisabled(true); } - action = contextMnu.addAction(QIcon(IMAGE_MESSAGEREMOVE), (nCount > 1) ? tr("Remove Messages") : tr("Remove Message"), this, SLOT(removemessage())); + action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_MESSAGEREMOVE), (nCount > 1) ? tr("Remove Messages") : tr("Remove Message"), this, SLOT(removemessage())); if (nCount == 0) { action->setDisabled(true); } @@ -674,11 +674,11 @@ void MessagesDialog::messageTreeWidgetCustomPopupMenu(QPoint /*point*/) { std::cerr << "Src ID = " << msgInfo.rsgxsid_srcId << std::endl; - contextMnu.addAction(QIcon(IMAGE_AUTHOR_INFO),tr("Show author in People"),this,SLOT(showAuthorInPeopleTab())); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_AUTHOR_INFO),tr("Show author in People"),this,SLOT(showAuthorInPeopleTab())); contextMnu.addSeparator(); } - contextMnu.addAction(QIcon(IMAGE_MESSAGE), tr("New Message"), this, SLOT(newmessage())); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_MESSAGE), tr("New Message"), this, SLOT(newmessage())); contextMnu.exec(QCursor::pos()); } @@ -767,7 +767,7 @@ void MessagesDialog::openAsTab() return; } - ui.tabWidget->addTab(msgWidget,QIcon(IMAGE_MAIL), msgWidget->subject(true)); + ui.tabWidget->addTab(msgWidget,FilesDefs::getIconFromQtResourcePath(IMAGE_MAIL), msgWidget->subject(true)); ui.tabWidget->setCurrentWidget(msgWidget); connect(msgWidget, SIGNAL(messageRemoved()), this, SLOT(messageRemoved())); @@ -1284,7 +1284,7 @@ void MessagesDialog::updateMessageSummaryList() QFont qf = item->font(); qf.setBold(true); item->setFont(qf); - item->setIcon(QIcon(":/images/folder-inbox-new.png")); + item->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/folder-inbox-new.png")); item->setData(Qt::ForegroundRole, mTextColorInbox); } else @@ -1294,7 +1294,7 @@ void MessagesDialog::updateMessageSummaryList() QFont qf = item->font(); qf.setBold(false); item->setFont(qf); - item->setIcon(QIcon(":/images/folder-inbox.png")); + item->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/folder-inbox.png")); item->setData(Qt::ForegroundRole, QVariant()); } @@ -1553,6 +1553,6 @@ void MessagesDialog::updateInterface() else { ui.tabWidget->setTabText(0, tr("No Box selected.")); - ui.tabWidget->setTabIcon(0, QIcon(":/icons/warning_yellow_128.png")); + ui.tabWidget->setTabIcon(0, FilesDefs::getIconFromQtResourcePath(":/icons/warning_yellow_128.png")); } } diff --git a/retroshare-gui/src/gui/notifyqt.cpp b/retroshare-gui/src/gui/notifyqt.cpp index e2e933a32..3a181df2c 100644 --- a/retroshare-gui/src/gui/notifyqt.cpp +++ b/retroshare-gui/src/gui/notifyqt.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include #include @@ -276,7 +277,7 @@ bool NotifyQt::askForPluginConfirmation(const std::string& plugin_file_name, con text += "" ; dialog.setText(text) ; - dialog.setWindowIcon(QIcon(":/icons/logo_128.png")); + dialog.setWindowIcon(FilesDefs::getIconFromQtResourcePath(":/icons/logo_128.png")); dialog.setStandardButtons(QMessageBox::Yes | QMessageBox::No) ; int ret = dialog.exec(); diff --git a/retroshare-gui/src/gui/profile/ProfileManager.cpp b/retroshare-gui/src/gui/profile/ProfileManager.cpp index 0a8a80df6..7041f7201 100644 --- a/retroshare-gui/src/gui/profile/ProfileManager.cpp +++ b/retroshare-gui/src/gui/profile/ProfileManager.cpp @@ -19,6 +19,7 @@ *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include #include #include @@ -67,7 +68,7 @@ void ProfileManager::identityTreeWidgetCostumPopupMenu(QPoint) QMenu contextMnu(this); - QAction *action = contextMnu.addAction(QIcon(IMAGE_EXPORT), tr("Export Identity"), this, SLOT(exportIdentity())); + QAction *action = contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(IMAGE_EXPORT), tr("Export Identity"), this, SLOT(exportIdentity())); action->setEnabled(item != NULL); contextMnu.exec(QCursor::pos()); diff --git a/retroshare-gui/src/gui/settings/AppearancePage.cpp b/retroshare-gui/src/gui/settings/AppearancePage.cpp index 0c3c2c924..02ad43143 100755 --- a/retroshare-gui/src/gui/settings/AppearancePage.cpp +++ b/retroshare-gui/src/gui/settings/AppearancePage.cpp @@ -42,6 +42,7 @@ #include "gui/statusbar/SoundStatus.h" #include "gui/statusbar/ToasterDisable.h" #include "gui/statusbar/SysTrayStatus.h" +#include "gui/common/FilesDefs.h" /** Constructor */ AppearancePage::AppearancePage(QWidget * parent, Qt::WindowFlags flags) @@ -69,7 +70,7 @@ AppearancePage::AppearancePage(QWidget * parent, Qt::WindowFlags flags) /* Populate combo boxes */ foreach (QString code, LanguageSupport::languageCodes()) { - ui.cmboLanguage->addItem(QIcon(":/images/flags/" + code + ".png"), LanguageSupport::languageName(code), code); + ui.cmboLanguage->addItem(FilesDefs::getIconFromQtResourcePath(":/images/flags/" + code + ".png"), LanguageSupport::languageName(code), code); } foreach (QString style, QStyleFactory::keys()) { ui.cmboStyle->addItem(style, style.toLower()); diff --git a/retroshare-gui/src/gui/settings/FileAssociationsPage.cpp b/retroshare-gui/src/gui/settings/FileAssociationsPage.cpp index e6e5f67e3..fe7e36a7b 100755 --- a/retroshare-gui/src/gui/settings/FileAssociationsPage.cpp +++ b/retroshare-gui/src/gui/settings/FileAssociationsPage.cpp @@ -19,6 +19,7 @@ * * *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include "FileAssociationsPage.h" #include "AddFileAssociationDialog.h" //#include "rshare.h" // for Rshare::dataDirectory() method @@ -60,19 +61,19 @@ FileAssociationsPage::FileAssociationsPage(QWidget * parent, Qt::WindowFlags fla QVBoxLayout* pageLay = new QVBoxLayout(this); toolBar = new QToolBar("actions", this); - newAction = new QAction(QIcon(":/icons/png/add.png"), tr("&New"), this); + newAction = new QAction(FilesDefs::getIconFromQtResourcePath(":/icons/png/add.png"), tr("&New"), this); //newAction->setShortcut(tr("Ctrl+N")); newAction->setStatusTip(tr("Add new Association")); connect(newAction, SIGNAL(triggered()), this, SLOT(addnew())); toolBar->addAction(newAction); - editAction = new QAction(QIcon(":/images/kcmsystem24.png"), + editAction = new QAction(FilesDefs::getIconFromQtResourcePath(":/images/kcmsystem24.png"), tr("&Edit"), this); editAction->setStatusTip(tr("Edit this Association")); connect(editAction, SIGNAL(triggered()), this, SLOT(edit())); toolBar->addAction(editAction); - removeAction = new QAction(QIcon(":/images/edit_remove24.png"), + removeAction = new QAction(FilesDefs::getIconFromQtResourcePath(":/images/edit_remove24.png"), tr("&Remove"), this); removeAction->setStatusTip(tr("Remove this Association")); connect(removeAction, SIGNAL(triggered()), this, SLOT(remove())); diff --git a/retroshare-gui/src/gui/settings/ServerPage.cpp b/retroshare-gui/src/gui/settings/ServerPage.cpp index 37291be0f..64392aa08 100755 --- a/retroshare-gui/src/gui/settings/ServerPage.cpp +++ b/retroshare-gui/src/gui/settings/ServerPage.cpp @@ -1352,7 +1352,7 @@ void ServerPage::updateInProxyIndicator() return ; //ui.iconlabel_tor_incoming->setPixmap(QPixmap(ICON_STATUS_UNKNOWN)) ; - //ui.testIncomingTor_PB->setIcon(QIcon(":/loader/circleball-16.gif")) ; + //ui.testIncomingTor_PB->setIcon(FilesDefs::getIconFromQtResourcePath(":/loader/circleball-16.gif")) ; QMovie *movie = new QMovie(":/images/loader/circleball-16.gif"); ui.iconlabel_service_incoming->setMovie(movie); movie->start(); @@ -1846,11 +1846,11 @@ void ServerPage::updateInProxyIndicatorResult(bool success) ui.iconlabel_service_incoming->setPixmap(QPixmap(ICON_STATUS_OK)) ; ui.iconlabel_service_incoming->setToolTip(tr("You are reachable through the hidden service.")) ; - //ui.testIncomingTor_PB->setIcon(QIcon(ICON_STATUS_OK)) ; + //ui.testIncomingTor_PB->setIcon(FilesDefs::getIconFromQtResourcePath(ICON_STATUS_OK)) ; } else { std::cerr <<"Failed!" << std::endl; - //ui.testIncomingTor_PB->setIcon(QIcon(ICON_STATUS_UNKNOWN)) ; + //ui.testIncomingTor_PB->setIcon(FilesDefs::getIconFromQtResourcePath(ICON_STATUS_UNKNOWN)) ; ui.iconlabel_service_incoming->setPixmap(QPixmap(ICON_STATUS_UNKNOWN)) ; ui.iconlabel_service_incoming->setToolTip(tr("The proxy is not enabled or broken.\nAre all services up and running fine??\nAlso check your ports!")) ; } diff --git a/retroshare-gui/src/gui/settings/rsettingswin.h b/retroshare-gui/src/gui/settings/rsettingswin.h index 7a9864fff..9b584162e 100755 --- a/retroshare-gui/src/gui/settings/rsettingswin.h +++ b/retroshare-gui/src/gui/settings/rsettingswin.h @@ -21,6 +21,7 @@ #ifndef RSETTINGSWIN_HPP_ #define RSETTINGSWIN_HPP_ +#include "gui/common/FilesDefs.h" #include #include #include "ui_settingsw.h" @@ -44,7 +45,7 @@ public: void postModDirectories(bool update_local); - virtual QIcon iconPixmap() const { return QIcon(IMAGE_PREFERENCES) ; } //MainPage + virtual QIcon iconPixmap() const { return FilesDefs::getIconFromQtResourcePath(IMAGE_PREFERENCES) ; } //MainPage virtual QString pageName() const { return tr("Preferences") ; } //MainPage protected: diff --git a/retroshare-gui/src/gui/statistics/GlobalRouterStatistics.cpp b/retroshare-gui/src/gui/statistics/GlobalRouterStatistics.cpp index 0a992353b..1fc583b18 100644 --- a/retroshare-gui/src/gui/statistics/GlobalRouterStatistics.cpp +++ b/retroshare-gui/src/gui/statistics/GlobalRouterStatistics.cpp @@ -126,7 +126,7 @@ void GlobalRouterStatistics::CustomPopupMenu( QPoint ) QTreeWidgetItem *item = treeWidget->currentItem(); if (item) { - contextMnu.addAction(QIcon(":/images/info16.png"), tr("Details"), this, SLOT(personDetails())); + contextMnu.addAction(FilesDefs::getIconFromQtResourcePath(":/images/info16.png"), tr("Details"), this, SLOT(personDetails())); } diff --git a/retroshare-gui/src/gui/statistics/StatisticsWindow.cpp b/retroshare-gui/src/gui/statistics/StatisticsWindow.cpp index 50c947822..3d3868135 100644 --- a/retroshare-gui/src/gui/statistics/StatisticsWindow.cpp +++ b/retroshare-gui/src/gui/statistics/StatisticsWindow.cpp @@ -34,6 +34,7 @@ #include #include +#include "gui/common/FilesDefs.h" #include #include @@ -140,22 +141,22 @@ void StatisticsWindow::initStackedPage() QAction *action; ui->stackPages->add(bwdlg = new BwCtrlWindow(ui->stackPages), - action = createPageAction(QIcon(IMAGE_BWGRAPH), tr("Bandwidth"), grp)); + action = createPageAction(FilesDefs::getIconFromQtResourcePath(IMAGE_BWGRAPH), tr("Bandwidth"), grp)); ui->stackPages->add(trsdlg = new TurtleRouterStatistics(ui->stackPages), - action = createPageAction(QIcon(IMAGE_TURTLE), tr("Turtle Router"), grp)); + action = createPageAction(FilesDefs::getIconFromQtResourcePath(IMAGE_TURTLE), tr("Turtle Router"), grp)); ui->stackPages->add(gxsiddlg = new GxsIdStatistics(ui->stackPages), - action = createPageAction(QIcon(IMAGE_IDENTITIES), tr("Identities"), grp)); + action = createPageAction(FilesDefs::getIconFromQtResourcePath(IMAGE_IDENTITIES), tr("Identities"), grp)); ui->stackPages->add(grsdlg = new GlobalRouterStatistics(ui->stackPages), - action = createPageAction(QIcon(IMAGE_GLOBALROUTER), tr("Global Router"), grp)); + action = createPageAction(FilesDefs::getIconFromQtResourcePath(IMAGE_GLOBALROUTER), tr("Global Router"), grp)); ui->stackPages->add(gxsdlg = new GxsTransportStatistics(ui->stackPages), - action = createPageAction(QIcon(IMAGE_GXSTRANSPORT), tr("Gxs Transport"), grp)); + action = createPageAction(FilesDefs::getIconFromQtResourcePath(IMAGE_GXSTRANSPORT), tr("Gxs Transport"), grp)); ui->stackPages->add(rttdlg = new RttStatistics(ui->stackPages), - action = createPageAction(QIcon(IMAGE_RTT), tr("RTT Statistics"), grp)); + action = createPageAction(FilesDefs::getIconFromQtResourcePath(IMAGE_RTT), tr("RTT Statistics"), grp)); bool showdht = true; RsPeerDetails detail; @@ -167,7 +168,7 @@ void StatisticsWindow::initStackedPage() if(showdht) { ui->stackPages->add(dhtw = new DhtWindow(ui->stackPages), - action = createPageAction(QIcon(IMAGE_DHT), tr("DHT"), grp)); + action = createPageAction(FilesDefs::getIconFromQtResourcePath(IMAGE_DHT), tr("DHT"), grp)); } /*std::cerr << "Looking for interfaces in existing plugins:" << std::endl; @@ -180,7 +181,7 @@ void StatisticsWindow::initStackedPage() if(rsPlugins->plugin(i)->qt_icon() != NULL) icon = *rsPlugins->plugin(i)->qt_icon() ; else - icon = QIcon(":images/extension_48.png") ; + icon = FilesDefs::getIconFromQtResourcePath(":images/extension_48.png") ; std::cerr << " Addign widget page for plugin " << rsPlugins->plugin(i)->getPluginName() << std::endl; MainPage *pluginPage = rsPlugins->plugin(i)->qt_page(); diff --git a/retroshare-gui/src/gui/statusbar/SoundStatus.cpp b/retroshare-gui/src/gui/statusbar/SoundStatus.cpp index 531133008..374a61b12 100644 --- a/retroshare-gui/src/gui/statusbar/SoundStatus.cpp +++ b/retroshare-gui/src/gui/statusbar/SoundStatus.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include #include @@ -54,6 +55,6 @@ SoundStatus::SoundStatus(QWidget *parent) void SoundStatus::mute(bool isMute) { - imageButton->setIcon(QIcon(isMute ? IMAGE_MUTE_ON : IMAGE_MUTE_OFF)); + imageButton->setIcon(FilesDefs::getIconFromQtResourcePath(isMute ? IMAGE_MUTE_ON : IMAGE_MUTE_OFF)); imageButton->setToolTip(isMute ? tr("Sound is off, click to turn it on") : tr("Sound is on, click to turn it off")); } diff --git a/retroshare-gui/src/gui/statusbar/SysTrayStatus.cpp b/retroshare-gui/src/gui/statusbar/SysTrayStatus.cpp index b465e83e3..1f52163ec 100644 --- a/retroshare-gui/src/gui/statusbar/SysTrayStatus.cpp +++ b/retroshare-gui/src/gui/statusbar/SysTrayStatus.cpp @@ -18,6 +18,7 @@ * * *******************************************************************************/ +#include "gui/common/FilesDefs.h" #include #include #include @@ -36,7 +37,7 @@ SysTrayStatus::SysTrayStatus(QWidget *parent) : hbox->setSpacing(0); imageButton = new QPushButton(this); - imageButton->setIcon(QIcon(IMAGE_NOONLINE)); + imageButton->setIcon(FilesDefs::getIconFromQtResourcePath(IMAGE_NOONLINE)); imageButton->setFlat(true); imageButton->setCheckable(false); imageButton->setFocusPolicy(Qt::ClickFocus); diff --git a/retroshare-gui/src/gui/unfinished/ApplicationWindow.cpp b/retroshare-gui/src/gui/unfinished/ApplicationWindow.cpp index 9db4326a4..923d1ba88 100644 --- a/retroshare-gui/src/gui/unfinished/ApplicationWindow.cpp +++ b/retroshare-gui/src/gui/unfinished/ApplicationWindow.cpp @@ -74,7 +74,7 @@ ApplicationWindow::ApplicationWindow(QWidget* parent, Qt::WindowFlags flags) //StatisticDialog *statisticDialog = NULL; //ui.stackPages->add(statisticDialog = new StatisticDialog(ui.stackPages), - // createPageAction(QIcon(IMAGE_STATISTIC), tr("Statistics"), grp)); + // createPageAction(FilesDefs::getIconFromQtResourcePath(IMAGE_STATISTIC), tr("Statistics"), grp)); //GamesDialog *gamesDialog = NULL; //ui.stackPages->add(gamesDialog = new GamesDialog(ui.stackPages), @@ -91,7 +91,7 @@ ApplicationWindow::ApplicationWindow(QWidget* parent, Qt::WindowFlags flags) #ifdef RS_USE_CIRCLES CirclesDialog *circlesDialog = NULL; ui.stackPages->add(circlesDialog = new CirclesDialog(ui.stackPages), - action = createPageAction(QIcon(IMAGE_CIRCLES ), tr("Circles"), grp)); + action = createPageAction(FilesDefs::getIconFromQtResourcePath(IMAGE_CIRCLES ), tr("Circles"), grp)); mNotify.push_back(QPair(circlesDialog, action)); #endif #endif @@ -105,13 +105,13 @@ ApplicationWindow::ApplicationWindow(QWidget* parent, Qt::WindowFlags flags) /*PostedDialog *postedDialog = NULL; ui.stackPages->add(postedDialog = new PostedDialog(ui.stackPages), - action = createPageAction(QIcon(IMAGE_POSTED), tr("Posted Links"), grp)); + action = createPageAction(FilesDefs::getIconFromQtResourcePath(IMAGE_POSTED), tr("Posted Links"), grp)); postedDialog->setup(); mNotify.push_back(QPair(postedDialog, action)); WikiDialog *wikiDialog = NULL; ui.stackPages->add(wikiDialog = new WikiDialog(ui.stackPages), - action = createPageAction(QIcon(IMAGE_WIKI), tr("Wiki Pages"), grp)); + action = createPageAction(FilesDefs::getIconFromQtResourcePath(IMAGE_WIKI), tr("Wiki Pages"), grp)); mNotify.push_back(QPair(wikiDialog, action));*/ // THESE HAVE TO BE CONVERTED TO VEG FORMAT diff --git a/retroshare-gui/src/main.cpp b/retroshare-gui/src/main.cpp index 490878e57..4c427d289 100644 --- a/retroshare-gui/src/main.cpp +++ b/retroshare-gui/src/main.cpp @@ -30,6 +30,7 @@ CrashStackTrace gCrashStackTrace; #include #include +#include "gui/common/FilesDefs.h" #include "gui/FriendsDialog.h" #include "gui/GenCertDialog.h" #include "gui/MainWindow.h" @@ -136,7 +137,7 @@ static void displayWarningAboutDSAKeys() msgBox.setInformativeText(QObject::tr("DSA keys are not yet supported by this version of RetroShare. All these nodes will be unusable. We're very sorry for that.")); msgBox.setStandardButtons(QMessageBox::Ok); msgBox.setDefaultButton(QMessageBox::Ok); - msgBox.setWindowIcon(QIcon(":/icons/logo_128.png")); + msgBox.setWindowIcon(FilesDefs::getIconFromQtResourcePath(":/icons/logo_128.png")); msgBox.exec(); } @@ -270,7 +271,7 @@ feenableexcept(FE_INVALID | FE_DIVBYZERO); msgBox.setInformativeText(QObject::tr("Choose between:
  • Ok to copy the existing keyring from gnupg (safest bet), or
  • Close without saving to start fresh with an empty keyring (you will be asked to create a new PGP key to work with RetroShare, or import a previously saved pgp keypair).
  • Cancel to quit and forge a keyring by yourself (needs some PGP skills)
")); msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Discard | QMessageBox::Cancel); msgBox.setDefaultButton(QMessageBox::Ok); - msgBox.setWindowIcon(QIcon(":/icons/logo_128.png")); + msgBox.setWindowIcon(FilesDefs::getIconFromQtResourcePath(":/icons/logo_128.png")); int ret = msgBox.exec(); @@ -299,7 +300,7 @@ feenableexcept(FE_INVALID | FE_DIVBYZERO); displayWarningAboutDSAKeys(); QMessageBox mb(QMessageBox::Critical, QObject::tr("RetroShare"), "", QMessageBox::Ok); - mb.setWindowIcon(QIcon(":/icons/logo_128.png")); + mb.setWindowIcon(FilesDefs::getIconFromQtResourcePath(":/icons/logo_128.png")); switch (initResult) { diff --git a/retroshare-gui/src/rshare.cpp b/retroshare-gui/src/rshare.cpp index 3898a899a..cbed6698a 100644 --- a/retroshare-gui/src/rshare.cpp +++ b/retroshare-gui/src/rshare.cpp @@ -42,6 +42,7 @@ #include #include +#include "gui/common/FilesDefs.h" #include #include #include @@ -258,7 +259,7 @@ Rshare::Rshare(QStringList args, int &argc, char **argv, const QString &dir) #ifndef __APPLE__ /* set default window icon */ - setWindowIcon(QIcon(":/icons/logo_128.png")); + setWindowIcon(FilesDefs::getIconFromQtResourcePath(":/icons/logo_128.png")); #endif From 3b7734c934d8f183100585c71ed7e1eb6e9bab35 Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 16 Aug 2020 22:17:54 +0200 Subject: [PATCH 87/95] uniformise calls to [begin/end]ResetModel() and removed calls to layoutAboutToBeChanged() as it may cause some SIGSEGV --- retroshare-gui/src/gui/RemoteDirModel.cpp | 18 +++--------------- .../src/gui/common/FriendListModel.cpp | 6 ++---- 2 files changed, 5 insertions(+), 19 deletions(-) diff --git a/retroshare-gui/src/gui/RemoteDirModel.cpp b/retroshare-gui/src/gui/RemoteDirModel.cpp index b69929778..7ea0e9fa8 100644 --- a/retroshare-gui/src/gui/RemoteDirModel.cpp +++ b/retroshare-gui/src/gui/RemoteDirModel.cpp @@ -1103,15 +1103,9 @@ Qt::ItemFlags RetroshareDirModel::flags( const QModelIndex & index ) const /* Callback from Core*/ void RetroshareDirModel::preMods() { - emit layoutAboutToBeChanged(); mUpdating = true ; -#if QT_VERSION < 0x050000 - reset(); -#else - beginResetModel(); - endResetModel(); -#endif + beginResetModel(); #ifdef RDM_DEBUG std::cerr << "RetroshareDirModel::preMods()" << std::endl; #endif @@ -1120,20 +1114,14 @@ void RetroshareDirModel::preMods() /* Callback from Core*/ void RetroshareDirModel::postMods() { -// emit layoutAboutToBeChanged(); mUpdating = false ; -#if QT_VERSION >= 0x040600 - beginResetModel(); -#endif - #ifdef RDM_DEBUG std::cerr << "RetroshareDirModel::postMods()" << std::endl; #endif -#if QT_VERSION >= 0x040600 endResetModel(); -#endif - emit layoutChanged(); + + emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(rowCount()-1,COLUMN_COUNT-1,(void*)NULL)); } void FlatStyle_RDM::postMods() diff --git a/retroshare-gui/src/gui/common/FriendListModel.cpp b/retroshare-gui/src/gui/common/FriendListModel.cpp index 74d5d8746..408527b3e 100644 --- a/retroshare-gui/src/gui/common/FriendListModel.cpp +++ b/retroshare-gui/src/gui/common/FriendListModel.cpp @@ -152,15 +152,13 @@ void RsFriendListModel::setDisplayGroups(bool b) } void RsFriendListModel::preMods() { - emit layoutAboutToBeChanged(); - beginResetModel(); } void RsFriendListModel::postMods() { endResetModel(); - emit layoutChanged(); - emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(mTopLevel.size()-1,COLUMN_THREAD_NB_COLUMNS-1,(void*)NULL)); + + emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(rowCount()-1,COLUMN_THREAD_NB_COLUMNS-1,(void*)NULL)); } int RsFriendListModel::rowCount(const QModelIndex& parent) const From 8c845d7419cf7736d29474681c695fb1cfe66a95 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 17 Aug 2020 21:47:27 +0200 Subject: [PATCH 88/95] fixed marking all msgs as read/unread in channels --- .../gui/gxschannels/GxsChannelPostsModel.cpp | 25 +++++++++++++------ .../gui/gxschannels/GxsChannelPostsModel.h | 4 ++- .../GxsChannelPostsWidgetWithModel.cpp | 14 +++++------ 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.cpp index 47f46bfe9..58715e48d 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.cpp @@ -171,7 +171,7 @@ void RsGxsChannelPostsModel::setFilter(const QStringList& strings, uint32_t& cou if(strings.empty()) { mFilteredPosts.clear(); - for(int i=0;i= mColumns) + if(row < 0 || column < 0 || column >= (int)mColumns) return QModelIndex(); quintptr ref = getChildRef(parent.internalId(),column + row*mColumns); @@ -684,7 +684,19 @@ void RsGxsChannelPostsModel::createPostsArray(std::vector& pos } } -void RsGxsChannelPostsModel::setMsgReadStatus(const QModelIndex& i,bool read_status,bool with_children) +void RsGxsChannelPostsModel::setAllMsgReadStatus(bool read_status) +{ + // No need to call preMods()/postMods() here because we're not changing the model + // All operations below are done async + + RsThread::async([this, read_status]() + { + for(uint32_t i=0;imarkRead(RsGxsGrpMsgIdPair(mPosts[i].mMeta.mGroupId,mPosts[i].mMeta.mMsgId),read_status); + }); +} + +void RsGxsChannelPostsModel::setMsgReadStatus(const QModelIndex& i,bool read_status) { if(!i.isValid()) return ; @@ -697,10 +709,7 @@ void RsGxsChannelPostsModel::setMsgReadStatus(const QModelIndex& i,bool read_sta if(!convertRefPointerToTabEntry(ref,entry) || entry >= mFilteredPosts.size()) return ; -#warning TODO -// bool has_unread_below, has_read_below; -// recursSetMsgReadStatus(entry,read_status,with_children) ; -// recursUpdateReadStatusAndTimes(0,has_unread_below,has_read_below); + rsGxsChannels->markRead(RsGxsGrpMsgIdPair(mPosts[mFilteredPosts[entry]].mMeta.mGroupId,mPosts[mFilteredPosts[entry]].mMeta.mMsgId),read_status); } QModelIndex RsGxsChannelPostsModel::getIndexOfMessage(const RsGxsMessageId& mid) const diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.h b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.h index 6ceedddfb..47e0caee5 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.h +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.h @@ -127,7 +127,9 @@ public: void setTextColorMissing (QColor color) { mTextColorMissing = color;} #endif - void setMsgReadStatus(const QModelIndex &i, bool read_status, bool with_children); + void setMsgReadStatus(const QModelIndex &i, bool read_status); + void setAllMsgReadStatus(bool read_status); + void setFilter(const QStringList &strings, uint32_t &count) ; #ifdef TODO diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp index d07f4ad74..093c5b12c 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp @@ -1148,6 +1148,7 @@ public: uint32_t mLastToken; }; +#ifdef TO_REMOVE static void setAllMessagesReadCallback(FeedItem *feedItem, void *data) { GxsChannelPostItem *channelPostItem = dynamic_cast(feedItem); @@ -1164,16 +1165,15 @@ static void setAllMessagesReadCallback(FeedItem *feedItem, void *data) RsGxsGrpMsgIdPair msgPair = std::make_pair(channelPostItem->groupId(), channelPostItem->messageId()); rsGxsChannels->setMessageReadStatus(readData->mLastToken, msgPair, readData->mRead); } +#endif -void GxsChannelPostsWidgetWithModel::setAllMessagesReadDo(bool read, uint32_t &token) +void GxsChannelPostsWidgetWithModel::setAllMessagesReadDo(bool read, uint32_t& /*token*/) { - if (groupId().isNull() || !IS_GROUP_SUBSCRIBED(mGroup.mMeta.mSubscribeFlags)) { - return; - } + if (groupId().isNull() || !IS_GROUP_SUBSCRIBED(mGroup.mMeta.mSubscribeFlags)) + return; - GxsChannelPostsReadData data(read); - //ui->feedWidget->withAll(setAllMessagesReadCallback, &data); + QModelIndex src_index; - token = data.mLastToken; + mChannelPostsModel->setAllMsgReadStatus(read); } From f8989ce9446bdf1e09cf37ad1ef12c1dda6e95fc Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 17 Aug 2020 21:56:53 +0200 Subject: [PATCH 89/95] added test bit about mouse wheel + control in channels --- retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp index a70fdf395..09dec15c7 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp @@ -108,6 +108,7 @@ QString GxsChannelDialog::getHelpString() const

Channels can be made anonymous, or attached to a Retroshare identity so that readers can contact you if needed.\ Enable \"Allow Comments\" if you want to let users comment on your posts.

\

Channel posts are kept for %1 days, and sync-ed over the last %2 days, unless you change this.

\ +

UI Tip: use Control + mouse wheel to control image size in the thumbnail view.

\ ").arg(QString::number(rsGxsChannels->getDefaultStoragePeriod()/86400)).arg(QString::number(rsGxsChannels->getDefaultSyncPeriod()/86400)); return hlp_str ; From 09c7fdee4b9e26cf1fcfd9ee49ebebe09ed4b057 Mon Sep 17 00:00:00 2001 From: drbob Date: Tue, 18 Aug 2020 22:43:45 +1000 Subject: [PATCH 90/95] Add proper header path for 'retroshare-gui/' headers This is simplifies the include directories needed for plugins. --- retroshare-gui/src/gui/ChatLobbyWidget.h | 3 ++- retroshare-gui/src/gui/FileTransfer/BannedFilesDialog.h | 2 +- retroshare-gui/src/gui/FileTransfer/FileTransferInfoWidget.h | 3 ++- retroshare-gui/src/gui/FileTransfer/SearchDialog.h | 2 +- retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.h | 2 +- retroshare-gui/src/gui/FileTransfer/TransfersDialog.h | 2 +- retroshare-gui/src/gui/GetStartedDialog.h | 4 ++-- retroshare-gui/src/gui/NetworkDialog.h | 4 +++- retroshare-gui/src/gui/NetworkView.h | 2 +- retroshare-gui/src/gui/NewsFeed.h | 2 +- retroshare-gui/src/gui/PluginsPage.h | 2 +- retroshare-gui/src/gui/RemoteDirModel.cpp | 3 ++- retroshare-gui/src/gui/RsAutoUpdatePage.cpp | 3 ++- retroshare-gui/src/gui/chat/PopupDistantChatDialog.cpp | 3 ++- retroshare-gui/src/gui/common/NewFriendList.h | 3 ++- retroshare-gui/src/gui/connect/ConfCertDialog.cpp | 3 ++- retroshare-gui/src/gui/connect/PGPKeyDialog.cpp | 3 ++- retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.h | 3 ++- retroshare-gui/src/gui/gxs/RsGxsUpdateBroadcastPage.h | 2 +- retroshare-gui/src/gui/msgs/MessagesDialog.h | 3 ++- retroshare-gui/src/gui/notifyqt.cpp | 2 +- retroshare-gui/src/gui/settings/rsettingswin.h | 3 ++- retroshare-gui/src/gui/statistics/BwCtrlWindow.h | 2 +- retroshare-gui/src/gui/statistics/DhtWindow.h | 3 ++- retroshare-gui/src/gui/statistics/GlobalRouterStatistics.h | 3 ++- retroshare-gui/src/gui/statistics/GxsIdStatistics.h | 3 ++- retroshare-gui/src/gui/statistics/GxsTransportStatistics.h | 3 ++- retroshare-gui/src/gui/statistics/RttStatistics.h | 3 ++- retroshare-gui/src/gui/statistics/TurtleRouterDialog.h | 4 +++- retroshare-gui/src/gui/statistics/TurtleRouterStatistics.h | 4 +++- retroshare-gui/src/retroshare-gui.pro | 4 ++-- 31 files changed, 55 insertions(+), 33 deletions(-) diff --git a/retroshare-gui/src/gui/ChatLobbyWidget.h b/retroshare-gui/src/gui/ChatLobbyWidget.h index 415c28bc2..a9bb01895 100644 --- a/retroshare-gui/src/gui/ChatLobbyWidget.h +++ b/retroshare-gui/src/gui/ChatLobbyWidget.h @@ -19,9 +19,10 @@ *******************************************************************************/ #pragma once +#include + #include "ui_ChatLobbyWidget.h" -#include "RsAutoUpdatePage.h" #include "chat/ChatLobbyUserNotify.h" #include "gui/gxs/GxsIdChooser.h" diff --git a/retroshare-gui/src/gui/FileTransfer/BannedFilesDialog.h b/retroshare-gui/src/gui/FileTransfer/BannedFilesDialog.h index 28b8e8df1..a65dac238 100644 --- a/retroshare-gui/src/gui/FileTransfer/BannedFilesDialog.h +++ b/retroshare-gui/src/gui/FileTransfer/BannedFilesDialog.h @@ -20,7 +20,7 @@ #pragma once -#include "RsAutoUpdatePage.h" +#include #include "ui_BannedFilesDialog.h" class BannedFilesDialog: public QDialog diff --git a/retroshare-gui/src/gui/FileTransfer/FileTransferInfoWidget.h b/retroshare-gui/src/gui/FileTransfer/FileTransferInfoWidget.h index a82f08dbc..fdf45f2ff 100644 --- a/retroshare-gui/src/gui/FileTransfer/FileTransferInfoWidget.h +++ b/retroshare-gui/src/gui/FileTransfer/FileTransferInfoWidget.h @@ -24,7 +24,8 @@ #include #include #include -#include "RsAutoUpdatePage.h" + +#include #include struct FileChunksInfo ; diff --git a/retroshare-gui/src/gui/FileTransfer/SearchDialog.h b/retroshare-gui/src/gui/FileTransfer/SearchDialog.h index c911b8084..f14bfb642 100644 --- a/retroshare-gui/src/gui/FileTransfer/SearchDialog.h +++ b/retroshare-gui/src/gui/FileTransfer/SearchDialog.h @@ -23,7 +23,7 @@ #include #include "ui_SearchDialog.h" -#include "mainpage.h" +#include class AdvancedSearchDialog; class RSTreeWidgetItemCompareRole; diff --git a/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.h b/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.h index 5206e1d06..86164a7f3 100644 --- a/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.h +++ b/retroshare-gui/src/gui/FileTransfer/SharedFilesDialog.h @@ -23,7 +23,7 @@ #include "ui_SharedFilesDialog.h" -#include "RsAutoUpdatePage.h" +#include #include "gui/RetroShareLink.h" #include "util/RsProtectedTimer.h" diff --git a/retroshare-gui/src/gui/FileTransfer/TransfersDialog.h b/retroshare-gui/src/gui/FileTransfer/TransfersDialog.h index 9c03e830c..e11f6c232 100644 --- a/retroshare-gui/src/gui/FileTransfer/TransfersDialog.h +++ b/retroshare-gui/src/gui/FileTransfer/TransfersDialog.h @@ -25,7 +25,7 @@ #include #include -#include "RsAutoUpdatePage.h" +#include #include "ui_TransfersDialog.h" diff --git a/retroshare-gui/src/gui/GetStartedDialog.h b/retroshare-gui/src/gui/GetStartedDialog.h index 8705d0290..6d943958a 100644 --- a/retroshare-gui/src/gui/GetStartedDialog.h +++ b/retroshare-gui/src/gui/GetStartedDialog.h @@ -21,9 +21,9 @@ #ifndef _GETTING_STARTED_DIALOG_H #define _GETTING_STARTED_DIALOG_H -//#include +#include + #include "ui_GetStartedDialog.h" -#include "mainpage.h" #include diff --git a/retroshare-gui/src/gui/NetworkDialog.h b/retroshare-gui/src/gui/NetworkDialog.h index 8391ad476..9561c1db3 100644 --- a/retroshare-gui/src/gui/NetworkDialog.h +++ b/retroshare-gui/src/gui/NetworkDialog.h @@ -21,8 +21,10 @@ #ifndef _CONNECTIONSDIALOG_H #define _CONNECTIONSDIALOG_H +#include + #include "ui_NetworkDialog.h" -#include "RsAutoUpdatePage.h" + #include "gui/NetworkDialog/pgpid_item_model.h" #include "gui/NetworkDialog/pgpid_item_proxy.h" diff --git a/retroshare-gui/src/gui/NetworkView.h b/retroshare-gui/src/gui/NetworkView.h index 274ca020b..f6fcfe0b1 100644 --- a/retroshare-gui/src/gui/NetworkView.h +++ b/retroshare-gui/src/gui/NetworkView.h @@ -25,7 +25,7 @@ #include -#include "RsAutoUpdatePage.h" +#include #include "ui_NetworkView.h" diff --git a/retroshare-gui/src/gui/NewsFeed.h b/retroshare-gui/src/gui/NewsFeed.h index 713bcf96c..869d654fd 100644 --- a/retroshare-gui/src/gui/NewsFeed.h +++ b/retroshare-gui/src/gui/NewsFeed.h @@ -21,7 +21,7 @@ #ifndef _NEWS_FEED_DIALOG_H #define _NEWS_FEED_DIALOG_H -#include "mainpage.h" +#include #include "gui/feeds/FeedHolder.h" #include "util/TokenQueue.h" diff --git a/retroshare-gui/src/gui/PluginsPage.h b/retroshare-gui/src/gui/PluginsPage.h index 4832a1ac6..36d4f9c8a 100644 --- a/retroshare-gui/src/gui/PluginsPage.h +++ b/retroshare-gui/src/gui/PluginsPage.h @@ -21,7 +21,7 @@ #ifndef _PLUGINS_PAGE_H_ #define _PLUGINS_PAGE_H_ -#include "mainpage.h" +#include #include #include diff --git a/retroshare-gui/src/gui/RemoteDirModel.cpp b/retroshare-gui/src/gui/RemoteDirModel.cpp index b69929778..f10f0d55e 100644 --- a/retroshare-gui/src/gui/RemoteDirModel.cpp +++ b/retroshare-gui/src/gui/RemoteDirModel.cpp @@ -20,7 +20,8 @@ #include "RemoteDirModel.h" -#include "RsAutoUpdatePage.h" +#include + #include "gui/common/FilesDefs.h" #include "gui/common/GroupDefs.h" #include "gui/common/RsCollection.h" diff --git a/retroshare-gui/src/gui/RsAutoUpdatePage.cpp b/retroshare-gui/src/gui/RsAutoUpdatePage.cpp index 03d231cf0..4c18d294b 100644 --- a/retroshare-gui/src/gui/RsAutoUpdatePage.cpp +++ b/retroshare-gui/src/gui/RsAutoUpdatePage.cpp @@ -19,7 +19,8 @@ *******************************************************************************/ #include -#include "RsAutoUpdatePage.h" + +#include bool RsAutoUpdatePage::_locked = false ; diff --git a/retroshare-gui/src/gui/chat/PopupDistantChatDialog.cpp b/retroshare-gui/src/gui/chat/PopupDistantChatDialog.cpp index b93c2d438..840a03d47 100644 --- a/retroshare-gui/src/gui/chat/PopupDistantChatDialog.cpp +++ b/retroshare-gui/src/gui/chat/PopupDistantChatDialog.cpp @@ -30,7 +30,8 @@ #include #include -#include "RsAutoUpdatePage.h" +#include + #include "PopupDistantChatDialog.h" #define IMAGE_RED_LED ":/icons/bullet_red_128.png" diff --git a/retroshare-gui/src/gui/common/NewFriendList.h b/retroshare-gui/src/gui/common/NewFriendList.h index 2a1955ced..4bdeddd4b 100644 --- a/retroshare-gui/src/gui/common/NewFriendList.h +++ b/retroshare-gui/src/gui/common/NewFriendList.h @@ -25,8 +25,9 @@ #include #include +#include + #include "FriendListModel.h" -#include "RsAutoUpdatePage.h" #include "retroshare/rsstatus.h" namespace Ui { diff --git a/retroshare-gui/src/gui/connect/ConfCertDialog.cpp b/retroshare-gui/src/gui/connect/ConfCertDialog.cpp index fc56ebef5..92ab22142 100644 --- a/retroshare-gui/src/gui/connect/ConfCertDialog.cpp +++ b/retroshare-gui/src/gui/connect/ConfCertDialog.cpp @@ -32,6 +32,8 @@ #include #include +#include + #include "gui/help/browser/helpbrowser.h" #include "gui/common/PeerDefs.h" #include "gui/common/StatusDefs.h" @@ -39,7 +41,6 @@ #include "gui/notifyqt.h" #include "gui/common/AvatarDefs.h" #include "gui/MainWindow.h" -#include "mainpage.h" #include "util/DateTime.h" #include "util/misc.h" diff --git a/retroshare-gui/src/gui/connect/PGPKeyDialog.cpp b/retroshare-gui/src/gui/connect/PGPKeyDialog.cpp index d27e779fd..cd9199c31 100644 --- a/retroshare-gui/src/gui/connect/PGPKeyDialog.cpp +++ b/retroshare-gui/src/gui/connect/PGPKeyDialog.cpp @@ -32,6 +32,8 @@ #include #include +#include + #include "gui/help/browser/helpbrowser.h" #include "gui/common/PeerDefs.h" #include "gui/common/StatusDefs.h" @@ -39,7 +41,6 @@ #include "gui/notifyqt.h" #include "gui/common/AvatarDefs.h" #include "gui/MainWindow.h" -#include "mainpage.h" #include "util/DateTime.h" #include "util/misc.h" diff --git a/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.h b/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.h index 006f593a4..eaf1d0d34 100644 --- a/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.h +++ b/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.h @@ -21,8 +21,9 @@ #ifndef _GXSGROUPFRAMEDIALOG_H #define _GXSGROUPFRAMEDIALOG_H +#include + #include "gui/gxs/RsGxsUpdateBroadcastPage.h" -#include "RsAutoUpdatePage.h" #include "gui/RetroShareLink.h" #include "gui/settings/rsharesettings.h" #include "util/RsUserdata.h" diff --git a/retroshare-gui/src/gui/gxs/RsGxsUpdateBroadcastPage.h b/retroshare-gui/src/gui/gxs/RsGxsUpdateBroadcastPage.h index 2e13e0910..2a983bf8d 100644 --- a/retroshare-gui/src/gui/gxs/RsGxsUpdateBroadcastPage.h +++ b/retroshare-gui/src/gui/gxs/RsGxsUpdateBroadcastPage.h @@ -20,7 +20,7 @@ #pragma once -#include "mainpage.h" +#include #include // This class implement a basic RS functionality which is that widgets displaying info diff --git a/retroshare-gui/src/gui/msgs/MessagesDialog.h b/retroshare-gui/src/gui/msgs/MessagesDialog.h index abc80349d..bf0148cf5 100644 --- a/retroshare-gui/src/gui/msgs/MessagesDialog.h +++ b/retroshare-gui/src/gui/msgs/MessagesDialog.h @@ -23,7 +23,8 @@ #include -#include "mainpage.h" +#include + #include "ui_MessagesDialog.h" #define IMAGE_MESSAGES ":/icons/png/message.png" diff --git a/retroshare-gui/src/gui/notifyqt.cpp b/retroshare-gui/src/gui/notifyqt.cpp index e2e933a32..b85a946e1 100644 --- a/retroshare-gui/src/gui/notifyqt.cpp +++ b/retroshare-gui/src/gui/notifyqt.cpp @@ -32,7 +32,7 @@ #include #include -#include "RsAutoUpdatePage.h" +#include #include "MainWindow.h" #include "toaster/OnlineToaster.h" diff --git a/retroshare-gui/src/gui/settings/rsettingswin.h b/retroshare-gui/src/gui/settings/rsettingswin.h index 7a9864fff..2807d6443 100755 --- a/retroshare-gui/src/gui/settings/rsettingswin.h +++ b/retroshare-gui/src/gui/settings/rsettingswin.h @@ -23,8 +23,9 @@ #include #include +#include + #include "ui_settingsw.h" -#include "mainpage.h" class FloatingHelpBrowser; diff --git a/retroshare-gui/src/gui/statistics/BwCtrlWindow.h b/retroshare-gui/src/gui/statistics/BwCtrlWindow.h index d47867d4f..4126eb6bc 100644 --- a/retroshare-gui/src/gui/statistics/BwCtrlWindow.h +++ b/retroshare-gui/src/gui/statistics/BwCtrlWindow.h @@ -24,7 +24,7 @@ #include -#include "RsAutoUpdatePage.h" +#include #include "gui/common/RSGraphWidget.h" #include "ui_BwCtrlWindow.h" diff --git a/retroshare-gui/src/gui/statistics/DhtWindow.h b/retroshare-gui/src/gui/statistics/DhtWindow.h index 8199b5a1d..795a80a36 100644 --- a/retroshare-gui/src/gui/statistics/DhtWindow.h +++ b/retroshare-gui/src/gui/statistics/DhtWindow.h @@ -21,7 +21,8 @@ #ifndef RSDHT_WINDOW_H #define RSDHT_WINDOW_H -#include "RsAutoUpdatePage.h" +#include + #include "ui_DhtWindow.h" class DhtWindow : public RsAutoUpdatePage/*, public Ui::DhtWindow*/ { diff --git a/retroshare-gui/src/gui/statistics/GlobalRouterStatistics.h b/retroshare-gui/src/gui/statistics/GlobalRouterStatistics.h index c8d132740..c8e49fb4a 100644 --- a/retroshare-gui/src/gui/statistics/GlobalRouterStatistics.h +++ b/retroshare-gui/src/gui/statistics/GlobalRouterStatistics.h @@ -24,7 +24,8 @@ #include #include -#include "RsAutoUpdatePage.h" +#include + #include "ui_GlobalRouterStatistics.h" class GlobalRouterStatisticsWidget ; diff --git a/retroshare-gui/src/gui/statistics/GxsIdStatistics.h b/retroshare-gui/src/gui/statistics/GxsIdStatistics.h index 9d101aa88..fc0ab93fd 100644 --- a/retroshare-gui/src/gui/statistics/GxsIdStatistics.h +++ b/retroshare-gui/src/gui/statistics/GxsIdStatistics.h @@ -24,7 +24,8 @@ #include #include -#include "RsAutoUpdatePage.h" +#include + #include "Histogram.h" #include "ui_GxsIdStatistics.h" diff --git a/retroshare-gui/src/gui/statistics/GxsTransportStatistics.h b/retroshare-gui/src/gui/statistics/GxsTransportStatistics.h index d23fdaa0f..0b9970c1c 100644 --- a/retroshare-gui/src/gui/statistics/GxsTransportStatistics.h +++ b/retroshare-gui/src/gui/statistics/GxsTransportStatistics.h @@ -27,7 +27,8 @@ #include #include -#include "RsAutoUpdatePage.h" +#include + #include "ui_GxsTransportStatistics.h" #include "gui/gxs/RsGxsUpdateBroadcastPage.h" #include "util/rstime.h" diff --git a/retroshare-gui/src/gui/statistics/RttStatistics.h b/retroshare-gui/src/gui/statistics/RttStatistics.h index 2cefe3bb7..32c8b4f1b 100644 --- a/retroshare-gui/src/gui/statistics/RttStatistics.h +++ b/retroshare-gui/src/gui/statistics/RttStatistics.h @@ -22,8 +22,9 @@ #include #include +#include + #include "ui_RttStatistics.h" -#include "RsAutoUpdatePage.h" #include class RttStatisticsWidget ; diff --git a/retroshare-gui/src/gui/statistics/TurtleRouterDialog.h b/retroshare-gui/src/gui/statistics/TurtleRouterDialog.h index 4fc00b004..94e1ce269 100644 --- a/retroshare-gui/src/gui/statistics/TurtleRouterDialog.h +++ b/retroshare-gui/src/gui/statistics/TurtleRouterDialog.h @@ -22,9 +22,11 @@ #include #include + +#include + #include "ui_TurtleRouterDialog.h" #include "ui_TurtleRouterStatistics.h" -#include "RsAutoUpdatePage.h" class TurtleRouterDialog: public RsAutoUpdatePage, public Ui::TurtleRouterDialogForm diff --git a/retroshare-gui/src/gui/statistics/TurtleRouterStatistics.h b/retroshare-gui/src/gui/statistics/TurtleRouterStatistics.h index f7613de94..7cba37c18 100644 --- a/retroshare-gui/src/gui/statistics/TurtleRouterStatistics.h +++ b/retroshare-gui/src/gui/statistics/TurtleRouterStatistics.h @@ -23,8 +23,10 @@ #include #include #include + +#include + #include "ui_TurtleRouterStatistics.h" -#include "RsAutoUpdatePage.h" class TurtleRouterStatisticsWidget ; diff --git a/retroshare-gui/src/retroshare-gui.pro b/retroshare-gui/src/retroshare-gui.pro index fdbc83083..fbb600013 100644 --- a/retroshare-gui/src/retroshare-gui.pro +++ b/retroshare-gui/src/retroshare-gui.pro @@ -25,8 +25,8 @@ CONFIG += console TARGET = retroshare DEFINES += TARGET=\\\"$${TARGET}\\\" -DEPENDPATH *= $${PWD} $${RS_INCLUDE_DIR} retroshare-gui -INCLUDEPATH *= $${PWD} retroshare-gui +DEPENDPATH *= $${PWD} $${RS_INCLUDE_DIR} +INCLUDEPATH *= $${PWD} !include("../../libretroshare/src/use_libretroshare.pri"):error("Including") From 7c5bf2293192f4d29997190b3af6bde72cce083c Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 20 Aug 2020 18:34:10 +0200 Subject: [PATCH 91/95] improved safety of underlying data update for FriendListModel --- .../src/gui/common/FriendListModel.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/retroshare-gui/src/gui/common/FriendListModel.cpp b/retroshare-gui/src/gui/common/FriendListModel.cpp index 408527b3e..abd1c7450 100644 --- a/retroshare-gui/src/gui/common/FriendListModel.cpp +++ b/retroshare-gui/src/gui/common/FriendListModel.cpp @@ -1058,14 +1058,16 @@ void RsFriendListModel::updateInternalData() preMods(); beginRemoveRows(QModelIndex(),0,mTopLevel.size()-1); - endRemoveRows(); mGroups.clear(); mProfiles.clear(); mLocations.clear(); - mTopLevel.clear(); + endRemoveRows(); + + auto TL = mTopLevel ; // This allows to fill TL without touching mTopLevel outside of [begin/end]InsertRows(). + // create a map of profiles and groups std::map pgp_indices; @@ -1153,7 +1155,6 @@ void RsFriendListModel::updateInternalData() RsDbg() << "Creating top level list" << std::endl; #endif - mTopLevel.clear(); std::set already_in_a_group; if(mDisplayGroups) // in this case, we list all groups at the top level followed by the profiles without parent group @@ -1168,7 +1169,7 @@ void RsFriendListModel::updateInternalData() e.type = ENTRY_TYPE_GROUP; e.group_index = i; - mTopLevel.push_back(e); + TL.push_back(e); for(uint32_t j=0;j Date: Fri, 21 Aug 2020 18:42:12 +0200 Subject: [PATCH 92/95] hack to fix crashes in network list --- retroshare-gui/src/gui/common/NewFriendList.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/common/NewFriendList.cpp b/retroshare-gui/src/gui/common/NewFriendList.cpp index 9d9908642..95e0c844c 100644 --- a/retroshare-gui/src/gui/common/NewFriendList.cpp +++ b/retroshare-gui/src/gui/common/NewFriendList.cpp @@ -1094,9 +1094,15 @@ void NewFriendList::checkInternalData(bool force) saveExpandedPathsAndSelection(expanded_indexes, selected_indexes); + // This is a hack to avoid crashes on windows while calling endInsertRows(). I'm not sure wether these crashes are + // due to a Qt bug, or a misuse of the proxy model on my side. Anyway, this soves them for good. + + mProxyModel->setSourceModel(nullptr); + mModel->checkInternalData(force); - restoreExpandedPathsAndSelection(expanded_indexes, selected_indexes); + mProxyModel->setSourceModel(mModel); + restoreExpandedPathsAndSelection(expanded_indexes, selected_indexes); } void NewFriendList::exportFriendlistClicked() From da21a40eda55da2fbeab4b4bf161cc6bb2c90b52 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 22 Aug 2020 19:14:46 +0200 Subject: [PATCH 93/95] keep expand state when showing/hiding IPs and last connection state --- .../src/gui/common/NewFriendList.cpp | 19 +++++++++++++------ retroshare-gui/src/gui/common/NewFriendList.h | 4 +++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/retroshare-gui/src/gui/common/NewFriendList.cpp b/retroshare-gui/src/gui/common/NewFriendList.cpp index 95e0c844c..a388c9dea 100644 --- a/retroshare-gui/src/gui/common/NewFriendList.cpp +++ b/retroshare-gui/src/gui/common/NewFriendList.cpp @@ -453,6 +453,7 @@ void NewFriendList::processSettings(bool load) if (load) // load settings { + std::cerr <<"Re-loading settings..." << std::endl; // states setShowUnconnected(!Settings->value("hideUnconnected", !mProxyModel->showOfflineNodes()).toBool()); setShowState(Settings->value("showState", mModel->getDisplayStatusString()).toBool()); @@ -1087,24 +1088,29 @@ void NewFriendList::removeGroup() checkInternalData(true); } -void NewFriendList::checkInternalData(bool force) +void NewFriendList::applyWhileKeepingTree(std::function predicate) { std::set expanded_indexes; - std::set selected_indexes; + std::set selected_indexes; - saveExpandedPathsAndSelection(expanded_indexes, selected_indexes); + saveExpandedPathsAndSelection(expanded_indexes, selected_indexes); // This is a hack to avoid crashes on windows while calling endInsertRows(). I'm not sure wether these crashes are // due to a Qt bug, or a misuse of the proxy model on my side. Anyway, this soves them for good. mProxyModel->setSourceModel(nullptr); - mModel->checkInternalData(force); + predicate(); mProxyModel->setSourceModel(mModel); restoreExpandedPathsAndSelection(expanded_indexes, selected_indexes); } +void NewFriendList::checkInternalData(bool force) +{ + applyWhileKeepingTree([force,this]() { mModel->checkInternalData(force) ; }); +} + void NewFriendList::exportFriendlistClicked() { QString fileName; @@ -1490,6 +1496,7 @@ bool NewFriendList::isColumnVisible(int col) const } void NewFriendList::setColumnVisible(int col,bool visible) { + std::cerr << "Setting column " << col << " to be visible: " << visible << std::endl; ui->peerTreeWidget->setColumnHidden(col, !visible); } void NewFriendList::toggleColumnVisible() @@ -1507,12 +1514,12 @@ void NewFriendList::toggleColumnVisible() void NewFriendList::setShowState(bool show) { - mModel->setDisplayStatusString(show); + applyWhileKeepingTree([show,this]() { mModel->setDisplayStatusString(show) ; }); } void NewFriendList::setShowGroups(bool show) { - mModel->setDisplayGroups(show); + applyWhileKeepingTree([show,this]() { mModel->setDisplayGroups(show) ; }); } /** diff --git a/retroshare-gui/src/gui/common/NewFriendList.h b/retroshare-gui/src/gui/common/NewFriendList.h index 2a1955ced..cf026b81b 100644 --- a/retroshare-gui/src/gui/common/NewFriendList.h +++ b/retroshare-gui/src/gui/common/NewFriendList.h @@ -102,7 +102,9 @@ private: RsFriendListModel *mModel; QAction *mActionSortByState; - void expandGroup(const RsNodeGroupId& gid); + void applyWhileKeepingTree(std::function predicate); + + void expandGroup(const RsNodeGroupId& gid); void recursRestoreExpandedItems(const QModelIndex& index, const QString& parent_path, const std::set& exp, const std::set &sel); void recursSaveExpandedItems(const QModelIndex& index,const QString& parent_path,std::set& exp, std::set& sel); void saveExpandedPathsAndSelection(std::set& expanded_indexes, std::set& selected_indexes); From 44444207f79e1f98142ea85e3e7655f5755b2202 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 22 Aug 2020 20:23:42 +0200 Subject: [PATCH 94/95] save/restore hidden columns when switching which column is visible in FriendList --- retroshare-gui/src/gui/common/FriendListModel.cpp | 8 ++++---- retroshare-gui/src/gui/common/NewFriendList.cpp | 12 +++++++++++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/retroshare-gui/src/gui/common/FriendListModel.cpp b/retroshare-gui/src/gui/common/FriendListModel.cpp index abd1c7450..39d4bbded 100644 --- a/retroshare-gui/src/gui/common/FriendListModel.cpp +++ b/retroshare-gui/src/gui/common/FriendListModel.cpp @@ -158,7 +158,7 @@ void RsFriendListModel::postMods() { endResetModel(); - emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(rowCount()-1,COLUMN_THREAD_NB_COLUMNS-1,(void*)NULL)); + emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(rowCount()-1,columnCount()-1,(void*)NULL)); } int RsFriendListModel::rowCount(const QModelIndex& parent) const @@ -1236,7 +1236,7 @@ void RsFriendListModel::collapseItem(const QModelIndex& index) mExpandedProfiles.erase(s); // apparently we cannot be subtle here. - emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(mTopLevel.size()-1,COLUMN_THREAD_NB_COLUMNS-1,(void*)NULL)); + emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(mTopLevel.size()-1,columnCount()-1,(void*)NULL)); } void RsFriendListModel::expandItem(const QModelIndex& index) @@ -1258,10 +1258,10 @@ void RsFriendListModel::expandItem(const QModelIndex& index) if(hp) s += hp->profile_info.gpg_id.toStdString(); if(!s.empty()) - mExpandedProfiles.insert(s); + mExpandedProfiles.insert(s); // apparently we cannot be subtle here. - emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(mTopLevel.size()-1,COLUMN_THREAD_NB_COLUMNS-1,(void*)NULL)); + emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(mTopLevel.size()-1,columnCount()-1,(void*)NULL)); } bool RsFriendListModel::isProfileExpanded(const EntryIndex& e) const diff --git a/retroshare-gui/src/gui/common/NewFriendList.cpp b/retroshare-gui/src/gui/common/NewFriendList.cpp index a388c9dea..501be9a3c 100644 --- a/retroshare-gui/src/gui/common/NewFriendList.cpp +++ b/retroshare-gui/src/gui/common/NewFriendList.cpp @@ -1096,7 +1096,13 @@ void NewFriendList::applyWhileKeepingTree(std::function predicate) saveExpandedPathsAndSelection(expanded_indexes, selected_indexes); // This is a hack to avoid crashes on windows while calling endInsertRows(). I'm not sure wether these crashes are - // due to a Qt bug, or a misuse of the proxy model on my side. Anyway, this soves them for good. + // due to a Qt bug, or a misuse of the proxy model on my side. Anyway, this solves them for good. + + // save hidden columns + std::list hidden_columns; + for(int i=0;ipeerTreeWidget->isColumnHidden(i)) + hidden_columns.push_back(i); mProxyModel->setSourceModel(nullptr); @@ -1104,6 +1110,10 @@ void NewFriendList::applyWhileKeepingTree(std::function predicate) mProxyModel->setSourceModel(mModel); restoreExpandedPathsAndSelection(expanded_indexes, selected_indexes); + + // restore hidden columns + for(auto c: hidden_columns) + ui->peerTreeWidget->setColumnHidden(c,true); } void NewFriendList::checkInternalData(bool force) From daf92ce62cf480b96a16f3dcea6b66423bf411ee Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 22 Aug 2020 20:46:39 +0200 Subject: [PATCH 95/95] save both column width and column visibility in friend list --- .../src/gui/common/NewFriendList.cpp | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/retroshare-gui/src/gui/common/NewFriendList.cpp b/retroshare-gui/src/gui/common/NewFriendList.cpp index 501be9a3c..5df637116 100644 --- a/retroshare-gui/src/gui/common/NewFriendList.cpp +++ b/retroshare-gui/src/gui/common/NewFriendList.cpp @@ -1097,12 +1097,18 @@ void NewFriendList::applyWhileKeepingTree(std::function predicate) // This is a hack to avoid crashes on windows while calling endInsertRows(). I'm not sure wether these crashes are // due to a Qt bug, or a misuse of the proxy model on my side. Anyway, this solves them for good. + // As a side effect we need to save/restore hidden columns because setSourceModel() resets this setting. + + // save hidden columns and sizes + std::vector col_visible(RsFriendListModel::COLUMN_THREAD_NB_COLUMNS); + std::vector col_sizes(RsFriendListModel::COLUMN_THREAD_NB_COLUMNS); - // save hidden columns - std::list hidden_columns; for(int i=0;ipeerTreeWidget->isColumnHidden(i)) - hidden_columns.push_back(i); + { + col_visible[i] = !ui->peerTreeWidget->isColumnHidden(i); + col_sizes[i] = ui->peerTreeWidget->columnWidth(i); + } + mProxyModel->setSourceModel(nullptr); @@ -1112,8 +1118,11 @@ void NewFriendList::applyWhileKeepingTree(std::function predicate) restoreExpandedPathsAndSelection(expanded_indexes, selected_indexes); // restore hidden columns - for(auto c: hidden_columns) - ui->peerTreeWidget->setColumnHidden(c,true); + for(uint32_t i=0;ipeerTreeWidget->setColumnHidden(i,!col_visible[i]); + ui->peerTreeWidget->setColumnWidth(i,col_sizes[i]); + } } void NewFriendList::checkInternalData(bool force)

w3Tc&!-!2B- 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 q0I!=DH%fAmGJwxS!fa#V%SCP{e9CtnKQ@yisKS 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