AnotherReplayReader/Utils/ReplayPinyinList.cs

57 lines
1.7 KiB
C#

using AnotherReplayReader.ReplayFile;
using System.Collections.Immutable;
using System.Linq;
namespace AnotherReplayReader.Utils
{
internal class ReplayPinyinList
{
public ImmutableArray<Replay> Replays { get; } = ImmutableArray<Replay>.Empty;
public ImmutableArray<ReplayPinyinData> Pinyins { get; } = ImmutableArray<ReplayPinyinData>.Empty;
public ReplayPinyinList() :
this(ImmutableArray<Replay>.Empty)
{
}
public ReplayPinyinList(ImmutableArray<Replay> replay) :
this(replay,
replay.Select(replay => new ReplayPinyinData(replay)).ToImmutableArray())
{
}
private ReplayPinyinList(ImmutableArray<Replay> replay,
ImmutableArray<ReplayPinyinData> pinyins)
{
Replays = replay;
Pinyins = pinyins;
}
public ReplayPinyinList SetItem(int index, Replay replay)
{
return new(Replays.SetItem(index, replay),
Pinyins.SetItem(index, new(replay)));
}
}
class ReplayPinyinData
{
public Replay Replay { get; }
public string? PinyinDetails { get; }
public string? PinyinMod { get; }
public ReplayPinyinData(Replay replay)
{
Replay = replay;
PinyinDetails = replay.GetDetails().ToPinyin();
PinyinMod = replay.Mod.ModName.ToPinyin();
}
public bool MatchPinyin(string? pinyin)
{
return PinyinDetails?.ContainsIgnoreCase(pinyin) is true
|| PinyinMod?.ContainsIgnoreCase(pinyin) is true;
}
}
}