public static async Task <MonDkpDatabase> LoadMonDkpDatabaseAsync(string filePath) { using (var lua = new Lua()) { lua.State.Encoding = Encoding.UTF8; var str = await File.ReadAllTextAsync(filePath); lua.DoString(str); var db = new MonDkpDatabase { DkpHistory = new DkpHistory { HistoryEntries = GetDkpHistory(lua).ToList() }, LootHistory = new LootHistory { LootEntries = GetLootHistory(lua).ToList() }, DkpTable = new DkpTable { DkpEntries = GetDkpEntries(lua).ToList() } }; CleanUpDkpList(db); return(db); } }
private async Task <MonDkpDatabase> GetMonDkpDatabaseAsync() { var writeTimeUtc = File.GetLastWriteTimeUtc(DatabaseFileName); if (writeTimeUtc > this.lastWriteTimeUtc) { var data = await MonDkpFileLoader.LoadMonDkpDatabaseAsync(DatabaseFileName); this.cachedData = data; this.lastWriteTimeUtc = writeTimeUtc; } return(this.cachedData); }
private static void CleanUpDkpList(MonDkpDatabase db) { var validPlayers = db.DkpTable.DkpEntries.Select(a => a.Player).Distinct().ToList(); var invalidPlayers = db.DkpHistory.HistoryEntries.SelectMany(a => a.Players).Distinct().Where(a => !validPlayers.Contains(a)) .ToList(); db.LootHistory.LootEntries.RemoveAll(a => !validPlayers.Contains(a.Player)); foreach (var dkpEntry in db.DkpHistory.HistoryEntries) { foreach (var invalidPlayer in invalidPlayers) { dkpEntry.PlayerString = dkpEntry.PlayerString.Replace($"{invalidPlayer},", string.Empty); } } db.DkpHistory.HistoryEntries.RemoveAll(a => string.IsNullOrEmpty(a.PlayerString)); }