mirror of
https://hubproxy.babadafafafafa.cn/https://github.com/telegramdesktop/tdesktop
synced 2026-09-21 00:23:56 +08:00
Show self profile from groups members list.
This commit is contained in:
@@ -195,6 +195,13 @@ public:
|
||||
, _settingsType(settingsType) {
|
||||
}
|
||||
|
||||
// The Saved Messages chat info page, not a self profile page.
|
||||
[[nodiscard]] static Section SavedMessages() {
|
||||
auto result = Section(Type::Profile);
|
||||
result._savedMessages = true;
|
||||
return result;
|
||||
}
|
||||
|
||||
[[nodiscard]] Type type() const {
|
||||
return _type;
|
||||
}
|
||||
@@ -208,11 +215,15 @@ public:
|
||||
|
||||
return _settingsType;
|
||||
}
|
||||
[[nodiscard]] bool savedMessages() const {
|
||||
return _savedMessages;
|
||||
}
|
||||
|
||||
private:
|
||||
Type _type;
|
||||
MediaType _mediaType = MediaType();
|
||||
SettingsType _settingsType = SettingsType();
|
||||
bool _savedMessages = false;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -181,7 +181,7 @@ std::vector<std::shared_ptr<ContentMemento>> Memento::DefaultStack(
|
||||
Section Memento::DefaultSection(not_null<PeerData*> peer) {
|
||||
if (peer->savedSublistsInfo()) {
|
||||
return Profile::UseProfileMediaTabs()
|
||||
? Section(Section::Type::Profile)
|
||||
? Section::SavedMessages()
|
||||
: Section(Section::Type::SavedSublists);
|
||||
} else if (peer->sharedMediaInfo()) {
|
||||
return Section(Section::MediaType::Photo);
|
||||
@@ -206,7 +206,9 @@ std::shared_ptr<ContentMemento> Memento::DefaultContent(
|
||||
case Section::Type::Profile:
|
||||
return std::make_shared<Profile::Memento>(
|
||||
peer,
|
||||
migratedPeerId);
|
||||
migratedPeerId,
|
||||
Profile::Origin(),
|
||||
section.savedMessages());
|
||||
case Section::Type::Media:
|
||||
if (section.mediaType() == Storage::SharedMediaType::Poll) {
|
||||
return std::make_shared<Polls::ListMemento>(
|
||||
|
||||
@@ -951,6 +951,7 @@ bool WrapWidget::returnToFirstStackFrame(
|
||||
auto firstSection = _historyStack.front().section->section();
|
||||
if (firstPeer == memento->peer()
|
||||
&& firstSection.type() == memento->section().type()
|
||||
&& firstSection.savedMessages() == memento->section().savedMessages()
|
||||
&& firstSection.type() == Section::Type::Profile) {
|
||||
_historyStack.resize(1);
|
||||
_controller->showBackFromStack();
|
||||
|
||||
@@ -177,6 +177,7 @@ InnerWidget::InnerWidget(
|
||||
, _migrated(_controller->migrated())
|
||||
, _topic(_controller->key().topic())
|
||||
, _sublist(_controller->key().sublist())
|
||||
, _savedMessages(_controller->section().savedMessages())
|
||||
, _content(setupContent(this, origin)) {
|
||||
_content->heightValue(
|
||||
) | rpl::on_next([this](int height) {
|
||||
@@ -211,8 +212,7 @@ object_ptr<Ui::RpWidget> InnerWidget::setupContent(
|
||||
|
||||
auto result = object_ptr<Ui::VerticalLayout>(parent);
|
||||
|
||||
const auto savedMessages = _peer->isSelf() && !_topic && !_sublist;
|
||||
if (!savedMessages) {
|
||||
if (!_savedMessages) {
|
||||
const auto musicPeer = _sublist
|
||||
? _sublist->sublistPeer().get()
|
||||
: _peer.get();
|
||||
@@ -232,7 +232,7 @@ object_ptr<Ui::RpWidget> InnerWidget::setupContent(
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!savedMessages) {
|
||||
if (!_savedMessages) {
|
||||
BuildProfileDetailsSections(
|
||||
stack,
|
||||
_controller,
|
||||
@@ -308,10 +308,10 @@ object_ptr<Ui::RpWidget> InnerWidget::setupContent(
|
||||
addSplit(Type::Photo);
|
||||
addSplit(Type::Video);
|
||||
};
|
||||
if (savedMessages) {
|
||||
if (_savedMessages) {
|
||||
tabs.push_back(MakeChatsTabDescriptor());
|
||||
}
|
||||
if (!_topic && !savedMessages) {
|
||||
if (!_topic && !_savedMessages) {
|
||||
tabs.push_back(MakeStoriesTabDescriptor(tabsPeer));
|
||||
if (!_sublist) {
|
||||
tabs.push_back(MakeGiftsTabDescriptor(_peer));
|
||||
@@ -326,7 +326,7 @@ object_ptr<Ui::RpWidget> InnerWidget::setupContent(
|
||||
MembersInTabValue(_peer)));
|
||||
}
|
||||
addMediaTabs();
|
||||
if (!_topic && !savedMessages) {
|
||||
if (!_topic && !_savedMessages) {
|
||||
tabs.push_back(MakeSavedTabDescriptor(tabsPeer));
|
||||
}
|
||||
addTab(Storage::SharedMediaType::File);
|
||||
@@ -340,7 +340,7 @@ object_ptr<Ui::RpWidget> InnerWidget::setupContent(
|
||||
Storage::SharedMediaType::Poll) | rpl::map(_1 > 0)));
|
||||
addTab(Storage::SharedMediaType::RoundVoiceFile);
|
||||
addTab(Storage::SharedMediaType::GIF);
|
||||
if (!_topic && !_sublist && !savedMessages) {
|
||||
if (!_topic && !_sublist && !_savedMessages) {
|
||||
if (const auto user = _peer->asUser()) {
|
||||
tabs.push_back(MakeCommonGroupsTabDescriptor(user));
|
||||
}
|
||||
@@ -379,10 +379,10 @@ object_ptr<Ui::RpWidget> InnerWidget::setupContent(
|
||||
.shown = raw->heightValue() | rpl::map(_1 > 0),
|
||||
});
|
||||
};
|
||||
if (_topic || _sublist || savedMessages) {
|
||||
if (_topic || _sublist || _savedMessages) {
|
||||
if (tabs) {
|
||||
addTabsHost();
|
||||
if (savedMessages) {
|
||||
if (_savedMessages) {
|
||||
// The bar is pinned at its minimum height there, so the
|
||||
// tabs behave as docked from the very start.
|
||||
_tabsDocked = true;
|
||||
@@ -497,7 +497,7 @@ void InnerWidget::visibleTopBottomUpdated(
|
||||
}
|
||||
}
|
||||
_tabsHost->setVisibleRegion(visibleTop - top, visibleBottom - top);
|
||||
_tabsDocked = (_peer->isSelf() && !_topic && !_sublist)
|
||||
_tabsDocked = _savedMessages
|
||||
|| ((top > 0) && (visibleTop >= top));
|
||||
}
|
||||
}
|
||||
@@ -576,7 +576,6 @@ bool InnerWidget::hasFlexibleTopBar() const {
|
||||
|
||||
base::weak_qptr<Ui::RpWidget> InnerWidget::createPinnedToTop(
|
||||
not_null<Ui::RpWidget*> parent) {
|
||||
const auto savedMessages = _peer->isSelf() && !_topic && !_sublist;
|
||||
const auto content = Ui::CreateChild<TopBar>(
|
||||
parent,
|
||||
TopBar::Descriptor{
|
||||
@@ -586,9 +585,10 @@ base::weak_qptr<Ui::RpWidget> InnerWidget::createPinnedToTop(
|
||||
.peer = _sublist ? _sublist->sublistPeer().get() : nullptr,
|
||||
.backToggles = _backToggles.value(),
|
||||
.showFinished = _showFinished.events(),
|
||||
.customStatus = (savedMessages
|
||||
.customStatus = (_savedMessages
|
||||
? SavedChatsCountStatus(&_peer->session())
|
||||
: rpl::producer<TextWithEntities>()),
|
||||
.savedMessages = _savedMessages,
|
||||
});
|
||||
content->backRequest(
|
||||
) | rpl::start_to_stream(_backClicks, content->lifetime());
|
||||
|
||||
@@ -104,6 +104,7 @@ private:
|
||||
PeerData * const _migrated = nullptr;
|
||||
Data::ForumTopic * const _topic = nullptr;
|
||||
Data::SavedSublist * const _sublist = nullptr;
|
||||
const bool _savedMessages = false;
|
||||
|
||||
bool _inResize = false;
|
||||
int _lastDesiredHeight = -1;
|
||||
|
||||
@@ -343,10 +343,7 @@ TopBar::TopBar(
|
||||
, _wrap(std::move(descriptor.wrap))
|
||||
, _st(st::infoTopBar)
|
||||
, _source(descriptor.source)
|
||||
, _savedMessages(descriptor.source == Source::Profile
|
||||
&& !_topic
|
||||
&& !_key.sublist()
|
||||
&& _peer->isSelf())
|
||||
, _savedMessages(descriptor.savedMessages)
|
||||
, _badgeTooltipHide(
|
||||
std::make_unique<base::Timer>([=] { hideBadgeTooltip(); }))
|
||||
, _botVerify(std::make_unique<Badge>(
|
||||
|
||||
@@ -109,6 +109,7 @@ public:
|
||||
rpl::producer<bool> backToggles;
|
||||
rpl::producer<> showFinished;
|
||||
rpl::producer<TextWithEntities> customStatus;
|
||||
bool savedMessages = false;
|
||||
};
|
||||
|
||||
struct AnimatedPatternPoint {
|
||||
|
||||
@@ -41,14 +41,22 @@ Memento::Memento(not_null<Controller*> controller)
|
||||
controller->topic(),
|
||||
controller->sublist(),
|
||||
controller->migratedPeerId(),
|
||||
{ v::null }) {
|
||||
{ v::null },
|
||||
controller->section().savedMessages()) {
|
||||
}
|
||||
|
||||
Memento::Memento(
|
||||
not_null<PeerData*> peer,
|
||||
PeerId migratedPeerId,
|
||||
Origin origin)
|
||||
: Memento(peer, nullptr, nullptr, migratedPeerId, origin) {
|
||||
Origin origin,
|
||||
bool savedMessages)
|
||||
: Memento(
|
||||
peer,
|
||||
nullptr,
|
||||
nullptr,
|
||||
migratedPeerId,
|
||||
origin,
|
||||
savedMessages) {
|
||||
}
|
||||
|
||||
Memento::Memento(
|
||||
@@ -56,9 +64,11 @@ Memento::Memento(
|
||||
Data::ForumTopic *topic,
|
||||
Data::SavedSublist *sublist,
|
||||
PeerId migratedPeerId,
|
||||
Origin origin)
|
||||
Origin origin,
|
||||
bool savedMessages)
|
||||
: ContentMemento(peer, topic, sublist, migratedPeerId)
|
||||
, _origin(origin) {
|
||||
, _origin(origin)
|
||||
, _savedMessages(savedMessages) {
|
||||
}
|
||||
|
||||
Memento::Memento(not_null<Data::ForumTopic*> topic)
|
||||
@@ -70,7 +80,9 @@ Memento::Memento(not_null<Data::SavedSublist*> sublist)
|
||||
}
|
||||
|
||||
Info::Section Memento::section() const {
|
||||
return Info::Section(Info::Section::Type::Profile);
|
||||
return _savedMessages
|
||||
? Info::Section::SavedMessages()
|
||||
: Info::Section(Info::Section::Type::Profile);
|
||||
}
|
||||
|
||||
object_ptr<ContentWidget> Memento::createWidget(
|
||||
@@ -325,7 +337,7 @@ rpl::producer<QString> Widget::title() {
|
||||
return tr::lng_profile_direct_messages();
|
||||
}
|
||||
const auto peer = controller()->key().peer();
|
||||
if (peer->isSelf() && !controller()->key().sublist()) {
|
||||
if (controller()->section().savedMessages()) {
|
||||
return tr::lng_saved_messages();
|
||||
} else if (const auto user = peer->asUser()) {
|
||||
return (user->isBot() && !user->isSupport())
|
||||
@@ -356,6 +368,12 @@ bool Widget::showInternal(not_null<ContentMemento*> memento) {
|
||||
return false;
|
||||
}
|
||||
if (auto profileMemento = dynamic_cast<Memento*>(memento.get())) {
|
||||
if (profileMemento->savedMessages()
|
||||
!= controller()->section().savedMessages()) {
|
||||
// The Saved Messages page and the self profile page
|
||||
// are built differently, so a new content is required.
|
||||
return false;
|
||||
}
|
||||
restoreState(profileMemento);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -35,7 +35,8 @@ public:
|
||||
Memento(
|
||||
not_null<PeerData*> peer,
|
||||
PeerId migratedPeerId,
|
||||
Origin origin = { v::null });
|
||||
Origin origin = { v::null },
|
||||
bool savedMessages = false);
|
||||
explicit Memento(not_null<Data::ForumTopic*> topic);
|
||||
explicit Memento(not_null<Data::SavedSublist*> sublist);
|
||||
|
||||
@@ -49,6 +50,9 @@ public:
|
||||
[[nodiscard]] Origin origin() const {
|
||||
return _origin;
|
||||
}
|
||||
[[nodiscard]] bool savedMessages() const {
|
||||
return _savedMessages;
|
||||
}
|
||||
|
||||
void setMembersState(std::unique_ptr<MembersState> state);
|
||||
[[nodiscard]] std::unique_ptr<MembersState> membersState();
|
||||
@@ -68,10 +72,12 @@ private:
|
||||
Data::ForumTopic *topic,
|
||||
Data::SavedSublist *sublist,
|
||||
PeerId migratedPeerId,
|
||||
Origin origin);
|
||||
Origin origin,
|
||||
bool savedMessages);
|
||||
|
||||
std::unique_ptr<MembersState> _membersState;
|
||||
Origin _origin;
|
||||
bool _savedMessages = false;
|
||||
QString _activeTab;
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user