Example #1
0
 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);
 }
Example #3
0
        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);
        }
Example #4
0
        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);
        }