diff --git a/account-data.cpp b/account-data.cpp index 6e7aa4b..cfcacae 100644 --- a/account-data.cpp +++ b/account-data.cpp @@ -1,6 +1,7 @@ #include "account-data.h" #include "client-utils.h" #include "config.h" +#include "format.h" #include #include @@ -419,8 +420,9 @@ void TdAccountData::addChat(TdChatPtr chat) auto pContact = std::find(m_contactUserIdsNoChat.begin(), m_contactUserIdsNoChat.end(), getUserId(privType)); if (pContact != m_contactUserIdsNoChat.end()) { - purple_debug_misc(config::pluginId, "Private chat (id %" G_GINT64_FORMAT ") now known for user %d\n", - chat->id_, privType.user_id_); + purpleDebug("Private chat (id {}) now known for user {}", { + std::to_string(chat->id_), std::to_string(privType.user_id_) + }); m_contactUserIdsNoChat.erase(pContact); } } @@ -471,7 +473,7 @@ void TdAccountData::setContacts(const td::td_api::users &users) for (unsigned i = 0; i < users.user_ids_.size(); i++) { UserId userId = getUserId(users, i); if (getPrivateChatByUserId(userId) == nullptr) { - purple_debug_misc(config::pluginId, "Private chat not yet known for user %d\n", userId.value()); + purpleDebug("Private chat not yet known for user {}", userId.value()); m_contactUserIdsNoChat.push_back(userId); } } diff --git a/client-utils.cpp b/client-utils.cpp index 798f4e1..3892465 100644 --- a/client-utils.cpp +++ b/client-utils.cpp @@ -331,19 +331,17 @@ void updatePrivateChat(TdAccountData &account, const td::td_api::chat *chat, con static void updateGroupChat(TdAccountData &account, const td::td_api::chat &chat, const td::td_api::object_ptr &groupStatus, - const char *groupType, int32_t groupId) + const char *groupType, const std::string &groupId) { if (!isGroupMember(groupStatus)) { - purple_debug_misc(config::pluginId, "Skipping %s %d because we are not a member\n", - groupType, groupId); + purpleDebug("Skipping {} {} because we are not a member", {std::string(groupType), groupId}); return; } std::string chatName = getPurpleChatName(chat); PurpleChat *purpleChat = purple_blist_find_chat(account.purpleAccount, chatName.c_str()); if (!purpleChat) { - purple_debug_misc(config::pluginId, "Adding new chat for %s %d (%s)\n", - groupType, groupId, chat.title_.c_str()); + purpleDebug("Adding new chat for {} {} ({})", {std::string(groupType), groupId, chat.title_}); purpleChat = purple_chat_new(account.purpleAccount, chat.title_.c_str(), getChatComponents(chat)); purple_blist_add_chat(purpleChat, NULL, NULL); } else { @@ -402,11 +400,11 @@ void updateBasicGroupChat(TdAccountData &account, BasicGroupId groupId) const td::td_api::chat *chat = account.getBasicGroupChatByGroup(groupId); if (!group) - purple_debug_misc(config::pluginId, "Basic group %d does not exist yet\n", groupId.value()); + purpleDebug("Basic group {} does not exist yet\n", groupId.value()); else if (!chat) - purple_debug_misc(config::pluginId, "Chat for basic group %d does not exist yet\n", groupId.value()); + purpleDebug("Chat for basic group {} does not exist yet\n", groupId.value()); else - updateGroupChat(account, *chat, group->status_, "basic group", groupId.value()); + updateGroupChat(account, *chat, group->status_, "basic group", std::to_string(groupId.value())); } void updateSupergroupChat(TdAccountData &account, SupergroupId groupId) @@ -415,11 +413,11 @@ void updateSupergroupChat(TdAccountData &account, SupergroupId groupId) const td::td_api::chat *chat = account.getSupergroupChatByGroup(groupId); if (!group) - purple_debug_misc(config::pluginId, "Supergroup %d does not exist yet\n", groupId.value()); + purpleDebug("Supergroup {} does not exist yet\n", groupId.value()); else if (!chat) - purple_debug_misc(config::pluginId, "Chat for supergroup %d does not exist yet\n", groupId.value()); + purpleDebug("Chat for supergroup {} does not exist yet\n", groupId.value()); else - updateGroupChat(account, *chat, group->status_, "supergroup", groupId.value()); + updateGroupChat(account, *chat, group->status_, "supergroup", std::to_string(groupId.value())); } static std::string lastMessageSetting(ChatId chatId) diff --git a/format.cpp b/format.cpp index f339c31..82cc8af 100644 --- a/format.cpp +++ b/format.cpp @@ -25,3 +25,9 @@ std::string formatDuration(int32_t seconds) // TRANSLATOR: Time format. For HH:MM:SS use "{:02}:{:02}:{:02}" without the quotes. return fmt::format(_("{:02}:{:02}:{:02}"), hours, minutes, seconds); } + +void purpleDebug(const char *fmt, std::initializer_list args) +{ + std::string message = formatMessage(fmt, args); + purple_debug_misc(config::pluginId, "%s\n", message.c_str()); +} diff --git a/format.h b/format.h index 939b9f9..71d0e68 100644 --- a/format.h +++ b/format.h @@ -2,7 +2,9 @@ #define _FORMAT_H #include +#include #include "translate.h" +#include "config.h" std::string formatMessage(const char *fmt, std::initializer_list args); std::string formatMessage(const char *fmt, const std::string &s); @@ -15,4 +17,13 @@ std::string formatMessage(const char *fmt, T arg) std::string formatDuration(int32_t seconds); +void purpleDebug(const char *fmt, std::initializer_list args); + +template +void purpleDebug(const char *fmt, T arg) +{ + std::string message = formatMessage(fmt, arg); + purple_debug_misc(config::pluginId, "%s\n", message.c_str()); +} + #endif diff --git a/identifiers.h b/identifiers.h index 7b7f090..7be6a83 100644 --- a/identifiers.h +++ b/identifiers.h @@ -37,7 +37,7 @@ public: \ bool operator<(const classname &other) const { return (value() < other.value()); } \ static const classname invalid; -DEFINE_ID_CLASS(UserId, int32_t) +DEFINE_ID_CLASS(UserId, int64_t) friend UserId getId(const td::td_api::user &user); friend UserId getUserId(const td::td_api::chatTypePrivate &privType); friend UserId getUserId(const td::td_api::chatMember &member); @@ -64,13 +64,13 @@ DEFINE_ID_CLASS(ChatId, int64_t) friend ChatId stringToChatId(const char *s); }; -DEFINE_ID_CLASS(BasicGroupId, int32_t) +DEFINE_ID_CLASS(BasicGroupId, int64_t) friend BasicGroupId getId(const td::td_api::basicGroup &group); friend BasicGroupId getBasicGroupId(const td::td_api::updateBasicGroupFullInfo &update); friend BasicGroupId getBasicGroupId(const td::td_api::chatTypeBasicGroup &update); }; -DEFINE_ID_CLASS(SupergroupId, int32_t) +DEFINE_ID_CLASS(SupergroupId, int64_t) friend SupergroupId getId(const td::td_api::supergroup &group); friend SupergroupId getSupergroupId(const td::td_api::updateSupergroupFullInfo &update); friend SupergroupId getSupergroupId(const td::td_api::chatTypeSupergroup &update); diff --git a/td-client.cpp b/td-client.cpp index 9fe31ad..6476aeb 100644 --- a/td-client.cpp +++ b/td-client.cpp @@ -218,10 +218,11 @@ void PurpleTdClient::processUpdate(td::td_api::Object &update) case td::td_api::updateCall::ID: { auto &callUpdate = static_cast(update); if (callUpdate.call_) { - purple_debug_misc(config::pluginId, "Call update: id %d, outgoing=%d, user id %d, state %d\n", - callUpdate.call_->id_, callUpdate.call_->user_id_, - (int)callUpdate.call_->is_outgoing_, - callUpdate.call_->state_ ? callUpdate.call_->state_->get_id() : 0); + purpleDebug("Call update: id {}, outgoing={}, user id {}, state {}", { + std::to_string(callUpdate.call_->id_), + std::to_string(callUpdate.call_->user_id_), + std::to_string((int)callUpdate.call_->is_outgoing_), + std::to_string(callUpdate.call_->state_ ? callUpdate.call_->state_->get_id() : 0)}); updateCall(*callUpdate.call_, m_data, m_transceiver); } break; @@ -696,7 +697,7 @@ void PurpleTdClient::requestMissingPrivateChats() } else { UserId userId = m_usersForNewPrivateChats.back(); m_usersForNewPrivateChats.pop_back(); - purple_debug_misc(config::pluginId, "Requesting private chat for user id %d\n", userId.value()); + purpleDebug("Requesting private chat for user id {}", userId.value()); td::td_api::object_ptr createChat = td::td_api::make_object(userId.value(), false); m_transceiver.sendQuery(std::move(createChat), &PurpleTdClient::loginCreatePrivateChatResponse); @@ -1031,7 +1032,7 @@ int PurpleTdClient::sendMessage(const char *buddyName, const char *message) // Message shall not be echoed: tdlib will shortly present it as a new message and it will be displayed then return 0; } else if (privateUser) { - purple_debug_misc(config::pluginId, "Requesting private chat for user id %d\n", privateUser->id_); + purpleDebug("Requesting private chat for user id {}", privateUser->id_); td::td_api::object_ptr createChat = td::td_api::make_object(privateUser->id_, false); uint64_t requestId = m_transceiver.sendQuery(std::move(createChat), &PurpleTdClient::sendMessageCreatePrivateChatResponse); @@ -1102,9 +1103,6 @@ void PurpleTdClient::updateUser(td::td_api::object_ptr userInf } UserId userId = getId(*userInfo); - purple_debug_misc(config::pluginId, "Update user: %d '%s' '%s'\n", userId.value(), - userInfo->first_name_.c_str(), userInfo->last_name_.c_str()); - m_data.updateUser(std::move(userInfo)); // For chats, find_chat doesn't work if account is not yet connected, so just in case, don't @@ -1175,7 +1173,6 @@ void PurpleTdClient::updateGroup(td::td_api::object_ptr purple_debug_warning(config::pluginId, "updateBasicGroup with null group\n"); return; } - purple_debug_misc(config::pluginId, "updateBasicGroup id=%d\n", group->id_); BasicGroupId id = getId(*group); m_data.updateBasicGroup(std::move(group)); @@ -1193,7 +1190,6 @@ void PurpleTdClient::updateSupergroup(td::td_api::object_ptrid_); SupergroupId id = getId(*group); m_data.updateSupergroup(std::move(group)); @@ -1213,8 +1209,10 @@ void PurpleTdClient::updateChat(const td::td_api::chat *chat) BasicGroupId basicGroupId = getBasicGroupId(*chat); SupergroupId supergroupId = getSupergroupId(*chat); SecretChatId secretChatId = getSecretChatId(*chat); - purple_debug_misc(config::pluginId, "Update chat: %" G_GINT64_FORMAT " private user=%d basic group=%d supergroup=%d\n", - chat->id_, privateChatUser ? privateChatUser->id_ : 0, basicGroupId.value(), supergroupId.value()); + purpleDebug("Update chat: {} private user={} basic group={} supergroup={}", { + std::to_string(chat->id_), std::to_string(privateChatUser ? privateChatUser->id_ : 0), + std::to_string(basicGroupId.value()), std::to_string(supergroupId.value()) + }); // For secret chats, chat photo is same as user profile photo, so hopefully already downloaded. // But if not (such as when creating secret chat while downloading new photo for the user), @@ -1314,21 +1312,23 @@ void PurpleTdClient::handleUserChatAction(const td::td_api::updateUserChatAction return; } - if (chatUserId != getUserId(updateChatAction)) - purple_debug_warning(config::pluginId, "Got user action for private chat %" G_GINT64_FORMAT " (with user %d) for another user %d\n", - updateChatAction.chat_id_, chatUserId.value(), updateChatAction.user_id_); - else if (updateChatAction.action_) { + if (chatUserId != getUserId(updateChatAction)) { + purpleDebug("Got user action for private chat {} (with user {}) for another user {}", { + std::to_string(updateChatAction.chat_id_), std::to_string(chatUserId.value()), + std::to_string(updateChatAction.user_id_) + }); + } else if (updateChatAction.action_) { if (updateChatAction.action_->get_id() == td::td_api::chatActionCancel::ID) { - purple_debug_misc(config::pluginId, "User (id %d) stopped chat action\n", - updateChatAction.user_id_); + purpleDebug("User (id {}) stopped chat action", updateChatAction.user_id_); showUserChatAction(getUserId(updateChatAction), false); } else if (updateChatAction.action_->get_id() == td::td_api::chatActionStartPlayingGame::ID) { - purple_debug_misc(config::pluginId, "User (id %d): treating chatActionStartPlayingGame as cancel\n", - updateChatAction.user_id_); + purpleDebug("User (id %d): treating chatActionStartPlayingGame as cancel", + updateChatAction.user_id_); showUserChatAction(getUserId(updateChatAction), false); } else { - purple_debug_misc(config::pluginId, "User (id %d) started chat action (id %d)\n", - updateChatAction.user_id_, updateChatAction.action_->get_id()); + purpleDebug("User (id {}) started chat action (id {})", { + std::to_string(updateChatAction.user_id_), std::to_string(updateChatAction.action_->get_id()) + }); showUserChatAction(getUserId(updateChatAction), true); } } @@ -1430,7 +1430,7 @@ void PurpleTdClient::addBuddySearchChatResponse(uint64_t requestId, td::td_api:: void PurpleTdClient::addContactById(UserId userId, const std::string &phoneNumber, const std::string &alias, const std::string &groupName) { - purple_debug_misc(config::pluginId, "Adding contact: id=%d alias=%s\n", userId.value(), alias.c_str()); + purpleDebug("Adding contact: id={} alias={}", {std::to_string(userId.value()), alias}); std::string firstName, lastName; getNamesFromAlias(alias.c_str(), firstName, lastName);