Skip to content

Commit

Permalink
JSON loading and saving.
Browse files Browse the repository at this point in the history
  • Loading branch information
gitmylo committed Jun 8, 2023
1 parent 9f380e9 commit 1739129
Show file tree
Hide file tree
Showing 16 changed files with 96 additions and 9 deletions.
101 changes: 94 additions & 7 deletions TavernAICardLib/TavernAiCard.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.Text.Json;
using System.Text.Json.Serialization;
using MetadataExtractor;
using Directory = System.IO.Directory;

namespace TavernAICardLib;

Expand Down Expand Up @@ -34,22 +35,41 @@ public TavernAiCard(Image? image)
this.Image = image;
}

public static string[] FileTypes = {".png", ".webp", ".jpg", ".jpeg"};
public static string[] ImageFileTypes = {".png", ".webp", ".jpg", ".jpeg"};
public static string[] JsonFileTypes = {".json"};

private static Dictionary<string[], CardLoader> _filePathEndsWith = new()
private static Dictionary<string[], CardLoader> _cardLoaders = new()
{
{FileTypes, new ImageCardLoader()},
{ImageFileTypes, new ImageCardLoader()},
{JsonFileTypes, new JsonCardLoader()}
};

private static Dictionary<string[], CardSaver> _cardSavers = new()
{
{ImageFileTypes, new ImageCardSaver()},
{JsonFileTypes, new JsonCardSaver()}
};

public static TavernAiCard? Load(string filePath)
{
foreach (var key in _filePathEndsWith.Keys)
foreach (var key in _cardLoaders.Keys)
foreach (var end in key)
if (filePath.ToLower().EndsWith(end))
return _filePathEndsWith[key].Load(filePath);
return _cardLoaders[key].Load(filePath);

return null;
}

public void Save(string filePath)
{
foreach (var key in _cardSavers.Keys)
foreach (var end in key)
if (filePath.ToLower().EndsWith(end))
{
_cardSavers[key].Save(filePath, this);
return;
}
}
}

public class Extensions
Expand All @@ -59,7 +79,12 @@ public class Extensions

public abstract class CardLoader
{
public abstract TavernAiCard Load(string filePath);
public abstract TavernAiCard? Load(string filePath);
}

public abstract class CardSaver
{
public abstract void Save(string filePath, TavernAiCard card);
}

public class ImageCardLoader : CardLoader
Expand Down Expand Up @@ -92,6 +117,68 @@ public override TavernAiCard Load(string filePath)
}
}
}
return new TavernAiCard(image);

throw new NoMetaDataException(filePath);
}
}

public class JsonCardLoader : CardLoader
{
public override TavernAiCard? Load(string filePath)
{
string jsonData = File.ReadAllText(filePath);
TavernAiCard? card = JsonSerializer.Deserialize<TavernAiCard>(jsonData, new JsonSerializerOptions()
{
IncludeFields = true
});
if (card != null)
{
return card;
}

throw new NoMetaDataException(filePath);
}
}

public class JsonCardSaver : CardSaver
{
public override void Save(string filePath, TavernAiCard card)
{
var dirName = Path.GetDirectoryName(filePath);
if (dirName == null) return;
if (!string.IsNullOrWhiteSpace(dirName)) Directory.CreateDirectory(dirName);
File.WriteAllText(filePath, JsonSerializer.Serialize(card, new JsonSerializerOptions()
{
WriteIndented = true
}));
}
}

public class ImageCardSaver : CardSaver
{
public override void Save(string filePath, TavernAiCard card)
{
if (card.Image == null) throw new NoImageException(filePath);
throw new NotImplementedException();
}
}

public class NoImageException : Exception
{
public NoImageException(string fileName)
{
Message = $"Could not save {fileName}, Image is missing.";
}

public override string Message { get; }
}

public class NoMetaDataException : Exception
{
public NoMetaDataException(string fileName)
{
Message = $"Failed to load {fileName}, No metadata.";
}

public override string Message { get; }
}
Binary file modified TavernAICardLib/bin/Debug/net6.0/TavernAICardLib.dll
Binary file not shown.
Binary file modified TavernAICardLib/bin/Debug/net6.0/TavernAICardLib.pdb
Binary file not shown.
Binary file modified TavernAICardLib/bin/Debug/net6.0/ref/TavernAICardLib.dll
Binary file not shown.
Binary file modified TavernAICardLib/obj/Debug/net6.0/TavernAICardLib.dll
Binary file not shown.
Binary file modified TavernAICardLib/obj/Debug/net6.0/TavernAICardLib.pdb
Binary file not shown.
Binary file modified TavernAICardLib/obj/Debug/net6.0/ref/TavernAICardLib.dll
Binary file not shown.
2 changes: 1 addition & 1 deletion TavernAICardLibTest/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@
{
Console.WriteLine(card.Name);
card.Name = "Waltuh White";

card.Save("Waltuh White.json");
}
Binary file modified TavernAICardLibTest/bin/Debug/net6.0/TavernAICardLib.dll
Binary file not shown.
Binary file modified TavernAICardLibTest/bin/Debug/net6.0/TavernAICardLib.pdb
Binary file not shown.
Binary file modified TavernAICardLibTest/bin/Debug/net6.0/TavernAICardLibTest.dll
Binary file not shown.
Binary file modified TavernAICardLibTest/bin/Debug/net6.0/TavernAICardLibTest.pdb
Binary file not shown.
Binary file not shown.
Binary file modified TavernAICardLibTest/obj/Debug/net6.0/TavernAICardLibTest.dll
Binary file not shown.
Binary file modified TavernAICardLibTest/obj/Debug/net6.0/TavernAICardLibTest.pdb
Binary file not shown.
2 changes: 1 addition & 1 deletion TavernAICardLibTest/obj/rider.project.restore.info
Original file line number Diff line number Diff line change
@@ -1 +1 @@
16862373860840567
16862408314810030

0 comments on commit 1739129

Please sign in to comment.