diff --git a/critterfolio/CritterFolio/CritterFolio/Controls/ProfileButton.axaml.cs b/critterfolio/CritterFolio/CritterFolio/Controls/ProfileButton.axaml.cs
index 5705a09..5f13325 100644
--- a/critterfolio/CritterFolio/CritterFolio/Controls/ProfileButton.axaml.cs
+++ b/critterfolio/CritterFolio/CritterFolio/Controls/ProfileButton.axaml.cs
@@ -31,6 +31,6 @@ public partial class ProfileButton : UserControl
Console.WriteLine(e);
}
- ProfileNameLabel.Content = string.IsNullOrEmpty(critter.Name) ? "Critter" : critter.Name ;
+ ProfileNameLabel.Content = string.IsNullOrEmpty(critter.Name) ? "New Critter" : critter.Name ;
}
}
\ No newline at end of file
diff --git a/critterfolio/CritterFolio/CritterFolio/DataModels/Critter.cs b/critterfolio/CritterFolio/CritterFolio/DataModels/Critter.cs
index 88cfb60..ff9bb3e 100644
--- a/critterfolio/CritterFolio/CritterFolio/DataModels/Critter.cs
+++ b/critterfolio/CritterFolio/CritterFolio/DataModels/Critter.cs
@@ -10,12 +10,16 @@ public class Critter
public int Id { get; set; }
public string ProfileImagePath { get; set; } = string.Empty;
- public string Name { get; set; } = string.Empty;
- public string Gender { get; set; } = string.Empty;
- public DateTime DateOfBirth { get; set; }
-
+ public string Name { get; set; } = "New Critter";
+ public Gender Gender { get; set; } = Gender.Female;
+ public DateTime DateOfBirth { get; set; } = DateTime.Today;
public int FatherId { get; set; }
public int MotherId { get; set; }
-
public string Notes { get; set; } = string.Empty;
+}
+
+public enum Gender
+{
+ Male,
+ Female
}
\ No newline at end of file
diff --git a/critterfolio/CritterFolio/CritterFolio/Pages/HomePage.axaml.cs b/critterfolio/CritterFolio/CritterFolio/Pages/HomePage.axaml.cs
index ef819d9..03e7256 100644
--- a/critterfolio/CritterFolio/CritterFolio/Pages/HomePage.axaml.cs
+++ b/critterfolio/CritterFolio/CritterFolio/Pages/HomePage.axaml.cs
@@ -6,6 +6,7 @@ using Avalonia.Markup.Xaml;
using Avalonia.Media;
using CritterFolio.Controls;
using CritterFolio.DataModels;
+using CritterFolio.Services;
namespace CritterFolio.Pages;
@@ -43,22 +44,46 @@ public partial class HomePage : Page
Sys.Navigation?.AddHeaderButton(settingsBttn);
}
- private void RefreshProfileButtons()
+ private async void RefreshProfileButtons()
{
CritterStack.Children.Clear();
+
+ try
+ {
+ var critters = await DatabaseService.GetAllCritters();
+
+ foreach (var critter in critters)
+ {
+ AddProfileButton(critter);
+ }
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine(e);
+ }
}
- private void AddButtonClicked(object? sender, RoutedEventArgs e)
+ private void AddProfileButton(Critter critter)
{
- var newCritter = new Critter()
- {
- Name = "Toriel",
- };
-
var newProfButton = new ProfileButton();
- newProfButton.Init(newCritter);
-
+ newProfButton.Init(critter);
CritterStack.Children.Add(newProfButton);
+
+ newProfButton.Clicked += (o, args) => { Console.WriteLine($"{critter.Name} button clicked"); };
+ }
+
+ private async void AddButtonClicked(object? sender, RoutedEventArgs e)
+ {
+ var newCritter = new Critter();
+ try
+ {
+ var result = await DatabaseService.AddCritter(newCritter);
+ AddProfileButton(newCritter);
+ }
+ catch (Exception exception)
+ {
+ Console.WriteLine(exception);
+ }
}
private void SettingsPage(object? sender, RoutedEventArgs args)
diff --git a/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml b/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml
index 6d2a51c..7a3403d 100644
--- a/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml
+++ b/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml
@@ -8,8 +8,8 @@
-
-
+
+
diff --git a/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml.cs b/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml.cs
index 1b44c0d..f0f5b5b 100644
--- a/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml.cs
+++ b/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml.cs
@@ -1,6 +1,10 @@
+using System;
+using System.IO;
using Avalonia;
using Avalonia.Controls;
+using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
+using CritterFolio.Services;
namespace CritterFolio.Pages;
@@ -11,8 +15,22 @@ public partial class TestPage : Page
public TestPage()
{
InitializeComponent();
+
+ ClearDbButton.Click += ClearDbButtonClicked;
+ ReInitButton.Click += ReInitButtonClicked;
}
-
+
+ private void ClearDbButtonClicked(object? sender, RoutedEventArgs e)
+ {
+ var databasePath = Path.Combine(AppContext.BaseDirectory, "CritterFolio.db");
+ File.Delete(databasePath);
+ }
+
+ private async void ReInitButtonClicked(object? sender, RoutedEventArgs e)
+ {
+ await DatabaseService.Init();
+ }
+
public override void Refresh()
{
ClearConnections();
diff --git a/critterfolio/CritterFolio/CritterFolio/Services/DatabaseService.cs b/critterfolio/CritterFolio/CritterFolio/Services/DatabaseService.cs
index bda9e07..5c6f7f8 100644
--- a/critterfolio/CritterFolio/CritterFolio/Services/DatabaseService.cs
+++ b/critterfolio/CritterFolio/CritterFolio/Services/DatabaseService.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using CritterFolio.DataModels;
@@ -29,4 +30,40 @@ public static class DatabaseService
Console.WriteLine(e);
}
}
+
+ #region Critter operations
+
+ public static async Task AddCritter(Critter critter)
+ {
+ await Init();
+ var result = await _db?.InsertAsync(critter)!;
+ return !(result <= 0);
+ }
+
+ public static async Task UpdateCritter(Critter critter)
+ {
+ await Init();
+ return await _db?.UpdateAsync(critter)! != 0;
+ }
+
+ public static async Task DeleteCritter(Critter critter)
+ {
+ await Init();
+ return await _db?.DeleteAsync(critter)! != 0;
+ }
+
+ public static async Task DeleteCritter(int id)
+ {
+ await Init();
+ return await _db?.DeleteAsync(id)! != 0;
+ }
+
+ public static async Task> GetAllCritters()
+ {
+ await Init();
+ var result = await _db?.Table().ToListAsync()!;
+ return result ?? [];
+ }
+
+ #endregion
}
\ No newline at end of file