diff --git a/indra/newview/fsfloaterim.cpp b/indra/newview/fsfloaterim.cpp
index d66c9b5961..fc176e3dc0 100644
--- a/indra/newview/fsfloaterim.cpp
+++ b/indra/newview/fsfloaterim.cpp
@@ -471,13 +471,42 @@ void FSFloaterIM::sendMsgFromInputEditor(EChatType type)
if (FSData::getInstance()->isTestingGroup(mSessionID))
{
if(chat_prefix_testing)
- utf8_text.insert(insert_pos, ("(" + str_address_size_tag + str_operating_system_tag + " " + LLVersionInfo::getInstance()->getBuildVersion() + skin_indicator + str_viewer_mode + str_rlv_enabled + str_opensim_tag + ") "));
+ {
+ auto viewer_maturity = LLVersionInfo::getInstance()->getFSViewerMaturity();
+ if( viewer_maturity == LLVersionInfo::FSViewerMaturity::RELEASE_VIEWER )
+ {
+ utf8_text.insert(insert_pos, "(Release) ");
+ }
+ else if( viewer_maturity == LLVersionInfo::FSViewerMaturity::UNOFFICIAL_VIEWER )
+ {
+ utf8_text.insert(insert_pos, "(Unofficial) ");
+ }
+ else // In testing groups we'll allow all non-release recognised channels.
+ {
+ utf8_text.insert(insert_pos, ("(" + str_address_size_tag + str_operating_system_tag + " " + LLVersionInfo::getInstance()->getBuildVersion() + skin_indicator + str_viewer_mode + str_rlv_enabled + str_opensim_tag + ") "));
+ }
+ }
+
}
//For release support groups, only display the short version(Major.Minor.Patch) since chat can speed by. This makes it easier on Support's eyes.
else if(FSData::getInstance()->isSupportGroup(mSessionID))
{
if(chat_prefix_support)
- utf8_text.insert(insert_pos, ("(" + str_address_size_tag + str_operating_system_tag + " " + LLVersionInfo::getInstance()->getShortVersion() + skin_indicator + str_viewer_mode + str_rlv_enabled + str_opensim_tag + ") "));
+ {
+ auto viewer_maturity = LLVersionInfo::getInstance()->getFSViewerMaturity();
+ if( viewer_maturity == LLVersionInfo::FSViewerMaturity::UNOFFICIAL_VIEWER )
+ {
+ utf8_text.insert(insert_pos, "(Unofficial) ");
+ }
+ else if( viewer_maturity != LLVersionInfo::FSViewerMaturity::RELEASE_VIEWER )
+ {
+ utf8_text.insert(insert_pos, "(pre-Release) ");
+ }
+ else
+ {
+ utf8_text.insert(insert_pos, ("(" + str_address_size_tag + str_operating_system_tag + " " + LLVersionInfo::getInstance()->getShortVersion() + skin_indicator + str_viewer_mode + str_rlv_enabled + str_opensim_tag + ") "));
+ }
+ }
}
}
diff --git a/indra/newview/llversioninfo.cpp b/indra/newview/llversioninfo.cpp
index 36228ad91b..577dc55f5a 100644
--- a/indra/newview/llversioninfo.cpp
+++ b/indra/newview/llversioninfo.cpp
@@ -211,7 +211,47 @@ LLVersionInfo::ViewerMaturity LLVersionInfo::getViewerMaturity()
}
return maturity;
}
+// Add FS specific maturity grading
+LLVersionInfo::FSViewerMaturity LLVersionInfo::getFSViewerMaturity()
+{
+ FSViewerMaturity maturity;
+ std::string channel = getChannel();
+
+
+ static const boost::regex is_manual_channel("\\bManualx64\\b");
+ static const boost::regex is_beta_channel("\\bBetax64\\b");
+ static const boost::regex is_alpha_channel("\\bAlphax64\\b");
+ static const boost::regex is_release_channel("\\bReleasex64\\b");
+ static const boost::regex is_nightly_channel("\\bNightlyx64\\b");
+
+ if (ll_regex_search(channel, is_release_channel))
+ {
+ maturity = FSViewerMaturity::RELEASE_VIEWER;
+ }
+ else if (ll_regex_search(channel, is_beta_channel))
+ {
+ maturity = FSViewerMaturity::BETA_VIEWER;
+ }
+ else if (ll_regex_search(channel, is_alpha_channel))
+ {
+ maturity = FSViewerMaturity::ALPHA_VIEWER;
+ }
+ else if (ll_regex_search(channel, is_manual_channel))
+ {
+ maturity = FSViewerMaturity::MANUAL_VIEWER;
+ }
+ else if (ll_regex_search(channel, is_nightly_channel))
+ {
+ maturity = FSViewerMaturity::NIGHTLY_VIEWER;
+ }
+ else
+ {
+ maturity = FSViewerMaturity::UNOFFICIAL_VIEWER;
+ }
+ return maturity;
+}
+//
std::string LLVersionInfo::getReleaseNotes()
{
return mReleaseNotes;
diff --git a/indra/newview/llversioninfo.h b/indra/newview/llversioninfo.h
index 3830e45f48..99bf255f74 100644
--- a/indra/newview/llversioninfo.h
+++ b/indra/newview/llversioninfo.h
@@ -109,6 +109,20 @@ public:
} ViewerMaturity;
ViewerMaturity getViewerMaturity();
+// Add an FS specific viewer maturity enum
+ using FSViewerMaturity =
+ enum class FSViewerMaturityEnum
+ {
+ UNOFFICIAL_VIEWER=0,
+ ALPHA_VIEWER,
+ MANUAL_VIEWER,
+ BETA_VIEWER,
+ NIGHTLY_VIEWER,
+ RELEASE_VIEWER,
+ };
+ FSViewerMaturity getFSViewerMaturity();
+//
+
/// get the release-notes URL, once it becomes available -- until then,
/// return empty string
std::string getReleaseNotes();