public void ValidaEpisodioSeriado(string diretorio, string arquivo)
        {
            var nomeEpisodio = new Regex("(.*)s\\d\\de\\d\\d", RegexOptions.IgnoreCase).Match(arquivo).Value;

            if (String.IsNullOrEmpty(nomeEpisodio)) return;

            var episodio = new Episodio();
            episodio.Nome = nomeEpisodio.Replace('.', ' ');
            episodio.ArquivoEpisodio = arquivo;

            if (Directory.GetFiles(diretorio, nomeEpisodio + "*").Count() > 1)
            {
                episodio.Download = "Ok";
                episodio.Status = "Legenda já baixada.";

                if ((bool)Settings.Default["ExibirJaBaixadas"]) episodios.Add(episodio);
            }
            else
            {
                episodios.Add(episodio);
            }
        }
        public void ExtrairLegenda(Episodio episodio)
        {
            var extraido = false;

            try
            {
                using (var arquivo = ArchiveFactory.Open(episodio.ArquivoDownload))
                {
                    foreach (var entry in arquivo.Entries)
                    {
                        if (TrataNomeArquivo(entry.FilePath) == TrataNomeArquivo(episodio.ArquivoEpisodio))
                        {
                            entry.WriteToFile(txtDiretorioSeries.Text + "\\" + Path.GetFileNameWithoutExtension(episodio.ArquivoEpisodio) + Path.GetExtension(entry.FilePath));
                            episodio.Status = "Legenda extraida.";
                            extraido = true;
                            break;
                        }
                    }
                }
            }
            catch
            {
                episodio.Status = "Ocorreu um erro ao extrair a legenda.";
            }

            if (!extraido)
            {
                episodio.Status = "Não foi possivel extrair legenda.";
            }
        }
        public async void BuscaLegenda(Episodio episodio)
        {
            string urlLegenda = "http://legendas.tv/util/carrega_legendas_busca/{0}/1/d";
            string urlDownload = "http://legendas.tv/downloadarquivo/{0}";

            HtmlAgilityPack.HtmlDocument html = new HtmlAgilityPack.HtmlDocument();

            using (WebClientPlus webClient = new WebClientPlus())
            {
                try
                {
                    webClient.OutboundCookies.Add(cookieAuth);
                    var htmlString = await webClient.DownloadStringTaskAsync(String.Format(urlLegenda, episodio.Nome));
                    html.LoadHtml(htmlString);

                    string idLegenda = String.Empty;

                    var links = html.DocumentNode.SelectNodes("//p//a[ contains (@href, 'download') ]");

                    if (links == null)
                    {
                        episodio.Download = "Erro";
                        episodio.Status = "Legenda não encontrada.";
                    }
                    else
                    {
                        foreach (var link in links)
                        {
                            idLegenda = link.Attributes["href"].Value.Replace("/download/", "");
                            idLegenda = idLegenda.Substring(0, idLegenda.IndexOf('/'));
                        }

                        var uriDownload = new Uri(String.Format(urlDownload, idLegenda));
                        var nomeArquivoDownload = String.Format("{0}{1}.rar", pastaDownloads, idLegenda);

                        episodio.ArquivoDownload = nomeArquivoDownload;

                        if (!File.Exists(nomeArquivoDownload))
                        {
                            webClient.DownloadFileAsync(uriDownload, nomeArquivoDownload, episodio);
                            webClient.DownloadFileCompleted += webClient_DownloadFileCompleted;
                            webClient.DownloadProgressChanged += webClient_DownloadProgressChanged;
                        }
                        else
                        {
                            episodio.Download = "100";
                            ExtrairLegenda(episodio);
                        }

                        dgvEpisodios.FirstDisplayedScrollingRowIndex = dgvEpisodios.Rows.Count - 1;
                        dgvEpisodios.Update();
                    }
                }
                catch
                {
                    episodio.Download = "Erro";
                    episodio.Status = "Ocorreu um erro na busca da legenda.";
                }
            }
        }