83 lines
2.6 KiB
C#
83 lines
2.6 KiB
C#
|
using System;
|
||
|
using System.IO;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace UnityEditor.Build.CacheServer
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// IDownloadItem implementation for downloading to a file specified by path.
|
||
|
/// </summary>
|
||
|
public class FileDownloadItem : IDownloadItem
|
||
|
{
|
||
|
private Stream m_writeStream;
|
||
|
private string m_tmpPath;
|
||
|
|
||
|
/// <summary>
|
||
|
/// The FileId for the FileDownloadItem. FileId consists of an assets guid and hash code.
|
||
|
/// </summary>
|
||
|
public FileId Id { get; private set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// The type of the FileDownloadItems desired item.
|
||
|
/// </summary>
|
||
|
public FileType Type { get; private set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// File path where downloaded file data is saved. Data is first written to a temporary file location, and moved
|
||
|
/// into place when the Finish() method is called by the Cache Server Client.
|
||
|
/// </summary>
|
||
|
public string FilePath { get; private set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// Gets the write stream for a given FileDownloadItem. If one does not exist, it will be created.
|
||
|
/// </summary>
|
||
|
/// <param name="size"></param>
|
||
|
/// <returns></returns>
|
||
|
public Stream GetWriteStream(long size)
|
||
|
{
|
||
|
if (m_writeStream == null)
|
||
|
{
|
||
|
m_tmpPath = Path.GetTempFileName();
|
||
|
m_writeStream = new FileStream(m_tmpPath, FileMode.Create, FileAccess.Write);
|
||
|
}
|
||
|
|
||
|
return m_writeStream;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Create a new FileDownloadItem
|
||
|
/// </summary>
|
||
|
/// <param name="fileId">The FileId of the desired item.</param>
|
||
|
/// <param name="fileType">The FileType of the desired item.</param>
|
||
|
/// <param name="path">The path of the desired item.</param>
|
||
|
public FileDownloadItem(FileId fileId, FileType fileType, string path)
|
||
|
{
|
||
|
Id = fileId;
|
||
|
Type = fileType;
|
||
|
FilePath = path;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Dispose the FileDownloadItems write stream and move the data from the temporary path to its final destination.
|
||
|
/// </summary>
|
||
|
public void Finish()
|
||
|
{
|
||
|
if (m_writeStream == null)
|
||
|
return;
|
||
|
|
||
|
m_writeStream.Dispose();
|
||
|
try
|
||
|
{
|
||
|
if (File.Exists(FilePath))
|
||
|
File.Delete(FilePath);
|
||
|
|
||
|
File.Move(m_tmpPath, FilePath);
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
Debug.LogError(e);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|