MAINT-6779 Allow to use last pic from Abuse report floater after relog

master
Mnikolenko Productengine 2016-10-04 19:07:05 +03:00
parent 9f3225d755
commit 617bc0eded
4 changed files with 96 additions and 17 deletions

View File

@ -242,6 +242,17 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>PreviousScreenshotForReport</key>
<map>
<key>Comment</key>
<string>Use Previous Screenshot for Abuse report</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<!-- Settings below are for back compatibility only.
They are not used in current viewer anymore. But they can't be removed to avoid
influence on previous versions of the viewer in case of settings are not used or default value

View File

@ -37,6 +37,7 @@
#include "llcachename.h"
#include "llcheckboxctrl.h"
#include "llfontgl.h"
#include "llimagebmp.h"
#include "llimagej2c.h"
#include "llinventory.h"
#include "llnotificationsutil.h"
@ -76,6 +77,7 @@
#include "llselectmgr.h"
#include "llversioninfo.h"
#include "lluictrlfactory.h"
#include "llviewercontrol.h"
#include "llviewernetwork.h"
#include "llagentui.h"
@ -86,6 +88,7 @@
#include "llcorehttputil.h"
#include "llviewerassetupload.h"
const std::string SCREEN_PREV_FILENAME = "screen_report_last.bmp";
//=========================================================================
//-----------------------------------------------------------------------------
@ -181,11 +184,6 @@ BOOL LLFloaterReporter::postBuild()
}
setPosBox(pos);
// Take a screenshot, but don't draw this floater.
setVisible(FALSE);
takeScreenshot();
setVisible(TRUE);
// Default text to be blank
getChild<LLUICtrl>("object_name")->setValue(LLStringUtil::null);
getChild<LLUICtrl>("owner_name")->setValue(LLStringUtil::null);
@ -769,18 +767,24 @@ void LLFloaterReporter::sendReportViaCaps(std::string url, std::string sshot_url
}
}
void LLFloaterReporter::takeScreenshot()
void LLFloaterReporter::takeScreenshot(bool use_prev_screenshot)
{
const S32 IMAGE_WIDTH = 1024;
const S32 IMAGE_HEIGHT = 768;
LLPointer<LLImageRaw> raw = new LLImageRaw;
if( !gViewerWindow->rawSnapshot(raw, IMAGE_WIDTH, IMAGE_HEIGHT, TRUE, FALSE, TRUE, FALSE))
gSavedPerAccountSettings.setBOOL("PreviousScreenshotForReport", TRUE);
if(!use_prev_screenshot)
{
LL_WARNS() << "Unable to take screenshot" << LL_ENDL;
return;
std::string screenshot_filename(gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter() + SCREEN_PREV_FILENAME);
LLPointer<LLImageBMP> bmp_image = new LLImageBMP;
if(bmp_image->encode(mImageRaw, 0.0f))
{
bmp_image->save(screenshot_filename);
}
}
LLPointer<LLImageJ2C> upload_data = LLViewerTextureList::convertToUploadFile(raw);
else
{
mImageRaw = mPrevImageRaw;
}
LLPointer<LLImageJ2C> upload_data = LLViewerTextureList::convertToUploadFile(mImageRaw);
// create a resource data
mResourceDatap->mInventoryType = LLInventoryType::IT_NONE;
@ -812,7 +816,7 @@ void LLFloaterReporter::takeScreenshot()
// store in the image list so it doesn't try to fetch from the server
LLPointer<LLViewerFetchedTexture> image_in_list =
LLViewerTextureManager::getFetchedTexture(mResourceDatap->mAssetInfo.mUuid);
image_in_list->createGLTexture(0, raw, 0, TRUE, LLGLTexture::OTHER);
image_in_list->createGLTexture(0, mImageRaw, 0, TRUE, LLGLTexture::OTHER);
// the texture picker then uses that texture
LLTextureCtrl* texture = getChild<LLTextureCtrl>("screenshot");
@ -822,7 +826,46 @@ void LLFloaterReporter::takeScreenshot()
texture->setDefaultImageAssetID(mResourceDatap->mAssetInfo.mUuid);
texture->setCaption(getString("Screenshot"));
}
}
void LLFloaterReporter::onOpen(const LLSD& key)
{
mImageRaw = new LLImageRaw;
const S32 IMAGE_WIDTH = 1024;
const S32 IMAGE_HEIGHT = 768;
// Take a screenshot, but don't draw this floater.
setVisible(FALSE);
if( !gViewerWindow->rawSnapshot(mImageRaw, IMAGE_WIDTH, IMAGE_HEIGHT, TRUE, FALSE, TRUE, FALSE))
{
LL_WARNS() << "Unable to take screenshot" << LL_ENDL;
setVisible(TRUE);
return;
}
setVisible(TRUE);
if(gSavedPerAccountSettings.getBOOL("PreviousScreenshotForReport"))
{
std::string screenshot_filename(gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter() + SCREEN_PREV_FILENAME);
mPrevImageRaw = new LLImageRaw;
LLPointer<LLImageBMP> start_image_bmp = new LLImageBMP;
if(start_image_bmp->load(screenshot_filename))
{
if (start_image_bmp->decode(mPrevImageRaw, 0.0f))
{
LLNotificationsUtil::add("LoadPreviousReportScreenshot", LLSD(), LLSD(), boost::bind(&LLFloaterReporter::onLoadScreenshotDialog,this, _1, _2));
return;
}
}
}
takeScreenshot();
}
void LLFloaterReporter::onLoadScreenshotDialog(const LLSD& notification, const LLSD& response)
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
takeScreenshot(option == 0);
}
void LLFloaterReporter::uploadImage()
@ -886,6 +929,11 @@ void LLFloaterReporter::setPosBox(const LLVector3d &pos)
getChild<LLUICtrl>("pos_field")->setValue(pos_string);
}
void LLFloaterReporter::onClose(bool app_quitting)
{
gSavedPerAccountSettings.setBOOL("PreviousScreenshotForReport", app_quitting);
}
// void LLFloaterReporter::setDescription(const std::string& description, LLMeanCollisionData *mcd)
// {

View File

@ -81,6 +81,8 @@ public:
LLFloaterReporter(const LLSD& key);
/*virtual*/ ~LLFloaterReporter();
/*virtual*/ BOOL postBuild();
/*virtual*/ void onOpen(const LLSD& key);
/*virtual*/ void onClose(bool app_quitting);
virtual void draw();
void setReportType(EReportType type) { mReportType = type; }
@ -103,10 +105,12 @@ public:
void setPickedObjectProperties(const std::string& object_name, const std::string& owner_name, const LLUUID owner_id);
void onLoadScreenshotDialog(const LLSD& notification, const LLSD& response);
private:
static void show(const LLUUID& object_id, const std::string& avatar_name = LLStringUtil::null, const LLUUID& experience_id = LLUUID::null);
void takeScreenshot();
void takeScreenshot(bool use_prev_screenshot = false);
void sendReportViaCaps(std::string url);
void uploadImage();
bool validateReport();
@ -140,6 +144,9 @@ private:
std::string mDefaultSummary;
LLResourceData* mResourceDatap;
boost::signals2::connection mAvatarNameCacheConnection;
LLPointer<LLImageRaw> mImageRaw;
LLPointer<LLImageRaw> mPrevImageRaw;
};
#endif

View File

@ -1491,7 +1491,20 @@ Delete Notecard?
notext="Cancel"
yestext="OK"/>
</notification>
<notification
icon="alertmodal.tga"
name="LoadPreviousReportScreenshot"
type="alertmodal">
<unique/>
Do you want to use previous screenshot for your report?
<tag>confirm</tag>
<usetemplate
name="okcancelbuttons"
notext="Cancel"
yestext="OK"/>
</notification>
<notification
icon="alertmodal.tga"
name="GestureSaveFailedTooManySteps"