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