summaryrefslogtreecommitdiff
path: root/indra/llvfs
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llvfs')
-rw-r--r--indra/llvfs/lldir.cpp19
-rw-r--r--indra/llvfs/lldir.h22
-rw-r--r--indra/llvfs/tests/lldir_test.cpp14
3 files changed, 29 insertions, 26 deletions
diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp
index a7d12476a4..2d0adf14e6 100644
--- a/indra/llvfs/lldir.cpp
+++ b/indra/llvfs/lldir.cpp
@@ -46,7 +46,6 @@
#include <boost/range/begin.hpp>
#include <boost/range/end.hpp>
#include <algorithm>
-#include <iomanip>
#if LL_WINDOWS
#include "lldir_win32.h"
@@ -544,10 +543,10 @@ std::string LLDir::getExtension(const std::string& filepath) const
std::string LLDir::findSkinnedFilenameBaseLang(const std::string &subdir,
const std::string &filename,
- bool merge) const
+ ESkinConstraint constraint) const
{
// This implementation is basically just as described in the declaration comments.
- std::vector<std::string> found(findSkinnedFilenames(subdir, filename, merge));
+ std::vector<std::string> found(findSkinnedFilenames(subdir, filename, constraint));
if (found.empty())
{
return "";
@@ -557,10 +556,10 @@ std::string LLDir::findSkinnedFilenameBaseLang(const std::string &subdir,
std::string LLDir::findSkinnedFilename(const std::string &subdir,
const std::string &filename,
- bool merge) const
+ ESkinConstraint constraint) const
{
// This implementation is basically just as described in the declaration comments.
- std::vector<std::string> found(findSkinnedFilenames(subdir, filename, merge));
+ std::vector<std::string> found(findSkinnedFilenames(subdir, filename, constraint));
if (found.empty())
{
return "";
@@ -570,7 +569,7 @@ std::string LLDir::findSkinnedFilename(const std::string &subdir,
std::vector<std::string> LLDir::findSkinnedFilenames(const std::string& subdir,
const std::string& filename,
- bool merge) const
+ ESkinConstraint constraint) const
{
// Recognize subdirs that have no localization.
static const char* sUnlocalizedData[] =
@@ -582,7 +581,9 @@ std::vector<std::string> LLDir::findSkinnedFilenames(const std::string& subdir,
boost::end(sUnlocalizedData));
LL_DEBUGS("LLDir") << "subdir '" << subdir << "', filename '" << filename
- << "', merge " << std::boolalpha << merge << LL_ENDL;
+ << "', constraint "
+ << ((constraint == CURRENT_SKIN)? "CURRENT_SKIN" : "ALL_SKINS")
+ << LL_ENDL;
// Cache the default language directory for each subdir we've encountered.
// A cache entry whose value is the empty string means "not localized,
@@ -672,8 +673,8 @@ std::vector<std::string> LLDir::findSkinnedFilenames(const std::string& subdir,
// Here the desired filename exists in the first subsubdir. That means
// this is a skindir we want to record in results. But if the caller
- // passed merge=false, we must discard all previous skindirs.
- if (! merge)
+ // passed constraint=CURRENT_SKIN, we must discard all previous skindirs.
+ if (constraint == CURRENT_SKIN)
{
results.clear();
}
diff --git a/indra/llvfs/lldir.h b/indra/llvfs/lldir.h
index a242802979..ffa2676838 100644
--- a/indra/llvfs/lldir.h
+++ b/indra/llvfs/lldir.h
@@ -119,6 +119,8 @@ class LLDir
// these methods search the various skin paths for the specified file in the following order:
// getUserSkinDir(), getUserDefaultSkinDir(), getSkinDir(), getDefaultSkinDir()
+ /// param value for findSkinnedFilenames(), explained below
+ enum ESkinConstraint { CURRENT_SKIN, ALL_SKINS };
/**
* Given a filename within skin, return an ordered sequence of paths to
* search. Nonexistent files will be filtered out -- which means that the
@@ -130,25 +132,25 @@ class LLDir
* level of skin subdirectory).
* @param filename Desired filename within subdir within skin, e.g.
* "panel_login.xml". DO NOT prepend (e.g.) "xui" or the desired language.
- * @param merge Callers perform two different kinds of processing. When
- * fetching a XUI file, for instance, the existence of @a filename in the
- * specified skin completely supercedes any @a filename in the default
- * skin. For that case, leave the default @a merge=false. The returned
- * vector will contain only
+ * @param constraint Callers perform two different kinds of processing.
+ * When fetching a XUI file, for instance, the existence of @a filename in
+ * the specified skin completely supercedes any @a filename in the default
+ * skin. For that case, leave the default @a constraint=CURRENT_SKIN. The
+ * returned vector will contain only
* ".../<i>current_skin</i>/xui/en/<i>filename</i>",
* ".../<i>current_skin</i>/xui/<i>current_language</i>/<i>filename</i>".
* But for (e.g.) "strings.xml", we want a given skin to be able to
* override only specific entries from the default skin. Any string not
* defined in the specified skin will be sought in the default skin. For
- * that case, pass @a merge=true. The returned vector will contain at
- * least ".../default/xui/en/strings.xml",
+ * that case, pass @a constraint=ALL_SKINS. The returned vector will
+ * contain at least ".../default/xui/en/strings.xml",
* ".../default/xui/<i>current_language</i>/strings.xml",
* ".../<i>current_skin</i>/xui/en/strings.xml",
* ".../<i>current_skin</i>/xui/<i>current_language</i>/strings.xml".
*/
std::vector<std::string> findSkinnedFilenames(const std::string& subdir,
const std::string& filename,
- bool merge=false) const;
+ ESkinConstraint constraint=CURRENT_SKIN) const;
/// Values for findSkinnedFilenames(subdir) parameter
static const char *XUI, *TEXTURES, *SKINBASE;
/**
@@ -160,7 +162,7 @@ class LLDir
*/
std::string findSkinnedFilenameBaseLang(const std::string &subdir,
const std::string &filename,
- bool merge=false) const;
+ ESkinConstraint constraint=CURRENT_SKIN) const;
/**
* Return the "most localized" pathname from findSkinnedFilenames(), or
* the empty string if no such file exists. Parameters are identical to
@@ -170,7 +172,7 @@ class LLDir
*/
std::string findSkinnedFilename(const std::string &subdir,
const std::string &filename,
- bool merge=false) const;
+ ESkinConstraint constraint=CURRENT_SKIN) const;
// random filename in common temporary directory
std::string getTempFilename() const;
diff --git a/indra/llvfs/tests/lldir_test.cpp b/indra/llvfs/tests/lldir_test.cpp
index a00fc8684c..15a5b6d4f3 100644
--- a/indra/llvfs/tests/lldir_test.cpp
+++ b/indra/llvfs/tests/lldir_test.cpp
@@ -584,7 +584,7 @@ namespace tut
ensure_equals(lldir.getLanguage(), "en");
// top-level directory of a skin isn't localized
- ensure_equals(lldir.findSkinnedFilenames(LLDir::SKINBASE, "colors.xml", true),
+ ensure_equals(lldir.findSkinnedFilenames(LLDir::SKINBASE, "colors.xml", LLDir::ALL_SKINS),
vec(list_of("install/skins/default/colors.xml")
("user/skins/default/colors.xml")));
// We should not have needed to check for skins/default/en. We should
@@ -599,13 +599,13 @@ namespace tut
StringVec expected(vec(list_of("install/skins/default/xui/en/strings.xml")
("user/skins/default/xui/en/strings.xml")));
- ensure_equals(lldir.findSkinnedFilenames(LLDir::XUI, "strings.xml", true),
+ ensure_equals(lldir.findSkinnedFilenames(LLDir::XUI, "strings.xml", LLDir::ALL_SKINS),
expected);
// The first time, we had to probe to find out whether xui was localized.
lldir.ensure_checked("install/skins/default/xui/en");
lldir.clear_checked();
// Now make the same call again -- should return same result --
- ensure_equals(lldir.findSkinnedFilenames(LLDir::XUI, "strings.xml", true),
+ ensure_equals(lldir.findSkinnedFilenames(LLDir::XUI, "strings.xml", LLDir::ALL_SKINS),
expected);
// but this time it should remember that xui is localized.
lldir.ensure_not_checked("install/skins/default/xui/en");
@@ -648,7 +648,7 @@ namespace tut
ensure_equals(lldir.getLanguage(), "fr");
// pass merge=true to request this filename in all relevant skins
- ensure_equals(lldir.findSkinnedFilenames(LLDir::XUI, "strings.xml", true),
+ ensure_equals(lldir.findSkinnedFilenames(LLDir::XUI, "strings.xml", LLDir::ALL_SKINS),
vec(list_of
("install/skins/default/xui/en/strings.xml")
("install/skins/default/xui/fr/strings.xml")
@@ -691,7 +691,7 @@ namespace tut
/*------------------------- "steam", "en" --------------------------*/
lldir.setSkinFolder("steam", "en");
- ensure_equals(lldir.findSkinnedFilenames(LLDir::SKINBASE, "colors.xml", true),
+ ensure_equals(lldir.findSkinnedFilenames(LLDir::SKINBASE, "colors.xml", LLDir::ALL_SKINS),
vec(list_of
("install/skins/default/colors.xml")
("install/skins/steam/colors.xml")
@@ -715,7 +715,7 @@ namespace tut
vec(list_of("user/skins/steam/xui/en/strings.xml")));
// pass merge=true to request this filename in all relevant skins
- ensure_equals(lldir.findSkinnedFilenames(LLDir::XUI, "strings.xml", true),
+ ensure_equals(lldir.findSkinnedFilenames(LLDir::XUI, "strings.xml", LLDir::ALL_SKINS),
vec(list_of
("install/skins/default/xui/en/strings.xml")
("install/skins/steam/xui/en/strings.xml")
@@ -732,7 +732,7 @@ namespace tut
("user/skins/steam/xui/fr/strings.xml")));
// pass merge=true to request this filename in all relevant skins
- ensure_equals(lldir.findSkinnedFilenames(LLDir::XUI, "strings.xml", true),
+ ensure_equals(lldir.findSkinnedFilenames(LLDir::XUI, "strings.xml", LLDir::ALL_SKINS),
vec(list_of
("install/skins/default/xui/en/strings.xml")
("install/skins/default/xui/fr/strings.xml")