update libs
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using PackageModel = AssetStoreTools.Api.Models.Package;
|
||||
|
||||
namespace AssetStoreTools.Uploader.Data
|
||||
{
|
||||
internal interface IPackage
|
||||
{
|
||||
string PackageId { get; }
|
||||
string VersionId { get; }
|
||||
string Name { get; }
|
||||
string Status { get; }
|
||||
string Category { get; }
|
||||
bool IsCompleteProject { get; }
|
||||
string RootGuid { get; }
|
||||
string RootPath { get; }
|
||||
string ProjectPath { get; }
|
||||
string Modified { get; }
|
||||
string Size { get; }
|
||||
bool IsDraft { get; }
|
||||
Texture2D Icon { get; }
|
||||
|
||||
event Action OnUpdate;
|
||||
event Action OnIconUpdate;
|
||||
|
||||
string FormattedSize();
|
||||
string FormattedModified();
|
||||
|
||||
void UpdateData(PackageModel source);
|
||||
void UpdateIcon(Texture2D texture);
|
||||
|
||||
PackageModel ToModel();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b92f2ed98d0b31a479aa2bfd95528fbd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 115
|
||||
packageName: Asset Store Publishing Tools
|
||||
packageVersion: 12.0.1
|
||||
assetPath: Packages/com.unity.asset-store-tools/Editor/Uploader/Scripts/Data/Abstractions/IPackage.cs
|
||||
uploadId: 724584
|
||||
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace AssetStoreTools.Uploader.Data
|
||||
{
|
||||
internal interface IPackageContent
|
||||
{
|
||||
event Action<IWorkflow> OnActiveWorkflowChanged;
|
||||
|
||||
IWorkflow GetActiveWorkflow();
|
||||
List<IWorkflow> GetAvailableWorkflows();
|
||||
void SetActiveWorkflow(IWorkflow workflow);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 45ce41158c3174149b7056a30ac901db
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 115
|
||||
packageName: Asset Store Publishing Tools
|
||||
packageVersion: 12.0.1
|
||||
assetPath: Packages/com.unity.asset-store-tools/Editor/Uploader/Scripts/Data/Abstractions/IPackageContent.cs
|
||||
uploadId: 724584
|
||||
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace AssetStoreTools.Uploader.Data
|
||||
{
|
||||
internal interface IPackageGroup
|
||||
{
|
||||
string Name { get; }
|
||||
List<IPackage> Packages { get; }
|
||||
|
||||
event Action<List<IPackage>> OnPackagesSorted;
|
||||
event Action<List<IPackage>> OnPackagesFiltered;
|
||||
|
||||
void Sort(PackageSorting sortingType);
|
||||
void Filter(string filter);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f683845071b8891498156d95a1a5c2dd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 115
|
||||
packageName: Asset Store Publishing Tools
|
||||
packageVersion: 12.0.1
|
||||
assetPath: Packages/com.unity.asset-store-tools/Editor/Uploader/Scripts/Data/Abstractions/IPackageGroup.cs
|
||||
uploadId: 724584
|
||||
@@ -0,0 +1,36 @@
|
||||
using AssetStoreTools.Api;
|
||||
using AssetStoreTools.Api.Responses;
|
||||
using AssetStoreTools.Exporter;
|
||||
using AssetStoreTools.Validator.Data;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AssetStoreTools.Uploader.Data
|
||||
{
|
||||
internal interface IWorkflow
|
||||
{
|
||||
string Name { get; }
|
||||
string DisplayName { get; }
|
||||
string PackageName { get; }
|
||||
string PackageExtension { get; }
|
||||
bool IsPathSet { get; }
|
||||
|
||||
event Action OnChanged;
|
||||
event Action<UploadStatus?, float?> OnUploadStateChanged;
|
||||
|
||||
bool GenerateHighQualityPreviews { get; set; }
|
||||
ValidationSettings LastValidationSettings { get; }
|
||||
ValidationResult LastValidationResult { get; }
|
||||
|
||||
IEnumerable<string> GetAllPaths();
|
||||
ValidationResult Validate();
|
||||
Task<PackageExporterResult> ExportPackage(string outputPath);
|
||||
Task<bool> ValidatePackageUploadedVersions();
|
||||
|
||||
Task<PackageUploadResponse> UploadPackage(string exportedPackagePath);
|
||||
void AbortUpload();
|
||||
void ResetUploadStatus();
|
||||
Task RefreshPackage();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7a2f796eadafa774bae89cf3939611dd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 115
|
||||
packageName: Asset Store Publishing Tools
|
||||
packageVersion: 12.0.1
|
||||
assetPath: Packages/com.unity.asset-store-tools/Editor/Uploader/Scripts/Data/Abstractions/IWorkflow.cs
|
||||
uploadId: 724584
|
||||
@@ -0,0 +1,18 @@
|
||||
using AssetStoreTools.Api;
|
||||
using AssetStoreTools.Api.Responses;
|
||||
using AssetStoreTools.Uploader.Services.Analytics.Data;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine.Analytics;
|
||||
|
||||
namespace AssetStoreTools.Uploader.Data
|
||||
{
|
||||
internal interface IWorkflowServices
|
||||
{
|
||||
Task<PackageUploadedUnityVersionDataResponse> GetPackageUploadedVersions(IPackage package, int timeoutMs);
|
||||
Task<PackageUploadResponse> UploadPackage(IPackageUploader uploader, IProgress<float> progress);
|
||||
void StopUploading(IPackageUploader uploader);
|
||||
AnalyticsResult SendAnalytic(IAssetStoreAnalytic data);
|
||||
Task<RefreshedPackageDataResponse> UpdatePackageData(IPackage package);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0ae017363fa41ff4d9926dc4a5852246
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 115
|
||||
packageName: Asset Store Publishing Tools
|
||||
packageVersion: 12.0.1
|
||||
assetPath: Packages/com.unity.asset-store-tools/Editor/Uploader/Scripts/Data/Abstractions/IWorkflowServices.cs
|
||||
uploadId: 724584
|
||||
@@ -0,0 +1,253 @@
|
||||
using AssetStoreTools.Api;
|
||||
using AssetStoreTools.Api.Responses;
|
||||
using AssetStoreTools.Exporter;
|
||||
using AssetStoreTools.Previews;
|
||||
using AssetStoreTools.Previews.Data;
|
||||
using AssetStoreTools.Previews.Generators;
|
||||
using AssetStoreTools.Uploader.Services.Analytics.Data;
|
||||
using AssetStoreTools.Utility;
|
||||
using AssetStoreTools.Validator;
|
||||
using AssetStoreTools.Validator.Data;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AssetStoreTools.Uploader.Data
|
||||
{
|
||||
internal abstract class WorkflowBase : IWorkflow
|
||||
{
|
||||
protected IPackage Package;
|
||||
|
||||
public abstract string Name { get; }
|
||||
public abstract string DisplayName { get; }
|
||||
public string PackageName => Package.Name;
|
||||
public abstract string PackageExtension { get; }
|
||||
public abstract bool IsPathSet { get; }
|
||||
|
||||
protected string LocalPackageGuid;
|
||||
protected string LocalPackagePath;
|
||||
protected string LocalProjectPath;
|
||||
|
||||
public bool GenerateHighQualityPreviews { get; set; }
|
||||
public ValidationSettings LastValidationSettings { get; private set; }
|
||||
public ValidationResult LastValidationResult { get; private set; }
|
||||
|
||||
private IWorkflowServices _services;
|
||||
private IPackageUploader _activeUploader;
|
||||
|
||||
public abstract event Action OnChanged;
|
||||
public event Action<UploadStatus?, float?> OnUploadStateChanged;
|
||||
|
||||
public WorkflowBase(IPackage package, IWorkflowServices services)
|
||||
{
|
||||
Package = package;
|
||||
_services = services;
|
||||
}
|
||||
|
||||
public abstract IEnumerable<string> GetAllPaths();
|
||||
|
||||
public abstract IValidator CreateValidator();
|
||||
|
||||
public ValidationResult Validate()
|
||||
{
|
||||
var validator = CreateValidator();
|
||||
var result = CreateValidator().Validate();
|
||||
|
||||
LastValidationSettings = validator.Settings;
|
||||
LastValidationResult = result;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
protected IPreviewGenerator CreatePreviewGenerator(List<string> inputPaths)
|
||||
{
|
||||
PreviewGenerationSettings settings;
|
||||
IPreviewGenerator generator;
|
||||
|
||||
// Filter out ProjectSettings
|
||||
inputPaths = inputPaths.Where(x => x == "Assets" || x.StartsWith("Assets/") || x.StartsWith("Packages/")).ToList();
|
||||
|
||||
if (!GenerateHighQualityPreviews)
|
||||
{
|
||||
settings = new NativePreviewGenerationSettings()
|
||||
{
|
||||
InputPaths = inputPaths.ToArray(),
|
||||
OverwriteExisting = false,
|
||||
OutputPath = Constants.Previews.Native.DefaultOutputPath,
|
||||
Format = Constants.Previews.Native.DefaultFormat,
|
||||
PreviewFileNamingFormat = Constants.Previews.DefaultFileNameFormat,
|
||||
WaitForPreviews = Constants.Previews.Native.DefaultWaitForPreviews,
|
||||
ChunkedPreviewLoading = Constants.Previews.Native.DefaultChunkedPreviewLoading,
|
||||
ChunkSize = Constants.Previews.Native.DefaultChunkSize
|
||||
};
|
||||
|
||||
generator = new NativePreviewGenerator((NativePreviewGenerationSettings)settings);
|
||||
}
|
||||
else
|
||||
{
|
||||
settings = new CustomPreviewGenerationSettings()
|
||||
{
|
||||
InputPaths = inputPaths.ToArray(),
|
||||
OverwriteExisting = false,
|
||||
Width = Constants.Previews.Custom.DefaultWidth,
|
||||
Height = Constants.Previews.Custom.DefaultHeight,
|
||||
Depth = Constants.Previews.Custom.DefaultDepth,
|
||||
NativeWidth = Constants.Previews.Custom.DefaultNativeWidth,
|
||||
NativeHeight = Constants.Previews.Custom.DefaultNativeHeight,
|
||||
OutputPath = Constants.Previews.Custom.DefaultOutputPath,
|
||||
Format = Constants.Previews.Custom.DefaultFormat,
|
||||
PreviewFileNamingFormat = Constants.Previews.DefaultFileNameFormat,
|
||||
AudioSampleColor = Constants.Previews.Custom.DefaultAudioSampleColor,
|
||||
AudioBackgroundColor = Constants.Previews.Custom.DefaultAudioBackgroundColor,
|
||||
};
|
||||
|
||||
generator = new CustomPreviewGenerator((CustomPreviewGenerationSettings)settings);
|
||||
}
|
||||
|
||||
return generator;
|
||||
}
|
||||
|
||||
public abstract IPackageExporter CreateExporter(string outputPath);
|
||||
|
||||
public virtual async Task<PackageExporterResult> ExportPackage(string outputPath)
|
||||
{
|
||||
var exporter = CreateExporter(outputPath);
|
||||
var result = await exporter.Export();
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<bool> ValidatePackageUploadedVersions()
|
||||
{
|
||||
var unityVersionSupported = string.Compare(Application.unityVersion, Constants.Uploader.MinRequiredUnitySupportVersion, StringComparison.Ordinal) >= 0;
|
||||
if (unityVersionSupported)
|
||||
return true;
|
||||
|
||||
var response = await _services.GetPackageUploadedVersions(Package, 5000);
|
||||
if (response.Cancelled || response.Success == false)
|
||||
return true;
|
||||
|
||||
return response.UnityVersions.Any(x => string.Compare(x, Constants.Uploader.MinRequiredUnitySupportVersion, StringComparison.Ordinal) >= 0);
|
||||
}
|
||||
|
||||
private bool ValidatePackageBeforeUpload(string packagePath, out string error)
|
||||
{
|
||||
error = string.Empty;
|
||||
|
||||
if (!File.Exists(packagePath))
|
||||
{
|
||||
error = $"File '{packagePath}' was not found.";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!ValidatePackageSize(packagePath, out error))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool ValidatePackageSize(string packagePath, out string error)
|
||||
{
|
||||
error = string.Empty;
|
||||
|
||||
long packageSize = new FileInfo(packagePath).Length;
|
||||
long packageSizeLimit = Constants.Uploader.MaxPackageSizeBytes;
|
||||
|
||||
if (packageSize <= packageSizeLimit)
|
||||
return true;
|
||||
|
||||
float packageSizeInGB = packageSize / (float)1073741824; // (1024 * 1024 * 1024)
|
||||
float maxPackageSizeInGB = packageSizeLimit / (float)1073741824;
|
||||
error = $"The size of your package ({packageSizeInGB:0.0} GB) exceeds the maximum allowed package size of {maxPackageSizeInGB:0} GB. " +
|
||||
$"Please reduce the size of your package.";
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public async Task<PackageUploadResponse> UploadPackage(string packagePath)
|
||||
{
|
||||
if (!ValidatePackageBeforeUpload(packagePath, out var error))
|
||||
{
|
||||
return new PackageUploadResponse() { Success = false, Status = UploadStatus.Fail, Exception = new Exception(error) };
|
||||
}
|
||||
|
||||
_activeUploader = CreatePackageUploader(packagePath);
|
||||
var progress = new Progress<float>();
|
||||
|
||||
var time = System.Diagnostics.Stopwatch.StartNew();
|
||||
|
||||
progress.ProgressChanged += ReportUploadProgress;
|
||||
var response = await _services.UploadPackage(_activeUploader, progress);
|
||||
progress.ProgressChanged -= ReportUploadProgress;
|
||||
|
||||
// Send analytics
|
||||
time.Stop();
|
||||
if (!response.Cancelled)
|
||||
SendAnalytics(packagePath, response.Status, time.Elapsed.TotalSeconds);
|
||||
|
||||
OnUploadStateChanged?.Invoke(response.Status, null);
|
||||
_activeUploader = null;
|
||||
return response;
|
||||
}
|
||||
|
||||
protected abstract IPackageUploader CreatePackageUploader(string exportedPackagePath);
|
||||
|
||||
private void ReportUploadProgress(object _, float value)
|
||||
{
|
||||
OnUploadStateChanged?.Invoke(null, value);
|
||||
}
|
||||
|
||||
private void SendAnalytics(string packagePath, UploadStatus uploadStatus, double timeTakenSeconds)
|
||||
{
|
||||
try
|
||||
{
|
||||
var analytic = new PackageUploadAnalytic(
|
||||
packageId: Package.PackageId,
|
||||
category: Package.Category,
|
||||
usedValidator: LastValidationResult != null,
|
||||
validationSettings: LastValidationSettings,
|
||||
validationResult: LastValidationResult,
|
||||
uploadFinishedReason: uploadStatus,
|
||||
timeTaken: timeTakenSeconds,
|
||||
packageSize: new FileInfo(packagePath).Length,
|
||||
workflow: Name
|
||||
);
|
||||
|
||||
var result = _services.SendAnalytic(analytic);
|
||||
}
|
||||
catch (Exception e) { ASDebug.LogError($"Could not send analytics: {e}"); }
|
||||
}
|
||||
|
||||
public void AbortUpload()
|
||||
{
|
||||
if (_activeUploader != null)
|
||||
_services.StopUploading(_activeUploader);
|
||||
|
||||
_activeUploader = null;
|
||||
}
|
||||
|
||||
public void ResetUploadStatus()
|
||||
{
|
||||
OnUploadStateChanged?.Invoke(UploadStatus.Default, 0f);
|
||||
}
|
||||
|
||||
public async Task RefreshPackage()
|
||||
{
|
||||
var response = await _services.UpdatePackageData(Package);
|
||||
if (!response.Success)
|
||||
return;
|
||||
|
||||
Package.UpdateData(response.Package);
|
||||
}
|
||||
|
||||
public abstract bool IsPathValid(string path, out string reason);
|
||||
|
||||
protected abstract void Serialize();
|
||||
|
||||
protected abstract void Deserialize();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d0e87ee17aa944c42b1c335abe19daaf
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 115
|
||||
packageName: Asset Store Publishing Tools
|
||||
packageVersion: 12.0.1
|
||||
assetPath: Packages/com.unity.asset-store-tools/Editor/Uploader/Scripts/Data/Abstractions/WorkflowBase.cs
|
||||
uploadId: 724584
|
||||
Reference in New Issue
Block a user