using System.Threading.Tasks; using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; namespace SourceGit.ViewModels { public class Blame : ObservableObject { public string Title { get; private set; } public string SelectedSHA { get => _selectedSHA; private set => SetProperty(ref _selectedSHA, value); } public bool IsBinary { get => _data != null && _data.IsBinary; } public Models.BlameData Data { get => _data; private set => SetProperty(ref _data, value); } public Blame(string repo, string file, string revision) { _repo = repo; Title = $"{file} @ {revision.Substring(0, 10)}"; Task.Run(() => { var result = new Commands.Blame(repo, file, revision).Result(); Dispatcher.UIThread.Invoke(() => { Data = result; OnPropertyChanged(nameof(IsBinary)); }); }); } public void NavigateToCommit(string commitSHA) { var repo = Preference.FindRepository(_repo); if (repo != null) repo.NavigateToCommit(commitSHA); } private readonly string _repo = string.Empty; private string _selectedSHA = string.Empty; private Models.BlameData _data = null; } }