From a4431fe12f84d1c2a90d82603d670a0a4bb756e3 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Fri, 14 Jan 2022 15:36:00 +0200 Subject: [PATCH 1/9] SL-16638 don't allow downloading files from the built-in browser --- indra/newview/llfloater360capture.cpp | 1 + indra/newview/llmediactrl.cpp | 23 ++++++++++++-- indra/newview/llmediactrl.h | 5 +++- indra/newview/llviewermedia.cpp | 43 ++------------------------- indra/newview/llviewermenufile.cpp | 20 +++++++++++++ indra/newview/llviewermenufile.h | 14 +++++++++ 6 files changed, 62 insertions(+), 44 deletions(-) diff --git a/indra/newview/llfloater360capture.cpp b/indra/newview/llfloater360capture.cpp index 745f154535..ffbb0bbee9 100644 --- a/indra/newview/llfloater360capture.cpp +++ b/indra/newview/llfloater360capture.cpp @@ -102,6 +102,7 @@ BOOL LLFloater360Capture::postBuild() mWebBrowser = getChild("360capture_contents"); mWebBrowser->addObserver(this); + mWebBrowser->setAllowFileDownload(true); // There is a group of radio buttons that define the quality // by each having a 'value' that is returns equal to the pixel diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index 0affe8efb4..5393d0b0b7 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -46,6 +46,7 @@ #include "lluictrlfactory.h" // LLDefaultChildRegistry #include "llkeyboard.h" #include "llviewermenu.h" +#include "llviewermenufile.h" // LLFilePickerThread // linden library includes #include "llfocusmgr.h" @@ -105,7 +106,8 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) : mTrusted(p.trusted_content), mWindowShade(NULL), mHoverTextChanged(false), - mContextMenu(NULL) + mContextMenu(NULL), + mAllowFileDownload(false) { { LLColor4 color = p.caret_color().get(); @@ -1129,8 +1131,23 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) case MEDIA_EVENT_FILE_DOWNLOAD: { - //llinfos << "Media event - file download requested - filename is " << self->getFileDownloadFilename() << llendl; - //LLNotificationsUtil::add("MediaFileDownloadUnsupported"); + if (mAllowFileDownload) + { + // pick a file from SAVE FILE dialog + // for now the only thing that should be allowed to save is 360s + std::string suggested_filename = self->getFileDownloadFilename(); + LLFilePicker::ESaveFilter filter = LLFilePicker::FFSAVE_ALL; + if (suggested_filename.find(".jpg") != std::string::npos || suggested_filename.find(".jpeg") != std::string::npos) + filter = LLFilePicker::FFSAVE_JPEG; + if (suggested_filename.find(".png") != std::string::npos) + filter = LLFilePicker::FFSAVE_PNG; + + (new LLMediaFilePicker(self, filter, suggested_filename))->getFile(); + } + else + { + LLNotificationsUtil::add("MediaFileDownloadUnsupported"); + } }; break; diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h index bd24c47a4f..bc4cbaae68 100644 --- a/indra/newview/llmediactrl.h +++ b/indra/newview/llmediactrl.h @@ -151,6 +151,8 @@ public: void setTrustedContent(bool trusted); + void setAllowFileDownload(bool allow) { mAllowFileDownload = allow; } + // over-rides virtual BOOL handleKeyHere( KEY key, MASK mask); virtual BOOL handleKeyUpHere(KEY key, MASK mask); @@ -205,7 +207,8 @@ public: mClearCache, mHoverTextChanged, mDecoupleTextureSize, - mUpdateScrolls; + mUpdateScrolls, + mAllowFileDownload; std::string mHomePageUrl, mHomePageMimeType, diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 55a8489f25..07190d0538 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -78,41 +78,12 @@ #include // for SkinFolder listener #include -class LLMediaFilePicker : public LLFilePickerThread // deletes itself when done -{ -public: - LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ELoadFilter filter, bool get_multiple) - : LLFilePickerThread(filter, get_multiple), - mPlugin(plugin->getSharedPrt()) - { - } - - LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ESaveFilter filter, const std::string &proposed_name) - : LLFilePickerThread(filter, proposed_name), - mPlugin(plugin->getSharedPrt()) - { - } - - virtual void notify(const std::vector& filenames) - { - mPlugin->sendPickFileResponse(mResponses); - mPlugin = NULL; - } - -private: - boost::shared_ptr mPlugin; -}; void init_threaded_picker_load_dialog(LLPluginClassMedia* plugin, LLFilePicker::ELoadFilter filter, bool get_multiple) { (new LLMediaFilePicker(plugin, filter, get_multiple))->getFile(); // will delete itself } -void init_threaded_picker_save_dialog(LLPluginClassMedia* plugin, LLFilePicker::ESaveFilter filter, std::string &proposed_name) -{ - (new LLMediaFilePicker(plugin, filter, proposed_name))->getFile(); // will delete itself -} - /////////////////////////////////////////////////////////////////////////////// // Move this to its own file. @@ -3227,18 +3198,10 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla case LLViewerMediaObserver::MEDIA_EVENT_FILE_DOWNLOAD: { LL_DEBUGS("Media") << "Media event - file download requested - filename is " << plugin->getFileDownloadFilename() << LL_ENDL; - // pick a file from SAVE FILE dialog - // need a better algorithm that this or else, pass in type of save type - // from event that initiated it - this is okay for now - only thing - // that saves is 360s - std::string suggested_filename = plugin->getFileDownloadFilename(); - LLFilePicker::ESaveFilter filter = LLFilePicker::FFSAVE_ALL; - if (suggested_filename.find(".jpg") != std::string::npos || suggested_filename.find(".jpeg") != std::string::npos) - filter = LLFilePicker::FFSAVE_JPEG; - if (suggested_filename.find(".png") != std::string::npos) - filter = LLFilePicker::FFSAVE_PNG; - init_threaded_picker_save_dialog(plugin, filter, suggested_filename); + //unblock media plugin + const std::vector empty_response; + plugin->sendPickFileResponse(empty_response); } break; diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 27f66b7a55..28ff69eaf5 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -46,6 +46,7 @@ #include "llimagejpeg.h" #include "llimagetga.h" #include "llinventorymodel.h" // gInventory +#include "llpluginclassmedia.h" #include "llresourcedata.h" #include "lltoast.h" #include "llfloaterperms.h" @@ -251,6 +252,25 @@ void LLFilePickerReplyThread::notify(const std::vector& filenames) } } + +LLMediaFilePicker::LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ELoadFilter filter, bool get_multiple) + : LLFilePickerThread(filter, get_multiple), + mPlugin(plugin->getSharedPrt()) +{ +} + +LLMediaFilePicker::LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ESaveFilter filter, const std::string &proposed_name) + : LLFilePickerThread(filter, proposed_name), + mPlugin(plugin->getSharedPrt()) +{ +} + +void LLMediaFilePicker::notify(const std::vector& filenames) +{ + mPlugin->sendPickFileResponse(mResponses); + mPlugin = NULL; +} + //============================================================================ #if LL_WINDOWS diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h index 4e6250d9b4..beeac418d9 100644 --- a/indra/newview/llviewermenufile.h +++ b/indra/newview/llviewermenufile.h @@ -37,6 +37,7 @@ #include "llviewerassetupload.h" class LLTransactionID; +class LLPluginClassMedia; void init_menu_file(); @@ -71,6 +72,7 @@ void assign_defaults_and_show_upload_message( const std::string& display_name, std::string& description); +//consider moving all file pickers below to more suitable place class LLFilePickerThread : public LLThread { //multi-threaded file picker (runs system specific file picker in background and calls "notify" from main thread) public: @@ -127,5 +129,17 @@ private: file_picked_signal_t* mFailureSignal; }; +class LLMediaFilePicker : public LLFilePickerThread +{ +public: + LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ELoadFilter filter, bool get_multiple); + LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ESaveFilter filter, const std::string &proposed_name); + + virtual void notify(const std::vector& filenames); + +private: + boost::shared_ptr mPlugin; +}; + #endif From df59c061cf039fa372abea63ece87e4eb3150725 Mon Sep 17 00:00:00 2001 From: Andrey Lihatskiy Date: Fri, 14 Jan 2022 15:30:57 +0200 Subject: [PATCH 2/9] SL-11841 Correct setting --- indra/newview/app_settings/settings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 73fa8e0b61..6c36fa6f09 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -8341,7 +8341,7 @@ PushToTalkToggle Comment - Should the push-to-talk button behave as a toggle + Should the push-to-talk toolbar button behave as a toggle Persist 1 Type From 5fcb811aa2b455cebf18830cf0cdef14025dacdb Mon Sep 17 00:00:00 2001 From: Andrey Lihatskiy Date: Tue, 18 Jan 2022 22:01:05 +0200 Subject: [PATCH 3/9] SL-16630 Notarization script update --- .../installers/darwin/apple-notarize.sh | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/indra/newview/installers/darwin/apple-notarize.sh b/indra/newview/installers/darwin/apple-notarize.sh index e019437924..d90772ec0e 100755 --- a/indra/newview/installers/darwin/apple-notarize.sh +++ b/indra/newview/installers/darwin/apple-notarize.sh @@ -5,12 +5,12 @@ if [[ $SKIP_NOTARIZATION == "true" ]]; then fi CONFIG_FILE="$build_secrets_checkout/code-signing-osx/notarize_creds.sh" -if [ -f "$CONFIG_FILE" ]; then - source $CONFIG_FILE +if [[ -f "$CONFIG_FILE" ]]; then + source "$CONFIG_FILE" app_file="$1" zip_file=${app_file/app/zip} ditto -c -k --keepParent "$app_file" "$zip_file" - if [ -f "$zip_file" ]; then + if [[ -f "$zip_file" ]]; then res=$(xcrun altool --notarize-app --primary-bundle-id "com.secondlife.viewer" \ --username $USERNAME \ --password $PASSWORD \ @@ -19,37 +19,39 @@ if [ -f "$CONFIG_FILE" ]; then echo $res requestUUID=$(echo $res | awk '/RequestUUID/ { print $NF; }') - echo "Apple Notarization RequestUUID: $requestUUID" - if [[ -n $requestUUID ]]; then - status="in progress" - while [[ "$status" == "in progress" ]]; do + in_progress=1 + while [[ $in_progress -eq 1 ]]; do sleep 30 - status=$(xcrun altool --notarization-info "$requestUUID" \ + res=$(xcrun altool --notarization-info "$requestUUID" \ --username $USERNAME \ - --password $PASSWORD 2>&1 \ - | awk -F ': ' '/Status:/ { print $2; }' ) - echo "$status" + --password $PASSWORD 2>&1) + if [[ $res != *"in progress"* ]]; then + in_progress=0 + fi + echo "." done # log results - xcrun altool --notarization-info "$requestUUID" \ - --username $USERNAME \ - --password $PASSWORD + echo $res #remove temporary file rm "$zip_file" - if [["$status" == "success"]]; then + if [[ $res == *"success"* ]]; then xcrun stapler staple "$app_file" - elif [["$status" == "invalid"]]; then + exit 0 + elif [[ $res == *"invalid"* ]]; then echo "Notarization error: failed to process the app file" exit 1 + else + echo "Notarization error: unknown response status" fi else echo "Notarization error: couldn't get request UUID" - echo $res exit 1 fi + else + echo "Notarization error: ditto failed" + exit 1 fi fi - From 884501a41903d782934328ba2fbad8ce87f6c003 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 19 Jan 2022 23:51:37 +0200 Subject: [PATCH 4/9] SL-16672 Fix object's inventory not sorting content --- indra/newview/llpanelobjectinventory.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index ecadc9443b..0d987df6ca 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -1589,6 +1589,7 @@ void LLPanelObjectInventory::createViewsForCategory(LLInventoryObject::object_li child_categories[i]->second ); delete child_categories[i]; } + folder->setChildrenInited(true); } void LLPanelObjectInventory::refresh() From 0bef5e553e5234b9373507341e3b001f4f4e54e7 Mon Sep 17 00:00:00 2001 From: Andrey Lihatskiy Date: Fri, 21 Jan 2022 19:13:28 +0200 Subject: [PATCH 5/9] Revert "SL-14717 Ability to trigger left clicks (and more) on animesh objects" This reverts commit 8215fff0c2a1c895ef916837847cf7526ae61ef9. # Conflicts: # indra/newview/lltoolpie.cpp --- doc/contributions.txt | 2 -- indra/newview/llagentcamera.cpp | 8 -------- indra/newview/lltoolface.cpp | 2 +- indra/newview/lltoolfocus.cpp | 2 +- indra/newview/lltoolpie.cpp | 27 ++------------------------- indra/newview/pipeline.cpp | 1 - 6 files changed, 4 insertions(+), 38 deletions(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index 3a0fce5f7b..669a0cd671 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -1269,8 +1269,6 @@ Robin Cornelius VWR-12763 VWR-12995 VWR-20911 -Rohacan Hirons - SL-14717 Rosco Teardrop Rose Evans Rudee Voom diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index e10244aad6..ed6c3c307f 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -2501,16 +2501,8 @@ void LLAgentCamera::setFocusGlobal(const LLPickInfo& pick) { // focus on object plus designated offset // which may or may not be same as pick.mPosGlobal - // except for rigged items to prevent wrong focus position - if (objectp->isRiggedMesh()) - { - setFocusGlobal(pick.mPosGlobal, pick.mObjectID); - } - else - { setFocusGlobal(objectp->getPositionGlobal() + LLVector3d(pick.mObjectOffset), pick.mObjectID); } - } else { // focus directly on point where user clicked diff --git a/indra/newview/lltoolface.cpp b/indra/newview/lltoolface.cpp index 71986d21f9..a00ac10698 100644 --- a/indra/newview/lltoolface.cpp +++ b/indra/newview/lltoolface.cpp @@ -73,7 +73,7 @@ BOOL LLToolFace::handleDoubleClick(S32 x, S32 y, MASK mask) BOOL LLToolFace::handleMouseDown(S32 x, S32 y, MASK mask) { - gViewerWindow->pickAsync(x, y, mask, pickCallback, false, gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick")); + gViewerWindow->pickAsync(x, y, mask, pickCallback); return TRUE; } diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp index d8cb70dd3c..07f46c5fbe 100644 --- a/indra/newview/lltoolfocus.cpp +++ b/indra/newview/lltoolfocus.cpp @@ -135,7 +135,7 @@ BOOL LLToolCamera::handleMouseDown(S32 x, S32 y, MASK mask) gViewerWindow->hideCursor(); - gViewerWindow->pickAsync(x, y, mask, pickCallback, /*BOOL pick_transparent*/ FALSE, /*BOOL pick_rigged*/ gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick"), /*BOOL pick_unselectable*/ TRUE); + gViewerWindow->pickAsync(x, y, mask, pickCallback, /*BOOL pick_transparent*/ FALSE, /*BOOL pick_rigged*/ FALSE, /*BOOL pick_unselectable*/ TRUE); return TRUE; } diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 1e960ed536..b4736841d6 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -78,10 +78,6 @@ static void handle_click_action_play(); static void handle_click_action_open_media(LLPointer objectp); static ECursorType cursor_from_parcel_media(U8 click_action); -BOOL rigged_hovering_keep_hand = false; -U64 last_rigged_hovering_check_clock_count = 0; -U64 last_rigged_pick_clock_count = 0; - LLToolPie::LLToolPie() : LLTool(std::string("Pie")), mMouseButtonDown( false ), @@ -116,7 +112,7 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask) mMouseDownX = x; mMouseDownY = y; LLTimer pick_timer; - BOOL pick_rigged = gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick"); + BOOL pick_rigged = false; //gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick"); LLPickInfo transparent_pick = gViewerWindow->pickImmediate(x, y, TRUE /*includes transparent*/, pick_rigged); LLPickInfo visible_pick = gViewerWindow->pickImmediate(x, y, FALSE, pick_rigged); LLViewerObject *transp_object = transparent_pick.getObject(); @@ -730,21 +726,7 @@ void LLToolPie::selectionPropertiesReceived() BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) { - // prevent rigged item hovering causing FPS to drop by faking we're still hovering it for 0.25 seconds - U64 current_clock_count = LLTimer::getCurrentClockCount(); - if (current_clock_count - last_rigged_pick_clock_count < 2500000) { - if(rigged_hovering_keep_hand) gViewerWindow->setCursor(UI_CURSOR_HAND); - return TRUE; - } - rigged_hovering_keep_hand = 0; - - static LLCachedControl pick_rigged_setting(gSavedSettings, "AnimatedObjectsAllowLeftClick"); - BOOL pick_rigged = pick_rigged_setting; - if (pick_rigged) { - pick_rigged = (current_clock_count - last_rigged_hovering_check_clock_count > 1000000); // only 10 per seconds - if (pick_rigged) last_rigged_hovering_check_clock_count = current_clock_count; - } - + BOOL pick_rigged = false; //gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick"); mHoverPick = gViewerWindow->pickImmediate(x, y, FALSE, pick_rigged); LLViewerObject *parent = NULL; LLViewerObject *object = mHoverPick.getObject(); @@ -752,10 +734,6 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) if (object) { parent = object->getRootEdit(); - // Update gLastRiggedPickClockCount if we're hovering a rigged item - if (object->isRiggedMesh()) { - last_rigged_pick_clock_count = current_clock_count; - } } // Show screen-space highlight glow effect @@ -821,7 +799,6 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) { show_highlight = true; gViewerWindow->setCursor(UI_CURSOR_HAND); - rigged_hovering_keep_hand = true; LL_DEBUGS("UserInput") << "hover handled by LLToolPie (inactive)" << LL_ENDL; } else diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 2cafd93b83..d797b64731 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -7176,7 +7176,6 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector4a& start, if (!sPickAvatar) { - pick_rigged = false; //save hit info in case we need to restore //due to attachment override LLVector4a local_normal; From 1049089dd1c2ad1cc7c610b7c49c5ec438e96c9f Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Fri, 28 Jan 2022 17:51:29 +0000 Subject: [PATCH 6/9] SL-16715 - viewerstats, added more detail about failure cases in inventory --- indra/newview/llinventorymodel.cpp | 11 ++++++++++- indra/newview/llinventorymodel.h | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index bf07793e8b..b4fc832596 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -138,7 +138,10 @@ bool LLCanCache::operator()(LLInventoryCategory* cat, LLInventoryItem* item) LLInventoryValidationInfo::LLInventoryValidationInfo(): mFatalErrorCount(0), mWarningCount(0), - mInitialized(false) + mInitialized(false), + mFatalNoRootFolder(false), + mFatalNoLibraryRootFolder(false), + mFatalQADebugMode(false) { } @@ -160,6 +163,9 @@ void LLInventoryValidationInfo::asLLSD(LLSD& sd) const sd["warning_count"] = mWarningCount; sd["initialized"] = mInitialized; sd["missing_system_folders_count"] = LLSD::Integer(mMissingRequiredSystemFolders.size()); + sd["fatal_no_root_folder"] = mFatalNoRootFolder; + sd["fatal_no_library_root_folder"] = mFatalNoLibraryRootFolder; + sd["fatal_qa_debug_mode"] = mFatalQADebugMode; if (mMissingRequiredSystemFolders.size()>0) { sd["missing_system_folders"] = LLSD::emptyArray(); @@ -3850,11 +3856,13 @@ LLPointer LLInventoryModel::validate() const if (getRootFolderID().isNull()) { LL_WARNS("Inventory") << "Fatal inventory corruption: no root folder id" << LL_ENDL; + validation_info->mFatalNoRootFolder = true; fatalities++; } if (getLibraryRootFolderID().isNull()) { LL_WARNS("Inventory") << "Fatal inventory corruption: no library root folder id" << LL_ENDL; + validation_info->mFatalNoLibraryRootFolder = true; fatalities++; } @@ -4196,6 +4204,7 @@ LLPointer LLInventoryModel::validate() const // Force all counts to be either 0 or 2, thus flagged as an error. count_under_root = 2*distrib(e); count_elsewhere = 2*distrib(e); + validation_info->mFatalQADebugMode = true; } if (is_singleton) { diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index 403b86e318..e81652820f 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -69,6 +69,9 @@ public: S32 mFatalErrorCount; S32 mWarningCount; bool mInitialized; + bool mFatalNoRootFolder; + bool mFatalNoLibraryRootFolder; + bool mFatalQADebugMode; std::set mMissingRequiredSystemFolders; std::set mDuplicateRequiredSystemFolders; }; From fff0dd3f1db4112ee79f5bd25711198d8db7eb72 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Mon, 31 Jan 2022 12:37:17 +0200 Subject: [PATCH 7/9] SL-16729 FIXED Keyframes preview does not work in automatic mode --- indra/newview/llfloatereditextdaycycle.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp index eb0cd28190..24673d5a7c 100644 --- a/indra/newview/llfloatereditextdaycycle.cpp +++ b/indra/newview/llfloatereditextdaycycle.cpp @@ -1596,7 +1596,8 @@ void LLFloaterEditExtDayCycle::onIdlePlay(void* user_data) F32 new_frame = fmod(self->mPlayStartFrame + prcnt_played, 1.f); self->mTimeSlider->setCurSliderValue(new_frame); // will do the rounding - + self->mSkyBlender->setPosition(new_frame); + self->mWaterBlender->setPosition(new_frame); self->synchronizeTabs(); self->updateTimeAndLabel(); self->updateButtons(); From 94daedaaedd3eceb8cf41a2238ee10fe6280f37c Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 28 Jan 2022 20:04:59 +0200 Subject: [PATCH 8/9] SL-16681 Better handling of locked files by NSIS Installer 1. When SL window closes it doesn't mean that process died so gave it a bit more time to terminate 2. Added a retry logic in case first run happened too early for some reason 3. Replaced ok/cancel on locked file with abort/retry/ignorei --- .../installers/windows/installer_template.nsi | 32 ++++++++++++++---- indra/newview/installers/windows/lang_da.nsi | Bin 12128 -> 11992 bytes indra/newview/installers/windows/lang_de.nsi | 2 +- .../newview/installers/windows/lang_en-us.nsi | Bin 11802 -> 11666 bytes indra/newview/installers/windows/lang_es.nsi | Bin 13112 -> 12976 bytes indra/newview/installers/windows/lang_fr.nsi | Bin 13628 -> 13492 bytes indra/newview/installers/windows/lang_it.nsi | Bin 12850 -> 12714 bytes indra/newview/installers/windows/lang_ja.nsi | Bin 10016 -> 9880 bytes indra/newview/installers/windows/lang_pl.nsi | Bin 12448 -> 12312 bytes .../newview/installers/windows/lang_pt-br.nsi | Bin 13272 -> 13136 bytes indra/newview/installers/windows/lang_ru.nsi | Bin 12586 -> 12450 bytes indra/newview/installers/windows/lang_tr.nsi | Bin 12496 -> 12360 bytes indra/newview/installers/windows/lang_zh.nsi | Bin 9460 -> 9324 bytes 13 files changed, 27 insertions(+), 7 deletions(-) diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 668a8025bd..7513908cb4 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -561,10 +561,17 @@ Function CloseSecondLife LOOP: FindWindow $0 "Second Life" "" - IntCmp $0 0 DONE + IntCmp $0 0 SLEEP Sleep 500 Goto LOOP - + + SLEEP: + # Second life window just closed, but program might not be fully done yet + # and OS might have not released some locks, wait a bit more to make sure + # all file handles were released. + # If something still isn't unlocked, it will trigger a notification from + # RemoveProgFilesOnInst + Sleep 1000 DONE: Pop $0 Return @@ -611,6 +618,12 @@ Function RemoveProgFilesOnInst # RMDir /r $INSTDIR is especially unsafe if user installed somewhere # like Program Files +# Set retry counter. All integers are strings. +Push $0 +StrCpy $0 0 + +PREINSTALLREMOVE: + # Remove old SecondLife.exe to invalidate any old shortcuts to it that may be in non-standard locations. See MAINT-3575 Delete "$INSTDIR\$INSTEXE" Delete "$INSTDIR\$VIEWER_EXE" @@ -627,19 +640,26 @@ RMDir /r "$INSTDIR\vmp_icons" # find modules from different versions RMDir /r "$INSTDIR\llplugin" -IfErrors 0 PREINSTALLCLEAN - StrCmp $SKIP_DIALOGS "true" PREINSTALLCLEAN - MessageBox MB_OKCANCEL $(CloseSecondLifeInstRM) IDOK PREINSTALLCLEAN IDCANCEL PREINSTALLFAIL +IntOp $0 $0 + 1 + +IfErrors 0 PREINSTALLDONE + IntCmp $0 1 PREINSTALLREMOVE #try again once + StrCmp $SKIP_DIALOGS "true" PREINSTALLDONE + MessageBox MB_ABORTRETRYIGNORE $(CloseSecondLifeInstRM) IDABORT PREINSTALLFAIL IDRETRY PREINSTALLREMOVE + # MB_ABORTRETRYIGNORE does not accept IDIGNORE + Goto PREINSTALLDONE PREINSTALLFAIL: Quit -PREINSTALLCLEAN: +PREINSTALLDONE: # We are no longer including release notes with the viewer, so remove them. Delete "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk" Delete "$INSTDIR\releasenotes.txt" +Pop $0 + FunctionEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/indra/newview/installers/windows/lang_da.nsi b/indra/newview/installers/windows/lang_da.nsi index 0b5ae2b714d97104c4bffaadbe63425d947b32c7..648ddbfb8502e1bee254d26c8c01ce8e40d1026c 100644 GIT binary patch delta 16 YcmaD5cO!Pg0_Dj%3Qn7|RK9Tm07V%GNdN!< delta 106 zcmcZ+`yg(^0%chhh8TuC1_&9M}e4J6Z*y delta 110 zcmdmxx+85vkeaCqLkvS61B47_NM*<{9 delta 136 zcmdmzxhHD_hla8WLkvS61B47_NM*s!Ixx delta 124 zcmcbRb|Za*oO-qjLkvS61B47_NM*2>>Lxq@U;-Hx diff --git a/indra/newview/installers/windows/lang_ru.nsi b/indra/newview/installers/windows/lang_ru.nsi index 8ca1fc3d14b0a00198dc3ce8fc473e2a3b28d56b..65a9f4846d42a2331b25181fe99750e6e7e7682c 100755 GIT binary patch delta 16 XcmZ3Lv?y_df$C%}MW@ZbR1LTRJ17Q1 delta 124 zcmZ3KxGHIbfoir2LkvS61B47_NM*$1F$Wk% diff --git a/indra/newview/installers/windows/lang_tr.nsi b/indra/newview/installers/windows/lang_tr.nsi index db6f417fc2dc5c3dfa5f7a14827aabcaa905dc8a..e71886cc6609f89a090c31a2c5d9c6cb714dc907 100755 GIT binary patch delta 16 YcmcbRcp_m#iOS>&3Qn8tR3~u*07G8}+5i9m delta 124 zcmX?+a3OI+iAuH#LkvS61B47_NM*Dh36O delta 154 zcmaFk@x^mPmsq_DLkvS61B47_NM* Date: Wed, 2 Feb 2022 02:55:32 +0200 Subject: [PATCH 9/9] SL-14769 Allow to log-in, even if there's an inventory error --- indra/newview/llstartup.cpp | 11 ++--------- indra/newview/skins/default/xui/en/notifications.xml | 5 +---- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index d9ebd73da4..79ef0c075e 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -309,13 +309,6 @@ void update_texture_fetch() gTextureList.updateImages(0.10f); } -bool finish_force_quit(const LLSD& notification, const LLSD& response) -{ - LLAppViewer::instance()->forceQuit(); - return false; -} - - void set_flags_and_update_appearance() { LLAppearanceMgr::instance().setAttachmentInvLinkEnable(true); @@ -1835,10 +1828,10 @@ bool idle_startup() // a usable state and gInventory.isInventoryUsable() will be // true. - // if inventory is unusable, we need to bail out. + // if inventory is unusable, show warning. if (!gInventory.isInventoryUsable()) { - LLNotificationsUtil::add("InventoryUnusable", LLSD(), LLSD(), &finish_force_quit ); + LLNotificationsUtil::add("InventoryUnusable"); } gInventory.createCommonSystemCategories(); diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 4063626d8c..2007abefd7 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -2964,11 +2964,8 @@ Darn. You have been logged out of [SECOND_LIFE]. icon="alertmodal.tga" name="InventoryUnusable" type="alertmodal"> -There is a problem with your inventory. First, try logging out and logging in again. If you see this message again, contact Support and ask them to correct the problem. +There was a problem loading your inventory. First, try logging out and logging in again. If you see this message again, contact Support to correct the problem. fail -