MAINT-6779 Allow to use last pic from Abuse report floater after relog
parent
9f3225d755
commit
617bc0eded
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
// {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue