Age | Commit message (Collapse) | Author | |
---|---|---|---|
2020-03-25 | SL-11216: To display release notes, listen on "relnotes" LLEventPump. | Nat Goodspeed | |
Now, when the viewer decides it's appropriate to display release notes on the login screen, wait for SLVersionChecker to post the release-notes URL before opening the web floater. | |||
2020-03-25 | SL-11216: Convert LLVersionInfo to an LLSingleton. | Nat Goodspeed | |
This changeset is meant to exemplify how to convert a "namespace" class whose methods are static -- and whose data are module-static -- to an LLSingleton. LLVersionInfo has no initClass() or cleanupClass() methods, but the general idea is the same. * Derive the class from LLSingleton<T>: class LLSomeSingleton: public LLSingleton<LLSomeSingleton> { ... }; * Add LLSINGLETON(LLSomeSingleton); in the private section of the class. This usage implies a separate LLSomeSingleton::LLSomeSingleton() definition, as described in indra/llcommon/llsingleton.h. * Move module-scope data in the .cpp file to non-static class members. Change any sVariableName to mVariableName to avoid being outright misleading. * Make static class methods non-static. Remove '//static' comments from method definitions as needed. * For LLVersionInfo specifically, the 'const std::string&' return type was replaced with 'std::string'. Returning a reference to a static or a member, const or otherwise, is an anti-pattern: the interface constrains the implementation, prohibiting possibly later returning a temporary (an expression). * For LLVersionInfo specifically, 'const S32' return type was replaced with simple 'S32'. 'const' is just noise in that usage. * Simple member initialization (e.g. the original initializer expressions for static variables) can be done with member{ value } initializers (no examples here though). * Delete initClass() method. * LLSingleton's forté is of course lazy initialization. It might work to simply delete any calls to initClass(). But if there are side effects that must happen at that moment, replace LLSomeSingleton::initClass() with (void)LLSomeSingleton::instance(); * Most initClass() initialization can be done in the constructor, as would normally be the case. * Initialization that might cause a circular LLSingleton reference should be moved to initSingleton(). Override 'void initSingleton();' should be private. * For LLVersionInfo specifically, certain initialization that used to be lazily performed was made unconditional, due to its low cost. * For LLVersionInfo specifically, certain initialization involved calling methods that have become non-static. This was moved to initSingleton() because, in a constructor body, 'this' does not yet point to the enclosing class. * Delete cleanupClass() method. * There is already a generic LLSingletonBase::deleteAll() call in LLAppViewer::cleanup(). It might work to let this new LLSingleton be cleaned up with all the rest. But if there are side effects that must happen at that moment, replace LLSomeSingleton::cleanupClass() with LLSomeSingleton::deleteSingleton(). That said, much of the benefit of converting to LLSingleton is deleteAll()'s guarantee that cross-LLSingleton dependencies will be properly honored: we're trying to migrate the code base away from the present fragile manual cleanup sequence. * Most cleanupClass() cleanup can be done in the destructor, as would normally be the case. * Cleanup that might throw an exception should be moved to cleanupSingleton(). Override 'void cleanupSingleton();' should be private. * Within LLSomeSingleton methods, remove any existing LLSomeSingleton::methodName() qualification: simple methodName() is better. * In the rest of the code base, convert most LLSomeSingleton::methodName() references to LLSomeSingleton::instance().methodName(). (Prefer instance() to getInstance() because a reference does not admit the possibility of NULL.) * Of course, LLSomeSingleton::ENUM_VALUE can remain unchanged. In general, for many successive references to an LLSingleton instance, it can be useful to capture the instance() as in: auto& versionInfo{LLVersionInfo::instance()}; // ... versionInfo.getVersion() ... We did not do that here only to simplify the code review. The STRINGIZE(expression) macro encapsulates: std::ostringstream out; out << expression; return out.str(); We used that in a couple places. For LLVersionInfo specifically, lllogininstance_test.cpp used to dummy out a couple specific static methods. It's harder to dummy out LLSingleton::instance() references, so we add the real class to that test. | |||
2020-02-21 | SL-10498 - made benefits debug output a bit less verbose | Brad Payne (Vir Linden) | |
2020-01-28 | Merge branch 'master' of https://bitbucket.org/lindenlab/viewer-private into ↵ | Brad Payne (Vir Linden) | |
DRTVWR-481 Merge | |||
2020-01-07 | SL-12486 Better data deletion | andreykproductengine | |
2019-12-16 | merge | Brad Payne (Vir Linden) | |
2019-12-16 | merge | Brad Payne (Vir Linden) | |
2019-12-09 | SL-12415 FIXED Link "MoTD" is not clickable on the loading screen while ↵ | maxim_productengine | |
logining to Viewer | |||
2019-11-26 | SL-12100, SL-12317 - benefits handling fixes | Brad Payne (Vir Linden) | |
2019-11-20 | SL-10499 - handle package info from benefits service | Brad Payne (Vir Linden) | |
2019-11-19 | SL-10499 - Fixes for benefits info and upload, especially bulk upload | Brad Payne (Vir Linden) | |
2019-11-15 | SL-10499 - benefits. Removed no-longer-needed lleconomy files and classes. ↵ | Brad Payne (Vir Linden) | |
Group-related costs and limits via benefits. | |||
2019-11-14 | SL-10499, SL-10497 - use LLAgentBenefits info | Brad Payne (Vir Linden) | |
2019-11-12 | SL-10498 - benefits info received at login, persisted in new LLAgentBenefits ↵ | Brad Payne (Vir Linden) | |
singleton. | |||
2019-11-12 | Downstream merge from 494-maint-wassail | AndreyL ProductEngine | |
2019-11-12 | Merged in lindenlab/viewer-release | AndreyL ProductEngine | |
2019-10-21 | SL-10908 Cleanup, Removed obsolete logging | andreykproductengine | |
2019-10-15 | Merge from viewer-release | andreykproductengine | |
2019-10-14 | SL-11719 Fixed init of conversation log | andreykproductengine | |
2019-10-10 | SL-12093 FIXED [ordered shutdown] conversation.log erased at log in when all ↵ | maxim_productengine | |
logs are set to be saved | |||
2019-09-05 | SL-11315 Viewer asks to play media and retains selected choice | andreykproductengine | |
2019-09-04 | SL-11866 [D493] Some startup elements can be executed twice, added protections | andreykproductengine | |
2019-08-13 | DRTVWR-493 Reworked a number of inits | andreykproductengine | |
2019-08-12 | SL-11719 Initialize the conversation dialog on login screen appearance to ↵ | AndreyL ProductEngine | |
avoid crash | |||
2019-08-09 | SL-9699 Login selection | andreykproductengine | |
2019-08-06 | SL-9815 An error prompts the user to teleport when they have no credencials set | andreykproductengine | |
2019-07-25 | DRTVWR-493 LLImage to LLParamSingleton | andreykproductengine | |
2019-07-04 | DRTVWR-493 Cleaned up unneded inits. | andreykproductengine | |
2019-07-03 | DRTVWR-493 LLAvatarNameCache to singletone | andreykproductengine | |
2019-06-21 | DRTVWR-493 LLViewerParcelMedia to singleton | andreykproductengine | |
2019-06-21 | DRTVWR-493 LLViewerMedia to singleton | andreykproductengine | |
2019-06-13 | SL-11402 Fallback for home image | andreykproductengine | |
2019-06-12 | SL-11402 Last session image should be saved as png | andreykproductengine | |
2019-06-12 | SL-11402 Save last session image per grid | andreykproductengine | |
2019-05-29 | SL-11309 Crash on attempt to costruct singletone | andreykproductengine | |
2019-05-27 | SL-10908 Output class names we are clearing on startup | andreykproductengine | |
2019-03-01 | Merged in lindenlab/viewer-release | AndreyL ProductEngine | |
2019-02-08 | Clean up UI scaling | Ansariel | |
2018-11-14 | Automated merge with ssh://bitbucket.org/lindenlab/viewer-release | Nat Goodspeed | |
2018-09-27 | merge | Brad Payne (Vir Linden) | |
2018-09-26 | Automated merge with ssh://bitbucket.org/lindenlab/viewer-release | Nat Goodspeed | |
2018-09-13 | DRTVWR-474: Clean up use of LLDir::getAppRODataDir(), esp. on Mac. | Nat Goodspeed | |
Clearly it's not obvious to maintainers that on the Mac, getAppRODataDir() returns the app's Resources directory: in a number of places the code starts with the executable directory and appends "../Resources" to find that. | |||
2018-07-11 | MAINT-8849 Fixed Viewer displays 'Conneting to region...' screen forever | andreykproductengine | |
2018-06-21 | merge | Brad Payne (Vir Linden) | |
2018-05-18 | merge | Brad Payne (Vir Linden) | |
2018-04-13 | merge, mac build fix | Brad Payne (Vir Linden) | |
2018-04-12 | Merged in lindenlab/viewer-release | AndreyL ProductEngine | |
2018-03-23 | MAINT-8417 Don't run display or startup if window is not initialized | andreykproductengine | |
2018-03-16 | MAINT-8372 Fixed doubled error messages | andreykproductengine | |
2018-03-02 | merge | Brad Payne (Vir Linden) | |