data_folder.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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 "dialogs/dialogs_entry.h"
  9. #include "dialogs/dialogs_main_list.h"
  10. #include "data/data_messages.h"
  11. #include "base/weak_ptr.h"
  12. class ChannelData;
  13. namespace Main {
  14. class Session;
  15. } // namespace Main
  16. namespace Data {
  17. class Session;
  18. class Folder final : public Dialogs::Entry {
  19. public:
  20. static constexpr auto kId = 1;
  21. Folder(not_null<Data::Session*> owner, FolderId id);
  22. Folder(const Folder &) = delete;
  23. Folder &operator=(const Folder &) = delete;
  24. [[nodiscard]] FolderId id() const;
  25. void registerOne(not_null<History*> history);
  26. void unregisterOne(not_null<History*> history);
  27. void oneListMessageChanged(HistoryItem *from, HistoryItem *to);
  28. void clearChatsList();
  29. [[nodiscard]] not_null<Dialogs::MainList*> chatsList();
  30. void applyDialog(const MTPDdialogFolder &data);
  31. void applyPinnedUpdate(const MTPDupdateDialogPinned &data);
  32. TimeId adjustedChatListTimeId() const override;
  33. int fixedOnTopIndex() const override;
  34. bool shouldBeInChatList() const override;
  35. Dialogs::UnreadState chatListUnreadState() const override;
  36. Dialogs::BadgesState chatListBadgesState() const override;
  37. HistoryItem *chatListMessage() const override;
  38. bool chatListMessageKnown() const override;
  39. const QString &chatListName() const override;
  40. const QString &chatListNameSortKey() const override;
  41. int chatListNameVersion() const override;
  42. const base::flat_set<QString> &chatListNameWords() const override;
  43. const base::flat_set<QChar> &chatListFirstLetters() const override;
  44. void chatListPreloadData() override;
  45. void paintUserpic(
  46. Painter &p,
  47. Ui::PeerUserpicView &view,
  48. const Dialogs::Ui::PaintContext &context) const override;
  49. void paintUserpic(Painter &p, int x, int y, int size) const;
  50. void paintUserpic(
  51. Painter &p,
  52. int x,
  53. int y,
  54. int size,
  55. const style::color &overrideBg,
  56. const style::color &overrideFg) const;
  57. const std::vector<not_null<History*>> &lastHistories() const;
  58. void validateListEntryCache();
  59. [[nodiscard]] const Ui::Text::String &listEntryCache() const {
  60. return _listEntryCache;
  61. }
  62. void updateStoriesCount(int count, int unread);
  63. [[nodiscard]] int storiesCount() const;
  64. [[nodiscard]] int storiesUnreadCount() const;
  65. private:
  66. void indexNameParts();
  67. void reorderLastHistories();
  68. void paintUserpic(
  69. Painter &p,
  70. int x,
  71. int y,
  72. int size,
  73. const style::color *overrideBg,
  74. const style::color *overrideFg) const;
  75. const FolderId _id = 0;
  76. Dialogs::MainList _chatsList;
  77. QString _name;
  78. base::flat_set<QString> _nameWords;
  79. base::flat_set<QChar> _nameFirstLetters;
  80. std::vector<not_null<History*>> _lastHistories;
  81. Ui::Text::String _listEntryCache;
  82. int _listEntryCacheVersion = 0;
  83. int _chatListViewVersion = 0;
  84. //rpl::variable<MessagePosition> _unreadPosition;
  85. uint16_t _storiesCount = 0;
  86. uint16_t _storiesUnreadCount = 0;
  87. rpl::lifetime _lifetime;
  88. };
  89. } // namespace Data