summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2019-05-30 16:35:45 -0400
committerNat Goodspeed <nat@lindenlab.com>2020-03-25 16:01:31 -0400
commit378e4fae94c9c16b0b9070d7c7d3f63cba8aee94 (patch)
tree6985c0526397c17282a56dd31100bdfb6898f708
parent8bb8d7e5b7433ada8eef068016054d4eb2c645b8 (diff)
SL-11216: Introduce LLVersionInfo::getReleaseNotes() method.
The default string returned by getReleaseNotes() is empty. It must be set by posting the relevant release-notes URL string to a new LLEventMailDrop instance named "relnotes". Add unique_ptr<LLEventMailDrop> and unique_ptr<LLStoreListener<std::string>> to LLVersionInfo -- using unique_ptr to leave those classes opaque to header-file consumers. Introduce an out-of-line destructor to handle the unique_ptr<opaque> idiom. Initialize the LLEventMailDrop with the desired name; initialize the LLStoreListener with that LLEventMailDrop and the data member returned by getReleaseNotes().
-rw-r--r--indra/newview/llversioninfo.cpp24
-rw-r--r--indra/newview/llversioninfo.h21
2 files changed, 39 insertions, 6 deletions
diff --git a/indra/newview/llversioninfo.cpp b/indra/newview/llversioninfo.cpp
index f4b1f2566d..4720a989b0 100644
--- a/indra/newview/llversioninfo.cpp
+++ b/indra/newview/llversioninfo.cpp
@@ -26,8 +26,8 @@
*/
#include "llviewerprecompiledheaders.h"
-#include <iostream>
-#include <sstream>
+#include "llevents.h"
+#include "lleventfilter.h"
#include "llversioninfo.h"
#include "stringize.h"
#include <boost/regex.hpp>
@@ -45,14 +45,19 @@
//
LLVersionInfo::LLVersionInfo():
+ short_version(STRINGIZE(LL_VIEWER_VERSION_MAJOR << "."
+ << LL_VIEWER_VERSION_MINOR << "."
+ << LL_VIEWER_VERSION_PATCH)),
// LL_VIEWER_CHANNEL is a macro defined on the compiler command line. The
// macro expands to the string name of the channel, but without quotes. We
// need to turn it into a quoted string. LL_TO_STRING() does that.
mWorkingChannelName(LL_TO_STRING(LL_VIEWER_CHANNEL)),
build_configuration(LLBUILD_CONFIG), // set in indra/cmake/BuildVersion.cmake
- short_version(STRINGIZE(LL_VIEWER_VERSION_MAJOR << "."
- << LL_VIEWER_VERSION_MINOR << "."
- << LL_VIEWER_VERSION_PATCH))
+ // instantiate an LLEventMailDrop with canonical name to listen for news
+ // from SLVersionChecker
+ mPump{new LLEventMailDrop("relnotes")},
+ // immediately listen on mPump, store arriving URL into mReleaseNotes
+ mStore{new LLStoreListener<std::string>(*mPump, mReleaseNotes)}
{
}
@@ -67,6 +72,10 @@ void LLVersionInfo::initSingleton()
version = STRINGIZE(getShortVersion() << "." << getBuild());
}
+LLVersionInfo::~LLVersionInfo()
+{
+}
+
S32 LLVersionInfo::getMajor()
{
return LL_VIEWER_VERSION_MAJOR;
@@ -161,3 +170,8 @@ std::string LLVersionInfo::getBuildConfig()
{
return build_configuration;
}
+
+std::string LLVersionInfo::getReleaseNotes()
+{
+ return mReleaseNotes;
+}
diff --git a/indra/newview/llversioninfo.h b/indra/newview/llversioninfo.h
index 7857468697..02ff0c094a 100644
--- a/indra/newview/llversioninfo.h
+++ b/indra/newview/llversioninfo.h
@@ -28,9 +28,14 @@
#ifndef LL_LLVERSIONINFO_H
#define LL_LLVERSIONINFO_H
-#include <string>
#include "stdtypes.h"
#include "llsingleton.h"
+#include <string>
+#include <memory>
+
+class LLEventMailDrop;
+template <typename T>
+class LLStoreListener;
///
/// This API provides version information for the viewer. This
@@ -44,6 +49,8 @@ class LLVersionInfo: public LLSingleton<LLVersionInfo>
LLSINGLETON(LLVersionInfo);
void initSingleton();
public:
+ ~LLVersionInfo();
+
/// return the major version number as an integer
S32 getMajor();
@@ -87,6 +94,10 @@ public:
} ViewerMaturity;
ViewerMaturity getViewerMaturity();
+ /// get the release-notes URL, once it becomes available -- until then,
+ /// return empty string
+ std::string getReleaseNotes();
+
private:
std::string version;
std::string short_version;
@@ -98,6 +109,14 @@ private:
// This will get reset too.
std::string mVersionChannel;
std::string build_configuration;
+ std::string mReleaseNotes;
+ // Store unique_ptrs to the next couple things so we don't have to explain
+ // to every consumer of this header file all the details of each.
+ // mPump is the LLEventMailDrop on which we listen for SLVersionChecker to
+ // post the release-notes URL from the Viewer Version Manager.
+ std::unique_ptr<LLEventMailDrop> mPump;
+ // mStore is an adapter that stores the release-notes URL in mReleaseNotes.
+ std::unique_ptr<LLStoreListener<std::string>> mStore;
};
#endif