diff options
| author | Merov Linden <merov@lindenlab.com> | 2014-04-29 20:37:37 -0700 | 
|---|---|---|
| committer | Merov Linden <merov@lindenlab.com> | 2014-04-29 20:37:37 -0700 | 
| commit | 7df858622bf379781246f23445f86ead4ad3288a (patch) | |
| tree | bd277a2869fe2d5dd39ad64bb39cd9085afe3638 | |
| parent | 4deb9f54c64d114bfd2aba76e51eaa01908b6610 (diff) | |
DD-73 : Rewrote the move single item to marketplace code so to support the required folder structure better
| -rwxr-xr-x | indra/newview/llinventoryfunctions.cpp | 58 | 
1 files changed, 37 insertions, 21 deletions
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index e63aca67f8..62b626d0c8 100755 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -885,9 +885,9 @@ S32 compute_stock_count(LLUUID cat_uuid)  void move_item_to_marketplacelistings(LLInventoryItem* inv_item, LLUUID dest_folder, bool copy)  { -    // Get the marketplace listings, exit with error if none -    const LLUUID marketplace_listings_uuid = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false); -    if (marketplace_listings_uuid.isNull()) +    // Get the marketplace listings depth of the destination folder, exit with error if not under marketplace +    S32 depth = depth_nesting_in_marketplace(dest_folder); +    if (depth < 0)      {          llinfos << "Merov : Marketplace error : There is no marketplace listings folder -> move aborted!" << llendl;          return; @@ -912,26 +912,36 @@ void move_item_to_marketplacelistings(LLInventoryItem* inv_item, LLUUID dest_fol          // put on sale items she cannot transfer. Proceed with move if we have permission.          if (viewer_inv_item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID(), gAgent.getGroupID()))          { -            // When moving an isolated item directly under the marketplace listings root, we create a new folder with that name -            if (dest_folder == marketplace_listings_uuid) +            // When moving an isolated item, we might need to create the folder structure to support it +            if (depth == 0)              { -                dest_folder = create_folder_for_item(inv_item, dest_folder); +                // We need a listing folder +                dest_folder = gInventory.createNewCategory(dest_folder, LLFolderType::FT_NONE, viewer_inv_item->getName()); +                depth++; +            } +            if (depth == 1) +            { +                // We need a version folder +                dest_folder = gInventory.createNewCategory(dest_folder, LLFolderType::FT_NONE, viewer_inv_item->getName()); +                depth++;              }  			LLViewerInventoryCategory* dest_cat = gInventory.getCategory(dest_folder); +            if (!viewer_inv_item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID(), gAgent.getGroupID()) && +                (dest_cat->getPreferredType() != LLFolderType::FT_MARKETPLACE_STOCK)) +            { +                // We need a stock folder +                dest_folder = gInventory.createNewCategory(dest_folder, LLFolderType::FT_MARKETPLACE_STOCK, viewer_inv_item->getName()); +                dest_cat = gInventory.getCategory(dest_folder); +                depth++; +            }              // Verify we can have this item in that destination category              if (!dest_cat->acceptItem(viewer_inv_item))              { -                llinfos << "Merov : Marketplace error : Cannot move item in that stock folder -> move aborted!" << llendl; +                llinfos << "Merov : Marketplace error : Cannot move item in that folder -> move aborted!" << llendl;                  return;              } -            // When moving a no copy item into a first level listing folder, we create a stock folder for it -            if (!viewer_inv_item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID(), gAgent.getGroupID()) && (dest_cat->getParentUUID() == marketplace_listings_uuid)) -            { -                dest_folder = create_folder_for_item(inv_item, dest_folder); -            } -	              // Get the parent folder of the moved item : we may have to update it              LLUUID src_folder = viewer_inv_item->getParentUUID(); @@ -950,12 +960,9 @@ void move_item_to_marketplacelistings(LLInventoryItem* inv_item, LLUUID dest_fol              else              {                  // Reparent the item -                gInventory.changeItemParent(viewer_inv_item, dest_folder, false); +                gInventory.changeItemParent(viewer_inv_item, dest_folder, true);              } -            // Validate the destination : note that this will run the validation code only on one listing folder at most... -            validate_marketplacelistings(dest_cat); -              // Update the modified folders              update_marketplace_category(src_folder);              update_marketplace_category(dest_folder); @@ -1188,14 +1195,23 @@ void validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_              if (!items_vector[i].empty())              {                  // Create a new folder -                std::string message = "    Warning : creating stock folder : " + viewer_cat->getName(); +                LLUUID parent_uuid = (depth > 2 ? viewer_cat->getParentUUID() : viewer_cat->getUUID()); +                LLFolderType::EType new_folder_type = (i == LLInventoryType::IT_COUNT ? LLFolderType::FT_NONE : LLFolderType::FT_MARKETPLACE_STOCK); +                std::string message = ""; +                if (new_folder_type == LLFolderType::FT_MARKETPLACE_STOCK) +                { +                    message = "    Warning : creating stock folder : "; +                } +                else +                { +                    message = "    Warning : creating intermediate folder : "; +                } +                message +=  viewer_cat->getName();                  llinfos << "Merov : Validation warning : " << message << llendl;                  if (cb)                  {                      cb(message);                  } -                LLUUID parent_uuid = (depth > 2 ? viewer_cat->getParentUUID() : viewer_cat->getUUID()); -                LLFolderType::EType new_folder_type = (i == LLInventoryType::IT_COUNT ? LLFolderType::FT_NONE : LLFolderType::FT_MARKETPLACE_STOCK);                  LLUUID folder_uuid = gInventory.createNewCategory(parent_uuid, new_folder_type, viewer_cat->getName());                  // Move each item to the new folder                  while (!items_vector[i].empty()) @@ -1207,7 +1223,7 @@ void validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_                      {                          cb(message);                      } -                    gInventory.changeItemParent(viewer_inv_item, folder_uuid, false); +                    gInventory.changeItemParent(viewer_inv_item, folder_uuid, true);                      items_vector[i].pop_back();                  }                  update_marketplace_category(folder_uuid);  | 
