57 lines
1.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|