public static GenerationReturn CreateIfItDoesNotExist(this DirectoryInfo directoryInfo)
        {
            if (directoryInfo.Exists)
            {
                return(GenerationReturn.Success($"Create If Does Not Exists - {directoryInfo.FullName} Already Exists")
                       .Result);
            }

            try
            {
                directoryInfo.Create();
            }
            catch (Exception e)
            {
                GenerationReturn
                .Error(
                    $"Trying to create Directory {directoryInfo.FullName ?? "[No Name]"}  resulted in an Exception.",
                    null, e).Wait();
            }

            return(GenerationReturn.Success($"Created {directoryInfo.FullName}").Result);
        }
Esempio n. 2
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);
        }
Esempio n. 3
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
            });
        }