diff --git a/src/Models/Count.cs b/src/Models/Count.cs new file mode 100644 index 00000000..d48b0c08 --- /dev/null +++ b/src/Models/Count.cs @@ -0,0 +1,19 @@ +using System; + +namespace SourceGit.Models +{ + public class Count : IDisposable + { + public int Value { get; set; } = 0; + + public Count(int value) + { + Value = value; + } + + public void Dispose() + { + // Ignore + } + } +} diff --git a/src/ViewModels/CommitDetail.cs b/src/ViewModels/CommitDetail.cs index 997e3a88..bedf9e0c 100644 --- a/src/ViewModels/CommitDetail.cs +++ b/src/ViewModels/CommitDetail.cs @@ -15,7 +15,7 @@ using CommunityToolkit.Mvvm.ComponentModel; namespace SourceGit.ViewModels { - public partial class CommitDetail : ObservableObject + public partial class CommitDetail : ObservableObject, IDisposable { public int ActivePageIndex { @@ -137,7 +137,7 @@ namespace SourceGit.ViewModels WebLinks = Models.CommitLink.Get(repo.Remotes); } - public void Cleanup() + public void Dispose() { _repo = null; _commit = null; diff --git a/src/ViewModels/Histories.cs b/src/ViewModels/Histories.cs index f21d2636..4bccfea7 100644 --- a/src/ViewModels/Histories.cs +++ b/src/ViewModels/Histories.cs @@ -12,7 +12,7 @@ using CommunityToolkit.Mvvm.ComponentModel; namespace SourceGit.ViewModels { - public class Histories : ObservableObject + public class Histories : ObservableObject, IDisposable { public Repository Repo { @@ -57,7 +57,7 @@ namespace SourceGit.ViewModels private set => SetProperty(ref _navigationId, value); } - public object DetailContext + public IDisposable DetailContext { get => _detailContext; set => SetProperty(ref _detailContext, value); @@ -98,23 +98,13 @@ namespace SourceGit.ViewModels _repo = repo; } - public void Cleanup() + public void Dispose() { - Commits = new List(); - + Commits = []; _repo = null; _graph = null; _autoSelectedCommit = null; - - if (_detailContext is CommitDetail cd) - { - cd.Cleanup(); - } - else if (_detailContext is RevisionCompare rc) - { - rc.Cleanup(); - } - + _detailContext?.Dispose(); _detailContext = null; } @@ -220,7 +210,7 @@ namespace SourceGit.ViewModels else { _repo.SelectedSearchedCommit = null; - DetailContext = commits.Count; + DetailContext = new Models.Count(commits.Count); } } @@ -1256,7 +1246,7 @@ namespace SourceGit.ViewModels private Models.CommitGraph _graph = null; private Models.Commit _autoSelectedCommit = null; private long _navigationId = 0; - private object _detailContext = null; + private IDisposable _detailContext = null; private Models.Bisect _bisect = null; diff --git a/src/ViewModels/Repository.cs b/src/ViewModels/Repository.cs index 0ca5f564..a209d8a7 100644 --- a/src/ViewModels/Repository.cs +++ b/src/ViewModels/Repository.cs @@ -546,9 +546,9 @@ namespace SourceGit.ViewModels _historiesFilterMode = Models.FilterMode.None; _watcher?.Dispose(); - _histories.Cleanup(); - _workingCopy.Cleanup(); - _stashesPage.Cleanup(); + _histories.Dispose(); + _workingCopy.Dispose(); + _stashesPage.Dispose(); _watcher = null; _histories = null; diff --git a/src/ViewModels/RevisionCompare.cs b/src/ViewModels/RevisionCompare.cs index 3b5717a6..1dad7593 100644 --- a/src/ViewModels/RevisionCompare.cs +++ b/src/ViewModels/RevisionCompare.cs @@ -10,7 +10,7 @@ using CommunityToolkit.Mvvm.ComponentModel; namespace SourceGit.ViewModels { - public class RevisionCompare : ObservableObject + public class RevisionCompare : ObservableObject, IDisposable { public object StartPoint { @@ -83,7 +83,7 @@ namespace SourceGit.ViewModels Task.Run(Refresh); } - public void Cleanup() + public void Dispose() { _repo = null; _startPoint = null; diff --git a/src/ViewModels/StashesPage.cs b/src/ViewModels/StashesPage.cs index 87e36b86..a63eb592 100644 --- a/src/ViewModels/StashesPage.cs +++ b/src/ViewModels/StashesPage.cs @@ -11,7 +11,7 @@ using CommunityToolkit.Mvvm.ComponentModel; namespace SourceGit.ViewModels { - public class StashesPage : ObservableObject + public class StashesPage : ObservableObject, IDisposable { public List Stashes { @@ -125,14 +125,13 @@ namespace SourceGit.ViewModels _repo = repo; } - public void Cleanup() + public void Dispose() { + _stashes?.Clear(); + _changes?.Clear(); + _repo = null; - if (_stashes != null) - _stashes.Clear(); _selectedStash = null; - if (_changes != null) - _changes.Clear(); _selectedChange = null; _diffContext = null; } diff --git a/src/ViewModels/WorkingCopy.cs b/src/ViewModels/WorkingCopy.cs index 762f1176..bc54a8d6 100644 --- a/src/ViewModels/WorkingCopy.cs +++ b/src/ViewModels/WorkingCopy.cs @@ -11,7 +11,7 @@ using CommunityToolkit.Mvvm.ComponentModel; namespace SourceGit.ViewModels { - public class WorkingCopy : ObservableObject + public class WorkingCopy : ObservableObject, IDisposable { public bool IncludeUntracked { @@ -210,7 +210,7 @@ namespace SourceGit.ViewModels _repo = repo; } - public void Cleanup() + public void Dispose() { _repo = null; _inProgressContext = null; diff --git a/src/Views/Histories.axaml b/src/Views/Histories.axaml index c9a8ba5e..aa9d615b 100644 --- a/src/Views/Histories.axaml +++ b/src/Views/Histories.axaml @@ -257,7 +257,7 @@ - + + Text="{Binding Value, Converter={x:Static c:StringConverters.FormatByResourceKey}, ConverterParameter='Histories.Selected'}"/>