Update our url stuffs!

Adds support for JIRA link labels from Alchemy. (Made less of a mess by me)
Adds support for x-grid-info, the future of x-grid-info-location from Alchemy.
Updates uriparser latest from Alchemy.
Updates llstring to be more in line with upstream Alchemy.
Fixes our LLURI Implementation
Updates LLURLAction to modern C++ stuffies~
Adds Email protocol support from alchemy
Sync LLSLURL with Alchemy, adding x-grid-info support.
Also keep NoProtocol Support because yaaassss~
(also we won't suffer from MAINT-5019 because we're not dumb.)
This commit is contained in:
Lirusaito
2019-01-20 09:13:05 -05:00
parent 4b4c8c8e37
commit 7112e163e6
33 changed files with 1529 additions and 301 deletions

View File

@@ -35,10 +35,7 @@
#include "llavatarname.h"
#include "llhost.h" // for resolving parcel name by parcel id
#include <boost/signals2.hpp>
#include <boost/regex.hpp>
#include <string>
#include <map>
class LLAvatarName;
@@ -78,6 +75,9 @@ public:
/// Given a matched Url, return a label for the Url
virtual std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) { return url; }
/// Return port, query and fragment parts for the Url
virtual std::string getQuery(const std::string &url) const { return ""; }
/// Return an icon that can be displayed next to Urls of this type
virtual std::string getIcon(const std::string &url);
@@ -96,10 +96,16 @@ public:
/// Should this link text be underlined only when mouse is hovered over it?
virtual bool underlineOnHoverOnly(const std::string &string) const { return true; } // <alchemy/>
virtual bool isTrusted() const { return false; }
virtual LLUUID getID(const std::string &string) const { return LLUUID::null; }
bool isLinkDisabled() const;
bool isWikiLinkCorrect(const std::string& url);
virtual bool isSLURLvalid(const std::string &url) const { return TRUE; };
protected:
std::string getIDStringFromUrl(const std::string &url) const;
std::string escapeUrl(const std::string &url) const;
@@ -107,6 +113,8 @@ protected:
std::string getLabelFromWikiLink(const std::string &url) const;
std::string getUrlFromWikiLink(const std::string &string) const;
void addObserver(const std::string &id, const std::string &url, const LLUrlLabelCallback &cb);
std::string urlToLabelWithGreyQuery(const std::string &url) const;
std::string urlToGreyQuery(const std::string &url) const;
virtual void callObservers(const std::string &id, const std::string &label, const std::string& icon);
typedef struct {
@@ -128,7 +136,9 @@ class LLUrlEntryHTTP : public LLUrlEntryBase
{
public:
LLUrlEntryHTTP();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
/*virtual*/ std::string getUrl(const std::string &string) const override;
/*virtual*/ std::string getTooltip(const std::string &url) const override;
};
///
@@ -138,9 +148,9 @@ class LLUrlEntryHTTPLabel : public LLUrlEntryBase
{
public:
LLUrlEntryHTTPLabel();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getTooltip(const std::string &string) const;
/*virtual*/ std::string getUrl(const std::string &string) const;
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
/*virtual*/ std::string getTooltip(const std::string &string) const override;
/*virtual*/ std::string getUrl(const std::string &string) const override;
};
///
@@ -150,8 +160,21 @@ class LLUrlEntryHTTPNoProtocol : public LLUrlEntryBase
{
public:
LLUrlEntryHTTPNoProtocol();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getUrl(const std::string &string) const;
std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
std::string getQuery(const std::string &url) const override;
std::string getUrl(const std::string &string) const override;
std::string getTooltip(const std::string &url) const override;
};
class LLUrlEntryInvalidSLURL : public LLUrlEntryBase
{
public:
LLUrlEntryInvalidSLURL();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
/*virtual*/ std::string getUrl(const std::string &string) const override;
/*virtual*/ std::string getTooltip(const std::string &url) const override;
bool isSLURLvalid(const std::string &url) const override;
};
///
@@ -161,8 +184,31 @@ class LLUrlEntrySLURL : public LLUrlEntryBase
{
public:
LLUrlEntrySLURL();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getLocation(const std::string &url) const;
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
/*virtual*/ std::string getLocation(const std::string &url) const override;
};
///
/// LLUrlEntrySeconlifeURLs Describes *secondlife.com and *lindenlab.com Urls
///
class LLUrlEntrySecondlifeURL : public LLUrlEntryBase
{
public:
LLUrlEntrySecondlifeURL();
/*virtual*/ bool isTrusted() const override { return true; }
/*virtual*/ std::string getUrl(const std::string &string) const override;
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
/*virtual*/ std::string getQuery(const std::string &url) const override;
/*virtual*/ std::string getTooltip(const std::string &url) const override;
};
///
/// LLUrlEntrySeconlifeURLs Describes *secondlife.com and *lindenlab.com Urls
///
class LLUrlEntrySimpleSecondlifeURL : public LLUrlEntrySecondlifeURL
{
public:
LLUrlEntrySimpleSecondlifeURL();
};
///
@@ -174,22 +220,27 @@ public:
LLUrlEntryAgent();
~LLUrlEntryAgent()
{
if (mAvatarNameCacheConnection.connected())
for(const auto& conn_pair : mAvatarNameCacheConnections)
{
mAvatarNameCacheConnection.disconnect();
if (conn_pair.second.connected())
{
conn_pair.second.disconnect();
}
}
mAvatarNameCacheConnections.clear();
}
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getIcon(const std::string &url);
/*virtual*/ std::string getTooltip(const std::string &string) const;
//*virtual*/ LLStyle::Params getStyle() const;
/*virtual*/ LLUUID getID(const std::string &string) const;
/*virtual*/ bool underlineOnHoverOnly(const std::string &string) const;
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
/*virtual*/ std::string getIcon(const std::string &url) override;
/*virtual*/ std::string getTooltip(const std::string &string) const override;
///*virtual*/ LLStyle::Params getStyle() const override;
/*virtual*/ LLUUID getID(const std::string &string) const override;
/*virtual*/ bool underlineOnHoverOnly(const std::string &string) const override;
protected:
/*virtual*/ void callObservers(const std::string &id, const std::string &label, const std::string& icon);
/*virtual*/ void callObservers(const std::string &id, const std::string &label, const std::string& icon) override;
private:
void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name);
boost::signals2::connection mAvatarNameCacheConnection;
using avatar_name_cache_connection_map_t = std::multimap<LLUUID, boost::signals2::connection>;
avatar_name_cache_connection_map_t mAvatarNameCacheConnections;
};
///
@@ -203,19 +254,25 @@ public:
LLUrlEntryAgentName();
~LLUrlEntryAgentName()
{
if (mAvatarNameCacheConnection.connected())
for (const auto& conn_pair : mAvatarNameCacheConnections)
{
mAvatarNameCacheConnection.disconnect();
if (conn_pair.second.connected())
{
conn_pair.second.disconnect();
}
}
mAvatarNameCacheConnections.clear();
}
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
//*virtual*/ LLStyle::Params getStyle() const;
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
///*virtual*/ LLStyle::Params getStyle() const override;
protected:
// override this to pull out relevant name fields
virtual std::string getName(const LLAvatarName& avatar_name) = 0;
private:
void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name);
boost::signals2::connection mAvatarNameCacheConnection;
using avatar_name_cache_connection_map_t = std::multimap<LLUUID, boost::signals2::connection>;
avatar_name_cache_connection_map_t mAvatarNameCacheConnections;
};
@@ -229,7 +286,15 @@ class LLUrlEntryAgentCompleteName : public LLUrlEntryAgentName
public:
LLUrlEntryAgentCompleteName();
private:
/*virtual*/ std::string getName(const LLAvatarName& avatar_name);
/*virtual*/ std::string getName(const LLAvatarName& avatar_name) override;
};
class LLUrlEntryAgentLegacyName : public LLUrlEntryAgentName
{
public:
LLUrlEntryAgentLegacyName();
private:
/*virtual*/ std::string getName(const LLAvatarName& avatar_name) override;
};
///
@@ -242,7 +307,7 @@ class LLUrlEntryAgentDisplayName : public LLUrlEntryAgentName
public:
LLUrlEntryAgentDisplayName();
private:
/*virtual*/ std::string getName(const LLAvatarName& avatar_name);
/*virtual*/ std::string getName(const LLAvatarName& avatar_name) override;
};
///
@@ -255,7 +320,7 @@ class LLUrlEntryAgentUserName : public LLUrlEntryAgentName
public:
LLUrlEntryAgentUserName();
private:
/*virtual*/ std::string getName(const LLAvatarName& avatar_name);
/*virtual*/ std::string getName(const LLAvatarName& avatar_name) override;
};
///
@@ -266,9 +331,9 @@ class LLUrlEntryGroup : public LLUrlEntryBase
{
public:
LLUrlEntryGroup();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
//*virtual*/ LLStyle::Params getStyle() const;
/*virtual*/ LLUUID getID(const std::string &string) const;
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
///*virtual*/ LLStyle::Params getStyle() const override;
/*virtual*/ LLUUID getID(const std::string &string) const override;
private:
void onGroupNameReceived(const LLUUID& id, const std::string& name, bool is_group);
};
@@ -281,7 +346,7 @@ class LLUrlEntryInventory : public LLUrlEntryBase
{
public:
LLUrlEntryInventory();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
private:
};
@@ -293,8 +358,8 @@ class LLUrlEntryObjectIM : public LLUrlEntryBase
{
public:
LLUrlEntryObjectIM();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getLocation(const std::string &url) const;
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
/*virtual*/ std::string getLocation(const std::string &url) const override;
private:
};
@@ -317,7 +382,7 @@ public:
LLUrlEntryParcel();
~LLUrlEntryParcel();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
// Sends a parcel info request to sim.
void sendParcelInfoRequest(const LLUUID& parcel_id);
@@ -353,8 +418,8 @@ class LLUrlEntryPlace : public LLUrlEntryBase
{
public:
LLUrlEntryPlace();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getLocation(const std::string &url) const;
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
/*virtual*/ std::string getLocation(const std::string &url) const override;
};
///
@@ -365,8 +430,8 @@ class LLUrlEntryRegion : public LLUrlEntryBase
{
public:
LLUrlEntryRegion();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getLocation(const std::string &url) const;
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
/*virtual*/ std::string getLocation(const std::string &url) const override;
};
///
@@ -377,8 +442,8 @@ class LLUrlEntryTeleport : public LLUrlEntryBase
{
public:
LLUrlEntryTeleport();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getLocation(const std::string &url) const;
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
/*virtual*/ std::string getLocation(const std::string &url) const override;
};
///
@@ -389,7 +454,7 @@ class LLUrlEntrySL : public LLUrlEntryBase
{
public:
LLUrlEntrySL();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
};
///
@@ -400,10 +465,10 @@ class LLUrlEntrySLLabel : public LLUrlEntryBase
{
public:
LLUrlEntrySLLabel();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getUrl(const std::string &string) const;
/*virtual*/ std::string getTooltip(const std::string &string) const;
/*virtual*/ bool underlineOnHoverOnly(const std::string &string) const;
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
/*virtual*/ std::string getUrl(const std::string &string) const override;
/*virtual*/ std::string getTooltip(const std::string &string) const override;
/*virtual*/ bool underlineOnHoverOnly(const std::string &string) const override;
};
///
@@ -414,8 +479,8 @@ class LLUrlEntryWorldMap : public LLUrlEntryBase
{
public:
LLUrlEntryWorldMap();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getLocation(const std::string &url) const;
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
/*virtual*/ std::string getLocation(const std::string &url) const override;
};
///
@@ -425,9 +490,9 @@ class LLUrlEntryNoLink : public LLUrlEntryBase
{
public:
LLUrlEntryNoLink();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getUrl(const std::string &string) const;
//*virtual*/ LLStyle::Params getStyle() const;
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
/*virtual*/ std::string getUrl(const std::string &string) const override;
///*virtual*/ LLStyle::Params getStyle() const override;
};
///
@@ -437,10 +502,35 @@ class LLUrlEntryIcon : public LLUrlEntryBase
{
public:
LLUrlEntryIcon();
/*virtual*/ std::string getUrl(const std::string &string) const;
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getIcon(const std::string &url);
/*virtual*/ std::string getUrl(const std::string &string) const override;
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
/*virtual*/ std::string getIcon(const std::string &url) override;
};
///
/// LLUrlEntryEmail Describes a generic mailto: Urls
///
class LLUrlEntryEmail : public LLUrlEntryBase
{
public:
LLUrlEntryEmail();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
/*virtual*/ std::string getUrl(const std::string &string) const override;
};
// <alchemy>
///
/// LLUrlEntryJira describes a Jira Issue
///
class LLUrlEntryJira : public LLUrlEntryBase
{
public:
LLUrlEntryJira();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
/*virtual*/ std::string getTooltip(const std::string &string) const override;
/*virtual*/ std::string getUrl(const std::string &string) const override;
};
// </alchemy>
#endif