using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using System.IO;
|
using System.Threading;
|
|
public class AssetDeCompressTask
|
{
|
|
|
public static string assetDeCompressVersion
|
{
|
get
|
{
|
return LocalSave.GetString("AssetDeCompressVersion");
|
}
|
set
|
{
|
LocalSave.SetString("AssetDeCompressVersion", value);
|
}
|
}
|
|
public static bool assetDeCompressCompleted
|
{
|
get
|
{
|
if (string.IsNullOrEmpty(assetDeCompressVersion))
|
{
|
return false;
|
}
|
else
|
{
|
return assetDeCompressVersion == VersionConfig.Get().version;
|
}
|
}
|
}
|
|
public static void Decompress(string path)
|
{
|
var files = new List<FileInfo>();
|
FileExtersion.GetAllDirectoryFileInfos(path, files);
|
foreach (var item in files)
|
{
|
var fullName = item.FullName;
|
if (fullName.EndsWith(".7z"))
|
{
|
SevenZipUtility.DeCompress(fullName, Path.GetDirectoryName(fullName));
|
}
|
}
|
}
|
|
public static DecompressProgress DecompressAync(string path)
|
{
|
var progress = new DecompressProgress();
|
var files = new List<FileInfo>();
|
FileExtersion.GetAllDirectoryFileInfos(path, files);
|
|
for (var i = files.Count - 1; i >= 0; i--)
|
{
|
var fullName = files[i].FullName;
|
if (!fullName.EndsWith(".7z"))
|
{
|
files.RemoveAt(i);
|
}
|
}
|
|
var total = files.Count;
|
if (total == 0)
|
{
|
progress.progress = 1f;
|
progress.done = true;
|
return progress;
|
}
|
|
ThreadPool.QueueUserWorkItem((object a) =>
|
{
|
var index = 0;
|
foreach (var item in files)
|
{
|
var fullName = item.FullName;
|
if (fullName.EndsWith(".7z"))
|
{
|
SevenZipUtility.DeCompress(fullName, Path.GetDirectoryName(fullName));
|
index++;
|
progress.progress = index / (float)total;
|
}
|
}
|
|
progress.done = true;
|
});
|
|
return progress;
|
}
|
|
public static void Delete7zFiles(string path)
|
{
|
var files = new List<FileInfo>();
|
FileExtersion.GetAllDirectoryFileInfos(path, files);
|
|
for (var i = files.Count - 1; i >= 0; i--)
|
{
|
var fullName = files[i].FullName;
|
if (fullName.EndsWith(".7z"))
|
{
|
files[i].Delete();
|
}
|
}
|
}
|
|
public class DecompressProgress
|
{
|
object progressLock = new object();
|
float m_Progress = 0f;
|
public float progress
|
{
|
get
|
{
|
return m_Progress;
|
}
|
set
|
{
|
lock (progressLock)
|
{
|
m_Progress = value;
|
}
|
}
|
}
|
|
object doneLock = new object();
|
bool m_Done = false;
|
public bool done
|
{
|
get
|
{
|
return m_Done;
|
}
|
set
|
{
|
lock (doneLock)
|
{
|
m_Done = value;
|
}
|
}
|
}
|
|
}
|
|
}
|