From b0cb52c199981520eebb98f793da0b3db404b655 Mon Sep 17 00:00:00 2001 From: chrisbell Date: Sun, 4 Jan 2026 21:29:20 -0600 Subject: [PATCH] Added some logging and dialog stuff, as well as made the add profile button actually add a critter to the db --- .../CritterFolio.Android.csproj | 1 + .../CritterFolio.Browser.csproj | 1 + .../CritterFolio.Desktop.csproj | 1 + .../CritterFolio/CritterFolio/App.axaml | 2 ++ .../CritterFolio/CritterFolio.csproj | 1 + .../CritterFolio/Pages/HomePage.axaml.cs | 26 +++++++++++++++++-- .../CritterFolio/Pages/TestPage.axaml | 2 ++ .../CritterFolio/Pages/TestPage.axaml.cs | 26 ++++++++++++++++--- .../CritterFolio/Services/DatabaseService.cs | 7 +++++ .../CritterFolio/Services/DialogHelper.cs | 24 +++++++++++++++++ .../CritterFolio/Services/Logger.cs | 15 +++++++++++ .../CritterFolio/Views/MainView.axaml | 21 +++++++++------ .../CritterFolio/Views/MainWindow.axaml | 5 +++- .../CritterFolio/Directory.Packages.props | 1 + 14 files changed, 119 insertions(+), 14 deletions(-) create mode 100644 critterfolio/CritterFolio/CritterFolio/Services/DialogHelper.cs create mode 100644 critterfolio/CritterFolio/CritterFolio/Services/Logger.cs diff --git a/critterfolio/CritterFolio/CritterFolio.Android/CritterFolio.Android.csproj b/critterfolio/CritterFolio/CritterFolio.Android/CritterFolio.Android.csproj index 8420b10..31e83d4 100644 --- a/critterfolio/CritterFolio/CritterFolio.Android/CritterFolio.Android.csproj +++ b/critterfolio/CritterFolio/CritterFolio.Android/CritterFolio.Android.csproj @@ -21,6 +21,7 @@ + diff --git a/critterfolio/CritterFolio/CritterFolio.Browser/CritterFolio.Browser.csproj b/critterfolio/CritterFolio/CritterFolio.Browser/CritterFolio.Browser.csproj index fef2197..7d77d0d 100644 --- a/critterfolio/CritterFolio/CritterFolio.Browser/CritterFolio.Browser.csproj +++ b/critterfolio/CritterFolio/CritterFolio.Browser/CritterFolio.Browser.csproj @@ -8,6 +8,7 @@ + diff --git a/critterfolio/CritterFolio/CritterFolio.Desktop/CritterFolio.Desktop.csproj b/critterfolio/CritterFolio/CritterFolio.Desktop/CritterFolio.Desktop.csproj index f1f9980..2070448 100644 --- a/critterfolio/CritterFolio/CritterFolio.Desktop/CritterFolio.Desktop.csproj +++ b/critterfolio/CritterFolio/CritterFolio.Desktop/CritterFolio.Desktop.csproj @@ -18,6 +18,7 @@ None All + diff --git a/critterfolio/CritterFolio/CritterFolio/App.axaml b/critterfolio/CritterFolio/CritterFolio/App.axaml index 298208b..a8442d7 100644 --- a/critterfolio/CritterFolio/CritterFolio/App.axaml +++ b/critterfolio/CritterFolio/CritterFolio/App.axaml @@ -2,6 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:CritterFolio" x:Class="CritterFolio.App" + xmlns:dialogHostAvalonia="using:DialogHostAvalonia" RequestedThemeVariant="Default"> @@ -11,6 +12,7 @@ + diff --git a/critterfolio/CritterFolio/CritterFolio/CritterFolio.csproj b/critterfolio/CritterFolio/CritterFolio/CritterFolio.csproj index a3a9951..84ffa13 100644 --- a/critterfolio/CritterFolio/CritterFolio/CritterFolio.csproj +++ b/critterfolio/CritterFolio/CritterFolio/CritterFolio.csproj @@ -19,6 +19,7 @@ None All + diff --git a/critterfolio/CritterFolio/CritterFolio/Pages/HomePage.axaml.cs b/critterfolio/CritterFolio/CritterFolio/Pages/HomePage.axaml.cs index 03e7256..1f5a918 100644 --- a/critterfolio/CritterFolio/CritterFolio/Pages/HomePage.axaml.cs +++ b/critterfolio/CritterFolio/CritterFolio/Pages/HomePage.axaml.cs @@ -1,9 +1,12 @@ using System; +using System.Threading.Tasks; using Avalonia; using Avalonia.Controls; +using Avalonia.Controls.Primitives; using Avalonia.Interactivity; using Avalonia.Markup.Xaml; using Avalonia.Media; +using AvaloniaDialogs.Views; using CritterFolio.Controls; using CritterFolio.DataModels; using CritterFolio.Services; @@ -63,13 +66,31 @@ public partial class HomePage : Page } } - private void AddProfileButton(Critter critter) + private async void AddProfileButton(Critter critter) { var newProfButton = new ProfileButton(); newProfButton.Init(critter); CritterStack.Children.Add(newProfButton); + + - newProfButton.Clicked += (o, args) => { Console.WriteLine($"{critter.Name} button clicked"); }; + newProfButton.Clicked += async (sender, args) => + { + await ProfileButtonClicked(critter); + }; + } + + private async Task ProfileButtonClicked(Critter critter) + { + try + { + await DialogHelper.ShowMessage($"{critter.Name} was clicked"); + } + catch (Exception e) + { + Console.WriteLine(e); + Logger.LogToFile(e.ToString()); + } } private async void AddButtonClicked(object? sender, RoutedEventArgs e) @@ -79,6 +100,7 @@ public partial class HomePage : Page { var result = await DatabaseService.AddCritter(newCritter); AddProfileButton(newCritter); + Logger.LogToFile("New critter was added"); } catch (Exception exception) { diff --git a/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml b/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml index 7a3403d..b58abd0 100644 --- a/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml +++ b/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml @@ -10,6 +10,8 @@ + + diff --git a/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml.cs b/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml.cs index f0f5b5b..457eae7 100644 --- a/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml.cs +++ b/critterfolio/CritterFolio/CritterFolio/Pages/TestPage.axaml.cs @@ -4,6 +4,7 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Markup.Xaml; +using Avalonia.Platform.Storage; using CritterFolio.Services; namespace CritterFolio.Pages; @@ -18,12 +19,31 @@ public partial class TestPage : Page ClearDbButton.Click += ClearDbButtonClicked; ReInitButton.Click += ReInitButtonClicked; + OpenLogButton.Click += OpenLogButtonClicked; } - private void ClearDbButtonClicked(object? sender, RoutedEventArgs e) + private void OpenLogButtonClicked(object? sender, RoutedEventArgs args) { - var databasePath = Path.Combine(AppContext.BaseDirectory, "CritterFolio.db"); - File.Delete(databasePath); + var logFilePath = Path.Combine(AppContext.BaseDirectory, "log.txt"); + if (!File.Exists(logFilePath)) return; + var launcher = TopLevel.GetTopLevel(this)?.Launcher; + if (launcher is null) return; + + launcher.LaunchUriAsync(new Uri("file://" + logFilePath)); + } + + + private async void ClearDbButtonClicked(object? sender, RoutedEventArgs args) + { + try + { + await DatabaseService.ClearAllTables(); + } + catch (Exception ex) + { + Logger.LogToFile(ex.ToString()); + Console.WriteLine(ex.ToString()); + } } private async void ReInitButtonClicked(object? sender, RoutedEventArgs e) diff --git a/critterfolio/CritterFolio/CritterFolio/Services/DatabaseService.cs b/critterfolio/CritterFolio/CritterFolio/Services/DatabaseService.cs index 5c6f7f8..b54970d 100644 --- a/critterfolio/CritterFolio/CritterFolio/Services/DatabaseService.cs +++ b/critterfolio/CritterFolio/CritterFolio/Services/DatabaseService.cs @@ -31,6 +31,13 @@ public static class DatabaseService } } + public static async Task ClearAllTables() + { + await Init(); + await _db?.DeleteAllAsync()!; + await _db?.DeleteAllAsync()!; + } + #region Critter operations public static async Task AddCritter(Critter critter) diff --git a/critterfolio/CritterFolio/CritterFolio/Services/DialogHelper.cs b/critterfolio/CritterFolio/CritterFolio/Services/DialogHelper.cs new file mode 100644 index 0000000..c42ee43 --- /dev/null +++ b/critterfolio/CritterFolio/CritterFolio/Services/DialogHelper.cs @@ -0,0 +1,24 @@ +using System; +using System.Threading.Tasks; +using AvaloniaDialogs.Views; + +namespace CritterFolio.Services; + +public static class DialogHelper +{ + public static async Task ShowMessage(string message) + { + try + { + await new SingleActionDialog() + { + Message = message, + ButtonText = "OK" + }.ShowAsync(); + } + catch (Exception e) + { + Console.WriteLine(e); + } + } +} \ No newline at end of file diff --git a/critterfolio/CritterFolio/CritterFolio/Services/Logger.cs b/critterfolio/CritterFolio/CritterFolio/Services/Logger.cs new file mode 100644 index 0000000..c24723e --- /dev/null +++ b/critterfolio/CritterFolio/CritterFolio/Services/Logger.cs @@ -0,0 +1,15 @@ +using System; +using System.IO; + +namespace CritterFolio.Services; + +public class Logger +{ + public static void LogToFile(string text) + { + var logFilePath = Path.Combine(AppContext.BaseDirectory, "log.txt"); + + File.AppendAllText(logFilePath, $"{DateTime.UtcNow} : {text}\n"); + } + +} \ No newline at end of file diff --git a/critterfolio/CritterFolio/CritterFolio/Views/MainView.axaml b/critterfolio/CritterFolio/CritterFolio/Views/MainView.axaml index 2ce4812..ddc8470 100644 --- a/critterfolio/CritterFolio/CritterFolio/Views/MainView.axaml +++ b/critterfolio/CritterFolio/CritterFolio/Views/MainView.axaml @@ -4,20 +4,25 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:vm="using:CritterFolio.ViewModels" xmlns:critterFolio="clr-namespace:CritterFolio" + xmlns:views="clr-namespace:AvaloniaDialogs.Views;assembly=AvaloniaDialogs" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="CritterFolio.Views.MainView" x:DataType="vm:MainViewModel"> - - - - + + - + - - + + - + + + diff --git a/critterfolio/CritterFolio/CritterFolio/Views/MainWindow.axaml b/critterfolio/CritterFolio/CritterFolio/Views/MainWindow.axaml index 5107d23..fe744e3 100644 --- a/critterfolio/CritterFolio/CritterFolio/Views/MainWindow.axaml +++ b/critterfolio/CritterFolio/CritterFolio/Views/MainWindow.axaml @@ -4,9 +4,12 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:views="using:CritterFolio.Views" + xmlns:dialogs="using:AvaloniaDialogs.Views" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="CritterFolio.Views.MainWindow" Icon="/Assets/icon.ico" Title="CritterFolio"> - + + + diff --git a/critterfolio/CritterFolio/Directory.Packages.props b/critterfolio/CritterFolio/Directory.Packages.props index f6bb3ea..e919647 100644 --- a/critterfolio/CritterFolio/Directory.Packages.props +++ b/critterfolio/CritterFolio/Directory.Packages.props @@ -14,6 +14,7 @@ +