From ce5719c83fc8ed0b350ae5ee30e0ea6866a45a37 Mon Sep 17 00:00:00 2001 From: Christian Walther Date: Thu, 25 Dec 2014 00:26:39 +0100 Subject: [PATCH] Let ptVault.setAgePublic accept ptVaultAgeInfoNode in addition to ptAgeInfoStruct. In this case it now also works for non-owners of the age. Previously it only worked for owners because the ageInfoStruct does not contain the vault node ID, so it needed to be looked up somewhere, and that was in the AgesIOwnFolder. --- .../Plasma/FeatureLib/pfPython/pyVault.cpp | 5 +++ .../Plasma/FeatureLib/pfPython/pyVault.h | 2 ++ .../FeatureLib/pfPython/pyVaultGlue.cpp | 18 ++++++---- .../PubUtilLib/plVault/plVaultClientApi.cpp | 35 +++++++++++-------- .../PubUtilLib/plVault/plVaultClientApi.h | 1 + 5 files changed, 40 insertions(+), 21 deletions(-) diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyVault.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyVault.cpp index 8bcb30f2..2125ae45 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyVault.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyVault.cpp @@ -664,6 +664,11 @@ bool pyVault::SetAgePublic( const pyAgeInfoStruct * ageInfo, bool makePublic ) return VaultSetOwnedAgePublicAndWait(ageInfo->GetAgeInfo(), makePublic); } +bool pyVault::SetAgePublic( const pyVaultAgeInfoNode * ageInfoNode, bool makePublic ) +{ + return VaultSetAgePublicAndWait(ageInfoNode->GetNode(), makePublic); +} + PyObject* pyVault::GetGlobalInbox( void ) { diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyVault.h b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyVault.h index 29b139fc..5523f62d 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyVault.h +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyVault.h @@ -176,6 +176,8 @@ public: void CreateNeighborhood(); // set an age's public status. will fail if you aren't czar of age. bool SetAgePublic( const pyAgeInfoStruct * ageInfo, bool makePublic ); + // set an age's public status, also works for non-owners + bool SetAgePublic( const pyVaultAgeInfoNode * ageInfoNode, bool makePublic ); PyObject* GetGlobalInbox( void ); // returns pyVaultFolderNode #ifdef GlobalInboxTestCode diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyVaultGlue.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyVaultGlue.cpp index f39e3f47..040d8cbc 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyVaultGlue.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/pyVaultGlue.cpp @@ -43,6 +43,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include "pyEnum.h" #include "pyAgeInfoStruct.h" #include "pyVaultNode.h" +#include "pyVaultAgeInfoNode.h" #include "pySDL.h" #include "pyAgeLinkStruct.h" @@ -451,16 +452,21 @@ PYTHON_METHOD_DEFINITION(ptVault, setAgePublic, args) char makePublic; if (!PyArg_ParseTuple(args, "Ob", &ageInfoObj, &makePublic)) { - PyErr_SetString(PyExc_TypeError, "setAgePublic expects a ptAgeInfoStruct and a boolean"); + PyErr_SetString(PyExc_TypeError, "setAgePublic expects a ptAgeInfoStruct or ptVaultAgeInfoNode and a boolean"); PYTHON_RETURN_ERROR; } - if (!pyAgeInfoStruct::Check(ageInfoObj)) + if (pyAgeInfoStruct::Check(ageInfoObj)) { - PyErr_SetString(PyExc_TypeError, "setAgePublic expects a ptAgeInfoStruct and a boolean"); - PYTHON_RETURN_ERROR; + pyAgeInfoStruct* ageInfo = pyAgeInfoStruct::ConvertFrom(ageInfoObj); + PYTHON_RETURN_BOOL(self->fThis->SetAgePublic(ageInfo, makePublic != 0)); } - pyAgeInfoStruct* ageInfo = pyAgeInfoStruct::ConvertFrom(ageInfoObj); - PYTHON_RETURN_BOOL(self->fThis->SetAgePublic(ageInfo, makePublic != 0)); + else if (pyVaultAgeInfoNode::Check(ageInfoObj)) + { + pyVaultAgeInfoNode* ageInfoNode = pyVaultAgeInfoNode::ConvertFrom(ageInfoObj); + PYTHON_RETURN_BOOL(self->fThis->SetAgePublic(ageInfoNode, makePublic != 0)); + } + PyErr_SetString(PyExc_TypeError, "setAgePublic expects a ptAgeInfoStruct or ptVaultAgeInfoNode and a boolean"); + PYTHON_RETURN_ERROR; } PYTHON_START_METHODS_TABLE(ptVault) diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.cpp index 59093fdc..55b027a2 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.cpp @@ -2476,21 +2476,7 @@ bool VaultAddOwnedAgeSpawnPoint (const Uuid & ageInstId, const plSpawnPointInfo bool VaultSetOwnedAgePublicAndWait (const plAgeInfoStruct * info, bool publicOrNot) { if (RelVaultNode * rvnLink = VaultGetOwnedAgeLinkIncRef(info)) { if (RelVaultNode * rvnInfo = rvnLink->GetChildNodeIncRef(plVault::kNodeType_AgeInfo, 1)) { - NetCliAuthSetAgePublic(rvnInfo->nodeId, publicOrNot); - - VaultAgeInfoNode access(rvnInfo); - char ageName[MAX_PATH]; - StrToAnsi(ageName, access.ageFilename, arrsize(ageName)); - - plVaultNotifyMsg * msg = NEWZERO(plVaultNotifyMsg); - if (publicOrNot) - msg->SetType(plVaultNotifyMsg::kPublicAgeCreated); - else - msg->SetType(plVaultNotifyMsg::kPublicAgeRemoved); - msg->SetResultCode(true); - msg->GetArgs()->AddString(plNetCommon::VaultTaskArgs::kAgeFilename, ageName); - msg->Send(); - + VaultSetAgePublicAndWait(rvnInfo, publicOrNot); rvnInfo->DecRef(); } rvnLink->DecRef(); @@ -2498,6 +2484,25 @@ bool VaultSetOwnedAgePublicAndWait (const plAgeInfoStruct * info, bool publicOrN return true; } +//============================================================================ +bool VaultSetAgePublicAndWait (NetVaultNode * ageInfoNode, bool publicOrNot) { + NetCliAuthSetAgePublic(ageInfoNode->nodeId, publicOrNot); + + VaultAgeInfoNode access(ageInfoNode); + char ageName[MAX_PATH]; + StrToAnsi(ageName, access.ageFilename, arrsize(ageName)); + + plVaultNotifyMsg * msg = NEWZERO(plVaultNotifyMsg); + if (publicOrNot) + msg->SetType(plVaultNotifyMsg::kPublicAgeCreated); + else + msg->SetType(plVaultNotifyMsg::kPublicAgeRemoved); + msg->SetResultCode(true); + msg->GetArgs()->AddString(plNetCommon::VaultTaskArgs::kAgeFilename, ageName); + msg->Send(); + return true; +} + //============================================================================ RelVaultNode * VaultGetVisitAgeLinkIncRef (const plAgeInfoStruct * info) { RelVaultNode * rvnLink = nil; diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.h b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.h index 15aa708c..bfd749f0 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.h +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.h @@ -345,6 +345,7 @@ RelVaultNode * VaultGetOwnedAgeInfoIncRef (const plAgeInfoStruct * info); bool VaultGetOwnedAgeLink (const plAgeInfoStruct * info, plAgeLinkStruct * link); bool VaultAddOwnedAgeSpawnPoint (const Uuid & ageInstId, const plSpawnPointInfo & spawnPt); bool VaultSetOwnedAgePublicAndWait (const plAgeInfoStruct * info, bool publicOrNot); +bool VaultSetAgePublicAndWait (NetVaultNode * ageInfoNode, bool publicOrNot); RelVaultNode * VaultGetVisitAgeLinkIncRef (const plAgeInfoStruct * info); bool VaultGetVisitAgeLink (const plAgeInfoStruct * info, class plAgeLinkStruct * link); bool VaultRegisterOwnedAgeAndWait (const plAgeLinkStruct * link);