From ae85d7e4419a1dc6ab78cad9124f0febe1ff3259 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Tue, 13 Oct 2020 23:54:50 -0400 Subject: fix guild positioning --- discord/discord.cpp | 46 +++++++++++++++------------------------------- 1 file changed, 15 insertions(+), 31 deletions(-) (limited to 'discord/discord.cpp') diff --git a/discord/discord.cpp b/discord/discord.cpp index ad4eb68..c296aee 100644 --- a/discord/discord.cpp +++ b/discord/discord.cpp @@ -62,40 +62,24 @@ const User &DiscordClient::GetUserData() const { } std::vector DiscordClient::GetUserSortedGuilds() const { - std::vector> sorted_guilds; - - if (m_user_settings.GuildPositions.size()) { - std::unordered_set positioned_guilds(m_user_settings.GuildPositions.begin(), m_user_settings.GuildPositions.end()); - // guilds not in the guild_positions object are at the top of the list, descending by guild ID - std::set unpositioned_guilds; - for (const auto &[id, guild] : m_store.GetGuilds()) { - if (positioned_guilds.find(id) == positioned_guilds.end()) - unpositioned_guilds.insert(id); + // sort order is unfolder'd guilds sorted by id descending, then guilds in folders in array order + // todo: make sure folder'd guilds are sorted properly + std::vector folder_order; + auto guilds = GetGuildsID(); + for (const auto &entry : m_user_settings.GuildFolders) { // can contain guilds not a part of + for (const auto &id : entry.GuildIDs) { + if (std::find(guilds.begin(), guilds.end(), id) != guilds.end()) + folder_order.push_back(id); } - - // unpositioned_guilds now has unpositioned guilds in ascending order - for (auto it = unpositioned_guilds.rbegin(); it != unpositioned_guilds.rend(); it++) { - auto *data = m_store.GetGuild(*it); - if (data != nullptr) - sorted_guilds.push_back(std::make_pair(*it, data)); - } - - // now the rest go at the end in the order they are sorted - for (const auto &id : m_user_settings.GuildPositions) { - auto *data = m_store.GetGuild(id); - if (data != nullptr) - sorted_guilds.push_back(std::make_pair(id, data)); - } - } else { // default sort is alphabetic - for (auto &it : m_store.GetGuilds()) - sorted_guilds.push_back(std::make_pair(it.first, &it.second)); - AlphabeticalSort(sorted_guilds.begin(), sorted_guilds.end(), [](auto &pair) { return pair.second->Name; }); } - std::vector ret; - for (const auto &pair : sorted_guilds) - ret.push_back(pair.first); - + for (const auto &gid : guilds) { + if (std::find(folder_order.begin(), folder_order.end(), gid) == folder_order.end()) { + ret.push_back(gid); + } + } + for (const auto &gid : folder_order) + ret.push_back(gid); return ret; } -- cgit v1.2.3