private static void GenerateInfoFile(int categoryId, string dir) { DirectoryInfo dirInfo = new DirectoryInfo(Application.streamingAssetsPath + "/" + dir + "/category_" + categoryId); var fileInfos = dirInfo.GetFiles("*", SearchOption.AllDirectories).Where(s => !s.Name.ToLower().EndsWith(".meta") && !s.Name.EndsWith(".DS_Store")); ResConfig resConfig = new ResConfig(); int counter = 0; foreach (FileInfo fileInfo in fileInfos) { ResConfigItem configItem = new ResConfigItem(); configItem.index = counter++; configItem.name = Path.GetFullPath(fileInfo.FullName).Replace(Application.streamingAssetsPath + "/" + dir + "/", ""); configItem.size = fileInfo.Length.ToString(); byte[] platformFileBytes = GetFileBytes(Path.GetFullPath(fileInfo.FullName)); configItem.md5 = GetMD5(platformFileBytes); resConfig.Items.Add(configItem); } string jsonContent = JsonUtility.ToJson(resConfig, true); File.WriteAllText(Application.streamingAssetsPath + "/" + dir + "/category_" + categoryId + "/config.json", jsonContent); }
/// <summary> /// update the local resconfig after successfully downloaded a res /// </summary> private void UpdateResConfig(ResConfigItem item) { ResConfigItem oldItem = mLocalResConfig.Items.Find(e => e.name.Equals(item.name)); if (oldItem != null) { mLocalResConfig.Items.Remove(oldItem); } mLocalResConfig.Items.Add(item); WriteToLocal(GetResConfigUrl(true, mCategoryId), JsonUtility.ToJson(mLocalResConfig), null); }
/// <summary> /// Compare the reslist in the downloaded resconfig with that in the local resconfig. /// Also consider the dependencies according to block.manifest /// </summary> private List <ResConfigItem> GetDownloadList(string[] resList) { List <ResConfigItem> items = new List <ResConfigItem>(); Func <string, bool> checkAdd = (resName) => { ResConfigItem newItem = mUpdateResConfig.Items.Find(e => e.name.Equals(resName)); if (newItem == null) { UpdateState(DownloadState.Error, new ResUpdateMsg() { State = DownloadState.Error, MsgText = string.Format("Can't find {0} in config.json", resName) }); return(false); } ResConfigItem oldItem = mLocalResConfig.Items.Find(e => e.name.Equals(resName)); if (oldItem == null || !oldItem.md5.Equals(newItem.md5)) { if (!items.Exists(e => e.name.Equals(newItem.name))) { items.Add(newItem); } } return(true); }; foreach (string res in resList) { if (!checkAdd(res)) { return(null); } //find dependencies string[] dependencies = mABManifest.GetAllDependencies(res); foreach (string dpRes in dependencies) { if (!checkAdd(dpRes)) { return(null); } } } return(items); }