Dalamud branch detection
This commit is contained in:
51
CustomizePlus/Core/Services/Dalamud/DalamudBranchService.cs
Normal file
51
CustomizePlus/Core/Services/Dalamud/DalamudBranchService.cs
Normal 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
|
||||
}
|
||||
}
|
||||
68
CustomizePlus/Core/Services/Dalamud/DalamudConfigService.cs
Normal file
68
CustomizePlus/Core/Services/Dalamud/DalamudConfigService.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
32
CustomizePlus/Core/Services/Dalamud/DalamudServices.cs
Normal file
32
CustomizePlus/Core/Services/Dalamud/DalamudServices.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user