From f312c7b73cbad331f9464538266110cec4453564 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Boh=C3=A1=C4=8Dek?= Date: Fri, 3 Feb 2023 12:08:13 +0100 Subject: [PATCH] feat: add dispose and disconnect upon closing a tab --- .../Models/Packets/CommsPacketProvider.cs | 6 +++++ .../Models/Packets/DummyPacketProvider.cs | 4 ++-- .../Models/Packets/FilePacketProvider.cs | 6 +++++ .../Models/Packets/IPacketProvider.cs | 3 ++- src/PacketLogger/ViewModels/DockFactory.cs | 6 +++++ .../ViewModels/LogFilterTabViewModel.cs | 1 - .../ViewModels/LogTabViewModel.cs | 5 ++++ .../ViewModels/PacketLogDocumentViewModel.cs | 23 +++++++++++++++++-- 8 files changed, 48 insertions(+), 6 deletions(-) diff --git a/src/PacketLogger/Models/Packets/CommsPacketProvider.cs b/src/PacketLogger/Models/Packets/CommsPacketProvider.cs index ac5639d..453b2df 100644 --- a/src/PacketLogger/Models/Packets/CommsPacketProvider.cs +++ b/src/PacketLogger/Models/Packets/CommsPacketProvider.cs @@ -89,4 +89,10 @@ public class CommsPacketProvider : IPacketSender Packets.Add(new PacketInfo(index, DateTime.Now, packetArgs.Source, packetArgs.PacketString)); } } + + /// + public void Dispose() + { + Packets.Dispose(); + } } \ No newline at end of file diff --git a/src/PacketLogger/Models/Packets/DummyPacketProvider.cs b/src/PacketLogger/Models/Packets/DummyPacketProvider.cs index d491044..16d7c5c 100644 --- a/src/PacketLogger/Models/Packets/DummyPacketProvider.cs +++ b/src/PacketLogger/Models/Packets/DummyPacketProvider.cs @@ -70,13 +70,13 @@ public class DummyPacketProvider : IPacketProvider, IDisposable /// public Task Open() { - throw new System.NotImplementedException(); + return Task.FromResult(Result.FromSuccess()); } /// public Task Close() { - throw new System.NotImplementedException(); + return Task.FromResult(Result.FromSuccess()); } /// diff --git a/src/PacketLogger/Models/Packets/FilePacketProvider.cs b/src/PacketLogger/Models/Packets/FilePacketProvider.cs index 29f0ec0..9522afb 100644 --- a/src/PacketLogger/Models/Packets/FilePacketProvider.cs +++ b/src/PacketLogger/Models/Packets/FilePacketProvider.cs @@ -119,4 +119,10 @@ public class FilePacketProvider : IPacketProvider /// public event PropertyChangedEventHandler? PropertyChanged; + + /// + public void Dispose() + { + _packets?.Dispose(); + } } \ No newline at end of file diff --git a/src/PacketLogger/Models/Packets/IPacketProvider.cs b/src/PacketLogger/Models/Packets/IPacketProvider.cs index 6f516de..edb88d8 100644 --- a/src/PacketLogger/Models/Packets/IPacketProvider.cs +++ b/src/PacketLogger/Models/Packets/IPacketProvider.cs @@ -4,6 +4,7 @@ // Copyright (c) František Boháček. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. +using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; @@ -17,7 +18,7 @@ namespace PacketLogger.Models.Packets; /// /// Provides packets from some kind of a source. /// -public interface IPacketProvider : INotifyPropertyChanged +public interface IPacketProvider : INotifyPropertyChanged, IDisposable { /// /// Gets whether was called and successfully finished. diff --git a/src/PacketLogger/ViewModels/DockFactory.cs b/src/PacketLogger/ViewModels/DockFactory.cs index 619a6fd..47bed52 100644 --- a/src/PacketLogger/ViewModels/DockFactory.cs +++ b/src/PacketLogger/ViewModels/DockFactory.cs @@ -44,6 +44,12 @@ public class DockFactory : Factory, IDisposable _injector = injector; } + /// + public override IDockWindow CreateDockWindow() + { + return base.CreateDockWindow(); + } + /// /// Gets the document dock. /// diff --git a/src/PacketLogger/ViewModels/LogFilterTabViewModel.cs b/src/PacketLogger/ViewModels/LogFilterTabViewModel.cs index eec91d5..f7b6cf6 100644 --- a/src/PacketLogger/ViewModels/LogFilterTabViewModel.cs +++ b/src/PacketLogger/ViewModels/LogFilterTabViewModel.cs @@ -49,7 +49,6 @@ public class LogFilterTabViewModel : ViewModelBase, IDisposable } } ); - } /// diff --git a/src/PacketLogger/ViewModels/LogTabViewModel.cs b/src/PacketLogger/ViewModels/LogTabViewModel.cs index 3321799..3152707 100644 --- a/src/PacketLogger/ViewModels/LogTabViewModel.cs +++ b/src/PacketLogger/ViewModels/LogTabViewModel.cs @@ -227,6 +227,11 @@ public class LogTabViewModel : ViewModelBase, IDisposable public void Dispose() { TogglePane.Dispose(); + CopyPackets.Dispose(); + Clear.Dispose(); _cleanUp.Dispose(); + + SendFilter.Dispose(); + RecvFilter.Dispose(); } } \ No newline at end of file diff --git a/src/PacketLogger/ViewModels/PacketLogDocumentViewModel.cs b/src/PacketLogger/ViewModels/PacketLogDocumentViewModel.cs index e6caa35..4faf5de 100644 --- a/src/PacketLogger/ViewModels/PacketLogDocumentViewModel.cs +++ b/src/PacketLogger/ViewModels/PacketLogDocumentViewModel.cs @@ -31,7 +31,7 @@ using ReactiveUI; namespace PacketLogger.ViewModels; /// -public class PacketLogDocumentViewModel : Document, INotifyPropertyChanged +public class PacketLogDocumentViewModel : Document, INotifyPropertyChanged, IDisposable { private readonly CommsInjector _injector; private readonly NostaleProcesses _processes; @@ -68,7 +68,7 @@ public class PacketLogDocumentViewModel : Document, INotifyPropertyChanged { var mainWindow = (App.Current!.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime) ?.MainWindow; - var result = await new OpenFileDialog() + var result = await new OpenFileDialog { AllowMultiple = false, InitialFileName = Assembly.GetEntryAssembly()?.GetModules().FirstOrDefault()?.FullyQualifiedName @@ -184,4 +184,23 @@ public class PacketLogDocumentViewModel : Document, INotifyPropertyChanged /// Gets the command for opening a process / connecting to a process. /// public ReactiveCommand OpenProcess { get; } + + /// + public override bool OnClose() + { + LogViewModel?.Provider.Close().GetAwaiter().GetResult(); + Dispose(); + return base.OnClose(); + } + + /// + public void Dispose() + { + _ctSource.Cancel(); + _ctSource.Dispose(); + LogViewModel?.Dispose(); + OpenDummy.Dispose(); + OpenFile.Dispose(); + OpenProcess.Dispose(); + } } \ No newline at end of file -- 2.49.0