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 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; 
 | 
        // }); 
 | 
        progress.done = true; 
 | 
        return progress; 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    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; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
} 
 | 
  
 | 
  
 | 
  
 | 
public class AssetDecompressTask : LaunchTask 
 | 
{ 
 | 
    public override float expectTime 
 | 
    { 
 | 
        get { return LocalSave.GetFloat("AssetDecompressTask_ExpectTime", 5f); } 
 | 
        protected set { LocalSave.SetFloat("AssetDecompressTask_ExpectTime", value); } 
 | 
    } 
 | 
  
 | 
    AssetDeCompressTask.DecompressProgress deCompressProgress = null; 
 | 
    float waitTimer = 0f; 
 | 
  
 | 
    public override void Begin() 
 | 
    { 
 | 
        LaunchInHot.m_CurrentStage = LaunchStage.AssetDecompress; 
 | 
        duration = Mathf.Max(0.5f, expectTime); 
 | 
  
 | 
        if (!AssetDeCompressTask.assetDeCompressCompleted) 
 | 
        { 
 | 
            deCompressProgress = AssetDeCompressTask.DecompressAync(ResourcesPath.Instance.ExternalStorePath); 
 | 
            done = false; 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            done = true; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public override void End() 
 | 
    { 
 | 
        AssetDeCompressTask.assetDeCompressVersion = VersionConfig.Get().version; 
 | 
    } 
 | 
  
 | 
    public override void Update() 
 | 
    { 
 | 
        if (done) 
 | 
        { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        timer += Time.deltaTime; 
 | 
        progress = timer / duration; 
 | 
        if (deCompressProgress == null || deCompressProgress.done) 
 | 
        { 
 | 
            waitTimer += Time.deltaTime; 
 | 
            if (waitTimer > 2f) 
 | 
            { 
 | 
                done = true; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 |