| 3204 | } |
| 3205 | |
| 3206 | void MessageList::HandleRightClickMenuCommand(int command) |
| 3207 | { |
| 3208 | // NOTE!!! If you block for any reason (e.g. using a messagebox/dialog), you need to re-fetch this. |
| 3209 | // Otherwise a message may come in the background and delete the message you are using, among loads |
| 3210 | // of other things. |
| 3211 | MessageItem* pMsg = NULL; |
| 3212 | Snowflake rightClickedMessage = m_rightClickedMessage; |
| 3213 | Snowflake messageBeforeRightClickedMessage = 0; |
| 3214 | |
| 3215 | for (auto iter = m_messages.rbegin(); iter != m_messages.rend(); ++iter) |
| 3216 | { |
| 3217 | if (iter->m_msg->m_snowflake == m_rightClickedMessage) |
| 3218 | { |
| 3219 | pMsg = &(*iter); |
| 3220 | |
| 3221 | ++iter; |
| 3222 | if (iter != m_messages.rend()) |
| 3223 | messageBeforeRightClickedMessage = iter->m_msg->m_snowflake; |
| 3224 | break; |
| 3225 | } |
| 3226 | } |
| 3227 | |
| 3228 | m_rightClickedMessage = 0; |
| 3229 | |
| 3230 | if (!pMsg) return; |
| 3231 | |
| 3232 | switch (command) |
| 3233 | { |
| 3234 | case ID_DUMMYPOPUP_MARKUNREAD: |
| 3235 | { |
| 3236 | if (messageBeforeRightClickedMessage == 0) { |
| 3237 | uint64_t timeStamp = rightClickedMessage >> 22; |
| 3238 | timeStamp--; // in milliseconds since Discord epoch - irrelevant because we just want to take ONE millisecond |
| 3239 | messageBeforeRightClickedMessage = timeStamp << 22; |
| 3240 | } |
| 3241 | |
| 3242 | assert(messageBeforeRightClickedMessage < rightClickedMessage); |
| 3243 | |
| 3244 | GetDiscordInstance()->RequestAcknowledgeMessages(m_channelID, messageBeforeRightClickedMessage); |
| 3245 | |
| 3246 | // Block acknowledgements until we switch to the channel again. |
| 3247 | m_bAcknowledgeNow = false; |
| 3248 | break; |
| 3249 | } |
| 3250 | case ID_DUMMYPOPUP_COPYMESSAGELINK: |
| 3251 | { |
| 3252 | // Copy the message link. |
| 3253 | std::string msgLink = CreateMessageLink(m_guildID, m_channelID, pMsg->m_msg->m_snowflake); |
| 3254 | CopyStringToClipboard(msgLink); |
| 3255 | break; |
| 3256 | } |
| 3257 | case ID_DUMMYPOPUP_EDITMESSAGE: |
| 3258 | { |
| 3259 | SendMessage(g_Hwnd, WM_STARTEDITING, 0, (LPARAM) &rightClickedMessage); |
| 3260 | break; |
| 3261 | } |
| 3262 | case ID_DUMMYPOPUP_COPYTEXT: |
| 3263 | { |
no test coverage detected