OpenTween.TweenMain.GetUrlFromDataObject C# (CSharp) Method

GetUrlFromDataObject() static private method

IDataObject から URL とタイトルの対を取得します
タイトルのみ取得できなかった場合は Value2 が null のタプルを返すことがあります。
不正なフォーマットが入力された場合 サポートされていないデータが入力された場合
static private GetUrlFromDataObject ( IDataObject data ) : string>.Tuple
data IDataObject
return string>.Tuple
        internal static Tuple<string, string> GetUrlFromDataObject(IDataObject data)
        {
            if (data.GetDataPresent("text/x-moz-url"))
            {
                // Firefox, Google Chrome で利用可能
                // 参照: https://developer.mozilla.org/ja/docs/DragDrop/Recommended_Drag_Types

                using (var stream = (MemoryStream)data.GetData("text/x-moz-url"))
                {
                    var lines = Encoding.Unicode.GetString(stream.ToArray()).TrimEnd('\0').Split('\n');
                    if (lines.Length < 2)
                        throw new ArgumentException("不正な text/x-moz-url フォーマットです", nameof(data));

                    return new Tuple<string, string>(lines[0], lines[1]);
                }
            }
            else if (data.GetDataPresent("IESiteModeToUrl"))
            {
                // Internet Exproler 用
                // 保護モードが有効なデフォルトの IE では DragDrop イベントが発火しないため使えない

                using (var stream = (MemoryStream)data.GetData("IESiteModeToUrl"))
                {
                    var lines = Encoding.Unicode.GetString(stream.ToArray()).TrimEnd('\0').Split('\0');
                    if (lines.Length < 2)
                        throw new ArgumentException("不正な IESiteModeToUrl フォーマットです", nameof(data));

                    return new Tuple<string, string>(lines[0], lines[1]);
                }
            }
            else if (data.GetDataPresent("UniformResourceLocatorW"))
            {
                // それ以外のブラウザ向け

                using (var stream = (MemoryStream)data.GetData("UniformResourceLocatorW"))
                {
                    var url = Encoding.Unicode.GetString(stream.ToArray()).TrimEnd('\0');
                    return new Tuple<string, string>(url, null);
                }
            }

            throw new NotSupportedException("サポートされていないデータ形式です: " + data.GetFormats()[0]);
        }

Usage Example

コード例 #1
0
ファイル: TweenMainTest.cs プロジェクト: tsubasa/OpenTween
        public void GetUrlFromDataObject_UnknownFormatTest()
        {
            using (var memstream = new MemoryStream(Array.Empty <byte>()))
            {
                var data = new DataObject("application/x-hogehoge", memstream);

                Assert.Throws <NotSupportedException>(() => TweenMain.GetUrlFromDataObject(data));
            }
        }
All Usage Examples Of OpenTween.TweenMain::GetUrlFromDataObject
TweenMain