Skip to content

Commit 578079c

Browse files
authored
Merge pull request #3452 from Flow-Launcher/json_save_directory_issue
Fix storage save directory issue
2 parents 7910ab3 + e6377d0 commit 578079c

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

Flow.Launcher.Infrastructure/Storage/BinaryStorage.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.IO;
1+
using System;
2+
using System.IO;
23
using System.Threading.Tasks;
34
using Flow.Launcher.Infrastructure.Logger;
45
using Flow.Launcher.Infrastructure.UserSettings;
@@ -40,6 +41,16 @@ public BinaryStorage(string filename)
4041
FilePath = Path.Combine(DirectoryPath, $"{filename}{FileSuffix}");
4142
}
4243

44+
// Let the old Program plugin get this constructor
45+
[Obsolete("This constructor is obsolete. Use BinaryStorage(string filename) instead.")]
46+
public BinaryStorage(string filename, string directoryPath = null!)
47+
{
48+
directoryPath ??= DataLocation.CacheDirectory;
49+
FilesFolders.ValidateDirectory(directoryPath);
50+
51+
FilePath = Path.Combine(directoryPath, $"{filename}{FileSuffix}");
52+
}
53+
4354
public async ValueTask<T> TryLoadAsync(T defaultData)
4455
{
4556
if (Data != null) return Data;
@@ -82,8 +93,10 @@ private static async ValueTask<T> DeserializeAsync(Stream stream, T defaultData)
8293

8394
public void Save()
8495
{
85-
var serialized = MemoryPackSerializer.Serialize(Data);
96+
// User may delete the directory, so we need to check it
97+
FilesFolders.ValidateDirectory(DirectoryPath);
8698

99+
var serialized = MemoryPackSerializer.Serialize(Data);
87100
File.WriteAllBytes(FilePath, serialized);
88101
}
89102

@@ -103,6 +116,9 @@ public void ClearData()
103116
// so we need to pass it to SaveAsync
104117
public async ValueTask SaveAsync(T data)
105118
{
119+
// User may delete the directory, so we need to check it
120+
FilesFolders.ValidateDirectory(DirectoryPath);
121+
106122
await using var stream = new FileStream(FilePath, FileMode.Create);
107123
await MemoryPackSerializer.SerializeAsync(stream, data);
108124
}

Flow.Launcher.Infrastructure/Storage/JsonStorage.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,10 @@ private void BackupOriginFile()
183183

184184
public void Save()
185185
{
186-
string serialized = JsonSerializer.Serialize(Data,
186+
// User may delete the directory, so we need to check it
187+
FilesFolders.ValidateDirectory(DirectoryPath);
188+
189+
var serialized = JsonSerializer.Serialize(Data,
187190
new JsonSerializerOptions { WriteIndented = true });
188191

189192
File.WriteAllText(TempFilePath, serialized);
@@ -193,6 +196,9 @@ public void Save()
193196

194197
public async Task SaveAsync()
195198
{
199+
// User may delete the directory, so we need to check it
200+
FilesFolders.ValidateDirectory(DirectoryPath);
201+
196202
await using var tempOutput = File.OpenWrite(TempFilePath);
197203
await JsonSerializer.SerializeAsync(tempOutput, Data,
198204
new JsonSerializerOptions { WriteIndented = true });

0 commit comments

Comments
 (0)