162 lines
4.5 KiB
C#
162 lines
4.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Dalamud.Plugin.Services;
|
|
using QuestionableCompanion.Models;
|
|
|
|
namespace QuestionableCompanion.Services;
|
|
|
|
public class AlliedSocietyDatabase
|
|
{
|
|
private readonly Configuration configuration;
|
|
|
|
private readonly IPluginLog log;
|
|
|
|
public AlliedSocietyDatabase(Configuration configuration, IPluginLog log)
|
|
{
|
|
this.configuration = configuration;
|
|
this.log = log;
|
|
if (configuration.AlliedSociety.RotationConfig.Priorities.Count == 0)
|
|
{
|
|
configuration.AlliedSociety.RotationConfig.InitializeDefaults();
|
|
SaveToConfig();
|
|
}
|
|
}
|
|
|
|
public void SaveToConfig()
|
|
{
|
|
configuration.Save();
|
|
}
|
|
|
|
public void UpdateCharacterProgress(string characterId, byte societyId, int rank, bool isMaxRank)
|
|
{
|
|
if (!configuration.AlliedSociety.CharacterProgress.ContainsKey(characterId))
|
|
{
|
|
configuration.AlliedSociety.CharacterProgress[characterId] = new List<AlliedSocietyProgress>();
|
|
}
|
|
List<AlliedSocietyProgress> progressList = configuration.AlliedSociety.CharacterProgress[characterId];
|
|
AlliedSocietyProgress existing = progressList.FirstOrDefault((AlliedSocietyProgress p) => p.SocietyId == societyId);
|
|
if (existing != null)
|
|
{
|
|
existing.CurrentRank = rank;
|
|
existing.IsMaxRank = isMaxRank;
|
|
}
|
|
else
|
|
{
|
|
progressList.Add(new AlliedSocietyProgress
|
|
{
|
|
CharacterId = characterId,
|
|
SocietyId = societyId,
|
|
CurrentRank = rank,
|
|
IsMaxRank = isMaxRank
|
|
});
|
|
}
|
|
SaveToConfig();
|
|
}
|
|
|
|
public AlliedSocietyProgress? GetProgress(string characterId, byte societyId)
|
|
{
|
|
if (configuration.AlliedSociety.CharacterProgress.TryGetValue(characterId, out List<AlliedSocietyProgress> list))
|
|
{
|
|
return list.FirstOrDefault((AlliedSocietyProgress p) => p.SocietyId == societyId);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public AlliedSocietyCharacterStatus GetCharacterStatus(string characterId)
|
|
{
|
|
if (!configuration.AlliedSociety.CharacterStatuses.ContainsKey(characterId))
|
|
{
|
|
configuration.AlliedSociety.CharacterStatuses[characterId] = new AlliedSocietyCharacterStatus
|
|
{
|
|
CharacterId = characterId,
|
|
Status = AlliedSocietyRotationStatus.Ready
|
|
};
|
|
SaveToConfig();
|
|
}
|
|
return configuration.AlliedSociety.CharacterStatuses[characterId];
|
|
}
|
|
|
|
public void UpdateCharacterStatus(string characterId, AlliedSocietyRotationStatus status)
|
|
{
|
|
GetCharacterStatus(characterId).Status = status;
|
|
SaveToConfig();
|
|
}
|
|
|
|
public void SetCharacterComplete(string characterId, DateTime completionDate)
|
|
{
|
|
AlliedSocietyCharacterStatus characterStatus = GetCharacterStatus(characterId);
|
|
characterStatus.Status = AlliedSocietyRotationStatus.Complete;
|
|
characterStatus.LastCompletionDate = completionDate;
|
|
characterStatus.ImportedQuestIds.Clear();
|
|
SaveToConfig();
|
|
}
|
|
|
|
public void CheckAndResetExpired(DateTime nextResetDate)
|
|
{
|
|
List<string> charactersToReset = GetCharactersNeedingReset(nextResetDate);
|
|
foreach (string charId in charactersToReset)
|
|
{
|
|
log.Information("[AlliedSociety] Resetting status for character " + charId);
|
|
AlliedSocietyCharacterStatus characterStatus = GetCharacterStatus(charId);
|
|
characterStatus.Status = AlliedSocietyRotationStatus.Ready;
|
|
characterStatus.ImportedQuestIds.Clear();
|
|
}
|
|
if (charactersToReset.Count > 0)
|
|
{
|
|
SaveToConfig();
|
|
}
|
|
}
|
|
|
|
public List<string> GetCharactersNeedingReset(DateTime nextResetDate)
|
|
{
|
|
List<string> result = new List<string>();
|
|
DateTime lastResetDate = nextResetDate.AddDays(-1.0);
|
|
foreach (KeyValuePair<string, AlliedSocietyCharacterStatus> kvp in configuration.AlliedSociety.CharacterStatuses)
|
|
{
|
|
AlliedSocietyCharacterStatus status = kvp.Value;
|
|
if (status.Status == AlliedSocietyRotationStatus.Ready)
|
|
{
|
|
continue;
|
|
}
|
|
if (status.LastCompletionDate.HasValue)
|
|
{
|
|
if (status.LastCompletionDate.Value < lastResetDate)
|
|
{
|
|
result.Add(kvp.Key);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
result.Add(kvp.Key);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
public void ClearAllStatuses()
|
|
{
|
|
foreach (KeyValuePair<string, AlliedSocietyCharacterStatus> kvp in configuration.AlliedSociety.CharacterStatuses)
|
|
{
|
|
kvp.Value.Status = AlliedSocietyRotationStatus.Ready;
|
|
kvp.Value.ImportedQuestIds.Clear();
|
|
}
|
|
SaveToConfig();
|
|
}
|
|
|
|
public void AddImportedQuest(string characterId, string questId)
|
|
{
|
|
AlliedSocietyCharacterStatus status = GetCharacterStatus(characterId);
|
|
if (!status.ImportedQuestIds.Contains(questId))
|
|
{
|
|
status.ImportedQuestIds.Add(questId);
|
|
SaveToConfig();
|
|
}
|
|
}
|
|
|
|
public void ClearImportedQuests(string characterId)
|
|
{
|
|
GetCharacterStatus(characterId).ImportedQuestIds.Clear();
|
|
SaveToConfig();
|
|
}
|
|
}
|