Dalamud branch detection

This commit is contained in:
RisaDev
2024-11-16 03:55:21 +03:00
parent 3bd80f3c33
commit db44be0d00
10 changed files with 168 additions and 11 deletions

View File

@@ -0,0 +1,51 @@
using OtterGui.Log;
using OtterGui.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CustomizePlus.Core.Services.Dalamud;
public class DalamudBranchService : IService
{
/// <summary>
/// Current Dalamud branch
/// </summary>
public DalamudBranch CurrentBranch { get; private set; }
/// <summary>
/// Current Dalamud branch name
/// </summary>
public string CurrentBranchName { get; private set; }
public DalamudBranchService(DalamudConfigService dalamudConfigService, Logger logger)
{
dalamudConfigService.GetDalamudConfig<string>(DalamudConfigService.BetaKindOption, out var betaOption);
CurrentBranchName = betaOption?.ToLowerInvariant() ?? "release";
switch (CurrentBranchName)
{
case "release":
CurrentBranch = DalamudBranch.Release;
break;
case "stg":
CurrentBranch = DalamudBranch.Staging;
break;
default:
CurrentBranch = DalamudBranch.Other;
break;
}
logger.Information($"Current Dalamud branch is: {CurrentBranchName} ({CurrentBranch})");
}
public enum DalamudBranch
{
//For our purposes we want to default to Release
Release,
Staging,
Other
}
}

View File

@@ -0,0 +1,68 @@
using Dalamud.Plugin;
using OtterGui.Services;
using System.Linq;
using System.Reflection;
using System;
namespace CustomizePlus.Core.Services.Dalamud;
public class DalamudConfigService : IService
{
public DalamudConfigService()
{
try
{
var serviceType =
typeof(IDalamudPluginInterface).Assembly.DefinedTypes.FirstOrDefault(t => t.Name == "Service`1" && t.IsGenericType);
var configType = typeof(IDalamudPluginInterface).Assembly.DefinedTypes.FirstOrDefault(t => t.Name == "DalamudConfiguration");
var interfaceType = typeof(IDalamudPluginInterface).Assembly.DefinedTypes.FirstOrDefault(t => t.Name == "DalamudInterface");
if (serviceType == null || configType == null || interfaceType == null)
return;
var configService = serviceType.MakeGenericType(configType);
var interfaceService = serviceType.MakeGenericType(interfaceType);
var configGetter = configService.GetMethod("Get", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
_interfaceGetter = interfaceService.GetMethod("Get", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
if (configGetter == null || _interfaceGetter == null)
return;
_dalamudConfig = configGetter.Invoke(null, null);
}
catch
{
_dalamudConfig = null;
_interfaceGetter = null;
}
}
public const string BetaKindOption = "DalamudBetaKind";
private readonly object? _dalamudConfig;
private readonly MethodInfo? _interfaceGetter;
public bool GetDalamudConfig<T>(string fieldName, out T? value)
{
value = default;
try
{
if (_dalamudConfig == null)
return false;
var getter = _dalamudConfig.GetType().GetProperty(fieldName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (getter == null)
return false;
var result = getter.GetValue(_dalamudConfig);
if (result is not T v)
return false;
value = v;
return true;
}
catch (Exception e)
{
Plugin.Logger.Error($"Error while fetching Dalamud Config {fieldName}:\n{e}");
return false;
}
}
}

View File

@@ -0,0 +1,32 @@
using Dalamud.Game;
using Dalamud.Game.ClientState.Objects;
using Dalamud.IoC;
using Dalamud.Plugin;
using Dalamud.Plugin.Services;
using Microsoft.Extensions.DependencyInjection;
using OtterGui.Services;
namespace CustomizePlus.Core.Services.Dalamud;
public class DalamudServices
{
public static void AddServices(ServiceManager services, IDalamudPluginInterface pi)
{
services.AddExistingService(pi)
.AddExistingService(pi.UiBuilder)
.AddDalamudService<ISigScanner>(pi)
.AddDalamudService<IFramework>(pi)
.AddDalamudService<IObjectTable>(pi)
.AddDalamudService<ICommandManager>(pi)
.AddDalamudService<IChatGui>(pi)
.AddDalamudService<IClientState>(pi)
.AddDalamudService<IGameGui>(pi)
.AddDalamudService<IGameInteropProvider>(pi)
.AddDalamudService<IKeyState>(pi)
.AddDalamudService<IDataManager>(pi)
.AddDalamudService<IPluginLog>(pi)
.AddDalamudService<ITargetManager>(pi)
.AddDalamudService<INotificationManager>(pi)
.AddDalamudService<IContextMenu>(pi);
}
}