mirror of
https://github.com/Tribufu/ServerManagers
synced 2026-08-09 20:51:05 +00:00
source code checkin
This commit is contained in:
parent
5f8fb2c825
commit
7e57b72e35
675 changed files with 168433 additions and 0 deletions
200
src/ServerManager.Common/Serialization/IniFile.cs
Normal file
200
src/ServerManager.Common/Serialization/IniFile.cs
Normal file
|
|
@ -0,0 +1,200 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace ServerManagerTool.Common.Serialization
|
||||
{
|
||||
public class IniFile
|
||||
{
|
||||
public IniFile()
|
||||
{
|
||||
Sections = new List<IniSection>();
|
||||
}
|
||||
|
||||
public List<IniSection> Sections;
|
||||
|
||||
public IniSection AddSection(string sectionName, bool allowEmptyName = false)
|
||||
{
|
||||
if (!allowEmptyName && string.IsNullOrWhiteSpace(sectionName))
|
||||
return null;
|
||||
|
||||
var section = Sections.FirstOrDefault(s => s.SectionName.Equals(sectionName, StringComparison.OrdinalIgnoreCase));
|
||||
if (section == null)
|
||||
{
|
||||
section = new IniSection() { SectionName = sectionName };
|
||||
Sections.Add(section);
|
||||
}
|
||||
return section;
|
||||
}
|
||||
|
||||
public IniKey AddKey(string keyName, string keyValue)
|
||||
{
|
||||
var section = Sections.LastOrDefault();
|
||||
if (section == null)
|
||||
section = AddSection(string.Empty, true);
|
||||
|
||||
return section.AddKey(keyName, keyValue);
|
||||
}
|
||||
|
||||
public IniKey AddKey(string keyValuePair)
|
||||
{
|
||||
var section = Sections.LastOrDefault();
|
||||
if (section == null)
|
||||
section = AddSection(string.Empty, true);
|
||||
|
||||
return section.AddKey(keyValuePair);
|
||||
}
|
||||
|
||||
public IniSection GetSection(string sectionName)
|
||||
{
|
||||
return Sections?.FirstOrDefault(s => s.SectionName.Equals(sectionName, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
public IniKey GetKey(string sectionName, string keyName)
|
||||
{
|
||||
return GetSection(sectionName)?.GetKey(keyName);
|
||||
}
|
||||
|
||||
public void RemoveSection(string sectionName)
|
||||
{
|
||||
var section = GetSection(sectionName);
|
||||
RemoveSection(section);
|
||||
}
|
||||
|
||||
public void RemoveSection(IniSection section)
|
||||
{
|
||||
if (Sections.Contains(section))
|
||||
Sections.Remove(section);
|
||||
}
|
||||
|
||||
public bool WriteSection(string sectionName, string[] keysValuePairs)
|
||||
{
|
||||
if (sectionName == null)
|
||||
return false;
|
||||
|
||||
var result = true;
|
||||
|
||||
// get the section.
|
||||
var section = GetSection(sectionName);
|
||||
|
||||
// check if the section exists.
|
||||
if (section != null)
|
||||
{
|
||||
// delete the section.
|
||||
RemoveSection(section);
|
||||
}
|
||||
|
||||
// create the section.
|
||||
section = AddSection(sectionName);
|
||||
|
||||
if (section != null)
|
||||
{
|
||||
foreach (var key in keysValuePairs)
|
||||
{
|
||||
section.AddKey(key);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public bool WriteKey(string sectionName, string keyName, string keyValue)
|
||||
{
|
||||
if (sectionName == null)
|
||||
return false;
|
||||
|
||||
var result = true;
|
||||
|
||||
// get the section.
|
||||
var section = GetSection(sectionName);
|
||||
|
||||
// check if the section exists.
|
||||
if (section == null)
|
||||
{
|
||||
// section does not exist, check if keyname is NULL.
|
||||
if (keyName == null)
|
||||
{
|
||||
// do nothing, the section does not exist and does not need to be removed.
|
||||
}
|
||||
else
|
||||
{
|
||||
// create the section.
|
||||
section = AddSection(sectionName);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// section does exists, check if the keyname is NULL.
|
||||
if (keyName == null)
|
||||
{
|
||||
// keyname is NULL, we need to delete the section.
|
||||
RemoveSection(section);
|
||||
|
||||
// reset the section variable.
|
||||
section = null;
|
||||
}
|
||||
}
|
||||
|
||||
// check if the section exists.
|
||||
if (section != null)
|
||||
{
|
||||
// get the key.
|
||||
var key = section.GetKey(keyName);
|
||||
|
||||
// check if the key exists.
|
||||
if (key == null)
|
||||
{
|
||||
// key does not exist, check if keyvalue is NULL.
|
||||
if (keyValue == null)
|
||||
{
|
||||
// do nothing, the key does not exist and does not need to be removed.
|
||||
}
|
||||
else
|
||||
{
|
||||
// create the key.
|
||||
key = section.AddKey(keyName, keyValue);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// key does exists, check if the keyvalue is NULL.
|
||||
if (keyValue == null)
|
||||
{
|
||||
// keyvalue is NULL, we need to delete the key and exit.
|
||||
section.RemoveKey(key);
|
||||
|
||||
// reset the key variable.
|
||||
key = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
// update the keyvalue.
|
||||
key.KeyValue = keyValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public string ToOutputString()
|
||||
{
|
||||
var result = new StringBuilder();
|
||||
|
||||
foreach (var section in Sections)
|
||||
{
|
||||
result.AppendLine($"[{section.SectionName}]");
|
||||
|
||||
foreach (var keyString in section.KeysToStringArray())
|
||||
{
|
||||
result.AppendLine(keyString);
|
||||
}
|
||||
|
||||
result.AppendLine();
|
||||
}
|
||||
|
||||
return result.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue