Skip to content

Commit 872f56f

Browse files
Switched to a Singleton ApplicationDbContext as a local SQLite file makes more sense to be constantly open.
1 parent 69a700b commit 872f56f

4 files changed

Lines changed: 27 additions & 41 deletions

File tree

.gitignore

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -413,11 +413,5 @@ FodyWeavers.xsd
413413
.ionide
414414

415415
# End of https://www.toptal.com/developers/gitignore/api/csharp,visualstudiocode
416-
Show Obsidian Search Sidebar
417-
Settings
418-
Open Search in Obsidian
419-
Pin Sidebar
420-
Search
421-
Search your vault ... (Alt+Shift+F)
422-
0 result(s) of 0 (using )
423-
Could not connect to Obsidian. Please make sure Obsidian is running and check your extension settings.
416+
417+
.idea/.idea.DazContentInstaller/.idea/AugmentWebviewStateStore.xml

DazContentInstaller/ServiceCollectionExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ private static IServiceCollection CreateServiceCollection(this IServiceCollectio
2424

2525
services.Configure<InstallerConfig>(o => o.AppDataPath = appDataPath);
2626

27-
services.AddDbContextFactory<ApplicationDbContext>(o =>
28-
o.UseSqlite($"Data Source={config.DbPath}"));
27+
services.AddDbContext<ApplicationDbContext>(o =>
28+
o.UseSqlite($"Data Source={config.DbPath}"), ServiceLifetime.Singleton);
2929

3030
services.AddSingleton<SettingsService>();
3131
services.AddSingleton<IAppInfoService, AppInfoService>();

DazContentInstaller/ViewModels/MainWindowViewModel.cs

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ namespace DazContentInstaller.ViewModels;
1919

2020
public class MainWindowViewModel : ViewModelBase
2121
{
22-
private readonly IDbContextFactory<ApplicationDbContext> _dbContextFactory = null!;
22+
private readonly ApplicationDbContext _dbContext = null!;
2323
private readonly SettingsService _settingsService = null!;
2424
public ObservableCollection<LoadedArchive> LoadedArchives { get; set; } = [];
2525
private InstalledArchiveTree InstalledArchivesTree { get; } = [];
@@ -140,10 +140,10 @@ public MainWindowViewModel()
140140
RemoveLoadedArchiveClick = ReactiveCommand.Create<LoadedArchive>(RemoveLoadedArchive);
141141
}
142142

143-
public MainWindowViewModel(IDbContextFactory<ApplicationDbContext> dbContextFactory,
143+
public MainWindowViewModel(ApplicationDbContext dbContext,
144144
SettingsService settingsService) : this()
145145
{
146-
_dbContextFactory = dbContextFactory;
146+
_dbContext = dbContext;
147147
_settingsService = settingsService;
148148
}
149149

@@ -162,11 +162,10 @@ private void ClearLoadedArchives()
162162

163163
public async Task LoadAssetLibrariesAsync()
164164
{
165-
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
166165
AssetLibraries.Clear();
167166
await Task.Run(async () =>
168167
{
169-
await foreach (var library in dbContext.AssetLibraries.AsAsyncEnumerable())
168+
await foreach (var library in _dbContext.AssetLibraries.AsAsyncEnumerable())
170169
AssetLibraries.Add(library);
171170
});
172171

@@ -181,15 +180,14 @@ public async Task LoadInstalledArchivesAsync()
181180

182181
await Task.Run(async () =>
183182
{
184-
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
185-
var archivesQuery = dbContext.Archives
183+
var archivesQuery = _dbContext.Archives
186184
.Where(d => d.Status == ArchiveStatus.Installed);
187185
if (CurrentSelectedAssetLibrary is not null)
188186
archivesQuery = archivesQuery.Where(d => d.AssetLibraryId == CurrentSelectedAssetLibrary.Id);
189187

190188
await foreach (var archive in archivesQuery.OrderBy(d => d.ArchiveName.ToLower()).AsAsyncEnumerable())
191189
{
192-
var files = await dbContext.AssetFiles.Where(d => d.ArchiveId == archive.Id).ToListAsync();
190+
var files = await _dbContext.AssetFiles.Where(d => d.ArchiveId == archive.Id).ToListAsync();
193191
archive.AssetFiles = files;
194192

195193
var node = InstalledArchivesTree.LoadArchive(archive);
@@ -220,10 +218,8 @@ private async Task InstallArchives()
220218

221219
await Task.Run(async () =>
222220
{
223-
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
224-
225221
var archivesToInstallNames = archivesToInstall.Select(GetLoadedArchiveName).ToArray();
226-
var existingArchives = await dbContext.Archives
222+
var existingArchives = await _dbContext.Archives
227223
.Where(a => a.AssetLibraryId == CurrentSelectedAssetLibrary.Id &&
228224
archivesToInstallNames.Contains(a.ArchiveName))
229225
.Include(a => a.AssetFiles)
@@ -253,8 +249,8 @@ await Task.Run(async () =>
253249
};
254250

255251
dbArchive.AssetFiles.AddRange(archive.ContainedFiles);
256-
dbContext.Archives.Add(dbArchive);
257-
await dbContext.SaveChangesAsync();
252+
_dbContext.Archives.Add(dbArchive);
253+
await _dbContext.SaveChangesAsync();
258254

259255
Dispatcher.UIThread.Post(() => LoadedArchives.Remove(archive));
260256
}
@@ -282,10 +278,9 @@ private async Task UninstallArchiveAsync()
282278
return;
283279

284280
AllowArchiveLoad = false;
285-
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
286281

287282
var selectedInstallArchiveIds = SelectedInstallNodes.Select(n => n.DbId).ToArray();
288-
var archives = await dbContext.Archives
283+
var archives = await _dbContext.Archives
289284
.Include(a => a.AssetLibrary)
290285
.Include(a => a.AssetFiles)
291286
.Where(a => selectedInstallArchiveIds.Contains(a.Id))
@@ -304,7 +299,7 @@ await Task.Run(async () =>
304299
messageProgress.Report($"Reading {selectedInstallArchiveIds.Length} archives to uninstall...");
305300

306301
var archiveIds = archives.Select(a => a.Id).ToArray();
307-
var deleteFileExceptions = await dbContext.AssetFiles
302+
var deleteFileExceptions = await _dbContext.AssetFiles
308303
.Where(f => !archiveIds.Contains(f.ArchiveId) && f.InstalledPath != null)
309304
.ToListAsync();
310305

@@ -323,8 +318,8 @@ await Task.Run(async () =>
323318
var uninstaller = new DazArchiveUninstaller(archive);
324319
await uninstaller.UninstallArchiveAsync(deleteFileExceptions.Select(d => d.InstalledPath!).ToHashSet());
325320

326-
dbContext.Archives.Remove(archive);
327-
await dbContext.SaveChangesAsync();
321+
_dbContext.Archives.Remove(archive);
322+
await _dbContext.SaveChangesAsync();
328323

329324
messageProgress.Report($"Uninstalled {archive.ArchiveName}");
330325
percentageProgress.Report(index * increment);
@@ -426,12 +421,11 @@ public async Task UpdateInstalledAssetDetailsAsync(TreeNode? selectedItem)
426421
return;
427422

428423
OnPropertyChanged(nameof(UninstallButtonEnabled));
429-
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
430-
var archive = await dbContext.Archives.FindAsync(selectedItem.DbId);
424+
var archive = await _dbContext.Archives.FindAsync(selectedItem.DbId);
431425
if (archive is null)
432426
return;
433427

434-
var files = await dbContext.AssetFiles.Where(d => d.ArchiveId == archive.Id).ToListAsync();
428+
var files = await _dbContext.AssetFiles.Where(d => d.ArchiveId == archive.Id).ToListAsync();
435429
var details = new List<string>
436430
{
437431
$"File: {Path.GetFileName(archive.ArchiveName)}",

DazContentInstaller/ViewModels/SettingsWindowViewModel.cs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class SettingsWindowViewModel : ViewModelBase
1717
public ObservableCollection<AssetLibraryModel> AssetLibraries { get; set; } = [];
1818

1919
private readonly SettingsService _settingsService = null!;
20-
private readonly IDbContextFactory<ApplicationDbContext> _dbContextFactory = null!;
20+
private readonly ApplicationDbContext _dbContext = null!;
2121
private bool _autoDetectDazLibraries = true;
2222
private bool _createBackupBeforeInstall = true;
2323

@@ -42,10 +42,10 @@ public bool CreateBackupBeforeInstall
4242
}
4343

4444
public SettingsWindowViewModel(SettingsService settingsService,
45-
IDbContextFactory<ApplicationDbContext> dbContextFactory) : this()
45+
ApplicationDbContext dbContext) : this()
4646
{
4747
_settingsService = settingsService;
48-
_dbContextFactory = dbContextFactory;
48+
_dbContext = dbContext;
4949
}
5050

5151
public SettingsWindowViewModel()
@@ -89,8 +89,7 @@ public async Task SaveAsync()
8989

9090
await _settingsService.SaveSettingsAsync();
9191

92-
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
93-
var dbLibraries = await dbContext.AssetLibraries.ToListAsync();
92+
var dbLibraries = await _dbContext.AssetLibraries.ToListAsync();
9493
var newLibraries = AssetLibraries.Where(l => dbLibraries.All(dl => dl.Id != l.Id)).ToList();
9594

9695
foreach (var assetLibraryModel in newLibraries)
@@ -103,11 +102,11 @@ public async Task SaveAsync()
103102
IsDefault = assetLibraryModel.IsDefault,
104103
CreatedDate = assetLibraryModel.CreatedDate
105104
};
106-
dbContext.AssetLibraries.Add(library);
105+
_dbContext.AssetLibraries.Add(library);
107106
}
108107

109108
var removedLibraries = dbLibraries.Where(l => AssetLibraries.All(al => al.Id != l.Id)).ToList();
110-
foreach (var library in removedLibraries) dbContext.AssetLibraries.Remove(library);
109+
foreach (var library in removedLibraries) _dbContext.AssetLibraries.Remove(library);
111110

112111
var updatedLibraries = AssetLibraries.Where(l => dbLibraries.Any(dl => dl.Id == l.Id)).ToList();
113112
foreach (var library in updatedLibraries)
@@ -118,7 +117,7 @@ public async Task SaveAsync()
118117
dbLibrary.IsDefault = library.IsDefault;
119118
}
120119

121-
await dbContext.SaveChangesAsync();
120+
await _dbContext.SaveChangesAsync();
122121
}
123122

124123
public void AddLibrary(IStorageFolder folder)
@@ -132,8 +131,7 @@ public async Task ReloadLibrariesAsync()
132131
{
133132
AssetLibraries.Clear();
134133

135-
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
136-
var libraries = await dbContext.AssetLibraries
134+
var libraries = await _dbContext.AssetLibraries
137135
.OrderByDescending(l => l.CreatedDate)
138136
.Select(l => new AssetLibraryModel(l.Id, l.Name, l.Path, l.IsDefault, l.CreatedDate))
139137
.ToListAsync();

0 commit comments

Comments
 (0)