From e1575c62b0836e5fc53ca80c21781885c30faeb1 Mon Sep 17 00:00:00 2001 From: Tozh Date: Mon, 5 Sep 2011 17:37:04 -0400 Subject: [PATCH] Fix for the viewer handshake and reverse version cleanup --- ...BEDD1D2-A320-43f5-88CF-DD47BBCA5DFB.lsltxt | 2 +- indra/newview/fslslbridge.cpp | 36 +++++++++++++++---- indra/newview/fslslbridge.h | 1 + 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/indra/newview/fs_resources/EBEDD1D2-A320-43f5-88CF-DD47BBCA5DFB.lsltxt b/indra/newview/fs_resources/EBEDD1D2-A320-43f5-88CF-DD47BBCA5DFB.lsltxt index 55d619d86b..ca2edb8212 100644 --- a/indra/newview/fs_resources/EBEDD1D2-A320-43f5-88CF-DD47BBCA5DFB.lsltxt +++ b/indra/newview/fs_resources/EBEDD1D2-A320-43f5-88CF-DD47BBCA5DFB.lsltxt @@ -545,7 +545,7 @@ default if (keyViewerHandshake == FIRESTORM_VIEWER || tryHandshakeOnce == 1) { debugOutput ("Firestorm viewer and handshake"); - llOwnerSay("" + latestURL+ ""); + llOwnerSay("" + latestURL+ ""); tryHandshakeOnce = 0; } else diff --git a/indra/newview/fslslbridge.cpp b/indra/newview/fslslbridge.cpp index 6e207bce06..a35da1e60e 100644 --- a/indra/newview/fslslbridge.cpp +++ b/indra/newview/fslslbridge.cpp @@ -145,12 +145,12 @@ bool FSLSLBridge :: lslToViewer(std::string message, LLUUID fromID, LLUUID owner if (fsBridge != NULL) mpBridge = fsBridge; } - status = true; + //status = true; + status = viewerToLSL("URL Confirmed", new FSLSLBridgeRequestResponder()); if (!mIsFirstCallDone) { //on first call from bridge, confirm that we are here //then check options use - viewerToLSL("URL Confirmed", new FSLSLBridgeRequestResponder()); updateBoolSettingValue("UseLSLFlightAssist"); mIsFirstCallDone = true; @@ -242,6 +242,10 @@ void FSLSLBridge :: startCreation() LLUUID catID = findFSCategory(); LLViewerInventoryItem* fsBridge = findInvObject(mCurrentFullName, catID, LLAssetType::AT_OBJECT); + + //detach everything else + detachOtherBridges(); + if (fsBridge == NULL) { llinfos << "bridge not found, creating new" << llendl; @@ -411,6 +415,7 @@ void FSLSLBridge :: processDetach(LLViewerObject *object, const LLViewerJointAtt { mpBridge = NULL; reportToNearbyChat("Bridge detached."); + mIsFirstCallDone = false; if (mBridgeCreating) { reportToNearbyChat("Bridge has not finished creating, you might need to recreate it before using"); @@ -627,6 +632,7 @@ void FSLSLBridge :: finishBridge() reportToNearbyChat("Bridge created."); mBridgeCreating = false; + mIsFirstCallDone = false; //removeVOInventoryListener(); cleanUpOldVersions(); cleanUpBridgeFolder(); @@ -735,11 +741,6 @@ void FSLSLBridge :: cleanUpBridgeFolder(std::string nameToCleanUp) for (S32 iIndex = 0; iIndex < items.count(); iIndex++) { const LLViewerInventoryItem* itemp = items.get(iIndex); - if (get_is_item_worn(itemp->getUUID()) && (itemp->getUUID() != mpBridge->getUUID())) - { - LLVOAvatarSelf::detachAttachmentIntoInventory(itemp->getUUID()); - } - if (!itemp->getIsLinkType() && (itemp->getUUID() != mpBridge->getUUID())) { gInventory.purgeObject(itemp->getUUID()); @@ -800,3 +801,24 @@ bool FSLSLBridge :: isOldBridgeVersion(LLInventoryItem *item) return false; } +void FSLSLBridge :: detachOtherBridges() +{ + LLUUID catID = findFSCategory(); + LLViewerInventoryCategory::cat_array_t cats; + LLViewerInventoryItem::item_array_t items; + + LLViewerInventoryItem* fsBridge = findInvObject(mCurrentFullName, catID, LLAssetType::AT_OBJECT); + + //detach everything except current valid bridge - if any + gInventory.collectDescendents(catID,cats,items,FALSE); + + for (S32 iIndex = 0; iIndex < items.count(); iIndex++) + { + const LLViewerInventoryItem* itemp = items.get(iIndex); + if (get_is_item_worn(itemp->getUUID()) && + ((fsBridge == NULL) || (itemp->getUUID() != fsBridge->getUUID()))) + { + LLVOAvatarSelf::detachAttachmentIntoInventory(itemp->getUUID()); + } + } +} \ No newline at end of file diff --git a/indra/newview/fslslbridge.h b/indra/newview/fslslbridge.h index 4fcfda1b50..7ecab03b3d 100644 --- a/indra/newview/fslslbridge.h +++ b/indra/newview/fslslbridge.h @@ -102,6 +102,7 @@ protected: void startCreation(); void finishBridge(); void cleanUpOldVersions(); + void detachOtherBridges(); /*virtual*/ void inventoryChanged(LLViewerObject* obj, LLInventoryObject::object_list_t* inv,