diff options
Diffstat (limited to 'abaddon.cpp')
-rw-r--r-- | abaddon.cpp | 56 |
1 files changed, 34 insertions, 22 deletions
diff --git a/abaddon.cpp b/abaddon.cpp index 74d980d..04d80ac 100644 --- a/abaddon.cpp +++ b/abaddon.cpp @@ -107,37 +107,49 @@ void Abaddon::ActionSetToken() { } void Abaddon::ActionMoveGuildUp(Snowflake id) { - UserSettingsData d = m_discord.GetUserSettings(); - std::vector<Snowflake> &pos = d.GuildPositions; - if (pos.size() == 0) { - auto x = m_discord.GetUserSortedGuilds(); - for (const auto &pair : x) - pos.push_back(pair.first); + auto order = m_discord.GetUserSortedGuilds(); + // get iter to target + decltype(order)::iterator target_iter; + for (auto it = order.begin(); it != order.end(); it++) { + if (it->first == id) { + target_iter = it; + break; + } } - auto it = std::find(pos.begin(), pos.end(), id); - assert(it != pos.end()); - std::vector<Snowflake>::iterator left = it - 1; - std::swap(*left, *it); + decltype(order)::iterator left = target_iter - 1; + std::swap(*left, *target_iter); - m_discord.UpdateSettingsGuildPositions(pos); + std::vector<Snowflake> new_sort; + for (const auto& x : order) + new_sort.push_back(x.first); + + m_discord.UpdateSettingsGuildPositions(new_sort); } void Abaddon::ActionMoveGuildDown(Snowflake id) { - UserSettingsData d = m_discord.GetUserSettings(); - std::vector<Snowflake> &pos = d.GuildPositions; - if (pos.size() == 0) { - auto x = m_discord.GetUserSortedGuilds(); - for (const auto &pair : x) - pos.push_back(pair.first); + auto order = m_discord.GetUserSortedGuilds(); + // get iter to target + decltype(order)::iterator target_iter; + for (auto it = order.begin(); it != order.end(); it++) { + if (it->first == id) { + target_iter = it; + break; + } } - auto it = std::find(pos.begin(), pos.end(), id); - assert(it != pos.end()); - std::vector<Snowflake>::iterator right = it + 1; - std::swap(*right, *it); + decltype(order)::iterator right = target_iter + 1; + std::swap(*right, *target_iter); + + std::vector<Snowflake> new_sort; + for (const auto &x : order) + new_sort.push_back(x.first); + + m_discord.UpdateSettingsGuildPositions(new_sort); +} - m_discord.UpdateSettingsGuildPositions(pos); +void Abaddon::ActionCopyGuildID(Snowflake id) { + Gtk::Clipboard::get()->set_text(std::to_string(id)); } void Abaddon::ActionListChannelItemClick(Snowflake id) { |