Beispiel #1
0
        public Post GeneratePost()
        {
            Logger.LogInformation($"Starting {Type} generation.");
            var model    = ModelGenerator.GenerateModel();
            var postText = PostGenerator.GeneratePostText(model);

            Logger.LogInformation($"Finished {Type} generation.");
            return(new Post()
            {
                Content = postText, Type = Models.Options.PostTypes.AdmissionsByAge
            });
        }
Beispiel #2
0
        public Post GeneratePost()
        {
            Logger.LogInformation($"Starting {Type} generation.");
            var model    = ModelGenerator.GenerateModel();
            var postText = PostGenerator.GeneratePostText(model);

            Logger.LogInformation($"Starting {Type} generation.");
            return(new Post()
            {
                Content = postText, Type = Type
            });
        }
Beispiel #3
0
        public async Task G10_PostUpdateChangedDetectionTest()
        {
            var db = await Db.Context();

            var wikiQuotePost = db.PostContents.Single(x => x.Slug == IronwoodPostInfo.WikiQuotePostContent01.Slug);

            var allPhotos = db.PhotoContents.ToList();

            foreach (var loopPhotos in allPhotos)
            {
                wikiQuotePost.BodyContent += BracketCodePhotos.Create(loopPhotos);
            }

            wikiQuotePost.LastUpdatedBy = "Changed Html Test";
            wikiQuotePost.LastUpdatedOn = DateTime.Now;

            var saveResult =
                await PostGenerator.SaveAndGenerateHtml(wikiQuotePost, null, DebugTrackers.DebugProgressTracker());

            Assert.IsFalse(saveResult.generationReturn.HasError);

            var currentGenerationCount = db.GenerationLogs.Count();

            var currentGeneration = await db.GenerationLogs.OrderByDescending(x => x.GenerationVersion).FirstAsync();

            await HtmlGenerationGroups.GenerateChangedToHtml(DebugTrackers.DebugProgressTracker());

            currentGeneration = await db.GenerationLogs.OrderByDescending(x => x.GenerationVersion).FirstAsync();

            Assert.AreEqual(currentGenerationCount + 1, db.GenerationLogs.Count(),
                            $"Expected {currentGenerationCount + 1} generation logs - found {db.GenerationLogs.Count()}");

            var relatedContentEntries = await db.GenerationRelatedContents
                                        .Where(x => x.GenerationVersion == currentGeneration.GenerationVersion).ToListAsync();

            Assert.AreEqual(relatedContentEntries.Count, allPhotos.Count() + 1);
            Assert.AreEqual(relatedContentEntries.Select(x => x.ContentOne).Distinct().Count(), 2);
            Assert.AreEqual(relatedContentEntries.Select(x => x.ContentTwo).Count(), allPhotos.Count() + 1);
            Assert.AreEqual(
                relatedContentEntries.Select(x => x.ContentTwo).Except(allPhotos.Select(x => x.ContentId)).Count(), 1);
            Assert.AreEqual(
                allPhotos.Select(x => x.ContentId).Except(relatedContentEntries.Select(x => x.ContentTwo)).Count(), 0);

            var photoContent = UserSettingsSingleton.CurrentSettings().LocalSitePhotoDirectory()
                               .GetFiles("*.html", SearchOption.AllDirectories).ToList().Where(x =>
                                                                                               !x.Name.Contains("Daily") && !x.Name.Contains("Roll") && !x.Name.Contains("List")).ToList();

            photoContent.ForEach(x =>
                                 IronwoodHtmlHelpers.CheckGenerationVersionEquals(x, currentGeneration.GenerationVersion));


            wikiQuotePost = db.PostContents.Single(x => x.Slug == IronwoodPostInfo.WikiQuotePostContent01.Slug);

            wikiQuotePost.BodyContent =
                wikiQuotePost.BodyContent.Replace(BracketCodePhotos.Create(allPhotos.First()), "");

            wikiQuotePost.LastUpdatedBy = "Changed Html Test 02";
            wikiQuotePost.LastUpdatedOn = DateTime.Now;

            saveResult =
                await PostGenerator.SaveAndGenerateHtml(wikiQuotePost, null, DebugTrackers.DebugProgressTracker());

            Assert.IsFalse(saveResult.generationReturn.HasError);

            currentGenerationCount = db.GenerationLogs.Count();

            currentGeneration = await db.GenerationLogs.OrderByDescending(x => x.GenerationVersion).FirstAsync();

            await HtmlGenerationGroups.GenerateChangedToHtml(DebugTrackers.DebugProgressTracker());

            currentGeneration = await db.GenerationLogs.OrderByDescending(x => x.GenerationVersion).FirstAsync();

            Assert.AreEqual(currentGenerationCount + 1, db.GenerationLogs.Count(),
                            $"Expected {currentGenerationCount + 1} generation logs - found {db.GenerationLogs.Count()}");

            relatedContentEntries = await db.GenerationRelatedContents
                                    .Where(x => x.GenerationVersion == currentGeneration.GenerationVersion).ToListAsync();

            Assert.AreEqual(relatedContentEntries.Count, allPhotos.Count() - 1 + 1);
            Assert.AreEqual(relatedContentEntries.Select(x => x.ContentOne).Distinct().Count(), 2);
            Assert.AreEqual(relatedContentEntries.Select(x => x.ContentTwo).Count(), allPhotos.Count() - 1 + 1);
            Assert.AreEqual(
                relatedContentEntries.Select(x => x.ContentTwo).Except(allPhotos.Select(x => x.ContentId)).Count(), 1);
            Assert.AreEqual(
                allPhotos.Select(x => x.ContentId).Except(relatedContentEntries.Select(x => x.ContentTwo)).Count(), 1);

            photoContent = UserSettingsSingleton.CurrentSettings().LocalSitePhotoDirectory()
                           .GetFiles("*.html", SearchOption.AllDirectories).ToList().Where(x =>
                                                                                           !x.Name.Contains("Daily") && !x.Name.Contains("Roll") && !x.Name.Contains("List")).ToList();

            photoContent.ForEach(x =>
                                 IronwoodHtmlHelpers.CheckGenerationVersionEquals(x, currentGeneration.GenerationVersion));


            wikiQuotePost = db.PostContents.Single(x => x.Slug == IronwoodPostInfo.WikiQuotePostContent01.Slug);

            wikiQuotePost.BodyContent += $"{Environment.NewLine}Visit Ironwood Today!";

            wikiQuotePost.LastUpdatedBy = "Changed Html Test 02";
            wikiQuotePost.LastUpdatedOn = DateTime.Now;

            saveResult =
                await PostGenerator.SaveAndGenerateHtml(wikiQuotePost, null, DebugTrackers.DebugProgressTracker());

            Assert.IsFalse(saveResult.generationReturn.HasError);

            currentGenerationCount = db.GenerationLogs.Count();

            currentGeneration = await db.GenerationLogs.OrderByDescending(x => x.GenerationVersion).FirstAsync();

            await HtmlGenerationGroups.GenerateChangedToHtml(DebugTrackers.DebugProgressTracker());

            currentGeneration = await db.GenerationLogs.OrderByDescending(x => x.GenerationVersion).FirstAsync();

            Assert.AreEqual(currentGenerationCount + 1, db.GenerationLogs.Count(),
                            $"Expected {currentGenerationCount + 1} generation logs - found {db.GenerationLogs.Count()}");

            relatedContentEntries = await db.GenerationRelatedContents
                                    .Where(x => x.GenerationVersion == currentGeneration.GenerationVersion).ToListAsync();

            Assert.AreEqual(relatedContentEntries.Count, allPhotos.Count() - 1 + 1);
            Assert.AreEqual(relatedContentEntries.Select(x => x.ContentOne).Distinct().Count(), 2);
            Assert.AreEqual(relatedContentEntries.Select(x => x.ContentTwo).Count(), allPhotos.Count() - 1 + 1);
            Assert.AreEqual(
                relatedContentEntries.Select(x => x.ContentTwo).Except(allPhotos.Select(x => x.ContentId)).Count(), 1);
            Assert.AreEqual(
                allPhotos.Select(x => x.ContentId).Except(relatedContentEntries.Select(x => x.ContentTwo)).Count(), 1);

            //Todo: Check that the excluded photo is not regened
        }
Beispiel #4
0
    // Start is called before the first frame update
    void Start()
    {
        generator    = gameObject.GetComponent <PostGenerator>();
        loader       = gameObject.GetComponent <TextParser>();
        userMeter    = UserMeterGO.GetComponent <MeterHandler>();
        fakeMeter    = FakeMeterGO.GetComponent <MeterHandler>();
        DayCountText = DayCounterGO.GetComponent <Text>();
        currentRules = new List <GameObject>();

        RetryButton.GetComponent <Button>().onClick.AddListener(delegate { RetryButtonPressed(); });
        PlayAgainButton.GetComponent <Button>().onClick.AddListener(delegate { RetryButtonPressed(); });

        // The day starts at 0
        DayIndex          = 0;
        DayCountText.text = (DayIndex + 1).ToString();

        //set to the first day values by default: TODO change later
        postsLeftToday    = postsPerDay[0]; // do we need this? doesnt seem to do anything
        timeLeftInDay     = timePerDay;
        timeSinceLastPost = timesBetweenPosts[DayIndex];

        userHappiness = 50;
        fakeRating    = 50;

        userMeter.MaxValue = 100;
        fakeMeter.MaxValue = 100;

        RulesForDays = new List <RulesContainer>()
        {
            new RulesContainer(new List <string>()
            {
                "none"
            }),
            new RulesContainer(new List <string>()
            {
                "#Snake", "#Snakey"
            }),
            new RulesContainer(new List <string>()
            {
                "#Snek", "#Sneaky"
            }),
            new RulesContainer(new List <string>()
            {
                "#DefinitelyFrog", "#RealNews"
            }),
            new RulesContainer(new List <string>()
            {
                "#Yummy", "#Nom"
            }),
            new RulesContainer(new List <string>()
            {
                "#owo", "#FrogChamp"
            }),
            new RulesContainer(new List <string>()
            {
                "#LoL", "#FrogSsience"
            })
        };


        DisplayRule(RulesTexts[DayIndex]);
    }
Beispiel #5
0
        public static async Task <(bool hasError, string errorMessage)> SaveAndGenerateHtmlFromExcelImport(
            ExcelContentTableImportResults contentTableImportResult, IProgress <string> progress)
        {
            var errorList = new List <string>();

            var totalToUpdate = contentTableImportResult.ToUpdate.Count;
            var currentUpdate = 0;

            foreach (var loopUpdates in contentTableImportResult.ToUpdate)
            {
                currentUpdate++;

                progress?.Report($"Excel Import Update {currentUpdate} of {totalToUpdate}");

                GenerationReturn generationResult;
                switch (loopUpdates.ToUpdate)
                {
                case PhotoContent photo:
                {
                    generationResult = (await PhotoGenerator.SaveAndGenerateHtml(photo,
                                                                                 UserSettingsSingleton.CurrentSettings().LocalMediaArchivePhotoContentFile(photo), false,
                                                                                 null, progress)).generationReturn;
                    break;
                }

                case FileContent file:
                {
                    generationResult = (await FileGenerator.SaveAndGenerateHtml(file,
                                                                                UserSettingsSingleton.CurrentSettings().LocalMediaArchiveFileContentFile(file), false, null,
                                                                                progress)).generationReturn;
                    break;
                }

                case ImageContent image:
                {
                    generationResult = (await ImageGenerator.SaveAndGenerateHtml(image,
                                                                                 UserSettingsSingleton.CurrentSettings().LocalMediaArchiveImageContentFile(image), false,
                                                                                 null, progress)).generationReturn;
                    break;
                }

                case PointContentDto point:
                {
                    generationResult = (await PointGenerator.SaveAndGenerateHtml(point, null, progress))
                                       .generationReturn;
                    break;
                }

                case PostContent post:
                {
                    generationResult = (await PostGenerator.SaveAndGenerateHtml(post, null, progress))
                                       .generationReturn;
                    break;
                }

                case NoteContent note:
                {
                    generationResult = (await NoteGenerator.SaveAndGenerateHtml(note, null, progress))
                                       .generationReturn;
                    break;
                }

                case LinkContent link:
                {
                    generationResult = (await LinkGenerator.SaveAndGenerateHtml(link, null, progress))
                                       .generationReturn;
                    break;
                }

                default:
                    generationResult =
                        await GenerationReturn.Error("Excel Import - No Content Type Generator found?");

                    break;
                }

                if (!generationResult.HasError)
                {
                    progress?.Report(
                        $"Updated Content Id {loopUpdates.ToUpdate.ContentId} - Title {loopUpdates.Title} - Saved");
                }
                else
                {
                    errorList.Add(
                        $"Updating Failed: Content Id {loopUpdates} - Title {loopUpdates.Title} - Failed:{Environment.NewLine}{generationResult.GenerationNote}");
                }
            }

            if (errorList.Any())
            {
                return(true, string.Join(Environment.NewLine, errorList));
            }

            return(false, string.Empty);
        }
Beispiel #6
0
        public static async Task <ExcelContentTableImportResults> ImportExcelContentTable(IXLRange toProcess,
                                                                                          IProgress <string> progress)
        {
            if (toProcess == null || toProcess.Rows().Count() < 2)
            {
                return new ExcelContentTableImportResults
                       {
                           HasError   = true,
                           ErrorNotes = "Nothing to process",
                           ToUpdate   = new List <ExcelImportContentUpdateSuggestion>()
                       }
            }
            ;

            var headerInfo = new ExcelHeaderRow(toProcess.Row(1));

            var errorNotes = new List <string>();
            var updateList = new List <ExcelImportContentUpdateSuggestion>();

            var db = await Db.Context();

            var lastRow = toProcess.Rows().Last().RowNumber();

            progress?.Report($"{lastRow} to Process");

            foreach (var loopRow in toProcess.Rows().Skip(1))
            {
                var importResult = await ImportContentFromExcelRow(headerInfo, loopRow);

                if (importResult.hasError)
                {
                    errorNotes.Add($"Excel Row {loopRow.RowNumber()} - {importResult.errorNotes}");
                    continue;
                }

                try
                {
                    Db.DefaultPropertyCleanup(importResult.processContent);
                    importResult.processContent.Tags = Db.TagListCleanup(importResult.processContent.Tags);
                }
                catch
                {
                    await EventLogContext.TryWriteDiagnosticMessageToLog(
                        $"Excel Row {loopRow.RowNumber()} - Excel Import via dynamics - Tags threw an error on ContentId {importResult.processContent.ContentId ?? "New Entry"} - property probably not present",
                        "Excel Import");

                    continue;
                }

                Guid contentId   = importResult.processContent.ContentId;
                int  contentDbId = importResult.processContent.Id;

                string differenceString;

                if (contentDbId > 0)
                {
                    var currentDbEntry = await db.ContentFromContentId(contentId);

                    var compareLogic = new CompareLogic
                    {
                        Config = { MembersToIgnore = new List <string> {
                                       "LastUpdatedBy"
                                   }, MaxDifferences= 100 }
                    };
                    ComparisonResult comparisonResult =
                        compareLogic.Compare(currentDbEntry, importResult.processContent);

                    if (comparisonResult.AreEqual)
                    {
                        progress?.Report(
                            $"Excel Row {loopRow.RowNumber()} of {lastRow} - No Changes - Title: {currentDbEntry.Title}");
                        continue;
                    }

                    var friendlyReport = new UserFriendlyReport();
                    differenceString = friendlyReport.OutputString(comparisonResult.Differences);

                    importResult.processContent.LastUpdatedOn = DateTime.Now;
                }
                else
                {
                    differenceString = "New Entry";
                }

                GenerationReturn validationResult;

                switch (importResult.processContent)
                {
                case PhotoContent p:
                    validationResult = await PhotoGenerator.Validate(p,
                                                                     UserSettingsSingleton.CurrentSettings().LocalMediaArchivePhotoContentFile(p));

                    break;

                case FileContent f:
                    validationResult = await FileGenerator.Validate(f,
                                                                    UserSettingsSingleton.CurrentSettings().LocalMediaArchiveFileContentFile(f));

                    break;

                case ImageContent i:
                    validationResult = await ImageGenerator.Validate(i,
                                                                     UserSettingsSingleton.CurrentSettings().LocalMediaArchiveImageContentFile(i));

                    break;

                case PointContentDto pc:
                    validationResult = await PointGenerator.Validate(pc);

                    break;

                case PostContent pc:
                    validationResult = await PostGenerator.Validate(pc);

                    break;

                case LinkContent l:
                    validationResult = await LinkGenerator.Validate(l);

                    break;

                case NoteContent n:
                    validationResult = await NoteGenerator.Validate(n);

                    break;

                default:
                    validationResult =
                        await GenerationReturn.Error("Excel Import - No Content Type Generator found?");

                    break;
                }

                if (validationResult.HasError)
                {
                    errorNotes.Add($"Excel Row {loopRow.RowNumber()} - {validationResult.GenerationNote}");
                    progress?.Report($"Excel Row {loopRow.RowNumber()} of {lastRow} - Validation Error.");
                    continue;
                }

                updateList.Add(new ExcelImportContentUpdateSuggestion
                {
                    DifferenceNotes = differenceString,
                    Title           = importResult.processContent.Title,
                    ToUpdate        = importResult.processContent
                });

                progress?.Report(
                    $"Excel Row {loopRow.RowNumber()} of {lastRow} - Adding To Changed List ({updateList.Count}) - Title: {importResult.processContent.Title}");
            }

            if (!errorNotes.Any())
            {
                var internalContentIdDuplicates = updateList.Select(x => x.ToUpdate).GroupBy(x => x.ContentId)
                                                  .Where(x => x.Count() > 1).Select(x => x.Key).Cast <Guid>().ToList();

                if (internalContentIdDuplicates.Any())
                {
                    return new ExcelContentTableImportResults
                           {
                               HasError   = true,
                               ErrorNotes =
                                   $"Content Ids can only appear once in an update list - {string.Join(", ", internalContentIdDuplicates)}",
                               ToUpdate = updateList
                           }
                }
                ;

                var internalSlugDuplicates = updateList.Select(x => x.ToUpdate).Where(x => !(x is LinkContent))
                                             .GroupBy(x => x.Slug).Where(x => x.Count() > 1).Select(x => x.Key).Cast <string>().ToList();

                if (internalSlugDuplicates.Any())
                {
                    return new ExcelContentTableImportResults
                           {
                               HasError   = true,
                               ErrorNotes =
                                   $"This import appears to create duplicate slugs - {string.Join(", ", internalSlugDuplicates)}",
                               ToUpdate = updateList
                           }
                }
                ;
            }

            return(new ExcelContentTableImportResults
            {
                HasError = errorNotes.Any(),
                ErrorNotes = string.Join(Environment.NewLine, errorNotes),
                ToUpdate = updateList
            });
        }