private Subtitles ProcessSubUrl(string subUrl)
        {
            var subresult = new WebClientEx().DownloadStringIgnoreAndLog(_root + subUrl);
            if (string.IsNullOrWhiteSpace(subresult)) return null;
            try
            {
                HtmlDocument doc = new HtmlDocument();
                doc.LoadHtml(subresult);

                var href = _root + doc.DocumentNode.SelectSingleNode("//a[@class='button big download']").Attributes["href"].Value;

                var name = doc.DocumentNode.SelectSingleNode("//fieldset/legend[text()='Release']/../p/a").InnerText;

                var data = new WebClientEx().DownloadDataIgnoreAndLog(href);

                var outputStream = new MemoryStream();

                using (var zf = new ZipFile(new MemoryStream(data)))
                {
                    var ze = zf[0];
                    zf.GetInputStream(ze).CopyTo(outputStream);
                }

                return new Subtitles() { Title = name, File = outputStream.ToArray() };
            }
            catch (Exception ex)
            {
                _logger.WarnException("Error getting subtitle "+subUrl,ex);
            }

            return null;
        }
        public Torrent[] Search(Series series, Episode episode)
        {
            var query = series.Title + " " + episode.CodedName;
            var url = string.Format("http://thepiratebay.se/search/{0}/0/7/0", HttpUtility.UrlEncode(query));

            var result = new WebClientEx().DownloadString(url);
            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml(result);
            var dts = doc.DocumentNode.SelectNodes("/html/body/div[@id='SearchResults']/div[@id='content']/div[@id='main-content']/table[@id='searchResult']/tr/td/div[@class='detName']");

            List<Torrent> results = new List<Torrent>();

            if (dts != null)
            {
                foreach (var dt in dts)
                {
                    var a = dt.ParentNode.SelectSingleNode("a");
                    var seed =
                        int.Parse(dt.ParentNode.ParentNode.SelectSingleNode("td[@align='right']").InnerText.Trim('\t', ' ', '\r',
                                                                                                                 '\n'));
                    results.Add(new Torrent() { Magnet = a.Attributes["href"].Value, Title = dt.InnerText.Trim('\t', ' ', '\r', '\n'), Seed = seed });
                }
            }

            return results.ToArray();
        }
        public Subtitles[] Search(Series series, Episode episode)
        {
            var query =
                string.Format("http://www.podnapisi.net/ru/ppodnapisi/search?sJ=2&sT=1&sK={2}&sTS={0}&sTE={1}",
                              episode.Season, episode.Number, HttpUtility.UrlEncode(series.Title));
            List<Subtitles> subtitleses = new List<Subtitles>();
            var result = new WebClientEx().DownloadStringIgnoreAndLog(query);

            var aas = Regex.Matches(result, "class=\"subtitle_page_link\" href=\"([^\"]*?)\"").OfType<Match>().Select(m => m.Groups[1].Value).ToArray();

            var subs = aas.Select(ProcessSubUrl).Where(r => r != null).AsParallel().ToArray();
            Thread.Sleep(1000);
            return subs;
        }