1
1
using CommunityToolkit . Mvvm . ComponentModel ;
2
2
using System . Collections . ObjectModel ;
3
+ using System . Diagnostics . CodeAnalysis ;
4
+ using System . IO ;
3
5
using System . Linq ;
6
+ using System . Text . Json ;
7
+ using System . Threading . Tasks ;
4
8
5
9
namespace SimpleList . ViewModels
6
10
{
7
11
public partial class CloudViewModel : ObservableObject
8
12
{
13
+ [ RequiresUnreferencedCode ( "Calls System.Text.Json.JsonSerializer.Serialize<TValue>(TValue, JsonSerializerOptions)" ) ]
9
14
public CloudViewModel ( )
10
15
{
16
+ Drives . CollectionChanged += async ( sender , args ) =>
17
+ {
18
+ await SaveDrivesToDisk ( ) ;
19
+ } ;
11
20
}
12
21
13
22
public void AddDrive ( DriveViewModel drive )
@@ -20,6 +29,30 @@ public DriveViewModel GetDrive(string name)
20
29
return Drives . FirstOrDefault ( d => d . DisplayName == name ) ;
21
30
}
22
31
23
- public ObservableCollection < DriveViewModel > Drives { get ; set ; } = new ( ) ;
32
+ [ RequiresUnreferencedCode ( "Calls System.Text.Json.JsonSerializer.Serialize<TValue>(TValue, JsonSerializerOptions)" ) ]
33
+ private async Task SaveDrivesToDisk ( )
34
+ {
35
+ string jsonData = JsonSerializer . Serialize ( Drives ) ;
36
+ string cachePath = Path . Combine ( Directory . GetCurrentDirectory ( ) , "cache" ) ;
37
+ Directory . CreateDirectory ( cachePath ) ;
38
+ await File . WriteAllTextAsync ( Path . Combine ( cachePath , "drives.json" ) , jsonData ) ;
39
+ }
40
+
41
+ [ RequiresUnreferencedCode ( "Calls System.Text.Json.JsonSerializer.Deserialize<TValue>(String, JsonSerializerOptions)" ) ]
42
+ public async Task LoadDrivesFromDisk ( )
43
+ {
44
+ if ( File . Exists ( cacheFilePath ) )
45
+ {
46
+ string jsonData = await File . ReadAllTextAsync ( cacheFilePath ) ;
47
+ ObservableCollection < DriveViewModel > drives = JsonSerializer . Deserialize < ObservableCollection < DriveViewModel > > ( jsonData ) ;
48
+ foreach ( DriveViewModel drive in drives )
49
+ {
50
+ Drives . Add ( drive ) ;
51
+ }
52
+ }
53
+ }
54
+
55
+ private string cacheFilePath = Path . Combine ( Directory . GetCurrentDirectory ( ) , "cache" , "drives.json" ) ;
56
+ [ ObservableProperty ] private ObservableCollection < DriveViewModel > drives = new ( ) ;
24
57
}
25
58
}
0 commit comments