Skip to content

Commit 632db4b

Browse files
committed
Improved error handling
DatabaseService->GetSnippets MainViewModel->InitializeAsync
1 parent ecb7eb8 commit 632db4b

File tree

2 files changed

+66
-49
lines changed

2 files changed

+66
-49
lines changed

src/CodeSnip/MainViewModel.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -237,11 +237,20 @@ public async Task InitializeAsync()
237237
{
238238
var languages = await Task.Run(() => _databaseService.GetSnippets());
239239

240-
PopulateLanguagesCollection(languages);
240+
var languageList = languages.ToList();
241241

242-
if (settingsService.LastSnippet != null)
242+
if (languageList.Count == 0 && _databaseService.GetSnippets().Any()) // Check if loading failed
243243
{
244-
RestoreSelectedSnippetState(settingsService.LastSnippet);
244+
await DialogService.Instance.ShowMessageAsync("Database Load Error",
245+
"Could not load snippets. The database file might be corrupted or the schema might have changed.");
246+
}
247+
else
248+
{
249+
PopulateLanguagesCollection(languageList);
250+
if (settingsService.LastSnippet != null)
251+
{
252+
RestoreSelectedSnippetState(settingsService.LastSnippet);
253+
}
245254
}
246255
}
247256
await UpdateDatabaseHealthStatusAsync();

src/CodeSnip/Services/DatabaseService.cs

Lines changed: 54 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,11 @@ INSERT INTO Snippets (CategoryId, Title, Code, Description, Tag)
128128

129129
public IEnumerable<Language> GetSnippets()
130130
{
131-
using var conn = CreateConnection();
131+
try
132+
{
133+
using var conn = CreateConnection();
132134

133-
var sql = @"
135+
var sql = @"
134136
SELECT
135137
L.ID AS LanguageID,
136138
L.Code AS LanguageCode,
@@ -151,61 +153,67 @@ FROM Languages L
151153
LEFT JOIN Snippets S ON S.CategoryId = C.ID
152154
ORDER BY L.Name, C.Name, S.Title";
153155

154-
var lookup = new Dictionary<int, Language>();
155-
//var result = conn.Query(sql).ToList();
156-
var result = conn.Query<dynamic>(sql).ToList();
156+
var lookup = new Dictionary<int, Language>();
157+
//var result = conn.Query(sql).ToList();
158+
var result = conn.Query<dynamic>(sql).ToList();
157159

158-
foreach (var row in result)
159-
{
160-
// Find or create a language
161-
int langId = (int)row.LanguageID;
162-
if (!lookup.TryGetValue(langId, out var language))
163-
{
164-
language = new Language
165-
{
166-
Id = langId,
167-
Code = (string)row.LanguageCode,
168-
Name = (string)row.LanguageName,
169-
Categories = new ObservableCollection<Category>() // Collection initialization
170-
};
171-
lookup.Add(langId, language);
172-
}
173-
// Pronađi ili kreiraj kategoriju
174-
if (row.CategoryID != null)
160+
foreach (var row in result)
175161
{
176-
int catId = (int)row.CategoryID;
177-
var category = language.Categories.FirstOrDefault(c => c.Id == catId);
178-
if (category == null)
162+
// Find or create a language
163+
int langId = (int)row.LanguageID;
164+
if (!lookup.TryGetValue(langId, out var language))
179165
{
180-
category = new Category
166+
language = new Language
181167
{
182-
Id = catId,
183-
LanguageId = (int)row.CategoryLanguageId,
184-
Name = (string)row.CategoryName,
185-
Language = language,
186-
Snippets = new ObservableCollection<Snippet>() // Collection initialization
168+
Id = langId,
169+
Code = (string)row.LanguageCode,
170+
Name = (string)row.LanguageName,
171+
Categories = new ObservableCollection<Category>() // Collection initialization
187172
};
188-
language.Categories.Add(category);
173+
lookup.Add(langId, language);
189174
}
190-
// Find or create a snippet
191-
if (row.SnippetID != null)
175+
// Find or create a category
176+
if (row.CategoryID != null)
192177
{
193-
var snippet = new Snippet
178+
int catId = (int)row.CategoryID;
179+
var category = language.Categories.FirstOrDefault(c => c.Id == catId);
180+
if (category == null)
194181
{
195-
Id = (int)row.SnippetID,
196-
CategoryId = (int)row.SnippetCategoryId,
197-
Title = (string)row.SnippetTitle,
198-
//Code = (string)row.SnippetCode,
199-
Code = string.Empty, // Initially empty
200-
Description = (string)row.SnippetDescription,
201-
Tag = (string)row.SnippetTag,
202-
Category = category
203-
};
204-
category.Snippets.Add(snippet);
182+
category = new Category
183+
{
184+
Id = catId,
185+
LanguageId = (int)row.CategoryLanguageId,
186+
Name = (string)row.CategoryName,
187+
Language = language,
188+
Snippets = new ObservableCollection<Snippet>() // Collection initialization
189+
};
190+
language.Categories.Add(category);
191+
}
192+
// Find or create a snippet
193+
if (row.SnippetID != null)
194+
{
195+
var snippet = new Snippet
196+
{
197+
Id = (int)row.SnippetID,
198+
CategoryId = (int)row.SnippetCategoryId,
199+
Title = (string)row.SnippetTitle,
200+
//Code = (string)row.SnippetCode,
201+
Code = string.Empty, // Initially empty
202+
Description = (string)row.SnippetDescription,
203+
Tag = (string)row.SnippetTag,
204+
Category = category
205+
};
206+
category.Snippets.Add(snippet);
207+
}
205208
}
206209
}
210+
return lookup.Values;
211+
}
212+
catch (Exception ex)
213+
{
214+
System.Diagnostics.Debug.WriteLine($"[FATAL] Failed to load snippets from database: {ex}");
215+
return Enumerable.Empty<Language>(); // Return an empty list on failure
207216
}
208-
return lookup.Values;
209217
}
210218

211219
public string GetSnippetCode(int snippetId)

0 commit comments

Comments
 (0)