예제 #1
0
        private bool SetarAtributosEpisodioIdentificado()
        {
            var serieAliasService = App.Container.Resolve <SerieAliasService>();
            var seriesService     = App.Container.Resolve <SeriesService>();
            var episodiosService  = App.Container.Resolve <EpisodiosService>();

            List <SerieAlias> lstAlias = serieAliasService.GetLista();
            SerieAlias        alias    =
                lstAlias.FirstOrDefault(
                    x =>
                    Regex.Replace(
                        x.sDsAlias.Replace(".", " ")
                        .Replace("_", " ")
                        .Replace("'", "")
                        .Trim(),
                        @"[^a-zA-Z0-9\s]", "") == oSerie.sDsTitulo);

            if (alias != null)
            {
                oSerie = seriesService.Get(alias.nCdVideo);
            }

            if (oSerie.nCdVideo == 0)
            {
                Serie oSerieTemp = seriesService.GetSerieOuAnimePorLevenshtein(oSerie.sDsTitulo);

                if (oSerieTemp != null)
                {
                    oSerie = oSerieTemp;
                }
            }

            if (oSerie.nCdVideo > 0)
            {
                List <Episodio> lstEpisodios = episodiosService.GetLista(oSerie);

                if (alias != null)
                {
                    Episodio episodio;
                    Episodio primeiroEpisodioAbsolutoAlias = null;

                    if (nNrAbsoluto > 0)
                    {
                        primeiroEpisodioAbsolutoAlias =
                            lstEpisodios.FirstOrDefault(
                                x =>
                                x.nNrTemporada == alias.nNrTemporada &&
                                x.nNrEpisodio == alias.nNrEpisodio);
                        if (primeiroEpisodioAbsolutoAlias != null)
                        {
                            episodio =
                                lstEpisodios.FirstOrDefault(
                                    x =>
                                    x.nNrAbsoluto ==
                                    primeiroEpisodioAbsolutoAlias.nNrAbsoluto + nNrAbsoluto - 1);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        episodio =
                            lstEpisodios.FirstOrDefault(
                                x =>
                                x.nNrTemporada == alias.nNrTemporada + nNrTemporada - 1 &&
                                x.nNrEpisodio == alias.nNrEpisodio + nNrEpisodio - 1);
                    }

                    if (episodio == null) // Se não encontrou o episódio retorna falso.
                    {
                        return(false);
                    }

                    episodio.lstIntEpisodios          = lstIntEpisodios;
                    episodio.lstIntEpisodiosAbsolutos = lstIntEpisodiosAbsolutos;
                    episodio.oSerie          = oSerie;
                    episodio.nIdTipoConteudo = episodio.oSerie.nIdTipoConteudo;

                    for (var i = 0;
                         i < (nNrAbsoluto > 0
                                  ? episodio.lstIntEpisodiosAbsolutos.Count
                                  : episodio.lstIntEpisodios.Count);
                         i++)
                    {
                        Episodio episodioTemp = null;

                        // Ajuste no numero do episodio caso este seja de um alias que não comece no primeiro episodio da primeira temporada.
                        if (nNrAbsoluto > 0)
                        {
                            episodio.lstIntEpisodiosAbsolutos[i] = (int)primeiroEpisodioAbsolutoAlias.nNrAbsoluto +
                                                                   episodio.lstIntEpisodiosAbsolutos[i] - 1;
                            episodioTemp =
                                lstEpisodios.FirstOrDefault(x => x.nNrAbsoluto == episodio.lstIntEpisodiosAbsolutos[i]);
                            if (episodioTemp != null)
                            {
                                episodio.lstIntEpisodios.Add(episodioTemp.nNrEpisodio);
                            }
                        }
                        else
                        {
                            episodio.lstIntEpisodios[i] = alias.nNrEpisodio + lstIntEpisodios[i] - 1;
                            episodioTemp =
                                lstEpisodios.FirstOrDefault(
                                    x =>
                                    x.nNrTemporada == episodio.nNrTemporada &&
                                    x.nNrEpisodio == episodio.lstIntEpisodios[i]);
                            if (episodioTemp?.nNrAbsoluto != null)
                            {
                                episodio.lstIntEpisodiosAbsolutos.Add((int)episodioTemp.nNrAbsoluto);
                            }
                        }

                        if (i != 0 && episodioTemp != null)
                        {
                            episodio.sDsEpisodio += " & " + episodioTemp.sDsEpisodio;
                        }
                    }

                    Clone(episodio);
                }
                else
                {
                    Episodio episodio = nNrAbsoluto > 0
                                            ? lstEpisodios.FirstOrDefault(x => x.nNrAbsoluto == nNrAbsoluto)
                                            : lstEpisodios.FirstOrDefault(
                        x =>
                        x.nNrTemporada == nNrTemporada &&
                        x.nNrEpisodio == nNrEpisodio);

                    if (episodio == null)
                    {
                        return(false);
                    }

                    episodio.lstIntEpisodios          = lstIntEpisodios;
                    episodio.lstIntEpisodiosAbsolutos = lstIntEpisodiosAbsolutos;
                    episodio.oSerie          = oSerie;
                    episodio.nIdTipoConteudo = episodio.oSerie.nIdTipoConteudo;

                    if (nNrAbsoluto > 0) // TODO Testar pra ver o pq desse if :D
                    {
                        episodio.nNrAbsoluto = nNrAbsoluto;
                    }

                    for (var i = 0;
                         i < (nNrAbsoluto > 0
                                  ? episodio.lstIntEpisodiosAbsolutos.Count
                                  : episodio.lstIntEpisodios.Count);
                         i++)
                    {
                        Episodio episodioTemp;
                        // Ajuste no numero do episodio caso este seja de um alias que não comece no primeiro episodio da primeira temporada.
                        if (nNrAbsoluto > 0)
                        {
                            episodioTemp =
                                lstEpisodios.FirstOrDefault(x => x.nNrAbsoluto == episodio.lstIntEpisodiosAbsolutos[i]);
                            if (episodioTemp != null)
                            {
                                episodio.lstIntEpisodios.Add(episodioTemp.nNrEpisodio);
                            }
                        }
                        else
                        {
                            episodioTemp =
                                lstEpisodios.FirstOrDefault(
                                    x =>
                                    x.nNrTemporada == nNrTemporada &&
                                    x.nNrEpisodio == episodio.lstIntEpisodios[i]);
                            // TODO Testar pra ver se funfa
                            if (episodioTemp?.nNrAbsoluto != null)
                            {
                                episodio.lstIntEpisodiosAbsolutos.Add((int)episodioTemp.nNrAbsoluto);
                            }
                        }

                        if (i != 0 && episodioTemp != null)
                        {
                            episodio.sDsEpisodio += " & " + episodioTemp.sDsEpisodio;
                        }
                    }

                    Clone(episodio);
                }

                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #2
0
        public bool IdentificarEpisodio()
        {
            if (oSerie == null)
            {
                oSerie = new Serie();
            }

            try
            {
                sDsFilepath = Helper.RetirarCaracteresInvalidos(sDsFilepath, false);

                string filenameTratado =
                    Path.GetFileNameWithoutExtension(sDsFilepath)
                    .Replace(".", " ")
                    .Replace("_", " ")
                    .Replace("'", "")
                    .Trim();

                if (Helper.RegexEpisodio.RegexS00E00.IsMatch(filenameTratado))
                {
                    Match  match = Helper.RegexEpisodio.RegexS00E00.Match(filenameTratado);
                    string sDsTituloSerieTemp = oSerie.sDsTitulo;
                    oSerie.sDsTitulo =
                        match.Groups["name"].Value.Replace(".", " ").Replace("_", " ").Replace("'", "").Trim();
                    oSerie.sDsTitulo = Regex.Replace(oSerie.sDsTitulo, @"[^a-zA-Z0-9\s]", "");
                    // Retira caracteres especiais e deixa somente numero, letra e espaços. Facilita o reconhecimento.

                    // Para quando se tem multi-episódios
                    string[] separador = string.IsNullOrWhiteSpace(match.Groups["separador"].Value)
                                             ? default(string[])
                                             : new string[1] {
                        match.Groups["separador"].Value
                    };
                    nNrTemporada    = int.Parse(match.Groups["season"].Value);
                    lstIntEpisodios = new List <int>();

                    foreach (
                        string item in
                        match.Groups["episodes"].Value.Split(separador, StringSplitOptions.RemoveEmptyEntries))
                    {
                        lstIntEpisodios.Add(int.Parse(Regex.Replace(item, @"[^\d]", "")));
                    }

                    nNrEpisodio = lstIntEpisodios[0];

                    bool retorno = SetarAtributosEpisodioIdentificado();

                    if (!string.IsNullOrWhiteSpace(sDsTituloSerieTemp))
                    {
                        oSerie.sDsTitulo = sDsTituloSerieTemp;
                    }

                    return(retorno);
                }
                else if (Helper.RegexEpisodio.Regex0X00.IsMatch(filenameTratado)) // TODO Fazer funcionar com alias
                {
                    Match  match = Helper.RegexEpisodio.Regex0X00.Match(filenameTratado);
                    string sDsTituloSerieTemp = oSerie.sDsTitulo;
                    oSerie.sDsTitulo =
                        match.Groups["name"].Value.Replace(".", " ").Replace("_", " ").Replace("'", "").Trim();
                    oSerie.sDsTitulo = Regex.Replace(oSerie.sDsTitulo, @"[^a-zA-Z0-9\s]", "");
                    // Retira caracteres especiais e deixa somente numero, letra e espaços. Facilita o reconhecimento.

                    // Para quando se tem multi-episódios
                    string[] separador = string.IsNullOrWhiteSpace(match.Groups["separador"].Value)
                                             ? default(string[])
                                             : new string[1] {
                        match.Groups["separador"].Value
                    };
                    nNrTemporada    = int.Parse(match.Groups["season"].Value);
                    lstIntEpisodios = new List <int>();

                    foreach (
                        string item in
                        match.Groups["episodes"].Value.Split(separador, StringSplitOptions.RemoveEmptyEntries))
                    {
                        lstIntEpisodios.Add(int.Parse(Regex.Replace(item, @"[^\d]", "")));
                    }

                    nNrEpisodio = lstIntEpisodios[0];

                    bool retorno = SetarAtributosEpisodioIdentificado();

                    if (!string.IsNullOrWhiteSpace(sDsTituloSerieTemp))
                    {
                        oSerie.sDsTitulo = sDsTituloSerieTemp;
                    }

                    return(retorno);
                }
                else if (Helper.RegexEpisodio.RegexFansub0000.IsMatch(filenameTratado))
                {
                    Match  match = Helper.RegexEpisodio.RegexFansub0000.Match(filenameTratado);
                    string sDsTituloSerieTemp = oSerie.sDsTitulo;
                    oSerie.sDsTitulo =
                        match.Groups["name"].Value.Replace(".", " ").Replace("_", " ").Replace("'", "").Trim();
                    oSerie.sDsTitulo = Regex.Replace(oSerie.sDsTitulo, @"[^a-zA-Z0-9\s]", "");
                    // Retira caracteres especiais e deixa somente numero, letra e espaços. Facilita o reconhecimento.

                    // Para quando se tem multi-episódios
                    string[] separador = string.IsNullOrWhiteSpace(match.Groups["separador"].Value)
                                             ? default(string[])
                                             : new string[1] {
                        match.Groups["separador"].Value
                    };
                    lstIntEpisodiosAbsolutos = new List <int>();

                    foreach (
                        string item in
                        match.Groups["episodes"].Value.Split(separador, StringSplitOptions.RemoveEmptyEntries))
                    {
                        lstIntEpisodiosAbsolutos.Add(int.Parse(Regex.Replace(item, @"[^\d]", "")));
                    }

                    nNrAbsoluto = lstIntEpisodiosAbsolutos[0];

                    bool retorno = SetarAtributosEpisodioIdentificado();

                    if (!string.IsNullOrWhiteSpace(sDsTituloSerieTemp))
                    {
                        oSerie.sDsTitulo = sDsTituloSerieTemp;
                    }

                    return(retorno);
                }
            }
            catch (Exception e)
            {
                new MediaManagerException(e).TratarException(Mensagens.Ocorreu_um_erro_ao_reconhecer_o_episódio + sDsFilepath);
            }

            return(false);
        }