Create theme dir if needed (#49)

- Use Path.Combine throughout
- Update theme versions
- Update generator version
This commit is contained in:
Daniel J. Summers 2024-06-19 17:02:05 -04:00
parent f2f766fc05
commit f59566a3d3
7 changed files with 25 additions and 16 deletions

View File

@ -154,7 +154,9 @@ type DisplayTheme = {
/// Create a display theme from a theme
static member FromTheme inUseFunc (theme: Theme) =
let fileName = if string theme.Id = "default" then "default-theme.zip" else $"./themes/{theme.Id}-theme.zip"
let fileName =
if string theme.Id = "default" then "default-theme.zip"
else Path.Combine(".", "themes", $"{theme.Id}-theme.zip")
{ Id = string theme.Id
Name = theme.Name
Version = theme.Version

View File

@ -118,16 +118,19 @@ let displayThemeTests = testList "DisplayTheme.FromTheme" [
Expect.isFalse model.IsOnDisk "IsOnDisk should not have been set"
}
test "succeeds when a non-default theme is not in use and is on disk" {
let dir = Directory.CreateDirectory "themes"
let file = File.Create "./themes/another-theme.zip"
let dir = Directory.CreateDirectory "themes"
try
let model = DisplayTheme.FromTheme (fun _ -> false) { theme with Id = ThemeId "another" }
Expect.isFalse model.IsInUse "IsInUse should not have been set"
Expect.isTrue model.IsOnDisk "IsOnDisk should have been set"
let testFile = Path.Combine(".", "themes", "another-theme.zip")
let file = File.Create testFile
try
let model = DisplayTheme.FromTheme (fun _ -> false) { theme with Id = ThemeId "another" }
Expect.isFalse model.IsInUse "IsInUse should not have been set"
Expect.isTrue model.IsOnDisk "IsOnDisk should have been set"
finally
file.Close()
file.Dispose()
File.Delete testFile
finally
file.Close()
file.Dispose()
File.Delete "./themes/another-theme.zip"
dir.Delete()
}
test "succeeds when the default theme is on disk" {

View File

@ -399,8 +399,11 @@ module Theme =
let! _ = loadFromZip themeId stream data
do! ThemeAssetCache.refreshTheme themeId data
TemplateCache.invalidateTheme themeId
// Ensure the themes directory exists
let themeDir = Path.Combine(".", "themes")
if not (Directory.Exists themeDir) then Directory.CreateDirectory themeDir |> ignore
// Save the .zip file
use file = new FileStream($"./themes/{themeId}-theme.zip", FileMode.Create)
use file = new FileStream(Path.Combine(".", "themes", $"{themeId}-theme.zip"), FileMode.Create)
do! themeFile.CopyToAsync file
do! addMessage ctx
{ UserMessage.Success with
@ -435,7 +438,7 @@ module Theme =
| _ ->
match! data.Theme.Delete (ThemeId themeId) with
| true ->
let zippedTheme = $"./themes/{themeId}-theme.zip"
let zippedTheme = Path.Combine(".", "themes", $"{themeId}-theme.zip")
if File.Exists zippedTheme then File.Delete zippedTheme
do! addMessage ctx { UserMessage.Success with Message = $"Theme ID {themeId} deleted successfully" }
return! all next ctx

View File

@ -218,8 +218,9 @@ let main args =
// Load admin and default themes, and all themes in the /themes directory
do! Maintenance.loadTheme [| ""; "./admin-theme.zip" |] app.Services
do! Maintenance.loadTheme [| ""; "./default-theme.zip" |] app.Services
if Directory.Exists "./themes" then
for themeFile in Directory.EnumerateFiles("./themes", "*-theme.zip") do
let themePath = Path.Combine(".", "themes")
if Directory.Exists themePath then
for themeFile in Directory.EnumerateFiles(themePath, "*-theme.zip") do
do! Maintenance.loadTheme [| ""; themeFile |] app.Services
let _ = app.UseForwardedHeaders()

View File

@ -1,5 +1,5 @@
{
"Generator": "myWebLog 2.1.1",
"Generator": "myWebLog 2.2",
"Logging": {
"LogLevel": {
"MyWebLog.Handlers": "Information"

View File

@ -1,2 +1,2 @@
myWebLog Admin
2.1.1
2.2

View File

@ -1,2 +1,2 @@
myWebLog Default Theme
2.1.1
2.2