window_separate_id.cpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. #include "window/window_separate_id.h"
  8. #include "data/data_folder.h"
  9. #include "data/data_peer.h"
  10. #include "data/data_saved_messages.h"
  11. #include "data/data_session.h"
  12. #include "data/data_thread.h"
  13. #include "history/history.h"
  14. #include "main/main_account.h"
  15. #include "main/main_session.h"
  16. namespace Window {
  17. SeparateId::SeparateId(std::nullptr_t) {
  18. }
  19. SeparateId::SeparateId(not_null<Main::Account*> account)
  20. : account(account) {
  21. }
  22. SeparateId::SeparateId(SeparateType type, not_null<Main::Session*> session)
  23. : type(type)
  24. , account(&session->account()) {
  25. }
  26. SeparateId::SeparateId(SeparateType type, not_null<Data::Thread*> thread)
  27. : type(type)
  28. , account(&thread->session().account())
  29. , thread(thread) {
  30. }
  31. SeparateId::SeparateId(not_null<Data::Thread*> thread)
  32. : SeparateId(SeparateType::Chat, thread) {
  33. }
  34. SeparateId::SeparateId(not_null<PeerData*> peer)
  35. : SeparateId(SeparateType::Chat, peer->owner().history(peer)) {
  36. }
  37. SeparateId::SeparateId(SeparateSharedMedia data)
  38. : type(SeparateType::SharedMedia)
  39. , sharedMedia(data.type)
  40. , account(&data.peer->session().account())
  41. , sharedMediaDataPeer(data.peer)
  42. , sharedMediaDataTopicRootId(data.topicRootId) {
  43. }
  44. bool SeparateId::primary() const {
  45. return (type == SeparateType::Primary);
  46. }
  47. Data::Thread *SeparateId::chat() const {
  48. return (type == SeparateType::Chat) ? thread : nullptr;
  49. }
  50. Data::Forum *SeparateId::forum() const {
  51. return (type == SeparateType::Forum) ? thread->asForum() : nullptr;
  52. }
  53. Data::Folder *SeparateId::folder() const {
  54. return (type == SeparateType::Archive)
  55. ? account->session().data().folder(Data::Folder::kId).get()
  56. : nullptr;
  57. }
  58. Data::SavedSublist *SeparateId::sublist() const {
  59. return (type == SeparateType::SavedSublist)
  60. ? thread->owner().savedMessages().sublist(thread->peer()).get()
  61. : nullptr;
  62. }
  63. bool SeparateId::hasChatsList() const {
  64. return (type == SeparateType::Primary)
  65. || (type == SeparateType::Archive)
  66. || (type == SeparateType::Forum);
  67. }
  68. PeerData *SeparateId::sharedMediaPeer() const {
  69. return (type == SeparateType::SharedMedia)
  70. ? sharedMediaDataPeer
  71. : nullptr;
  72. }
  73. MsgId SeparateId::sharedMediaTopicRootId() const {
  74. return (type == SeparateType::SharedMedia)
  75. ? sharedMediaDataTopicRootId
  76. : MsgId();
  77. }
  78. } // namespace Window