Files
mpv.net/src/MpvNet/InputConf.cs
2023-11-04 20:24:10 +01:00

87 lines
2.4 KiB
C#

using MpvNet.ExtensionMethod;
using MpvNet.Help;
namespace MpvNet;
public class InputConf
{
string? _content;
bool? _hasMenu;
public InputConf(string path) { Path = path; }
public string Path { get; }
public string Content
{
get => _content ??= FileHelp.ReadTextFile(Path);
set => _content = value;
}
public bool HasMenu => _hasMenu ??= Content.Contains("#menu:");
public (List<Binding> menuBindings, List<Binding>? confBindings) GetBindings()
{
var confbindings = InputHelp.Parse(Content);
if (HasMenu)
return (confbindings, confbindings);
var defaultBindings = InputHelp.GetDefaults();
foreach (Binding defaultBinding in defaultBindings)
foreach (Binding confBinding in confbindings)
if (defaultBinding.Input == confBinding.Input &&
defaultBinding.Command != confBinding.Command)
{
defaultBinding.Input = "";
}
foreach (Binding defaultBinding in defaultBindings)
foreach (Binding confBinding in confbindings)
if (defaultBinding.Command == confBinding.Command)
defaultBinding.Input = confBinding.Input;
return (defaultBindings, confbindings);
}
public string GetContent()
{
if (HasMenu)
return Content;
else
{
var defaults = InputHelp.GetDefaults();
var removed = new List<Binding>();
var conf = InputHelp.Parse(Content);
foreach (Binding defaultBinding in defaults)
foreach (Binding confBinding in conf)
if (defaultBinding.Command == confBinding.Command &&
defaultBinding.Comment == confBinding.Comment)
{
defaultBinding.Input = confBinding.Input;
removed.Add(confBinding);
}
foreach (Binding binding in removed)
conf.Remove(binding);
defaults.AddRange(conf);
return InputHelp.ConvertToString(defaults);
}
}
public void CreateBackup()
{
if (!File.Exists(Path))
return;
string targetPath = System.IO.Path.GetTempPath().AddSep() +
"mpv.net input.conf backup " + Guid.NewGuid() + ".conf";
File.Copy(Path, targetPath);
}
}