Advertisement
Revolt3r

Packages link.xml Extractor

May 11th, 2020
887
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using System.Linq;
  4. using System.Xml.Linq;
  5. using UnityEditor.Build;
  6. using UnityEditor.Build.Reporting;
  7. using UnityEditor.PackageManager;
  8. using UnityEngine;
  9.  
  10. public class PackagesLinkXmlExtractor : IPreprocessBuildWithReport, IPostprocessBuildWithReport
  11. {
  12. public string TemporaryFolder
  13. {
  14. get { return $"{Application.dataPath}/Temporary/";}
  15. }
  16.  
  17. public string LinkFilePath
  18. {
  19. get { return $"{TemporaryFolder}link.xml"; }
  20. }
  21.  
  22. public int callbackOrder { get { return 0; } }
  23.  
  24. public void OnPreprocessBuild(BuildReport report)
  25. {
  26. CreateMergedLinkFromPackages();
  27. }
  28.  
  29. public void OnPostprocessBuild(BuildReport report)
  30. {
  31. if(File.Exists(LinkFilePath))
  32. File.Delete(LinkFilePath);
  33. if(!Directory.EnumerateFiles(TemporaryFolder, "*").Any())
  34. Directory.Delete(TemporaryFolder);
  35. }
  36.  
  37. private void CreateMergedLinkFromPackages()
  38. {
  39. var request = Client.List();
  40. do { } while (!request.IsCompleted);
  41. if (request.Status == StatusCode.Success)
  42. {
  43. List<string> xmlPathList = new List<string>();
  44. foreach (var package in request.Result)
  45. {
  46. var path = package.resolvedPath;
  47. xmlPathList.AddRange(Directory.EnumerateFiles(path, "link.xml", SearchOption.AllDirectories).ToList());
  48. }
  49.  
  50. if (xmlPathList.Count <= 0)
  51. return;
  52.  
  53. var xmlList = xmlPathList.Select(XDocument.Load).ToArray();
  54.  
  55. var combinedXml = xmlList.First();
  56. foreach (var xDocument in xmlList.Where(xml => xml != combinedXml))
  57. {
  58. combinedXml.Root.Add(xDocument.Root.Elements());
  59. }
  60.  
  61. if (!Directory.Exists(TemporaryFolder))
  62. Directory.CreateDirectory(TemporaryFolder);
  63. combinedXml.Save(LinkFilePath);
  64. }
  65. else if (request.Status >= StatusCode.Failure)
  66. {
  67. Debug.LogError(request.Error.message);
  68. }
  69. }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement