Skip to content

Commit 208d8a1

Browse files
committed
Move SaveService to OtterGui.
1 parent d42a105 commit 208d8a1

File tree

2 files changed

+8
-100
lines changed

2 files changed

+8
-100
lines changed

OtterGui

Penumbra/Services/SaveService.cs

Lines changed: 7 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
using System;
2-
using System.IO;
3-
using System.Text;
4-
using Dalamud.Game;
52
using OtterGui.Classes;
63
using OtterGui.Log;
74
using Penumbra.Mods;
@@ -11,103 +8,14 @@ namespace Penumbra.Services;
118
/// <summary>
129
/// Any file type that we want to save via SaveService.
1310
/// </summary>
14-
public interface ISavable
15-
{
16-
/// <summary> The full file name of a given object. </summary>
17-
public string ToFilename(FilenameService fileNames);
18-
19-
/// <summary> Write the objects data to the given stream writer. </summary>
20-
public void Save(StreamWriter writer);
21-
22-
/// <summary> An arbitrary message printed to Debug before saving. </summary>
23-
public string LogName(string fileName)
24-
=> fileName;
25-
26-
public string TypeName
27-
=> GetType().Name;
28-
}
11+
public interface ISavable : ISavable<FilenameService>
12+
{ }
2913

30-
public class SaveService
14+
public sealed class SaveService : SaveServiceBase<FilenameService>
3115
{
32-
#if DEBUG
33-
private static readonly TimeSpan StandardDelay = TimeSpan.FromSeconds(2);
34-
#else
35-
private static readonly TimeSpan StandardDelay = TimeSpan.FromSeconds(10);
36-
#endif
37-
38-
private readonly Logger _log;
39-
private readonly FrameworkManager _framework;
40-
41-
public readonly FilenameService FileNames;
42-
public readonly Framework DalamudFramework;
43-
44-
public SaveService(Logger log, FrameworkManager framework, FilenameService fileNames, Framework dalamudFramework)
45-
{
46-
_log = log;
47-
_framework = framework;
48-
FileNames = fileNames;
49-
DalamudFramework = dalamudFramework;
50-
}
51-
52-
/// <summary> Queue a save for the next framework tick. </summary>
53-
public void QueueSave(ISavable value)
54-
{
55-
var file = value.ToFilename(FileNames);
56-
_framework.RegisterOnTick($"{value.GetType().Name} ## {file}", () => { ImmediateSave(value); });
57-
}
58-
59-
/// <summary> Queue a delayed save with the standard delay for after the delay is over. </summary>
60-
public void DelaySave(ISavable value)
61-
=> DelaySave(value, StandardDelay);
62-
63-
/// <summary> Queue a delayed save for after the delay is over. </summary>
64-
public void DelaySave(ISavable value, TimeSpan delay)
65-
{
66-
var file = value.ToFilename(FileNames);
67-
_framework.RegisterDelayed($"{value.GetType().Name} ## {file}", () => { ImmediateSave(value); }, delay);
68-
}
69-
70-
/// <summary> Immediately trigger a save. </summary>
71-
public void ImmediateSave(ISavable value)
72-
{
73-
var name = value.ToFilename(FileNames);
74-
try
75-
{
76-
if (name.Length == 0)
77-
throw new Exception("Invalid object returned empty filename.");
78-
79-
_log.Debug($"Saving {value.TypeName} {value.LogName(name)}...");
80-
var file = new FileInfo(name);
81-
file.Directory?.Create();
82-
using var s = file.Exists ? file.Open(FileMode.Truncate) : file.Open(FileMode.CreateNew);
83-
using var w = new StreamWriter(s, Encoding.UTF8);
84-
value.Save(w);
85-
}
86-
catch (Exception ex)
87-
{
88-
_log.Error($"Could not save {value.GetType().Name} {value.LogName(name)}:\n{ex}");
89-
}
90-
}
91-
92-
public void ImmediateDelete(ISavable value)
93-
{
94-
var name = value.ToFilename(FileNames);
95-
try
96-
{
97-
if (name.Length == 0)
98-
throw new Exception("Invalid object returned empty filename.");
99-
100-
if (!File.Exists(name))
101-
return;
102-
103-
_log.Information($"Deleting {value.GetType().Name} {value.LogName(name)}...");
104-
File.Delete(name);
105-
}
106-
catch (Exception ex)
107-
{
108-
_log.Error($"Could not delete {value.GetType().Name} {value.LogName(name)}:\n{ex}");
109-
}
110-
}
16+
public SaveService(Logger log, FrameworkManager framework, FilenameService fileNames)
17+
: base(log, framework, fileNames)
18+
{ }
11119

11220
/// <summary> Immediately delete all existing option group files for a mod and save them anew. </summary>
11321
public void SaveAllOptionGroups(Mod mod)
@@ -121,7 +29,7 @@ public void SaveAllOptionGroups(Mod mod)
12129
}
12230
catch (Exception e)
12331
{
124-
Penumbra.Log.Error($"Could not delete outdated group file {file}:\n{e}");
32+
Log.Error($"Could not delete outdated group file {file}:\n{e}");
12533
}
12634
}
12735

0 commit comments

Comments
 (0)