protected override Data.Torrent FindAddedTorrent(AddUrlResponse result)
        {
            if (result == null)
            {
                throw new ArgumentNullException("result");
            }

            if (InputUrl != null && string.Equals(InputUrl.Scheme, "magnet", StringComparison.OrdinalIgnoreCase))
            {
                Regex reg   = new Regex("BTIH:([A-F0-9]{40})");
                Match match = reg.Match(InputUrl.ToString().ToUpperInvariant());
                if (match.Success)
                {
                    string hash    = match.Groups[1].Value;
                    var    torrent = result.Result.Torrents.OrderByDescending(t => t.AddedDate).AsParallel().FirstOrDefault(item => string.Equals(item.Hash, hash, StringComparison.OrdinalIgnoreCase));
                    return(torrent);
                }
            }

            return(null);
        }
        protected override Data.Torrent FindAddedTorrent(AddUrlResponse result)
        {
            if (result == null)
            {
                throw new ArgumentNullException("result");
            }

            if (InputUrl != null && string.Equals(InputUrl.Scheme, "magnet", StringComparison.OrdinalIgnoreCase))
            {
                //BTIH
                Regex reg   = new Regex("BTIH:([A-F0-9]{40})");
                var   url   = InputUrl.ToString().ToUpperInvariant();
                Match match = reg.Match(url);
                if (match.Success)
                {
                    string hash    = match.Groups[1].Value;
                    var    torrent = result.Result.Torrents.OrderByDescending(t => t.AddedDate).FirstOrDefault(item => string.Equals(item.Hash, hash, StringComparison.OrdinalIgnoreCase));
                    return(torrent);
                }
                else
                {
                    // Base 32 not raw hash
                    reg   = new Regex("BTIH:([A-Z0-9]{32})");
                    url   = InputUrl.ToString().ToUpperInvariant();
                    match = reg.Match(url);

                    if (!match.Success)
                    {
                        return(null);
                    }

                    var    data    = Base32Helper.ToBytes(match.Groups[1].Value);
                    string hash    = BitConverter.ToString(data).Replace("-", string.Empty);
                    var    torrent = result.Result.Torrents.OrderByDescending(t => t.AddedDate).FirstOrDefault(item => string.Equals(item.Hash, hash, StringComparison.OrdinalIgnoreCase));
                    return(torrent);
                }
            }

            return(null);
        }