DD-306 : Suppress no issue listings from audit listing dump, add no error message when no error, disable some right click menu items in multiselection cases

meow-7.2.2
Merov Linden 2015-01-24 16:50:56 -08:00
parent 96172ddfe6
commit 6cf5912fd0
7 changed files with 119 additions and 38 deletions

View File

@ -733,8 +733,8 @@ void LLFloaterMarketplaceValidation::draw()
void LLFloaterMarketplaceValidation::onOpen(const LLSD& key)
{
// Clear the text panel
mEditor->setValue(LLSD());
// Clear the messages
clearMessages();
// Get the folder UUID to validate. Use the whole marketplace listing if none provided.
LLUUID cat_id(key.asUUID());
@ -747,8 +747,42 @@ void LLFloaterMarketplaceValidation::onOpen(const LLSD& key)
if (cat_id.notNull())
{
LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id);
validate_marketplacelistings(cat, boost::bind(&LLFloaterMarketplaceValidation::appendMessage, this, _1, _2), false);
validate_marketplacelistings(cat, boost::bind(&LLFloaterMarketplaceValidation::appendMessage, this, _1, _2, _3), false);
}
// Handle the listing folder being processed
handleCurrentListing();
// Dump result to the editor panel
if (mEditor)
{
mEditor->setValue(LLSD());
if (mMessages.empty())
{
// Display a no error message
mEditor->appendText(LLTrans::getString("Marketplace Validation No Error"), false);
}
else
{
// Print out all the messages to the panel
message_list_t::iterator mCurrentLine = mMessages.begin();
bool new_line = false;
while (mCurrentLine != mMessages.end())
{
// Errors are printed in bold, other messages in normal font
LLStyle::Params style;
LLFontDescriptor new_desc(mEditor->getFont()->getFontDesc());
new_desc.setStyle(mCurrentLine->mErrorLevel == LLError::LEVEL_ERROR ? LLFontGL::BOLD : LLFontGL::NORMAL);
LLFontGL* new_font = LLFontGL::getFont(new_desc);
style.font = new_font;
mEditor->appendText(mCurrentLine->mMessage, new_line, style);
new_line = true;
mCurrentLine++;
}
}
}
// We don't need the messages anymore
clearMessages();
}
// static
@ -756,21 +790,50 @@ void LLFloaterMarketplaceValidation::onOK( void* userdata )
{
// destroys this object
LLFloaterMarketplaceValidation* self = (LLFloaterMarketplaceValidation*) userdata;
self->clearMessages();
self->closeFloater();
}
void LLFloaterMarketplaceValidation::appendMessage(std::string& message, LLError::ELevel log_level)
void LLFloaterMarketplaceValidation::appendMessage(std::string& message, S32 depth, LLError::ELevel log_level)
{
if (mEditor)
// Dump previous listing messages if we're starting a new listing
if (depth == 1)
{
// Errors are printed in bold, other messages in normal font
LLStyle::Params style;
LLFontDescriptor new_desc(mEditor->getFont()->getFontDesc());
new_desc.setStyle(log_level == LLError::LEVEL_ERROR ? LLFontGL::BOLD : LLFontGL::NORMAL);
LLFontGL* new_font = LLFontGL::getFont(new_desc);
style.font = new_font;
mEditor->appendText(message, true, style);
handleCurrentListing();
}
// Store the message in the current listing message list
Message current_message;
current_message.mErrorLevel = log_level;
current_message.mMessage = message;
mCurrentListingMessages.push_back(current_message);
mCurrentListingErrorLevel = (mCurrentListingErrorLevel < log_level ? log_level : mCurrentListingErrorLevel);
}
// Move the current listing messages to the general list if needs be and reset the current listing data
void LLFloaterMarketplaceValidation::handleCurrentListing()
{
// Dump the current folder messages to the general message list if level warrants it
if (mCurrentListingErrorLevel > LLError::LEVEL_INFO)
{
message_list_t::iterator mCurrentLine = mCurrentListingMessages.begin();
while (mCurrentLine != mCurrentListingMessages.end())
{
mMessages.push_back(*mCurrentLine);
mCurrentLine++;
}
}
// Reset the current listing
mCurrentListingMessages.clear();
mCurrentListingErrorLevel = LLError::LEVEL_INFO;
}
void LLFloaterMarketplaceValidation::clearMessages()
{
mMessages.clear();
mCurrentListingMessages.clear();
mCurrentListingErrorLevel = LLError::LEVEL_INFO;
}
//-----------------------------------------------------------------------------

View File

@ -179,10 +179,24 @@ public:
virtual void draw();
virtual void onOpen(const LLSD& key);
void appendMessage(std::string& message, LLError::ELevel log_level);
void clearMessages();
void appendMessage(std::string& message, S32 depth, LLError::ELevel log_level);
static void onOK( void* userdata );
private:
struct Message {
LLError::ELevel mErrorLevel;
std::string mMessage;
};
typedef std::vector<Message> message_list_t;
void handleCurrentListing();
message_list_t mCurrentListingMessages;
LLError::ELevel mCurrentListingErrorLevel;
message_list_t mMessages;
LLTextEditor* mEditor;
};

View File

@ -898,11 +898,13 @@ void LLInvFVBridge::addMarketplaceContextMenuOptions(U32 flags,
items.push_back(std::string("Marketplace Check Listing"));
items.push_back(std::string("Marketplace List"));
items.push_back(std::string("Marketplace Unlist"));
if (LLMarketplaceData::instance().isUpdating(mUUID))
if (LLMarketplaceData::instance().isUpdating(mUUID) || ((flags & FIRST_SELECTED_ITEM) == 0))
{
// During SLM update, disable all marketplace related options
// Also disable all if multiple selected items
disabled_items.push_back(std::string("Marketplace Create Listing"));
disabled_items.push_back(std::string("Marketplace Associate Listing"));
disabled_items.push_back(std::string("Marketplace Check Listing"));
disabled_items.push_back(std::string("Marketplace List"));
disabled_items.push_back(std::string("Marketplace Unlist"));
}
@ -952,9 +954,10 @@ void LLInvFVBridge::addMarketplaceContextMenuOptions(U32 flags,
{
items.push_back(std::string("Marketplace Activate"));
items.push_back(std::string("Marketplace Deactivate"));
if (LLMarketplaceData::instance().isUpdating(mUUID))
if (LLMarketplaceData::instance().isUpdating(mUUID) || ((flags & FIRST_SELECTED_ITEM) == 0))
{
// During SLM update, disable all marketplace related options
// Also disable all if multiple selected items
disabled_items.push_back(std::string("Marketplace Activate"));
disabled_items.push_back(std::string("Marketplace Deactivate"));
}
@ -3051,7 +3054,7 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
LLUUID version_folder_id = LLMarketplaceData::instance().getVersionFolder(mUUID);
LLViewerInventoryCategory* cat = gInventory.getCategory(version_folder_id);
mMessage = "";
if (!validate_marketplacelistings(cat,boost::bind(&LLFolderBridge::gatherMessage, this, _1, _2)))
if (!validate_marketplacelistings(cat,boost::bind(&LLFolderBridge::gatherMessage, this, _1, _2, _3)))
{
LLSD subs;
subs["[ERROR_CODE]"] = mMessage;
@ -3151,14 +3154,14 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
}
}
void LLFolderBridge::gatherMessage(std::string& message, LLError::ELevel log_level)
void LLFolderBridge::gatherMessage(std::string& message, S32 depth, LLError::ELevel log_level)
{
if (log_level >= LLError::LEVEL_ERROR)
{
if (!mMessage.empty())
{
// Currently, we do not gather all messages as it creates very long alerts
// Users can get to the whole list of errors on a listing using the "Check for Errors" audit button
// Users can get to the whole list of errors on a listing using the "Check for Errors" audit button or "Check listing" right click menu
//mMessage += "\n";
return;
}

View File

@ -365,7 +365,7 @@ public:
protected:
void callback_pasteFromClipboard(const LLSD& notification, const LLSD& response);
void perform_pasteFromClipboard();
void gatherMessage(std::string& message, LLError::ELevel log_level);
void gatherMessage(std::string& message, S32 depth, LLError::ELevel log_level);
LLUIImagePtr getFolderIcon(BOOL is_open) const;
bool mCallingCards;

View File

@ -1513,7 +1513,7 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
if (cb)
{
message = indent + cat->getName() + LLTrans::getString("Marketplace Validation Error") + " " + message;
cb(message,LLError::LEVEL_ERROR);
cb(message,depth,LLError::LEVEL_ERROR);
}
}
}
@ -1526,7 +1526,7 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
if (cb)
{
std::string message = indent + cat->getName() + LLTrans::getString("Marketplace Validation Warning") + " " + LLTrans::getString("Marketplace Validation Warning Stock");
cb(message,LLError::LEVEL_WARN);
cb(message,depth,LLError::LEVEL_WARN);
}
// Nest the stock folder one level deeper in a normal folder and restart from there
LLUUID parent_uuid = cat->getParentUUID();
@ -1542,7 +1542,7 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
if (cb)
{
std::string message = indent + cat->getName() + LLTrans::getString("Marketplace Validation Error") + " " + LLTrans::getString("Marketplace Validation Warning Stock");
cb(message,LLError::LEVEL_ERROR);
cb(message,depth,LLError::LEVEL_ERROR);
}
}
}
@ -1576,7 +1576,7 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
if (cb && fix_hierarchy)
{
std::string message = indent + viewer_inv_item->getName() + LLTrans::getString("Marketplace Validation Error") + " " + error_msg;
cb(message,LLError::LEVEL_ERROR);
cb(message,depth,LLError::LEVEL_ERROR);
}
continue;
}
@ -1613,7 +1613,7 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
if (cb)
{
std::string message = indent + cat->getName() + LLTrans::getString("Marketplace Validation Error Empty Version");
cb(message,LLError::LEVEL_WARN);
cb(message,depth,LLError::LEVEL_WARN);
}
}
else if ((folder_type == LLFolderType::FT_MARKETPLACE_STOCK) && (depth > 2))
@ -1622,14 +1622,14 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
if (cb)
{
std::string message = indent + cat->getName() + LLTrans::getString("Marketplace Validation Error Empty Stock");
cb(message,LLError::LEVEL_WARN);
cb(message,depth,LLError::LEVEL_WARN);
}
}
else if (cb)
{
// We warn if there's nothing in a regular folder (may be it's an under construction listing)
std::string message = indent + cat->getName() + LLTrans::getString("Marketplace Validation Warning Empty");
cb(message,LLError::LEVEL_WARN);
cb(message,depth,LLError::LEVEL_WARN);
}
}
else
@ -1638,7 +1638,7 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
if (cb && result && (depth >= 1))
{
std::string message = indent + cat->getName() + LLTrans::getString("Marketplace Validation Log");
cb(message,LLError::LEVEL_INFO);
cb(message,depth,LLError::LEVEL_INFO);
}
}
}
@ -1649,7 +1649,7 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
if (cb && result && (depth >= 1))
{
std::string message = indent + cat->getName() + LLTrans::getString("Marketplace Validation Log");
cb(message,LLError::LEVEL_INFO);
cb(message,depth,LLError::LEVEL_INFO);
}
}
else
@ -1677,7 +1677,7 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
{
message = indent + folder_name + LLTrans::getString("Marketplace Validation Warning Create Version");
}
cb(message,LLError::LEVEL_WARN);
cb(message,depth,LLError::LEVEL_WARN);
}
LLUUID folder_uuid = gInventory.createNewCategory(parent_uuid, new_folder_type, folder_name);
// Move each item to the new folder
@ -1687,7 +1687,7 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
if (cb)
{
std::string message = indent + viewer_inv_item->getName() + LLTrans::getString("Marketplace Validation Warning Move");
cb(message,LLError::LEVEL_WARN);
cb(message,depth,LLError::LEVEL_WARN);
}
gInventory.changeItemParent(viewer_inv_item, folder_uuid, true);
items_vector[i].pop_back();
@ -1720,20 +1720,20 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
// Report if a stock folder contains a mix of items
result = false;
std::string message = indent + cat->getName() + LLTrans::getString("Marketplace Validation Error Mixed Stock");
cb(message,LLError::LEVEL_ERROR);
cb(message,depth,LLError::LEVEL_ERROR);
}
else if ((folder_type == LLFolderType::FT_MARKETPLACE_STOCK) && (cat_array->size() != 0))
{
// Report if a stock folder contains subfolders
result = false;
std::string message = indent + cat->getName() + LLTrans::getString("Marketplace Validation Error Subfolder In Stock");
cb(message,LLError::LEVEL_ERROR);
cb(message,depth,LLError::LEVEL_ERROR);
}
else
{
// Simply print the folder name
std::string message = indent + cat->getName() + LLTrans::getString("Marketplace Validation Log");
cb(message,LLError::LEVEL_INFO);
cb(message,depth,LLError::LEVEL_INFO);
}
}
// Scan each item and report if there's a problem
@ -1748,20 +1748,20 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
// Report items that shouldn't be there to start with
result = false;
std::string message = indent + " " + viewer_inv_item->getName() + LLTrans::getString("Marketplace Validation Error") + " " + error_msg;
cb(message,LLError::LEVEL_ERROR);
cb(message,depth,LLError::LEVEL_ERROR);
}
else if ((!viewer_inv_item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID(), gAgent.getGroupID())) && (folder_type != LLFolderType::FT_MARKETPLACE_STOCK))
{
// Report stock items that are misplaced
result = false;
std::string message = indent + " " + viewer_inv_item->getName() + LLTrans::getString("Marketplace Validation Error Stock Item");
cb(message,LLError::LEVEL_ERROR);
cb(message,depth,LLError::LEVEL_ERROR);
}
else if (depth == 1)
{
// Report items not wrapped in version folder
std::string message = indent + " " + viewer_inv_item->getName() + LLTrans::getString("Marketplace Validation Warning Unwrapped Item");
cb(message,LLError::LEVEL_WARN);
cb(message,depth,LLError::LEVEL_WARN);
}
}
}
@ -1773,7 +1773,7 @@ bool validate_marketplacelistings(LLInventoryCategory* cat, validation_callback_
if (cb)
{
std::string message = indent + viewer_cat->getName() + LLTrans::getString("Marketplace Validation Warning Delete");
cb(message,LLError::LEVEL_WARN);
cb(message,depth,LLError::LEVEL_WARN);
}
gInventory.removeCategory(cat->getUUID());
gInventory.notifyObservers();

View File

@ -74,7 +74,7 @@ void copy_item_to_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, const LL
void move_item_within_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, S32 operation_id);
void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_folder, const LLUUID& top_level_folder, S32 operation_id);
typedef boost::function<void(std::string& validation_message, LLError::ELevel log_level)> validation_callback_t;
typedef boost::function<void(std::string& validation_message, S32 depth, LLError::ELevel log_level)> validation_callback_t;
bool can_move_item_to_marketplace(const LLInventoryCategory* root_folder, LLInventoryCategory* dest_folder, LLInventoryItem* inv_item, std::string& tooltip_msg, S32 bundle_size = 1, bool from_paste = false);
bool can_move_folder_to_marketplace(const LLInventoryCategory* root_folder, LLInventoryCategory* dest_folder, LLInventoryCategory* inv_cat, std::string& tooltip_msg, S32 bundle_size = 1, bool check_items = true, bool from_paste = false);

View File

@ -2313,6 +2313,7 @@ This feature is currently in Beta. Please add your name to this [http://goo.gl/f
<string name="Marketplace Validation Warning">: Warning: </string>
<string name="Marketplace Validation Error Empty Version">: Warning: version folder must contain at least 1 item</string>
<string name="Marketplace Validation Error Empty Stock">: Warning: stock folder must contain at least 1 item</string>
<string name="Marketplace Validation No Error">No error or warning to report</string>
<string name="Marketplace Error None">No errors</string>
<string name="Marketplace Error Prefix">Error: </string>
<string name="Marketplace Error Not Merchant">Before sending items to the Marketplace you will need to set yourself up as a merchant (free of charge).</string>