102 lines
3.2 KiB
C#
102 lines
3.2 KiB
C#
|
using System;
|
|||
|
using System.IO;
|
|||
|
|
|||
|
namespace YooAsset
|
|||
|
{
|
|||
|
internal class CopyBuildinFileOperation : AsyncOperationBase
|
|||
|
{
|
|||
|
private enum ESteps
|
|||
|
{
|
|||
|
None,
|
|||
|
CheckFileExist,
|
|||
|
TryCopyFile,
|
|||
|
UnpackFile,
|
|||
|
Done,
|
|||
|
}
|
|||
|
|
|||
|
private UnityWebFileRequestOperation _webFileRequestOp;
|
|||
|
private readonly string _sourceFilePath;
|
|||
|
private readonly string _destFilePath;
|
|||
|
private ESteps _steps = ESteps.None;
|
|||
|
|
|||
|
public CopyBuildinFileOperation(string sourceFilePath, string destFilePath)
|
|||
|
{
|
|||
|
_sourceFilePath = sourceFilePath;
|
|||
|
_destFilePath = destFilePath;
|
|||
|
}
|
|||
|
internal override void InternalStart()
|
|||
|
{
|
|||
|
_steps = ESteps.CheckFileExist;
|
|||
|
}
|
|||
|
internal override void InternalUpdate()
|
|||
|
{
|
|||
|
if (_steps == ESteps.None || _steps == ESteps.Done)
|
|||
|
return;
|
|||
|
|
|||
|
if (_steps == ESteps.CheckFileExist)
|
|||
|
{
|
|||
|
if (File.Exists(_destFilePath))
|
|||
|
{
|
|||
|
_steps = ESteps.Done;
|
|||
|
Status = EOperationStatus.Succeed;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
_steps = ESteps.TryCopyFile;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (_steps == ESteps.TryCopyFile)
|
|||
|
{
|
|||
|
if (File.Exists(_sourceFilePath))
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var directory = Path.GetDirectoryName(_destFilePath);
|
|||
|
if (Directory.Exists(directory) == false)
|
|||
|
Directory.CreateDirectory(directory);
|
|||
|
File.Copy(_sourceFilePath, _destFilePath, true);
|
|||
|
_steps = ESteps.Done;
|
|||
|
Status = EOperationStatus.Succeed;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
YooLogger.Warning($"Failed copy buildin file : {ex.Message}");
|
|||
|
_steps = ESteps.UnpackFile;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
_steps = ESteps.UnpackFile;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (_steps == ESteps.UnpackFile)
|
|||
|
{
|
|||
|
if (_webFileRequestOp == null)
|
|||
|
{
|
|||
|
string url = DownloadSystemHelper.ConvertToWWWPath(_sourceFilePath);
|
|||
|
_webFileRequestOp = new UnityWebFileRequestOperation(url, _destFilePath, 60);
|
|||
|
_webFileRequestOp.StartOperation();
|
|||
|
AddChildOperation(_webFileRequestOp);
|
|||
|
}
|
|||
|
|
|||
|
_webFileRequestOp.UpdateOperation();
|
|||
|
if (_webFileRequestOp.IsDone == false)
|
|||
|
return;
|
|||
|
|
|||
|
if (_webFileRequestOp.Status == EOperationStatus.Succeed)
|
|||
|
{
|
|||
|
_steps = ESteps.Done;
|
|||
|
Status = EOperationStatus.Succeed;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
_steps = ESteps.Done;
|
|||
|
Status = EOperationStatus.Failed;
|
|||
|
Error = _webFileRequestOp.Error;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|