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