public async Task <ActionResult> PostKnowledgeEntryAsync( [EnsureNotNull][FromBody] KnowledgeEntryRecord Record ) { Record.NewId(); Record.Touch(); await _knowledgeEntryService.InsertOneAsync(Record); return(Ok(Record.Id)); }
private async Task ProcessLinksAsync(KnowledgeEntryRecord knowledgeEntry, string url) { MatchCollection m = Regex.Matches(url, @" \* \[\[([^\|]+)\|([^\]]+)\]\]", RegexOptions.Singleline); var imageIds = new List <Guid>(); var linkFragments = new List <LinkFragment>(); foreach (Match linkMatch in m) { var target = linkMatch.Groups[1].Value.Trim(); var name = linkMatch.Groups[2].Value.Trim(); if (name.Equals("image", StringComparison.CurrentCultureIgnoreCase)) { // Get the image... try { var imageBytes = await GetImageAsync(target); var imageId = await _imageService.InsertOrUpdateImageAsync($"knowledge:{url.AsHashToGuid()}", imageBytes); imageIds.Add(imageId); } catch (HttpRequestException) { } } else { if (!Uri.IsWellFormedUriString(target, UriKind.Absolute) && Uri.IsWellFormedUriString($"http://{target}", UriKind.Absolute)) { target = $"http://{target}"; } if (Uri.IsWellFormedUriString(target, UriKind.Absolute)) { linkFragments.Add(new LinkFragment( LinkFragment.FragmentTypeEnum.WebExternal, name, target)); } } } knowledgeEntry.Links = linkFragments.ToArray(); knowledgeEntry.ImageIds = imageIds.ToArray(); }
public async Task <ActionResult> PutKnowledgeEntryAsync( [EnsureNotNull][FromBody][EnsureEntityIdMatches("Id")] KnowledgeEntryRecord Record, [EnsureNotNull][FromRoute] Guid Id) { var existingRecord = await _knowledgeEntryService.FindOneAsync(Id); if (existingRecord == null) { return(NotFound($"No record found with it {Id}")); } Record.Touch(); await _knowledgeEntryService.ReplaceOneAsync(Record); return(NoContent()); }
public async Task <int> ImportWikiFileAsync(string inputPath) { var importedKnowledgeGroups = new List <KnowledgeGroupRecord>(); var importedKnowledgeEntries = new List <KnowledgeEntryRecord>(); var content = File.ReadAllText(inputPath); MatchCollection m; m = Regex.Matches(content, @"<WRAP.*?>PARSE_START</WRAP>(.*)?<WRAP.*?>PARSE_END</WRAP>", RegexOptions.Singleline); if (m.Count != 1) { throw new InvalidDataException(); } m = Regex.Matches(m[0].Groups[1].Value, @"====([^=]+)====(.+?)((?=====)|$)", RegexOptions.Singleline); if (m.Count == 0) { throw new InvalidDataException(); } var i = 0; foreach (Match matchGroup in m) { var titleParts = matchGroup.Groups[1].Value.Split('|').Select(a => a.Trim()).ToList(); while (titleParts.Count < 3) { titleParts.Add(""); } var knowledgeGroup = new KnowledgeGroupRecord { Id = titleParts[0].AsHashToGuid(), Name = titleParts[0], Description = titleParts[1], FontAwesomeIconCharacterUnicodeAddress = titleParts[2], Order = i++ }; importedKnowledgeGroups.Add(knowledgeGroup); var entriesContent = matchGroup.Groups[2].Value; var entriesMatches = Regex.Matches(entriesContent, @"===([^=]+)===.+?<WRAP box[^>]*>(.+?)<\/WRAP>([^\<]*<WRAP lo[^>]*>([^\<]+)<\/WRAP>){0,1}", RegexOptions.Singleline); var j = 0; foreach (Match entryMatch in entriesMatches) { var knowledgeEntry = new KnowledgeEntryRecord { Id = $"{entryMatch.Groups[1].Value.Trim()}-{knowledgeGroup.Id}".AsHashToGuid(), KnowledgeGroupId = knowledgeGroup.Id, Title = entryMatch.Groups[1].Value.Trim(), Text = entryMatch.Groups[2].Value.Trim(), Order = j++ }; await ProcessLinksAsync(knowledgeEntry, entryMatch.Groups[3].Value.Trim()); importedKnowledgeEntries.Add(knowledgeEntry); } } int modifiedRecords = 0; var knowledgeGroups = UpdateKnowledgeGroups(importedKnowledgeGroups, _knowledgeGroupService, ref modifiedRecords); var knowledgeEntries = UpdateKnowledgeEntries(importedKnowledgeEntries, _knowledgeEntryService, ref modifiedRecords); modifiedRecords += (await CleanUpImagesAsync(knowledgeEntries)); return(modifiedRecords); }
private static void Main(string[] args) { var _client = new MongoClient("mongodb://127.0.0.1:27017"); var _database = _client.GetDatabase("app_dev"); BsonClassMapping.Register(); var builder = new ContainerBuilder(); builder.RegisterModule(new AutofacModule(_database)); builder.RegisterModule(new Server.Services.DependencyResolution.AutofacModule()); var container = builder.Build(); //var password = File.ReadAllText(@"c:\temp\efapppw.txt"); //var cookieContainer = new CookieContainer(); //using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer }) //using (var client = new HttpClient(handler)) //{ // var pairs = new List<KeyValuePair<string, string>> // { // new KeyValuePair<string, string>("u", "ef_app"), // new KeyValuePair<string, string>("p", password) // }; // var loginUri = @"https://wiki.eurofurence.org/?do=login"; // var requestUri = @"https://wiki.eurofurence.org/doku.php?id=ef22:it:mobileapp:coninfo&do=export_raw"; // var loginPayload = new FormUrlEncodedContent(pairs); // //var loginPayload = new StringContent($@"u=ef_app&p={password}"); // client.PostAsync(loginUri, loginPayload).Wait(); // var response = client.GetAsync(requestUri).Result; // var content = response.Content.ReadAsStringAsync().Result; //} var importedKnowledgeGroups = new List <KnowledgeGroupRecord>(); var importedKnowledgeEntries = new List <KnowledgeEntryRecord>(); var content = File.ReadAllText(@"c:\temp\wikicont.txt"); MatchCollection m; m = Regex.Matches(content, @"<WRAP.*?>PARSE_START</WRAP>(.*)?<WRAP.*?>PARSE_END</WRAP>", RegexOptions.Singleline); if (m.Count != 1) { throw new InvalidDataException(); } m = Regex.Matches(m[0].Groups[1].Value, @"====([^=]+)====(.+?)((?=====)|$)", RegexOptions.Singleline); if (m.Count == 0) { throw new InvalidDataException(); } var i = 0; foreach (Match matchGroup in m) { var titleParts = matchGroup.Groups[1].Value.Split('|').Select(a => a.Trim()).ToArray(); var knowledgeGroup = new KnowledgeGroupRecord { Id = titleParts[0].AsHashToGuid(), Name = titleParts[0], Description = titleParts[1], Order = i++ }; importedKnowledgeGroups.Add(knowledgeGroup); var entriesContent = matchGroup.Groups[2].Value; var entriesMatches = Regex.Matches(entriesContent, @"===([^=]+)===.+?<WRAP box[^>]*>(.+?)<\/WRAP>([^\<]*<WRAP lo[^>]*>([^\<]+)<\/WRAP>){0,1}", RegexOptions.Singleline); var j = 0; foreach (Match entryMatch in entriesMatches) { var knowledgeEntry = new KnowledgeEntryRecord { Id = entryMatch.Groups[1].Value.Trim().AsHashToGuid(), KnowledgeGroupId = knowledgeGroup.Id, Title = entryMatch.Groups[1].Value.Trim(), Text = entryMatch.Groups[2].Value.Trim(), Order = j++ }; importedKnowledgeEntries.Add(knowledgeEntry); } } UpdateKnowledgeGroups(importedKnowledgeGroups, container.Resolve <IKnowledgeGroupService>()); UpdateKnowledgeEntries(importedKnowledgeEntries, container.Resolve <IKnowledgeEntryService>()); }