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 }); }
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 }); }
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 }
// 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]); }
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); }
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 }); }