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); } }
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); }