summaryrefslogtreecommitdiff
path: root/indra/newview/llfloatersearch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llfloatersearch.cpp')
-rw-r--r--indra/newview/llfloatersearch.cpp428
1 files changed, 211 insertions, 217 deletions
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index 84cff0cd9a..3b16b725bf 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -1,217 +1,211 @@
-/**
- * @file llfloatersearch.cpp
- * @author Martin Reddy
- * @brief Search floater - uses an embedded web browser control
- *
- * $LicenseInfo:firstyear=2009&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llcommandhandler.h"
-#include "llfloaterreg.h"
-#include "llfloatersearch.h"
-#include "llhttpconstants.h"
-#include "llmediactrl.h"
-#include "llnotificationsutil.h"
-#include "lllogininstance.h"
-#include "lluri.h"
-#include "llagent.h"
-#include "llui.h"
-#include "llviewercontrol.h"
-#include "llweb.h"
-
-// support secondlife:///app/search/{CATEGORY}/{QUERY} SLapps
-class LLSearchHandler : public LLCommandHandler
-{
-public:
- // requires trusted browser to trigger
- LLSearchHandler() : LLCommandHandler("search", UNTRUSTED_CLICK_ONLY) { }
- bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
- {
- if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableSearch"))
- {
- LLNotificationsUtil::add("NoSearch", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
- return true;
- }
-
- const size_t parts = tokens.size();
-
- // get the (optional) category for the search
- std::string collection;
- if (parts > 0)
- {
- collection = tokens[0].asString();
- }
-
- // get the (optional) search string
- std::string search_text;
- if (parts > 1)
- {
- search_text = tokens[1].asString();
- }
-
- // create the LLSD arguments for the search floater
- LLFloaterSearch::Params p;
- p.search.collection = collection;
- p.search.query = LLURI::unescape(search_text);
-
- // open the search floater and perform the requested search
- LLFloaterReg::showInstance("search", p);
- return true;
- }
-};
-LLSearchHandler gSearchHandler;
-
-LLFloaterSearch::SearchQuery::SearchQuery()
-: category("category", ""),
- collection("collection", ""),
- query("query")
-{}
-
-LLFloaterSearch::LLFloaterSearch(const Params& key) :
- LLFloaterWebContent(key),
- mSearchGodLevel(0)
-{
- // declare a map that transforms a category name into
- // the URL suffix that is used to search that category
-
- mSearchType.insert("standard");
- mSearchType.insert("land");
- mSearchType.insert("classified");
-
- mCollectionType.insert("events");
- mCollectionType.insert("destinations");
- mCollectionType.insert("places");
- mCollectionType.insert("groups");
- mCollectionType.insert("people");
-}
-
-bool LLFloaterSearch::postBuild()
-{
- LLFloaterWebContent::postBuild();
- mWebBrowser->addObserver(this);
-
- return true;
-}
-
-void LLFloaterSearch::onOpen(const LLSD& key)
-{
- Params p(key);
- p.trusted_content = true;
- p.allow_address_entry = false;
-
- LLFloaterWebContent::onOpen(p);
- mWebBrowser->setFocus(true);
- search(p.search);
-}
-
-void LLFloaterSearch::onClose(bool app_quitting)
-{
- LLFloaterWebContent::onClose(app_quitting);
- // tear down the web view so we don't show the previous search
- // result when the floater is opened next time
- destroy();
-}
-
-void LLFloaterSearch::godLevelChanged(U8 godlevel)
-{
- // search results can change based upon god level - if the user
- // changes god level, then give them a warning (we don't refresh
- // the search as this might undo any page navigation or
- // AJAX-driven changes since the last search).
-
- //FIXME: set status bar text
-
- //getChildView("refresh_search")->setVisible( (godlevel != mSearchGodLevel));
-}
-
-void LLFloaterSearch::search(const SearchQuery &p)
-{
- if (! mWebBrowser || !p.validateBlock())
- {
- return;
- }
-
- // reset the god level warning as we're sending the latest state
- getChildView("refresh_search")->setVisible(false);
- mSearchGodLevel = gAgent.getGodLevel();
-
- // work out the subdir to use based on the requested category
- LLSD subs;
- if (mSearchType.find(p.category) != mSearchType.end())
- {
- subs["TYPE"] = p.category;
- }
- else
- {
- subs["TYPE"] = "standard";
- }
-
- // add the search query string
- subs["QUERY"] = LLURI::escape(p.query);
-
- subs["COLLECTION"] = "";
- if (subs["TYPE"] == "standard")
- {
- if (mCollectionType.find(p.collection) != mCollectionType.end())
- {
- subs["COLLECTION"] = "&collection_chosen=" + std::string(p.collection);
- }
- else
- {
- std::string collection_args("");
- for (std::set<std::string>::iterator it = mCollectionType.begin(); it != mCollectionType.end(); ++it)
- {
- collection_args += "&collection_chosen=" + std::string(*it);
- }
- subs["COLLECTION"] = collection_args;
- }
- }
-
- // add the user's preferred maturity (can be changed via prefs)
- std::string maturity;
- if (gAgent.prefersAdult())
- {
- maturity = "gma"; // PG,Mature,Adult
- }
- else if (gAgent.prefersMature())
- {
- maturity = "gm"; // PG,Mature
- }
- else
- {
- maturity = "g"; // PG
- }
- subs["MATURITY"] = maturity;
-
- // add the user's god status
- subs["GODLIKE"] = gAgent.isGodlike() ? "1" : "0";
-
- // get the search URL and expand all of the substitutions
- // (also adds things like [LANGUAGE], [VERSION], [OS], etc.)
- std::string url = gSavedSettings.getString("SearchURL");
- url = LLWeb::expandURLSubstitutions(url, subs);
-
- // and load the URL in the web view
- mWebBrowser->navigateTo(url, HTTP_CONTENT_TEXT_HTML);
-}
+/**
+ * @file llfloatersearch.cpp
+ * @author Martin Reddy
+ * @brief Search floater - uses an embedded web browser control
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llcommandhandler.h"
+#include "llfloaterreg.h"
+#include "llfloatersearch.h"
+#include "llhttpconstants.h"
+#include "llmediactrl.h"
+#include "llnotificationsutil.h"
+#include "lllogininstance.h"
+#include "lluri.h"
+#include "llagent.h"
+#include "llui.h"
+#include "llviewercontrol.h"
+#include "llweb.h"
+
+// support secondlife:///app/search/{CATEGORY}/{QUERY} SLapps
+class LLSearchHandler : public LLCommandHandler
+{
+public:
+ // requires trusted browser to trigger
+ LLSearchHandler() : LLCommandHandler("search", UNTRUSTED_CLICK_ONLY) { }
+ bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
+ {
+ const size_t parts = tokens.size();
+
+ // get the (optional) category for the search
+ std::string collection;
+ if (parts > 0)
+ {
+ collection = tokens[0].asString();
+ }
+
+ // get the (optional) search string
+ std::string search_text;
+ if (parts > 1)
+ {
+ search_text = tokens[1].asString();
+ }
+
+ // create the LLSD arguments for the search floater
+ LLFloaterSearch::Params p;
+ p.search.collection = collection;
+ p.search.query = LLURI::unescape(search_text);
+
+ // open the search floater and perform the requested search
+ LLFloaterReg::showInstance("search", p);
+ return true;
+ }
+};
+LLSearchHandler gSearchHandler;
+
+LLFloaterSearch::SearchQuery::SearchQuery()
+: category("category", ""),
+ collection("collection", ""),
+ query("query")
+{}
+
+LLFloaterSearch::LLFloaterSearch(const Params& key) :
+ LLFloaterWebContent(key),
+ mSearchGodLevel(0)
+{
+ // declare a map that transforms a category name into
+ // the URL suffix that is used to search that category
+
+ mSearchType.insert("standard");
+ mSearchType.insert("land");
+ mSearchType.insert("classified");
+
+ mCollectionType.insert("events");
+ mCollectionType.insert("destinations");
+ mCollectionType.insert("places");
+ mCollectionType.insert("groups");
+ mCollectionType.insert("people");
+}
+
+bool LLFloaterSearch::postBuild()
+{
+ LLFloaterWebContent::postBuild();
+ mWebBrowser->addObserver(this);
+
+ return true;
+}
+
+void LLFloaterSearch::onOpen(const LLSD& key)
+{
+ Params p(key);
+ p.trusted_content = true;
+ p.allow_address_entry = false;
+
+ LLFloaterWebContent::onOpen(p);
+ mWebBrowser->setFocus(true);
+ search(p.search);
+}
+
+void LLFloaterSearch::onClose(bool app_quitting)
+{
+ LLFloaterWebContent::onClose(app_quitting);
+ // tear down the web view so we don't show the previous search
+ // result when the floater is opened next time
+ destroy();
+}
+
+void LLFloaterSearch::godLevelChanged(U8 godlevel)
+{
+ // search results can change based upon god level - if the user
+ // changes god level, then give them a warning (we don't refresh
+ // the search as this might undo any page navigation or
+ // AJAX-driven changes since the last search).
+
+ //FIXME: set status bar text
+
+ //getChildView("refresh_search")->setVisible( (godlevel != mSearchGodLevel));
+}
+
+void LLFloaterSearch::search(const SearchQuery &p)
+{
+ if (! mWebBrowser || !p.validateBlock())
+ {
+ return;
+ }
+
+ // reset the god level warning as we're sending the latest state
+ getChildView("refresh_search")->setVisible(false);
+ mSearchGodLevel = gAgent.getGodLevel();
+
+ // work out the subdir to use based on the requested category
+ LLSD subs;
+ if (mSearchType.find(p.category) != mSearchType.end())
+ {
+ subs["TYPE"] = p.category;
+ }
+ else
+ {
+ subs["TYPE"] = "standard";
+ }
+
+ // add the search query string
+ subs["QUERY"] = LLURI::escape(p.query);
+
+ subs["COLLECTION"] = "";
+ if (subs["TYPE"] == "standard")
+ {
+ if (mCollectionType.find(p.collection) != mCollectionType.end())
+ {
+ subs["COLLECTION"] = "&collection_chosen=" + std::string(p.collection);
+ }
+ else
+ {
+ std::string collection_args("");
+ for (std::set<std::string>::iterator it = mCollectionType.begin(); it != mCollectionType.end(); ++it)
+ {
+ collection_args += "&collection_chosen=" + std::string(*it);
+ }
+ subs["COLLECTION"] = collection_args;
+ }
+ }
+
+ // add the user's preferred maturity (can be changed via prefs)
+ std::string maturity;
+ if (gAgent.prefersAdult())
+ {
+ maturity = "gma"; // PG,Mature,Adult
+ }
+ else if (gAgent.prefersMature())
+ {
+ maturity = "gm"; // PG,Mature
+ }
+ else
+ {
+ maturity = "g"; // PG
+ }
+ subs["MATURITY"] = maturity;
+
+ // add the user's god status
+ subs["GODLIKE"] = gAgent.isGodlike() ? "1" : "0";
+
+ // get the search URL and expand all of the substitutions
+ // (also adds things like [LANGUAGE], [VERSION], [OS], etc.)
+ std::string url = gSavedSettings.getString("SearchURL");
+ url = LLWeb::expandURLSubstitutions(url, subs);
+
+ // and load the URL in the web view
+ mWebBrowser->navigateTo(url, HTTP_CONTENT_TEXT_HTML);
+}