Libation/Source/LibationUiBase/GridView/LastDownloadStatus.cs

53 lines
1.8 KiB
C#

using DataLayer;
using LibationFileManager;
using System;
namespace LibationUiBase.GridView
{
public class LastDownloadStatus : IComparable
{
public bool IsValid => LastDownloadedVersion is not null && LastDownloaded.HasValue;
public AudioFormat LastDownloadedFormat { get; }
public string LastDownloadedFileVersion { get; }
public Version LastDownloadedVersion { get; }
public DateTime? LastDownloaded { get; }
public string ToolTipText => IsValid ? $"Double click to open v{LastDownloadedVersion.ToVersionString()} release notes" : "";
public LastDownloadStatus() { }
public LastDownloadStatus(UserDefinedItem udi)
{
LastDownloadedVersion = udi.LastDownloadedVersion;
LastDownloadedFormat = udi.LastDownloadedFormat;
LastDownloadedFileVersion = udi.LastDownloadedFileVersion;
LastDownloaded = udi.LastDownloaded;
}
public void OpenReleaseUrl()
{
if (IsValid)
Dinah.Core.Go.To.Url($"{AppScaffolding.LibationScaffolding.RepositoryUrl}/releases/tag/v{LastDownloadedVersion.ToVersionString()}");
}
public override string ToString()
=> IsValid ? $"""
{dateString()} {versionString()}
{LastDownloadedFormat}
Libation v{LastDownloadedVersion.ToVersionString()}
""" : "";
private string versionString() => LastDownloadedFileVersion is string ver ? $"(File v.{ver})" : "";
//Call ToShortDateString to use current culture's date format.
private string dateString() => $"{LastDownloaded.Value.ToShortDateString()} {LastDownloaded.Value:HH:mm}";
public int CompareTo(object obj)
{
if (obj is not LastDownloadStatus second) return -1;
else if (IsValid && !second.IsValid) return -1;
else if (!IsValid && second.IsValid) return 1;
else if (!IsValid && !second.IsValid) return 0;
else return LastDownloaded.Value.CompareTo(second.LastDownloaded.Value);
}
}
}