コード例 #1
0
        public async Task <ActionResult> PostKnowledgeEntryAsync(
            [EnsureNotNull][FromBody] KnowledgeEntryRecord Record
            )
        {
            Record.NewId();
            Record.Touch();
            await _knowledgeEntryService.InsertOneAsync(Record);

            return(Ok(Record.Id));
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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());
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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>());
        }