Merge lp:~phablet-team/messaging-framework/include-message-when-group-cancelled into lp:messaging-framework

Proposed by Roberto Mier Escandon
Status: Merged
Approved by: Tiago Salem Herrmann
Approved revision: 61
Merged at revision: 59
Proposed branch: lp:~phablet-team/messaging-framework/include-message-when-group-cancelled
Merge into: lp:messaging-framework
Diff against target: 304 lines (+63/-89)
6 files modified
debian/changelog (+7/-0)
include/messaging/group_manager.h (+8/-11)
include/messaging/qt/tp/text_channel.h (+9/-14)
src/CMakeLists.txt (+1/-0)
src/messaging/group_manager.cpp (+4/-17)
src/messaging/qt/tp/text_channel.cpp (+34/-47)
To merge this branch: bzr merge lp:~phablet-team/messaging-framework/include-message-when-group-cancelled
Reviewer Review Type Date Requested Status
Tiago Salem Herrmann (community) Approve
system-apps-ci-bot continuous-integration Approve
Review via email: mp+304000@code.launchpad.net

Commit message

Simplified Api for having only one callback for all possible group cancelled cases
added more enum cases as cancel reason

NOTE: this branch should be landed along with https://code.launchpad.net/~ningbo-team/ningbo/refine-error-messages/+merge/303998

Description of the change

Simplified Api for having only one callback for all possible group cancelled cases
added more enum cases as cancel reason

NOTE: this branch should be landed along with https://code.launchpad.net/~ningbo-team/ningbo/refine-error-messages/+merge/303998

To post a comment you must log in.
Revision history for this message
system-apps-ci-bot (system-apps-ci-bot) wrote :

PASSED: Continuous integration, rev:60
https://jenkins.canonical.com/system-apps/job/lp-messaging-framework-ci/45/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build/1321
    SUCCESS: https://jenkins.canonical.com/system-apps/job/test-0-autopkgtest/label=phone-armhf,release=vivid+overlay,testname=default/298
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-0-fetch/1321
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-1-sourcepkg/release=vivid+overlay/1185
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-1-sourcepkg/release=xenial+overlay/1185
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-1-sourcepkg/release=yakkety/1185
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=amd64,release=vivid+overlay/1165
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=amd64,release=vivid+overlay/1165/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=amd64,release=xenial+overlay/1165
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=amd64,release=xenial+overlay/1165/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=amd64,release=yakkety/1165
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=amd64,release=yakkety/1165/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=armhf,release=vivid+overlay/1165
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=armhf,release=vivid+overlay/1165/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=armhf,release=xenial+overlay/1165
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=armhf,release=xenial+overlay/1165/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=armhf,release=yakkety/1165
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=armhf,release=yakkety/1165/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=i386,release=vivid+overlay/1165
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=i386,release=vivid+overlay/1165/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=i386,release=xenial+overlay/1165
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=i386,release=xenial+overlay/1165/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=i386,release=yakkety/1165
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=i386,release=yakkety/1165/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/system-apps/job/lp-messaging-framework-ci/45/rebuild

review: Approve (continuous-integration)
61. By Roberto Mier Escandon

delay the close to let the events get to the client before the channel is closed

Revision history for this message
system-apps-ci-bot (system-apps-ci-bot) wrote :

PASSED: Continuous integration, rev:61
https://jenkins.canonical.com/system-apps/job/lp-messaging-framework-ci/46/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build/1331
    SUCCESS: https://jenkins.canonical.com/system-apps/job/test-0-autopkgtest/label=phone-armhf,release=vivid+overlay,testname=default/301
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-0-fetch/1331
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-1-sourcepkg/release=vivid+overlay/1194
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-1-sourcepkg/release=xenial+overlay/1194
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-1-sourcepkg/release=yakkety/1194
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=amd64,release=vivid+overlay/1174
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=amd64,release=vivid+overlay/1174/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=amd64,release=xenial+overlay/1174
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=amd64,release=xenial+overlay/1174/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=amd64,release=yakkety/1174
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=amd64,release=yakkety/1174/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=armhf,release=vivid+overlay/1174
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=armhf,release=vivid+overlay/1174/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=armhf,release=xenial+overlay/1174
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=armhf,release=xenial+overlay/1174/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=armhf,release=yakkety/1174
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=armhf,release=yakkety/1174/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=i386,release=vivid+overlay/1174
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=i386,release=vivid+overlay/1174/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=i386,release=xenial+overlay/1174
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=i386,release=xenial+overlay/1174/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=i386,release=yakkety/1174
        deb: https://jenkins.canonical.com/system-apps/job/build-2-binpkg/arch=i386,release=yakkety/1174/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/system-apps/job/lp-messaging-framework-ci/46/rebuild

review: Approve (continuous-integration)
Revision history for this message
Tiago Salem Herrmann (tiagosh) wrote :

tested and works fine.
code looks good too.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'debian/changelog'
--- debian/changelog 2016-08-16 20:11:02 +0000
+++ debian/changelog 2016-08-26 14:12:00 +0000
@@ -1,3 +1,10 @@
1messaging-framework (0.1-1ubuntu25) vivid; urgency=medium
2
3 * Fixed self handle included in members
4 * Simplified group cancelled api callbacks reducing them to only one
5
6 -- Roberto Mier Escandon <roberto.escandon@canonical.com> Thu, 25 Aug 2016 22:06:07 +0200
7
1messaging-framework (0.1-1ubuntu24) vivid; urgency=medium8messaging-framework (0.1-1ubuntu24) vivid; urgency=medium
29
3 * Implemented code to update group member roles in client10 * Implemented code to update group member roles in client
411
=== modified file 'include/messaging/group_manager.h'
--- include/messaging/group_manager.h 2016-08-23 22:33:39 +0000
+++ include/messaging/group_manager.h 2016-08-26 14:12:00 +0000
@@ -42,10 +42,12 @@
4242
43enum class CancelGroupReason43enum class CancelGroupReason
44{44{
45 None,45 None, ///< No or unknown reason
46 Kicked,46 Error, ///< Generic error makes this group temporally or permanent unavaliable for us
47 Gone,47 Rejected, ///< Group creation or rejoin was rejected
48 Error48 Kicked, ///< We were expelled from group
49 Gone, ///< Group is gone in server side and is not available anymore
50 Leave ///< We leave the group
49};51};
5052
51/// @brief GroupManager models a textual group conversation.53/// @brief GroupManager models a textual group conversation.
@@ -59,9 +61,7 @@
59 virtual ~Observer() = default;61 virtual ~Observer() = default;
6062
61 virtual void on_group_created() = 0;63 virtual void on_group_created() = 0;
62 virtual void on_group_creation_rejected() = 0;64 virtual void on_group_cancelled(CancelGroupReason reason, const std::string &message) = 0;
63 virtual void on_group_cancelled(CancelGroupReason reason) = 0;
64 virtual void on_group_quit() = 0;
65 virtual void on_group_title_changed(const std::string& new_title,65 virtual void on_group_title_changed(const std::string& new_title,
66 const Member& actor,66 const Member& actor,
67 const std::chrono::system_clock::time_point& when) = 0;67 const std::chrono::system_clock::time_point& when) = 0;
@@ -116,10 +116,7 @@
116 void validate_observer();116 void validate_observer();
117117
118 void announce_group_created();118 void announce_group_created();
119 //TODO TRACE maybe a reason as parameter for knowing the rejected cause?119 void announce_group_cancelled(CancelGroupReason reason, const std::string& message);
120 void announce_group_creation_rejected();
121 void announce_group_cancelled(CancelGroupReason reason);
122 void announce_group_quit();
123 void announce_group_title_changed(const std::string& new_title,120 void announce_group_title_changed(const std::string& new_title,
124 const Member& actor = Member{std::string{}},121 const Member& actor = Member{std::string{}},
125 const std::chrono::system_clock::time_point& when = std::chrono::system_clock::now());122 const std::chrono::system_clock::time_point& when = std::chrono::system_clock::now());
126123
=== modified file 'include/messaging/qt/tp/text_channel.h'
--- include/messaging/qt/tp/text_channel.h 2016-08-16 16:31:31 +0000
+++ include/messaging/qt/tp/text_channel.h 2016-08-26 14:12:00 +0000
@@ -20,7 +20,11 @@
20#include <messaging/chat.h>20#include <messaging/chat.h>
21#include <messaging/messenger.h>21#include <messaging/messenger.h>
22#include <messaging/qt/runtime.h>22#include <messaging/qt/runtime.h>
23
24#include <messaging/qt/tp/interfaces/base_channel_destroyable.h>
25#include <messaging/qt/tp/interfaces/base_channel_roles.h>
23#include <messaging/qt/tp/interfaces/types.h>26#include <messaging/qt/tp/interfaces/types.h>
27#include <messaging/qt/tp/interfaces/constants.h>
2428
25#include <TelepathyQt/BaseChannel>29#include <TelepathyQt/BaseChannel>
26#include <TelepathyQt/Types>30#include <TelepathyQt/Types>
@@ -45,6 +49,7 @@
45 , public messaging::Chat::Observer49 , public messaging::Chat::Observer
46 , public messaging::GroupManager::Observer50 , public messaging::GroupManager::Observer
47{51{
52 Q_OBJECT
48public:53public:
49 /// @brief Safes us some typing.54 /// @brief Safes us some typing.
50 typedef Tp::SharedPtr<TextChannel> Ptr;55 typedef Tp::SharedPtr<TextChannel> Ptr;
@@ -72,14 +77,8 @@
72 /// @brief on_group_created when the group has been created ok in the server77 /// @brief on_group_created when the group has been created ok in the server
73 void on_group_created() override;78 void on_group_created() override;
7479
75 /// @brief on_group_creation_rejected when the group creation has been rejected by the server
76 void on_group_creation_rejected() override;
77
78 /// @brief on_group_cancelled when the group is no longer valid80 /// @brief on_group_cancelled when the group is no longer valid
79 void on_group_cancelled(CancelGroupReason reason) override;81 void on_group_cancelled(CancelGroupReason reason, const std::string &message) override;
80
81 /// @brief on_group_quit when confirmed leaving a group
82 void on_group_quit() override;
8382
84 /// @brief on_group_title_changed when group title has changed in the server83 /// @brief on_group_title_changed when group title has changed in the server
85 void on_group_title_changed(const std::string& new_title,84 void on_group_title_changed(const std::string& new_title,
@@ -107,6 +106,8 @@
107 /// @brief on_participant_ends_typing is invoked when a participant in this chat ends composing a message106 /// @brief on_participant_ends_typing is invoked when a participant in this chat ends composing a message
108 void on_participant_ends_typing(const std::shared_ptr<User> &user) override;107 void on_participant_ends_typing(const std::shared_ptr<User> &user) override;
109108
109public Q_SLOTS:
110 void delay_close();
110111
111private:112private:
112 TextChannel(Connection* tp_connection,113 TextChannel(Connection* tp_connection,
@@ -143,14 +144,8 @@
143 /// @brief on_group_created when the group has been created ok in the server144 /// @brief on_group_created when the group has been created ok in the server
144 void on_group_created() override;145 void on_group_created() override;
145146
146 /// @brief on_group_creation_rejected when the group creation has been rejected by the server
147 void on_group_creation_rejected() override;
148
149 /// @brief on_group_cancelled when the group is no longer valid147 /// @brief on_group_cancelled when the group is no longer valid
150 void on_group_cancelled(CancelGroupReason reason) override;148 void on_group_cancelled(CancelGroupReason reason, const std::string &message) override;
151
152 /// @brief on_group_quit when confirmed leaving a group
153 void on_group_quit() override;
154149
155 /// @brief on_group_title_changed when group title has changed in the server150 /// @brief on_group_title_changed when group title has changed in the server
156 void on_group_title_changed(const std::string& new_title,151 void on_group_title_changed(const std::string& new_title,
157152
=== modified file 'src/CMakeLists.txt'
--- src/CMakeLists.txt 2016-08-11 21:39:57 +0000
+++ src/CMakeLists.txt 2016-08-26 14:12:00 +0000
@@ -4,6 +4,7 @@
4qt5_wrap_cpp(MESSAGING_FW_MOCS ${CMAKE_SOURCE_DIR}/include/messaging/qt/network_monitor.h4qt5_wrap_cpp(MESSAGING_FW_MOCS ${CMAKE_SOURCE_DIR}/include/messaging/qt/network_monitor.h
5 ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/protocol.h5 ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/protocol.h
6 ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/connection.h6 ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/connection.h
7 ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/text_channel.h
7 ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/base_channel_destroyable.h8 ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/base_channel_destroyable.h
8 ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/base_channel_destroyable_internal.h9 ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/base_channel_destroyable_internal.h
9 ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/base_channel_roles.h10 ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/base_channel_roles.h
1011
=== modified file 'src/messaging/group_manager.cpp'
--- src/messaging/group_manager.cpp 2016-08-16 14:47:42 +0000
+++ src/messaging/group_manager.cpp 2016-08-26 14:12:00 +0000
@@ -58,23 +58,10 @@
58 impl->observer->on_group_created();58 impl->observer->on_group_created();
59}59}
6060
61void messaging::GroupManager::announce_group_creation_rejected()61void messaging::GroupManager::announce_group_cancelled(CancelGroupReason reason, const std::string &message)
62{62{
63 validate_observer();63 validate_observer();
64 impl->observer->on_group_creation_rejected();64 impl->observer->on_group_cancelled(reason, message);
65}
66
67
68void messaging::GroupManager::announce_group_cancelled(CancelGroupReason reason)
69{
70 validate_observer();
71 impl->observer->on_group_cancelled(reason);
72}
73
74void messaging::GroupManager::announce_group_quit()
75{
76 validate_observer();
77 impl->observer->on_group_quit();
78}65}
7966
80void messaging::GroupManager::announce_group_title_changed(const std::string &new_title,67void messaging::GroupManager::announce_group_title_changed(const std::string &new_title,
8168
=== modified file 'src/messaging/qt/tp/text_channel.cpp'
--- src/messaging/qt/tp/text_channel.cpp 2016-08-24 20:10:27 +0000
+++ src/messaging/qt/tp/text_channel.cpp 2016-08-26 14:12:00 +0000
@@ -19,11 +19,6 @@
19#include <messaging/qt/tp/connection.h>19#include <messaging/qt/tp/connection.h>
20#include <messaging/qt/tp/message.h>20#include <messaging/qt/tp/message.h>
2121
22#include <messaging/qt/tp/interfaces/base_channel_destroyable.h>
23#include <messaging/qt/tp/interfaces/base_channel_roles.h>
24#include <messaging/qt/tp/interfaces/types.h>
25#include <messaging/qt/tp/interfaces/constants.h>
26
27#include <messaging/qt/variant.h>22#include <messaging/qt/variant.h>
2823
29#include <messaging/connection.h>24#include <messaging/connection.h>
@@ -178,27 +173,11 @@
178 });173 });
179}174}
180175
181void mqt::tp::TextChannel::Observer::on_group_creation_rejected()176void mqt::tp::TextChannel::Observer::on_group_cancelled(CancelGroupReason reason, const std::string &message)
182{177{
183 auto sp = shared_from_this();178 auto thiz = shared_from_this();
184 runtime->enter_with_task([sp](){179 runtime->enter_with_task([thiz, reason, message]() {
185 sp->tc->on_group_creation_rejected();180 thiz->tc->on_group_cancelled(reason, message);
186 });
187}
188
189void mqt::tp::TextChannel::Observer::on_group_cancelled(CancelGroupReason reason)
190{
191 auto thiz = shared_from_this();
192 runtime->enter_with_task([thiz, reason]() {
193 thiz->tc->on_group_cancelled(reason);
194 });
195}
196
197void mqt::tp::TextChannel::Observer::on_group_quit()
198{
199 auto thiz = shared_from_this();
200 runtime->enter_with_task([thiz]() {
201 thiz->tc->on_group_quit();
202 });181 });
203}182}
204183
@@ -612,12 +591,6 @@
612591
613}592}
614593
615void mqt::tp::TextChannel::on_group_creation_rejected()
616{
617 LOG(INFO) << __PRETTY_FUNCTION__ ;
618 close_channel_with_reason(Tp::ChannelGroupChangeReasonError, "Group creation rejected");
619}
620
621void mqt::tp::TextChannel::close_channel_with_reason(uint reason, const QString &message)594void mqt::tp::TextChannel::close_channel_with_reason(uint reason, const QString &message)
622{595{
623 // At this point, self handle should be removed from the group members, providing one of the reasons596 // At this point, self handle should be removed from the group members, providing one of the reasons
@@ -637,11 +610,18 @@
637610
638 group_interface->setMembers(members, details);611 group_interface->setMembers(members, details);
639612
613 // It is needed to delay the close channel action to be sure the events related with previous action of removing
614 // self handle from members are sent to clients and processed before the channel expires.
615 QTimer::singleShot(2000, this, SLOT(delay_close()));
616
617}
618
619void mqt::tp::TextChannel::delay_close()
620{
640 close();621 close();
641}622}
642623
643624void mqt::tp::TextChannel::on_group_cancelled(CancelGroupReason cancel_reason, const std::string &cancel_message)
644void mqt::tp::TextChannel::on_group_cancelled(CancelGroupReason cancel_reason)
645{625{
646 LOG(INFO) << __PRETTY_FUNCTION__;626 LOG(INFO) << __PRETTY_FUNCTION__;
647627
@@ -649,18 +629,25 @@
649 QString message;629 QString message;
650 switch (cancel_reason)630 switch (cancel_reason)
651 {631 {
632 case CancelGroupReason::Error:
633 reason = Tp::ChannelGroupChangeReasonError;
634 message = "Group is closed due to an error";
635 break;
636 case CancelGroupReason::Rejected:
637 reason = Tp::ChannelGroupChangeReasonError;
638 message = "Group creation rejected";
639 break;
640 case CancelGroupReason::Kicked:
641 reason = Tp::ChannelGroupChangeReasonKicked;
642 message = "You were expelled from group";
643 break;
652 case CancelGroupReason::Gone:644 case CancelGroupReason::Gone:
653 reason = Tp::ChannelGroupChangeReasonBanned;645 reason = Tp::ChannelGroupChangeReasonBanned;
654 message = "Group not available anymore";646 message = "Group not available anymore";
655 break;647 break;
656 case CancelGroupReason::Kicked:648 case CancelGroupReason::Leave:
657 reason = Tp::ChannelGroupChangeReasonKicked;649 reason = Tp::ChannelGroupChangeReasonNone;
658 message = "You were expelled from group";650 message = "Quit group";
659 break;
660 case CancelGroupReason::Error:
661 reason = Tp::ChannelGroupChangeReasonError;
662 message = "Group is closed due to an error";
663 break;
664 case CancelGroupReason::None:651 case CancelGroupReason::None:
665 default:652 default:
666 reason = Tp::ChannelGroupChangeReasonNone;653 reason = Tp::ChannelGroupChangeReasonNone;
@@ -668,14 +655,14 @@
668 break;655 break;
669 }656 }
670657
658 // cancel message overwrites default one in case it is not empty
659 if (not cancel_message.empty()) {
660 message = QString::fromStdString(cancel_message);
661 }
662
671 close_channel_with_reason(reason, message);663 close_channel_with_reason(reason, message);
672}664}
673665
674void mqt::tp::TextChannel::on_group_quit()
675{
676 close_channel_with_reason(Tp::ChannelGroupChangeReasonNone, "Quit group");
677}
678
679void mqt::tp::TextChannel::on_group_title_changed(const std::string &new_title,666void mqt::tp::TextChannel::on_group_title_changed(const std::string &new_title,
680 const Member& actor,667 const Member& actor,
681 const std::chrono::system_clock::time_point& when)668 const std::chrono::system_clock::time_point& when)

Subscribers

People subscribed via source and target branches

to all changes: