profile_block_group_members.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. This file is part of Telegram Desktop,
  3. the official desktop application for the Telegram messaging service.
  4. For license and copyright information please follow this link:
  5. https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
  6. */
  7. #pragma once
  8. #include "base/timer.h"
  9. #include "data/data_lastseen_status.h"
  10. #include "profile/profile_block_peer_list.h"
  11. namespace Ui {
  12. class FlatLabel;
  13. } // namespace Ui
  14. namespace Data {
  15. struct PeerUpdate;
  16. } // namespace Data
  17. namespace Window {
  18. class SessionController;
  19. } // namespace Window
  20. namespace Profile {
  21. class GroupMembersWidget : public PeerListWidget {
  22. public:
  23. GroupMembersWidget(
  24. QWidget *parent,
  25. not_null<Window::SessionController*> controller,
  26. not_null<PeerData*> peer,
  27. const style::PeerListItem &st);
  28. int onlineCount() const {
  29. return _onlineCount;
  30. }
  31. ~GroupMembersWidget();
  32. private:
  33. void updateOnlineDisplay();
  34. // Observed notifications.
  35. void notifyPeerUpdated(const Data::PeerUpdate &update);
  36. void removePeer(PeerData *selectedPeer);
  37. void refreshMembers();
  38. void fillChatMembers(not_null<ChatData*> chat);
  39. void fillMegagroupMembers(not_null<ChannelData*> megagroup);
  40. void sortMembers();
  41. void updateOnlineCount();
  42. void checkSelfAdmin(not_null<ChatData*> chat);
  43. void preloadMore();
  44. void refreshUserOnline(UserData *user);
  45. struct Member : public Item {
  46. explicit Member(not_null<UserData*> user);
  47. not_null<UserData*> user() const;
  48. TimeId onlineTextTill = 0;
  49. Data::LastseenStatus lastseen;
  50. TimeId onlineForSort = 0;
  51. };
  52. Member *getMember(Item *item) {
  53. return static_cast<Member*>(item);
  54. }
  55. void updateItemStatusText(Item *item);
  56. not_null<Member*> computeMember(not_null<UserData*> user);
  57. not_null<Member*> addUser(not_null<ChatData*> chat, not_null<UserData*> user);
  58. not_null<Member*> addUser(not_null<ChannelData*> megagroup, not_null<UserData*> user);
  59. void setItemFlags(not_null<Item*> item, not_null<ChatData*> chat);
  60. void setItemFlags(
  61. not_null<Item*> item,
  62. not_null<ChannelData*> megagroup);
  63. bool addUsersToEnd(not_null<ChannelData*> megagroup);
  64. const not_null<Window::SessionController*> _controller;
  65. base::flat_map<UserData*, Member*> _membersByUser;
  66. bool _sortByOnline = false;
  67. TimeId _now = 0;
  68. int _onlineCount = 0;
  69. TimeId _updateOnlineAt = 0;
  70. base::Timer _updateOnlineTimer;
  71. };
  72. } // namespace Profile