private static Movie MergeMovie(IVerifiedMovie selectedMovie, TorrentSearchResult selectedTorrent = null, ITorrentAddedResponse result = null) { return(new Movie { Title = selectedMovie.Title, ImdbId = selectedMovie.Id, ImdbScore = selectedMovie.Score, MetacriticScore = selectedMovie.ScoreMetacritic, TorrentName = selectedTorrent?.Name, TorrentClientTorrentId = result?.TorrentId ?? -1, TorrentHash = result?.Hash, ImageUrl = selectedMovie.ImageUrl, SizeGb = selectedTorrent?.SizeGb ?? -1, Genres = selectedMovie.Genres, Year = selectedMovie.ReleaseYear, Director = selectedMovie.Director, Creators = selectedMovie.Creators, Actors = selectedMovie.Actors, Description = selectedMovie.Description }); }
public TorrentDetail GetTorrentDetail(ITorrentDetailParser torrentDetailParser, Uri baseUri, TorrentSearchResult searchResult) { searchResult.TorrentDetail = GetTorrentDetail(torrentDetailParser, baseUri, searchResult.RelativeDetailUrl); return(searchResult.TorrentDetail); }
public TorrentDetail GetTorrentDetail(ITorrentDetailParser torrentDetailParser, Uri baseUri, TorrentSearchResult searchResult) { Contract.Requires(torrentDetailParser != null); Contract.Requires(baseUri != null); Contract.Requires(searchResult != null); searchResult.TorrentDetail = GetTorrentDetail(torrentDetailParser, baseUri, searchResult.RelativeDetailUrl); return(searchResult.TorrentDetail); }
public static int CalculateTorrentScore(TorrentSearchResult torrent, string[] threeLetterLanguageCodes) { var score = 0; var name = torrent.Name.ToLowerInvariant(); // TODO: Convert to dictionary? var nameChunks = new List <string>(); nameChunks.AddRange(name.Split(" - ")); nameChunks.AddRange(name.Split("-")); nameChunks.AddRange(name.Split(".")); nameChunks.AddRange(name.Split(" ")); nameChunks = nameChunks.Distinct().ToList(); var fulltextTags = TorrentScoring.Tags.Where(x => x.Key.Contains(" - ") || x.Key.Contains("-") || x.Key.Contains(".") || x.Key.Contains(" ")); var exactTags = TorrentScoring.Tags.Except(fulltextTags); // Rate movies with language tags higher foreach (var lang in threeLetterLanguageCodes) { if (name.IndexOf(lang) >= 0) { score += 1000; } // Probably less precise, hence the lower score try { if (name.IndexOf(CountryCodes.ConvertThreeLetterNameToTwoLetterName(lang)) >= 0) { score += 500; } } catch (Exception _) { // we found no match. } } // Look for fulltext tag mmatch, for instance where the tag itself has any of the otherwise splitted characters and the matching would lose meaning foreach (var tag in fulltextTags.Where(x => x.Value == TorrentScoring.BannedTag)) { if (name.IndexOf(tag.Key.ToLowerInvariant()) >= 0) { return(TorrentScoring.BannedTag); } } foreach (var tag in fulltextTags) { if (name.IndexOf(tag.Key.ToLowerInvariant()) >= 0) { score += tag.Value; } } // split the long torrent name by the dots and look for exact tag matches foreach (var tag in exactTags.Where(x => x.Value == TorrentScoring.BannedTag)) { if (nameChunks.Contains(tag.Key.ToLowerInvariant())) { return(TorrentScoring.BannedTag); } } foreach (var tag in exactTags) { if (nameChunks.Contains(tag.Key.ToLowerInvariant())) { score += tag.Value; } } return(score); }