示例#1
0
        public void AddEntry(string entry, DictionaryEntry dictionaryEntry, string normalizedHash = "")
        {
            if (entry.Contains(" "))
            {
                //Entry is a phrase - also add with a dictionary entry hash (first letter of each word)
                var phraseAutoCompleteHash = entry.NormaliseAndRemoveRepeatingCharactersAndHandlePhrases(false);
                AddEntry(phraseAutoCompleteHash, dictionaryEntry);
            }

            normalizedHash = string.IsNullOrWhiteSpace(normalizedHash)
                                                                ? entry.NormaliseAndRemoveRepeatingCharactersAndHandlePhrases(false)
                                                                : normalizedHash;

            if (!string.IsNullOrWhiteSpace(normalizedHash))
            {
                AddToDictionaryWorker(entry, normalizedHash, dictionaryEntry);

                if (!wordsIndex.Contains(normalizedHash))
                {
                    wordsIndex.Add(normalizedHash);
                }
            }

            var ngrams   = ToNGrams(entry).ToList();
            var metaData = new EntryMetadata(dictionaryEntry.Entry, dictionaryEntry.UsageCount, ngrams.Count);

            foreach (var ngram in ngrams)
            {
                AddToDictionaryWorker(entry, ngram, metaData, true);
            }
        }
示例#2
0
        public void AddEntry(string entry, DictionaryEntry dictionaryEntry)
        {
            if (entry.Contains(" "))
            {
                //Entry is a phrase - also add with a dictionary entry hash (first letter of each word)
                var phraseAutoCompleteHash = entry.NormaliseAndRemoveRepeatingCharactersAndHandlePhrases(false);
                AddEntry(phraseAutoCompleteHash, dictionaryEntry);
            }

            var ngrams   = ToNGrams(entry).ToList();
            var metaData = new EntryMetadata(dictionaryEntry, ngrams.Count);

            foreach (var ngram in ngrams)
            {
                if (entries.ContainsKey(ngram))
                {
                    entries[ngram].Add(metaData);
                }
                else
                {
                    entries[ngram] = new HashSet <EntryMetadata> {
                        metaData
                    };
                }
            }
        }
        public async Task <EntryMetadata> SetEntryDataExpiryTime(int competitionId, EntryMetadata metadata)
        {
            var competitionEntity = await _gameService.GetGameAsync(competitionId);

            var competitionMetadata = competitionEntity.Metadata;

            var newExpiry = DateTime.UtcNow.AddSeconds(competitionMetadata.EntryExpiryInSeconds.Value);

            metadata.SetExpiryTime(((DateTimeOffset)newExpiry).ToUnixTimeSeconds());

            return(metadata);
        }
示例#4
0
        public void AddEntry(string entry, DictionaryEntry dictionaryEntry)
        {
            var ngrams = ToNGrams(entry).ToList();
            var metaData = new EntryMetadata(dictionaryEntry, ngrams.Count());

            foreach (var ngram in ngrams)
            {
                if (entries.ContainsKey(ngram))
                {
                    entries[ngram].Add(metaData);
                }
                else
                {
                    entries[ngram] = new HashSet<EntryMetadata> {metaData};
                }
            }
        }
示例#5
0
        public void AddEntry(string entry, DictionaryEntry dictionaryEntry)
        {
            var ngrams   = ToNGrams(entry).ToList();
            var metaData = new EntryMetadata(dictionaryEntry, ngrams.Count());

            foreach (var ngram in ngrams)
            {
                if (entries.ContainsKey(ngram))
                {
                    entries[ngram].Add(metaData);
                }
                else
                {
                    entries[ngram] = new HashSet <EntryMetadata> {
                        metaData
                    };
                }
            }
        }
示例#6
0
        internal static async Task DownloadMetadataAsync(
            string baseUrl, int startIndex, int count,
            string entryJsonPath, string x265JsonPath, string h264JsonPath, string ytsJsonPath, string libraryJsonPath,
            Action <string>?log = null)
        {
            log ??= message => Trace.WriteLine(message);
            List <string> entryLinks = new();

            using WebClient webClient = new();
            await Enumerable
            .Range(startIndex, count)
            .Select(index => $"{baseUrl}/page/{index}/")
            .ForEachAsync(async url =>
            {
                try
                {
                    string html = await Retry.FixedIntervalAsync(async() => await webClient.DownloadStringTaskAsync(url));
                    CQ listCQ   = html;
                    log($"Done {url}");
                    listCQ
                    .Find("h1.entry-title a")
                    .Select(entryLink => entryLink.GetAttribute("href"))
                    .ForEach(entryLinks.Add);
                }
                catch (Exception exception) when(exception.IsNotCritical())
                {
                    log(exception.ToString());
                }
            });

            ConcurrentDictionary <string, EntryMetadata> entryMetadata = new();
            await entryLinks.ParallelForEachAsync(async entryLink =>
            {
                using WebClient webClient = new();
                try
                {
                    string html  = await Retry.FixedIntervalAsync(async() => await webClient.DownloadStringTaskAsync(entryLink));
                    CQ entryCQ   = html;
                    string title = entryCQ.Find("h1.entry-title").Text().Trim();
                    log($"Done {title} {entryLink}");
                    entryMetadata[entryLink] = new EntryMetadata(
                        title,
                        entryCQ.Find("div.entry-content").Html());
                }
                catch (Exception exception) when(exception.IsNotCritical())
                {
                    log(exception.ToString());
                }
            }, 4);

            string jsonString = JsonSerializer.Serialize(entryMetadata, new() { WriteIndented = true });
            await File.WriteAllTextAsync(entryJsonPath, jsonString);

            Dictionary <string, RarbgMetadata[]> x265Metadata = JsonSerializer.Deserialize <Dictionary <string, RarbgMetadata[]> >(await File.ReadAllTextAsync(x265JsonPath)) !;
            Dictionary <string, RarbgMetadata[]> h264Metadata = JsonSerializer.Deserialize <Dictionary <string, RarbgMetadata[]> >(await File.ReadAllTextAsync(h264JsonPath)) !;
            Dictionary <string, YtsMetadata[]>   ytsMetadata  = JsonSerializer.Deserialize <Dictionary <string, YtsMetadata[]> >(await File.ReadAllTextAsync(ytsJsonPath)) !;
            Dictionary <string, Dictionary <string, VideoMetadata> > libraryMetadata = JsonSerializer.Deserialize <Dictionary <string, Dictionary <string, VideoMetadata> > >(await File.ReadAllTextAsync(libraryJsonPath)) !;

            entryMetadata
            .SelectMany(entry => Regex
                        .Matches(entry.Value.Content, "imdb.com/title/(tt[0-9]+)")
                        .Where(match => match.Success)
                        .Select(match => (Link: entry.Key, match.Groups[1].Value)))
            .Distinct(imdbId => imdbId.Value)
            .ForEach(imdbId =>
            {
                if (libraryMetadata.ContainsKey(imdbId.Value) && libraryMetadata[imdbId.Value].Any())
                {
                    libraryMetadata[imdbId.Value].ForEach(video => log(video.Key));
                    log(string.Empty);
                    return;
                }

                if (x265Metadata.ContainsKey(imdbId.Value))
                {
                    log(imdbId.Link);
                    x265Metadata[imdbId.Value].ForEach(metadata => log($"{metadata.Link} {metadata.Title}"));
                    log(string.Empty);
                    return;
                }

                if (h264Metadata.ContainsKey(imdbId.Value))
                {
                    log(imdbId.Link);
                    h264Metadata[imdbId.Value].ForEach(metadata => log($"{metadata.Link} {metadata.Title}"));
                    log(string.Empty);
                    return;
                }

                if (ytsMetadata.ContainsKey(imdbId.Value))
                {
                    log(imdbId.Link);
                    ytsMetadata[imdbId.Value].ForEach(metadata => log($"{metadata.Link} {metadata.Title}"));
                    log(string.Empty);
                }
            });
        }
示例#7
0
        public void AddEntry(string entry, DictionaryEntry dictionaryEntry)
        {
            if (entry.Contains(" "))
            {
                //Entry is a phrase - also add with a dictionary entry hash (first letter of each word)
                var phraseAutoCompleteHash = entry.CreateDictionaryEntryHash(false);
                AddEntry(phraseAutoCompleteHash, dictionaryEntry);
            }

            var ngrams = ToNGrams(entry).ToList();
            var metaData = new EntryMetadata(dictionaryEntry, ngrams.Count);

            foreach (var ngram in ngrams)
            {
                if (entries.ContainsKey(ngram))
                {
                    entries[ngram].Add(metaData);
                }
                else
                {
                    entries[ngram] = new HashSet<EntryMetadata> {metaData};
                }
            }
        }