public MediaContainer Search(IProvider prov, string UserId, string limit, string query, bool searchTag, bool nocast = false) { BreadCrumbs info = prov.UseBreadCrumbs ? new BreadCrumbs { Key = prov.ConstructSearchUrl(UserId, limit, query, searchTag), Title = "Search for '" + query + "'" } : null; BaseObject ret = new BaseObject(prov.NewMediaContainer(MediaContainerTypes.Show, "Search for '" + query + "'", true, true, info)); int lim; if (!int.TryParse(limit, out lim)) lim = 100; JMMUser user = Helper.GetUser(UserId); if (user == null) return new MediaContainer() { ErrorString = "User Not Found" }; List<Video> ls = new List<Video>(); int cnt = 0; IEnumerable<AnimeSeries> series = searchTag ? RepoFactory.AnimeSeries.GetAll() .Where( a => a.Contract != null && a.Contract.AniDBAnime != null && a.Contract.AniDBAnime.AniDBAnime != null && (a.Contract.AniDBAnime.AniDBAnime.AllTags.Contains(query, StringComparer.InvariantCultureIgnoreCase) || a.Contract.AniDBAnime.CustomTags.Select(b => b.TagName) .Contains(query, StringComparer.InvariantCultureIgnoreCase))) : RepoFactory.AnimeSeries.GetAll() .Where( a => a.Contract != null && a.Contract.AniDBAnime != null && a.Contract.AniDBAnime.AniDBAnime != null && string.Join(",", a.Contract.AniDBAnime.AniDBAnime.AllTitles).IndexOf(query, 0, StringComparison.InvariantCultureIgnoreCase) >= 0); //List<AniDB_Anime> animes = searchTag ? RepoFactory.AniDB_Anime.SearchByTag(query) : RepoFactory.AniDB_Anime.SearchByName(query); foreach (AnimeSeries ser in series) { if (!user.AllowedSeries(ser)) continue; Video v = ser.GetPlexContract(user.JMMUserID)?.Clone<Directory>(); if (v != null) { switch (ser.Contract.AniDBAnime.AniDBAnime.AnimeType) { case (int)enAnimeType.Movie: v.SourceTitle = "Anime Movies"; break; case (int)enAnimeType.OVA: v.SourceTitle = "Anime Ovas"; break; case (int)enAnimeType.Other: v.SourceTitle = "Anime Others"; break; case (int)enAnimeType.TVSeries: v.SourceTitle = "Anime Series"; break; case (int)enAnimeType.TVSpecial: v.SourceTitle = "Anime Specials"; break; case (int)enAnimeType.Web: v.SourceTitle = "Anime Web Clips"; break; } if (nocast) v.Roles = null; v.GenerateKey(prov, user.JMMUserID); ls.Add(prov, v, info); } cnt++; if (cnt == lim) break; } ret.MediaContainer.RandomizeArt(ls); ret.MediaContainer.Childrens = Helper.ConvertToDirectory(ls); return ret.GetStream(prov); }