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);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |