88using Avalonia ;
99using Avalonia . Controls . ApplicationLifetimes ;
1010using FluentAvalonia . UI . Data ;
11+ using SharpFM . App . Models ;
1112using SharpFM . Core ;
1213
1314namespace SharpFM . App . ViewModels ;
1415
1516public partial class MainWindowViewModel : INotifyPropertyChanged
1617{
18+ public ClipDbContext _context ;
19+
1720 public event PropertyChangedEventHandler ? PropertyChanged ;
1821
1922 private void NotifyPropertyChanged ( [ CallerMemberName ] string propertyName = "" )
@@ -23,7 +26,64 @@ private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
2326
2427 public MainWindowViewModel ( )
2528 {
26- Keys = new ObservableCollection < ClipViewModel > ( ) ;
29+ _context = new ClipDbContext ( ) ;
30+ _context . Database . EnsureCreated ( ) ;
31+
32+ Console . WriteLine ( $ "Database path: { _context . DbPath } .") ;
33+
34+ FileMakerClips = new ObservableCollection < ClipViewModel > ( ) ;
35+
36+ foreach ( var clip in _context . Clips )
37+ {
38+ FileMakerClips . Add ( new ClipViewModel (
39+ new FileMakerClip (
40+ clip . ClipName ,
41+ clip . ClipType ,
42+ clip . ClipXml
43+ ) ,
44+ clip . ClipId
45+ )
46+ ) ;
47+ }
48+ }
49+
50+ public void SaveToDb ( )
51+ {
52+ var dbClips = _context . Clips . ToList ( ) ;
53+
54+ foreach ( var clip in FileMakerClips )
55+ {
56+ var dbClip = dbClips . FirstOrDefault ( dbc => dbc . ClipName == clip . Name ) ;
57+
58+ if ( dbClip is not null )
59+ {
60+ dbClip . ClipType = clip . ClipType ;
61+ dbClip . ClipXml = clip . ClipXml ;
62+ }
63+ else
64+ {
65+ _context . Clips . Add ( new Clip ( )
66+ {
67+ ClipName = clip . Name ,
68+ ClipType = clip . ClipType ,
69+ ClipXml = clip . ClipXml
70+ } ) ;
71+ }
72+ }
73+
74+ _context . SaveChanges ( ) ;
75+ }
76+
77+ public void ClearDb ( )
78+ {
79+ var clips = _context . Clips . ToList ( ) ;
80+
81+ foreach ( var clip in clips )
82+ {
83+ _context . Clips . Remove ( clip ) ;
84+ }
85+
86+ _context . SaveChanges ( ) ;
2787 }
2888
2989 public void ExitApplication ( )
@@ -41,7 +101,7 @@ public void NewEmptyItem()
41101 var clip = new FileMakerClip ( "New" , FileMakerClip . ClipTypes . First ( ) ? . KeyId ?? "" , Array . Empty < byte > ( ) ) ;
42102 var clipVm = new ClipViewModel ( clip ) ;
43103
44- Keys . Add ( clipVm ) ;
104+ FileMakerClips . Add ( clipVm ) ;
45105 }
46106 catch ( Exception e )
47107 {
@@ -73,7 +133,7 @@ public void CopyAsClass()
73133 }
74134 }
75135
76- public async Task PasteFileMakerClipData ( CancellationToken token )
136+ public async Task PasteFileMakerClipData ( )
77137 {
78138 try
79139 {
@@ -102,20 +162,20 @@ public async Task PasteFileMakerClipData(CancellationToken token)
102162
103163 // don't bother adding a duplicate. For some reason entries were getting entered twice per clip
104164 // this is not the most efficient method to detect it, but it works well enough for now
105- if ( Keys . Any ( k => k . ClipXml == clip . XmlData ) )
165+ if ( FileMakerClips . Any ( k => k . ClipXml == clip . XmlData ) )
106166 {
107167 continue ;
108168 }
109169
110- Keys . Add ( new ClipViewModel ( clip ) ) ;
170+ FileMakerClips . Add ( new ClipViewModel ( clip ) ) ;
111171 }
112172 }
113173 catch ( Exception e )
114174 {
115175 }
116176 }
117177
118- public async Task CopySelectedToClip ( CancellationToken token )
178+ public async Task CopySelectedToClip ( )
119179 {
120180 try
121181 {
@@ -140,6 +200,9 @@ public async Task CopySelectedToClip(CancellationToken token)
140200 }
141201 }
142202
203+ /// <summary>
204+ /// SharpFM Version.
205+ /// </summary>
143206 public string Version
144207 {
145208 get
@@ -150,7 +213,7 @@ public string Version
150213 }
151214 }
152215
153- public ObservableCollection < ClipViewModel > Keys { get ; set ; }
216+ public ObservableCollection < ClipViewModel > FileMakerClips { get ; set ; }
154217
155218 private ClipViewModel ? _selectedClip ;
156219 public ClipViewModel ? SelectedClip
0 commit comments