public async Task OpenUriAsync(Uri uri, bool isReverseSettings = false)
{
var uriStr = uri.AbsoluteUri;
// OpenTween 内部で使用する URL
if (uri.Authority == "opentween")
{
await this.OpenInternalUriAsync(uri);
return;
}
// ハッシュタグを含む Twitter 検索
if (uri.Host == "twitter.com" && uri.AbsolutePath == "/search" && uri.Query.Contains("q=%23"))
{
// ハッシュタグの場合は、タブで開く
var unescapedQuery = Uri.UnescapeDataString(uri.Query);
var pos = unescapedQuery.IndexOf('#');
if (pos == -1) return;
var hash = unescapedQuery.Substring(pos);
this.HashSupl.AddItem(hash);
this.HashMgr.AddHashToHistory(hash.Trim(), false);
this.AddNewTabForSearch(hash);
return;
}
// ユーザープロフィールURL
// フラグが立っている場合は設定と逆の動作をする
if( this._cfgCommon.OpenUserTimeline && !isReverseSettings ||
!this._cfgCommon.OpenUserTimeline && isReverseSettings )
{
var userUriMatch = Regex.Match(uriStr, "^https?://twitter.com/(#!/)?(?<ScreenName>[a-zA-Z0-9_]+)$");
if (userUriMatch.Success)
{
var screenName = userUriMatch.Groups["ScreenName"].Value;
if (this.IsTwitterId(screenName))
{
this.AddNewTabForUserTimeline(screenName);
return;
}
}
}
// どのパターンにも該当しないURL
await this.OpenUriInBrowserAsync(uriStr);
}