// Checked: 2012-03-22 (RLVa-1.4.6) | Added: RLVa-1.4.6 void RlvRenameOnWearObserver::onCategoryCreate(const LLSD& sdData, void* pParam) { LLUUID idFolder = sdData["folder_id"].asUUID(); LLUUID* pidItem = (LLUUID*)pParam; if ( (idFolder.notNull()) && (pidItem) && (pidItem->notNull()) ) move_inventory_item(gAgent.getID(), gAgent.getSessionID(), *pidItem, idFolder, std::string(), NULL); delete pidItem; }
BOOL JCLSLBridge::tick() { if(LLStartUp::getStartupState() >= STATE_INVENTORY_SEND) { switch(sBridgeStatus) { case UNINITIALIZED: { /* We're going to just completely disable this in code, it's shit - CW if(!gSavedSettings.getBOOL("Meta7BuildBridge")) { */ sBridgeStatus = FAILED; break; //} //cmdline_printchat("initializing");//<< llendl; LLUUID item_id = findInventoryByName(vBridgeName); if(gInventory.isEverythingFetched())// || (item_id.notNull() && isworn(item_id))) { //cmdline_printchat("inv is fetched");//<< llendl; if(item_id.notNull()) { //cmdline_printchat("id="+item_id.asString()); LLViewerInventoryItem* bridge = gInventory.getItem(item_id); if(bridge) { //cmdline_printchat("bridge is ready to attach");//<< llendl; if(isworn(bridge->getUUID())) { //cmdline_printchat("bridge is already worn");//<< llendl; sBridgeStatus = RECHAN; }else if(bridge->isComplete()) { //cmdline_printchat("bridge is complete, attaching");//<< llendl; LLMessageSystem* msg = gMessageSystem; msg->newMessageFast(_PREHASH_RezSingleAttachmentFromInv); msg->nextBlockFast(_PREHASH_AgentData); msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); msg->nextBlockFast(_PREHASH_ObjectData); msg->addUUIDFast(_PREHASH_ItemID, bridge->getUUID()); msg->addUUIDFast(_PREHASH_OwnerID, bridge->getPermissions().getOwner()); msg->addU8Fast(_PREHASH_AttachmentPt, 128); pack_permissions_slam(msg, bridge->getFlags(), bridge->getPermissions()); msg->addStringFast(_PREHASH_Name, bridge->getName()); msg->addStringFast(_PREHASH_Description, bridge->getDescription()); msg->sendReliable(gAgent.getRegionHost()); sBridgeStatus = RECHAN; } } }else { //cmdline_printchat("no bridge");//<< llendl; //sBridgeStatus = BUILDING; std::string directory = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"bridge.xml"); if(!LLFile::isfile(directory.c_str())) { //cmdline_printchat("file not there o.o");//<< llendl; sBridgeStatus = FAILED; }else { //cmdline_printchat("bridge.xml located. importing..");//<< llendl; gImportTracker.importer(directory,&setBridgeObject); sBridgeStatus = BUILDING; } } } } break; case RENAMING: { ////cmdline_printchat("renaming"); LLMessageSystem* msg = gMessageSystem; msg->newMessageFast(_PREHASH_ObjectAttach); msg->nextBlockFast(_PREHASH_AgentData); msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); msg->addU8Fast(_PREHASH_AttachmentPoint, vCatType); msg->nextBlockFast(_PREHASH_ObjectData); msg->addU32Fast(_PREHASH_ObjectLocalID, sBridgeObject->getLocalID()); msg->addQuatFast(_PREHASH_Rotation, LLQuaternion(0.0f, 0.0f, 0.0f, 1.0f)); msg->sendReliable(gAgent.getRegion()->getHost()); sBridgeStatus = FOLDERING; } break; case FOLDERING: { ////cmdline_printchat("foldering"); LLUUID vcatid; vcatid = gInventory.findCategoryByName(vBridgeOpCat); if(vcatid.isNull()) { ////cmdline_printchat("creating folder"); vcatid = gInventory.createNewCategory(gAgent.getInventoryRootID(), LLAssetType::AT_NONE, vBridgeOpCat); } LLUUID bridge_id = findInventoryByName(vBridgeName); //cmdline_printchat("id="+bridge_id.asString()); LLViewerInventoryItem* bridge = gInventory.getItem(bridge_id); if(bridge) { move_inventory_item(gAgent.getID(),gAgent.getSessionID(),bridge->getUUID(),vcatid,vBridgeName, NULL); sBridgeStatus = RECHAN; ////cmdline_printchat("moving to folder"); } } break; case RECHAN: { { //if(l2c == 0) is this really needed ._. //{ send_chat_from_viewer("-1|l2c", CHAT_TYPE_WHISPER, JCLSLBridge::bridge_channel(gAgent.getID())); sBridgeStatus = ACTIVE; //} } } case ACTIVE: { LLUUID bridge = findInventoryByName(vBridgeName); //if(bridge) //LLVOAvatar* avatar = gAgent.getAvatarObject(); if(bridge.isNull() || !isworn(bridge)) { l2c = 0; l2c_inuse = false; ////cmdline_printchat("reattaching"); sBridgeStatus = UNINITIALIZED; } } } } return FALSE; }
// Checked: 2010-03-14 (RLVa-1.1.3a) | Added: RLVa-1.2.0a void RlvRenameOnWearObserver::doneIdle() { const LLViewerInventoryCategory* pRlvRoot = NULL; LLVOAvatar* pAvatar = gAgentAvatarp; if ( (RlvSettings::getEnableSharedWear()) || (!RlvSettings::getSharedInvAutoRename()) || (LLStartUp::getStartupState() < STATE_STARTED) || (!pAvatar) || ((pRlvRoot = RlvInventory::instance().getSharedRoot()) == NULL) ) { delete this; return; } const LLViewerJointAttachment* pAttachPt = NULL; S32 idxAttachPt = 0; // RLV_ASSERT(mComplete.size() > 0); // Catch instances where we forgot to call startFetch() for (uuid_vec_t::const_iterator itItem = mComplete.begin(); itItem != mComplete.end(); ++itItem) { const LLUUID& idAttachItem = *itItem; // If the item resides under #RLV we'll rename it directly; otherwise settle for "renaming" all of its links residing under #RLV LLInventoryModel::item_array_t items; if (gInventory.isObjectDescendentOf(idAttachItem, pRlvRoot->getUUID())) items.push_back(gInventory.getItem(idAttachItem)); else items = gInventory.collectLinkedItems(idAttachItem, pRlvRoot->getUUID()); if (items.empty()) continue; if ( ((pAttachPt = pAvatar->getWornAttachmentPoint(idAttachItem)) == NULL) || ((idxAttachPt = RlvAttachPtLookup::getAttachPointIndex(pAttachPt)) == 0) ) { // RLV_ASSERT(false); continue; } static const std::string &new_category_name = LLViewerFolderType::lookupNewCategoryName(LLFolderType::FT_NONE); for (S32 idxItem = 0, cntItem = items.count(); idxItem < cntItem; idxItem++) { LLViewerInventoryItem* pItem = items.get(idxItem); if (!pItem) continue; S32 idxAttachPtItem = RlvAttachPtLookup::getAttachPointIndex(pItem); if ( (idxAttachPt == idxAttachPtItem) || (idxAttachPtItem) ) continue; std::string strAttachPt = pAttachPt->getName(); LLStringUtil::toLower(strAttachPt); // If we can modify the item then we rename it directly, otherwise we create a new folder and move it if (pItem->getPermissions().allowModifyBy(gAgent.getID())) { std::string strName = pItem->getName(); LLStringUtil::truncate(strName, DB_INV_ITEM_NAME_STR_LEN - strAttachPt.length() - 3); strName += " (" + strAttachPt + ")"; pItem->rename(strName); pItem->updateServer(FALSE); gInventory.addChangedMask(LLInventoryObserver::LABEL, pItem->getUUID()); } else { // Don't do anything if the item is a direct descendant of the shared root, or a folded folder LLViewerInventoryCategory* pFolder = gInventory.getCategory(pItem->getParentUUID()); if ( (pFolder) && (pFolder->getUUID() != pRlvRoot->getUUID()) && (!RlvInventory::isFoldedFolder(pFolder, false)) ) { std::string strFolderName = ".(" + strAttachPt + ")"; // Rename the item's parent folder if it's called "New Folder", isn't directly under #RLV and contains exactly 1 object if ( (new_category_name == pFolder->getName()) && (pFolder->getParentUUID() != pRlvRoot->getUUID()) && (1 == RlvInventory::getDirectDescendentsCount(pFolder, LLAssetType::AT_OBJECT)) ) { pFolder->rename(strFolderName); pFolder->updateServer(FALSE); gInventory.addChangedMask(LLInventoryObserver::LABEL, pFolder->getUUID()); } else { // "No modify" item with a non-renameable parent: create a new folder named and move the item into it LLUUID idAttachFolder = gInventory.createNewCategory(pFolder->getUUID(), LLFolderType::FT_NONE, strFolderName); move_inventory_item(gAgent.getID(), gAgent.getSessionID(), pItem->getUUID(), idAttachFolder, std::string(), NULL); } } } } } gInventory.notifyObservers(); delete this; }