mirror of
https://github.com/rmcrackan/Libation.git
synced 2026-02-18 00:17:43 +01:00
- Add `LIBATION_FILES_DIR` environment variable to specify LibationFiles directory instead of appsettings.json - OptionsBase supports overriding setting - Added `EphemeralSettings` which are loaded from Settings.json once and can be modified with the `--override` command parameter - Added `get-setting` command - Prints (editable) settings and their values. Prints specified settings, or all settings if none specified - `--listEnumValues` option will list all names for a speficied enum-type settings. If no setting names are specified, prints all enum values for all enum settings. - Prints in a text-based table or bare with `-b` switch - Added `get-license` command which requests a content license and prints it as a json to stdout - Improved `liberate` command - Added `-force` option to force liberation without validation. - Added support to download with a license file supplied to stdin - Improve startup performance when downloading explicit ASIN(s) - Fix long-standing bug where cover art was not being downloading
41 lines
1.3 KiB
C#
41 lines
1.3 KiB
C#
using Newtonsoft.Json.Linq;
|
|
using System;
|
|
using System.Linq;
|
|
|
|
#nullable enable
|
|
namespace FileManager;
|
|
|
|
public interface IJsonBackedDictionary
|
|
{
|
|
bool Exists(string propertyName);
|
|
string? GetString(string propertyName, string? defaultValue = null);
|
|
T? GetNonString<T>(string propertyName, T? defaultValue = default);
|
|
object? GetObject(string propertyName);
|
|
void SetString(string propertyName, string? newValue);
|
|
void SetNonString(string propertyName, object? newValue);
|
|
bool RemoveProperty(string propertyName);
|
|
bool SetWithJsonPath(string jsonPath, string propertyName, string? newValue, bool suppressLogging = false);
|
|
string? GetStringFromJsonPath(string jsonPath);
|
|
|
|
string? GetStringFromJsonPath(string jsonPath, string propertyName)
|
|
=> GetStringFromJsonPath($"{jsonPath}.{propertyName}");
|
|
|
|
static T? UpCast<T>(object obj)
|
|
{
|
|
if (obj.GetType().IsAssignableTo(typeof(T))) return (T)obj;
|
|
if (obj is JObject jObject) return jObject.ToObject<T>();
|
|
if (obj is JValue jValue)
|
|
{
|
|
if (typeof(T).IsAssignableTo(typeof(Enum)))
|
|
{
|
|
return
|
|
Enum.TryParse(typeof(T), jValue.Value<string>(), out var enumVal)
|
|
? (T)enumVal
|
|
: Enum.GetValues(typeof(T)).Cast<T>().First();
|
|
}
|
|
return jValue.Value<T>();
|
|
}
|
|
throw new InvalidCastException($"{obj.GetType()} is not convertible to {typeof(T)}");
|
|
}
|
|
}
|