106 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C#
		
	
	
| //
 | |
| //  AppLovinPreProcess.cs
 | |
| //  AppLovin MAX Unity Plugin
 | |
| //
 | |
| //  Created by Jonathan Liu on 10/19/2023.
 | |
| //  Copyright © 2023 AppLovin. All rights reserved.
 | |
| //
 | |
| 
 | |
| using System;
 | |
| using System.Linq;
 | |
| using System.Xml;
 | |
| using System.Xml.Linq;
 | |
| using UnityEngine;
 | |
| 
 | |
| namespace AppLovinMax.Scripts.IntegrationManager.Editor
 | |
| {
 | |
|     public abstract class AppLovinPreProcess
 | |
|     {
 | |
|         private const string AppLovinDependenciesFileExportPath = "MaxSdk/AppLovin/Editor/Dependencies.xml";
 | |
| 
 | |
|         private static readonly XmlWriterSettings DependenciesFileXmlWriterSettings = new XmlWriterSettings
 | |
|         {
 | |
|             Indent = true,
 | |
|             IndentChars = "    ",
 | |
|             NewLineChars = "\n",
 | |
|             NewLineHandling = NewLineHandling.Replace
 | |
|         };
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Adds a string into AppLovin's Dependencies.xml file inside the containerElementString if it doesn't exist
 | |
|         /// </summary>
 | |
|         /// <param name="lineToAdd">The line you want to add into the xml file</param>
 | |
|         /// <param name="containerElementString">The root XML element under which to add the line. For example, to add a new dependency to Android, pass in "androidPackages"</param>
 | |
|         protected static void TryAddStringToDependencyFile(string lineToAdd, string containerElementString)
 | |
|         {
 | |
|             try
 | |
|             {
 | |
|                 var dependenciesFilePath = MaxSdkUtils.GetAssetPathForExportPath(AppLovinDependenciesFileExportPath);
 | |
|                 var dependencies = XDocument.Load(dependenciesFilePath);
 | |
|                 // Get the container where we are going to insert the line
 | |
|                 var containerElement = dependencies.Descendants(containerElementString).FirstOrDefault();
 | |
| 
 | |
|                 if (containerElement == null)
 | |
|                 {
 | |
|                     Debug.LogError(containerElementString + " not found in Dependencies.xml file");
 | |
|                     return;
 | |
|                 }
 | |
| 
 | |
|                 var elementToAdd = XElement.Parse(lineToAdd);
 | |
| 
 | |
|                 // Check if the xml file doesn't already contain the string.
 | |
|                 if (containerElement.Elements().Any(element => XNode.DeepEquals(element, elementToAdd))) return;
 | |
| 
 | |
|                 // Append the new element to the container element
 | |
|                 containerElement.Add(elementToAdd);
 | |
| 
 | |
|                 using (var xmlWriter = XmlWriter.Create(dependenciesFilePath, DependenciesFileXmlWriterSettings))
 | |
|                 {
 | |
|                     dependencies.Save(xmlWriter);
 | |
|                 }
 | |
|             }
 | |
|             catch (Exception exception)
 | |
|             {
 | |
|                 Debug.LogError("Google CMP will not function. Unable to add string to dependency file due to exception: " + exception.Message);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Removes a string from AppLovin's Dependencies.xml file inside the containerElementString if it exists
 | |
|         /// </summary>
 | |
|         /// <param name="lineToRemove">The line you want to remove from the xml file</param>
 | |
|         /// <param name="containerElementString">The root XML element from which to remove the line. For example, to remove an Android dependency, pass in "androidPackages"</param>
 | |
|         protected static void TryRemoveStringFromDependencyFile(string lineToRemove, string containerElementString)
 | |
|         {
 | |
|             try
 | |
|             {
 | |
|                 var dependenciesFilePath = MaxSdkUtils.GetAssetPathForExportPath(AppLovinDependenciesFileExportPath);
 | |
|                 var dependencies = XDocument.Load(dependenciesFilePath);
 | |
|                 var containerElement = dependencies.Descendants(containerElementString).FirstOrDefault();
 | |
| 
 | |
|                 if (containerElement == null)
 | |
|                 {
 | |
|                     Debug.LogError(containerElementString + " not found in Dependencies.xml file");
 | |
|                     return;
 | |
|                 }
 | |
| 
 | |
|                 // Check if the dependency line exists.
 | |
|                 var elementToFind = XElement.Parse(lineToRemove);
 | |
|                 var existingElement = containerElement.Elements().FirstOrDefault(element => XNode.DeepEquals(element, elementToFind));
 | |
|                 if (existingElement == null) return;
 | |
| 
 | |
|                 existingElement.Remove();
 | |
| 
 | |
|                 using (var xmlWriter = XmlWriter.Create(dependenciesFilePath, DependenciesFileXmlWriterSettings))
 | |
|                 {
 | |
|                     dependencies.Save(xmlWriter);
 | |
|                 }
 | |
|             }
 | |
|             catch (Exception exception)
 | |
|             {
 | |
|                 Debug.LogError("Unable to remove string from dependency file due to exception: " + exception.Message);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |