using System; using System.Collections.Generic; using System.IO; using NugetForUnity.Configuration; using NugetForUnity.Helper; using NugetForUnity.PluginAPI.Models; using NugetForUnity.Ui; using UnityEngine; namespace NugetForUnity.PluginSupport { /// public sealed class NugetPluginService : INugetPluginService, IDisposable { private readonly List> registeredNuspecCustomizers = new List>(); /// public string ProjectAssetsDir => UnityPathHelper.AbsoluteAssetsPath; /// public string PackageInstallDir => ConfigurationManager.NugetConfigFile.RepositoryPath; /// public void RegisterNuspecCustomizer(Action customizer) { registeredNuspecCustomizers.Add(customizer); NuspecFile.ProjectSpecificNuspecInitializer += customizer; } /// public void CreateNuspecAndOpenEditor(string destinationDirectory) { if (Path.IsPathRooted(destinationDirectory)) { if (destinationDirectory.StartsWith(UnityPathHelper.AbsoluteAssetsPath)) { throw new Exception( $"Given directory {destinationDirectory} isn't within project directory {UnityPathHelper.AbsoluteAssetsPath}"); } } else { destinationDirectory = Path.Combine(UnityPathHelper.AbsoluteAssetsPath, destinationDirectory); } var lastChar = destinationDirectory[destinationDirectory.Length - 1]; if (lastChar == '/' || lastChar == '\\') { destinationDirectory = destinationDirectory.Substring(0, destinationDirectory.Length - 1); } NuspecEditor.CreateNuspecFile(destinationDirectory); } /// public void LogError(string message) { Debug.LogError(message); } /// public void LogErrorFormat(string format, params object[] args) { Debug.LogErrorFormat(format, args); } /// public void LogVerbose(string format, params object[] args) { NugetLogger.LogVerbose(format, args); } /// public void Dispose() { foreach (var registeredNuspecCustomizer in registeredNuspecCustomizers) { NuspecFile.ProjectSpecificNuspecInitializer -= registeredNuspecCustomizer; } registeredNuspecCustomizers.Clear(); } } }