/// <summary> /// </summary> /// <param name="userFilename">File Name for the </param> /// <param name="progress"></param> /// <returns></returns> public static async Task <UserSettings> SetupNewSite(string userFilename, IProgress <string> progress) { if (!FolderFileUtility.IsValidWindowsFileSystemFilename(userFilename)) { throw new InvalidDataException("New site input must be a valid filename."); } var newSettings = new UserSettings(); var rootDirectory = new DirectoryInfo(Path.Combine(StorageDirectory().FullName, userFilename)); progress?.Report("Creating new settings - looking for home..."); var fileNumber = 1; while (rootDirectory.Exists) { rootDirectory = new DirectoryInfo(Path.Combine(StorageDirectory().FullName, $"{userFilename}-{fileNumber}")); rootDirectory.Refresh(); progress?.Report($"Trying {rootDirectory.FullName}..."); fileNumber++; } rootDirectory.Create(); var siteRoot = new DirectoryInfo(Path.Combine(rootDirectory.FullName, "GeneratedSite")); newSettings.LocalSiteRootDirectory = siteRoot.FullName; progress?.Report($"Local Site Root set to {siteRoot.FullName}"); newSettings.DatabaseFile = Path.Combine(rootDirectory.FullName, $"PointlessWaymarksCmsDatabase-{userFilename}.db"); var mediaDirectory = new DirectoryInfo(Path.Combine(rootDirectory.FullName, "MediaArchive")); newSettings.LocalMediaArchive = mediaDirectory.FullName; progress?.Report("Adding fake default values..."); newSettings.DefaultCreatedBy = "Pointless Waymarks CMS"; newSettings.SiteName = userFilename; newSettings.SiteUrl = "localhost.com"; newSettings.SiteKeywords = "new,site"; newSettings.SiteSummary = "A new site."; newSettings.SiteAuthors = "Pointless Waymarks CMS"; newSettings.SiteEmailTo = "*****@*****.**"; SettingsFileName = Path.Combine(rootDirectory.FullName, $"PointlessWaymarksCmsSettings-{userFilename}.json"); progress?.Report("Writing Settings"); await WriteSettings(newSettings); progress?.Report("Setting up directory structure."); newSettings.VerifyOrCreateAllTopLevelFolders(progress); return(newSettings); }