99 lines
2.5 KiB
C#
99 lines
2.5 KiB
C#
using System;
|
|
using BITKit.UX;
|
|
using Cysharp.Threading.Tasks;
|
|
using UnityEngine;
|
|
using UnityEngine.UIElements;
|
|
|
|
namespace BITKit.Apps
|
|
{
|
|
public class UXApplicationService : MonoBehaviour
|
|
{
|
|
[SerializeField] private bool externalDownload;
|
|
[SerializeField, SerializeReference, SubclassSelector]
|
|
private IApplicationService applicationService;
|
|
[SerializeField] private UIDocument document;
|
|
|
|
[UXBindPath("container")]
|
|
private VisualElement _container;
|
|
[UXBindPath("download-button")]
|
|
private Button _downloadButton;
|
|
[UXBindPath("cancel-download-button")]
|
|
private Button _cancelDownloadButton;
|
|
[UXBindPath("install-button")]
|
|
private Button _installButton;
|
|
[UXBindPath("latest-version-label")]
|
|
private Label _latestVersionLabel;
|
|
[UXBindPath("download-bar")]
|
|
private ProgressBar _downloadBar;
|
|
|
|
private void Start()
|
|
{
|
|
UXUtils.Inject(this);
|
|
applicationService.OnLatestVersionCheck += OnLatestVersionCheck;
|
|
applicationService.OnDownloadLatest+= OnDownloadLatest;
|
|
applicationService.OnDownloadProgress += OnDownloadProgress;
|
|
applicationService.OnDownloadComplete += OnDownloadComplete;
|
|
|
|
_downloadButton.clicked+=ConfirmDownload;
|
|
_cancelDownloadButton.clicked+=OnCancelDownload;
|
|
destroyCancellationToken.Register(Dispose);
|
|
|
|
_container.Navigate("entry-container");
|
|
}
|
|
|
|
private void Dispose()
|
|
{
|
|
applicationService.OnLatestVersionCheck -= OnLatestVersionCheck;
|
|
applicationService.OnDownloadLatest-= OnDownloadLatest;
|
|
applicationService.OnDownloadProgress -= OnDownloadProgress;
|
|
applicationService.OnDownloadComplete -= OnDownloadComplete;
|
|
}
|
|
private void OnDownloadLatest(string obj)
|
|
{
|
|
_container.Navigate("download-container");
|
|
}
|
|
|
|
private void ConfirmDownload()
|
|
{
|
|
if (externalDownload)
|
|
{
|
|
Application.OpenURL(applicationService.DownloadLatestUrl);
|
|
}
|
|
else
|
|
{
|
|
applicationService.DownloadLatestVersionAsync().Forget();
|
|
}
|
|
}
|
|
|
|
private void OnDownloadComplete(string obj)
|
|
{
|
|
_container.Navigate("complete-container");
|
|
}
|
|
|
|
private void OnDownloadProgress(float obj)
|
|
{
|
|
//设置为百分比
|
|
_downloadBar.value = obj;
|
|
//保留两位数小数点
|
|
_downloadBar.title = $"{obj * 100:0.00}%";
|
|
}
|
|
|
|
private void OnLatestVersionCheck(string obj)
|
|
{
|
|
if (Application.version != obj)
|
|
{
|
|
_latestVersionLabel.text =obj;
|
|
_container.Navigate("entryDownload-container");
|
|
}
|
|
else
|
|
{
|
|
_container.Navigate(null);
|
|
}
|
|
}
|
|
private void OnCancelDownload()
|
|
{
|
|
_container.Navigate(null);
|
|
}
|
|
}
|
|
}
|