[Shared Tasks] Cleanup shared task request and remove (#2341)

Functionally nothing should change in this patch. This refactors a lot
of formatting and code duplication in requests and member removals.

The long SharedTaskMessage namespace and its constants were contributing
to a lot of formatting that was difficult to read. These were shortened
since they're not all shared task specific anyway (though they should
probably just be moved to string_ids.h with other eqstrs now)

Shared task requests were refactored a little to remove an unnecessary
function that filled potential members. The separate functions used for
/taskquit and /taskremove were also combined into a single function to
remove a member while preserving live message differences.
This commit is contained in:
hg
2022-07-30 21:36:04 -04:00
committed by GitHub
parent 8a962e09f6
commit d243cbf8a3
12 changed files with 220 additions and 419 deletions
+21 -8
View File
@@ -52,21 +52,22 @@ void SharedTask::SetDbSharedTask(const SharedTasksRepository::SharedTasks &m_db_
SharedTask::m_db_shared_task = m_db_shared_task;
}
SharedTaskRequestCharacters SharedTask::GetRequestCharacters(Database &db, uint32_t requested_character_id)
SharedTaskRequest SharedTask::GetRequestCharacters(Database &db, uint32_t requested_character_id)
{
SharedTaskRequestCharacters request{};
// todo: group/raid refactors to check online members without querying
SharedTaskRequest request{};
request.group_type = SharedTaskRequestGroupType::Group;
request.characters = CharacterDataRepository::GetWhere(
auto characters = CharacterDataRepository::GetWhere(
db, fmt::format(
"id IN (select charid from group_id where groupid = (select groupid from group_id where charid = {}))",
requested_character_id
)
);
if (request.characters.empty()) {
if (characters.empty()) {
request.group_type = SharedTaskRequestGroupType::Raid;
request.characters = CharacterDataRepository::GetWhere(
characters = CharacterDataRepository::GetWhere(
db, fmt::format(
"id IN (select charid from raid_members where raidid = (select raidid from raid_members where charid = {}))",
requested_character_id
@@ -74,10 +75,10 @@ SharedTaskRequestCharacters SharedTask::GetRequestCharacters(Database &db, uint3
);
}
if (request.characters.empty()) // solo request
if (characters.empty()) // solo request
{
request.group_type = SharedTaskRequestGroupType::Solo;
request.characters = CharacterDataRepository::GetWhere(
characters = CharacterDataRepository::GetWhere(
db, fmt::format(
"id = {} LIMIT 1",
requested_character_id
@@ -85,12 +86,24 @@ SharedTaskRequestCharacters SharedTask::GetRequestCharacters(Database &db, uint3
);
}
request.leader_id = requested_character_id;
request.lowest_level = std::numeric_limits<uint8_t>::max();
request.highest_level = 0;
for (const auto &character: request.characters) {
request.members.reserve(characters.size());
for (const auto& character: characters)
{
request.lowest_level = std::min(request.lowest_level, character.level);
request.highest_level = std::max(request.highest_level, character.level);
request.character_ids.emplace_back(character.id); // convenience
SharedTaskMember member = {};
member.character_id = character.id;
member.character_name = character.name;
if (character.id == requested_character_id)
{
member.is_leader = true;
}
request.members.emplace_back(member);
}
return request;