You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

VersionUpdatePromptViewModel.cs 1.5 kB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using ReactiveUI;
  2. using Shadowsocks.WPF.Services;
  3. using Splat;
  4. using System.Reactive;
  5. using System.Text.Json;
  6. namespace Shadowsocks.WPF.ViewModels
  7. {
  8. public class VersionUpdatePromptViewModel : ReactiveObject
  9. {
  10. public VersionUpdatePromptViewModel(JsonElement releaseObject)
  11. {
  12. _updateChecker = Locator.Current.GetService<UpdateChecker>();
  13. _releaseObject = releaseObject;
  14. var releaseTagName = _releaseObject.GetProperty("tag_name").GetString();
  15. var releaseNotes = _releaseObject.GetProperty("body").GetString();
  16. var releaseIsPrerelease = _releaseObject.GetProperty("prerelease").GetBoolean();
  17. ReleaseNotes = string.Concat(
  18. $"# {(releaseIsPrerelease ? "⚠ Pre-release" : "ℹ Release")} {releaseTagName ?? "Failed to get tag name"}\r\n",
  19. releaseNotes ?? "Failed to get release notes");
  20. Update = ReactiveCommand.CreateFromTask(_updateChecker.DoUpdate);
  21. SkipVersion = ReactiveCommand.Create(_updateChecker.SkipUpdate);
  22. NotNow = ReactiveCommand.Create(_updateChecker.CloseVersionUpdatePromptWindow);
  23. }
  24. private readonly UpdateChecker _updateChecker;
  25. private readonly JsonElement _releaseObject;
  26. public string ReleaseNotes { get; }
  27. public ReactiveCommand<Unit, Unit> Update { get; }
  28. public ReactiveCommand<Unit, Unit> SkipVersion { get; }
  29. public ReactiveCommand<Unit, Unit> NotNow { get; }
  30. }
  31. }