Release v2.2 #51
@ -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
|
||||
|
@ -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" {
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"Generator": "myWebLog 2.1.1",
|
||||
"Generator": "myWebLog 2.2",
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"MyWebLog.Handlers": "Information"
|
||||
|
@ -1,2 +1,2 @@
|
||||
myWebLog Admin
|
||||
2.1.1
|
||||
2.2
|
@ -1,2 +1,2 @@
|
||||
myWebLog Default Theme
|
||||
2.1.1
|
||||
2.2
|
Loading…
Reference in New Issue
Block a user