internal void MergeWith(string fullName) { AH_SerializedBuildInfo newBuildInfo = AH_SerializationHelper.LoadBuildReport(fullName); if (newBuildInfo != null) { Debug.Log("AH: Merging with " + fullName); foreach (var newItem in newBuildInfo.AssetListUnSorted) { //If asset ID already exists if (AssetListUnSorted.Any(val => val.ID == newItem.ID)) { AH_SerializableAssetInfo OrigItem = AssetListUnSorted.Find(val => val.ID == newItem.ID); //Check if new scene ref list have entries that doesn't exist in orig bool newSceneRefsExist = newItem.Refs.Any(val => !OrigItem.Refs.Contains(val)); //Get the new refs if (newSceneRefsExist) { List <string> newSceneRefs = newItem.Refs.FindAll(val => !OrigItem.Refs.Contains(val)); //Add them to list OrigItem.Refs.AddRange(newSceneRefs); } } else { AssetListUnSorted.Add(newItem); } } } else { Debug.Log("AH: Merging failed: " + fullName); } }
internal void FinalizeReport() { //TODO: "Note that if the Resources folder is an Editor subfolder, the Assets in it are loadable from Editor scripts but are stripped from builds." //https://docs.unity3d.com/Manual/SpecialFolders.html addFolderToReport("Resources"); addFolderToReport("StreamingAssets"); addAssetBundlesToReport(); //Add all the used assets to list foreach (var item in assetDict) { AH_SerializableAssetInfo newAssetInfo = new AH_SerializableAssetInfo(item.Key, item.Value); AssetListUnSorted.Add(newAssetInfo); } //TODO Clean AssetListUnsorted to make sure we dont have duplicates? How does this work with the scene refs SerializeAndSave(); }
private bool AddFilesRecursively(string absPath, AH_SerializedBuildInfo chosenBuildInfo, int treeViewDepth, ref int treeViewID, ref int folderCount, ref int foldersProcessed) { string relativePath; string folderID; AH_Utils.GetRelativePathAndAssetID(absPath, out relativePath, out folderID); //Check if this folder has been Ignored if (AH_SettingsManager.Instance.HasIgnoredFolder(relativePath, folderID)) { return(false); } //Add folder System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(absPath); string dirInfoName = dirInfo.Name; //Increment folder process count foldersProcessed++; EditorUtility.DisplayProgressBar("Analyzing project", relativePath, ((float)foldersProcessed / (float)folderCount)); //Todo make cancellable //Increment ID treeViewID++; AH_TreeviewElement threeViewFolder = new AH_TreeviewElement(dirInfoName, treeViewDepth, treeViewID, ((treeViewDepth != -1) ? relativePath : ""), "", null, false); treeElements.Add(threeViewFolder); //Increment depth treeViewDepth++; //Track if this folder has valid children bool hasValidChildren = false; foreach (var assetPath in System.IO.Directory.GetFiles(absPath).Where(val => Path.GetExtension(val) != ".meta"))// !val.EndsWith(".meta"))) { string relativepath; string assetID; AH_Utils.GetRelativePathAndAssetID(assetPath, out relativepath, out assetID); //If this is not an unity asset if (string.IsNullOrEmpty(assetID)) { continue; } //Has this file been Ignored? if (AH_SettingsManager.Instance.HasIgnoredAsset(relativepath, assetID)) { continue; } AH_SerializableAssetInfo usedAssetInfo = chosenBuildInfo.GetItemInfo(assetID); bool isAssetUsed = (usedAssetInfo != null); //TODO CONTINUE LOOP AND ADDING OF ASSETS treeViewID++; AH_TreeviewElement treeViewElement = new AH_TreeviewElement(assetPath, treeViewDepth, treeViewID, relativepath, assetID, ((isAssetUsed) ? usedAssetInfo.Refs : null), isAssetUsed); treeElements.Add(treeViewElement); hasValidChildren = true; } foreach (var dir in System.IO.Directory.GetDirectories(absPath)) { if (AddFilesRecursively(dir, chosenBuildInfo, treeViewDepth, ref treeViewID, ref folderCount, ref foldersProcessed)) { hasValidChildren = true; } } if (!hasValidChildren && (treeViewDepth != -1)) { treeElements.Remove(threeViewFolder); //Decrement ID treeViewID--; //Decrement depth treeViewDepth--; } //Return true if folder added succesfully return(hasValidChildren); }