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 /// Create a display theme from a theme
static member FromTheme inUseFunc (theme: 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 { Id = string theme.Id
Name = theme.Name Name = theme.Name
Version = theme.Version Version = theme.Version

View File

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

View File

@ -399,8 +399,11 @@ module Theme =
let! _ = loadFromZip themeId stream data let! _ = loadFromZip themeId stream data
do! ThemeAssetCache.refreshTheme themeId data do! ThemeAssetCache.refreshTheme themeId data
TemplateCache.invalidateTheme themeId 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 // 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! themeFile.CopyToAsync file
do! addMessage ctx do! addMessage ctx
{ UserMessage.Success with { UserMessage.Success with
@ -435,7 +438,7 @@ module Theme =
| _ -> | _ ->
match! data.Theme.Delete (ThemeId themeId) with match! data.Theme.Delete (ThemeId themeId) with
| true -> | true ->
let zippedTheme = $"./themes/{themeId}-theme.zip" let zippedTheme = Path.Combine(".", "themes", $"{themeId}-theme.zip")
if File.Exists zippedTheme then File.Delete zippedTheme if File.Exists zippedTheme then File.Delete zippedTheme
do! addMessage ctx { UserMessage.Success with Message = $"Theme ID {themeId} deleted successfully" } do! addMessage ctx { UserMessage.Success with Message = $"Theme ID {themeId} deleted successfully" }
return! all next ctx 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 // Load admin and default themes, and all themes in the /themes directory
do! Maintenance.loadTheme [| ""; "./admin-theme.zip" |] app.Services do! Maintenance.loadTheme [| ""; "./admin-theme.zip" |] app.Services
do! Maintenance.loadTheme [| ""; "./default-theme.zip" |] app.Services do! Maintenance.loadTheme [| ""; "./default-theme.zip" |] app.Services
if Directory.Exists "./themes" then let themePath = Path.Combine(".", "themes")
for themeFile in Directory.EnumerateFiles("./themes", "*-theme.zip") do if Directory.Exists themePath then
for themeFile in Directory.EnumerateFiles(themePath, "*-theme.zip") do
do! Maintenance.loadTheme [| ""; themeFile |] app.Services do! Maintenance.loadTheme [| ""; themeFile |] app.Services
let _ = app.UseForwardedHeaders() let _ = app.UseForwardedHeaders()

View File

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

View File

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

View File

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