73 lines
1.9 KiB
C#
73 lines
1.9 KiB
C#
using ModpackUpdater.Model;
|
|
using Unleash;
|
|
using Unleash.ClientFactory;
|
|
|
|
namespace ModpackUpdater;
|
|
|
|
public class ModpackFeatures(ModpackConfig modpackConfig)
|
|
{
|
|
private IUnleash api;
|
|
private UnleashContext context;
|
|
private UnleashSettings settings;
|
|
|
|
public static string FeatureAllowExtas => "allow-extras";
|
|
|
|
~ModpackFeatures()
|
|
{
|
|
api?.Dispose();
|
|
}
|
|
|
|
public bool IsEnabled(string feature)
|
|
{
|
|
return IsEnabled(feature, null);
|
|
}
|
|
|
|
public bool IsEnabled(string feature, AppFeatureContext context)
|
|
{
|
|
return CheckFeature(feature, context);
|
|
}
|
|
|
|
private bool InitializeApi()
|
|
{
|
|
if (api == null && !string.IsNullOrWhiteSpace(modpackConfig.UnleashApiUrl) && !string.IsNullOrWhiteSpace(modpackConfig.UnleashInstanceId))
|
|
{
|
|
settings = new UnleashSettings
|
|
{
|
|
AppName = "Modpack Updater",
|
|
UnleashApi = new Uri(modpackConfig.UnleashApiUrl),
|
|
FetchTogglesInterval = TimeSpan.FromSeconds(60 * 5),
|
|
InstanceTag = modpackConfig.UnleashInstanceId,
|
|
};
|
|
|
|
api = new UnleashClientFactory().CreateClient(settings, synchronousInitialization: true);
|
|
}
|
|
|
|
return api != null;
|
|
}
|
|
|
|
private bool CheckFeature(string name, AppFeatureContext context)
|
|
{
|
|
return InitializeApi() && api.IsEnabled(name, GetContext(context));
|
|
}
|
|
|
|
private UnleashContext GetContext(AppFeatureContext ccontext)
|
|
{
|
|
context ??= new();
|
|
context.CurrentTime = DateTime.Now;
|
|
ccontext?.Apply(context);
|
|
return context;
|
|
}
|
|
}
|
|
|
|
public abstract class AppFeatureContext
|
|
{
|
|
public abstract void Apply(UnleashContext context);
|
|
}
|
|
|
|
public class AllowExtrasFeatureContext(ModpackInfo info) : AppFeatureContext
|
|
{
|
|
public override void Apply(UnleashContext context)
|
|
{
|
|
context.UserId = info.ExtrasKey;
|
|
}
|
|
} |