2
0
mirror of https://github.com/telegramdesktop/tdesktop synced 2025-09-01 06:55:58 +00:00

Improve monoforum chat profiles.

This commit is contained in:
John Preston
2025-06-05 14:23:47 +04:00
parent 9a622ab466
commit 73ea86ceeb
6 changed files with 51 additions and 14 deletions

View File

@@ -750,9 +750,7 @@ void TopBarWidget::infoClicked() {
} else if (const auto topic = key.topic()) { } else if (const auto topic = key.topic()) {
_controller->showSection(std::make_shared<Info::Memento>(topic)); _controller->showSection(std::make_shared<Info::Memento>(topic));
} else if (const auto sublist = key.sublist()) { } else if (const auto sublist = key.sublist()) {
_controller->showSection(std::make_shared<Info::Memento>( _controller->showSection(std::make_shared<Info::Memento>(sublist));
sublist,
Info::Section(Storage::SharedMediaType::Photo)));
} else if (key.peer()->savedSublistsInfo()) { } else if (key.peer()->savedSublistsInfo()) {
_controller->showSection(std::make_shared<Info::Memento>( _controller->showSection(std::make_shared<Info::Memento>(
key.peer(), key.peer(),

View File

@@ -37,6 +37,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_forum.h" #include "data/data_forum.h"
#include "data/data_forum_topic.h" #include "data/data_forum_topic.h"
#include "data/data_peer_values.h" #include "data/data_peer_values.h"
#include "data/data_saved_sublist.h"
#include "data/data_session.h" #include "data/data_session.h"
#include "data/data_user.h" #include "data/data_user.h"
#include "data/notify/data_notify_settings.h" #include "data/notify/data_notify_settings.h"
@@ -1019,6 +1020,10 @@ public:
not_null<Ui::RpWidget*> parent, not_null<Ui::RpWidget*> parent,
not_null<PeerData*> peer, not_null<PeerData*> peer,
Origin origin); Origin origin);
DetailsFiller(
not_null<Controller*> controller,
not_null<Ui::RpWidget*> parent,
not_null<Data::SavedSublist*> sublist);
DetailsFiller( DetailsFiller(
not_null<Controller*> controller, not_null<Controller*> controller,
not_null<Ui::RpWidget*> parent, not_null<Ui::RpWidget*> parent,
@@ -1070,6 +1075,7 @@ private:
not_null<Ui::RpWidget*> _parent; not_null<Ui::RpWidget*> _parent;
not_null<PeerData*> _peer; not_null<PeerData*> _peer;
Data::ForumTopic *_topic = nullptr; Data::ForumTopic *_topic = nullptr;
Data::SavedSublist *_sublist = nullptr;
Origin _origin; Origin _origin;
object_ptr<Ui::VerticalLayout> _wrap; object_ptr<Ui::VerticalLayout> _wrap;
@@ -1169,6 +1175,17 @@ DetailsFiller::DetailsFiller(
, _wrap(_parent) { , _wrap(_parent) {
} }
DetailsFiller::DetailsFiller(
not_null<Controller*> controller,
not_null<Ui::RpWidget*> parent,
not_null<Data::SavedSublist*> sublist)
: _controller(controller)
, _parent(parent)
, _peer(sublist->sublistPeer())
, _sublist(sublist)
, _wrap(_parent) {
}
DetailsFiller::DetailsFiller( DetailsFiller::DetailsFiller(
not_null<Controller*> controller, not_null<Controller*> controller,
not_null<Ui::RpWidget*> parent, not_null<Ui::RpWidget*> parent,
@@ -2178,7 +2195,9 @@ Ui::MultiSlideTracker DetailsFiller::fillUserButtons(
if (!user->isVerifyCodes()) { if (!user->isVerifyCodes()) {
addSendMessageButton(); addSendMessageButton();
} }
addReportReaction(tracker); if (!_sublist) {
addReportReaction(tracker);
}
return tracker; return tracker;
} }
@@ -2261,7 +2280,7 @@ object_ptr<Ui::RpWidget> DetailsFiller::fill() {
} else { } else {
add(object_ptr<Ui::BoxContentDivider>(_wrap)); add(object_ptr<Ui::BoxContentDivider>(_wrap));
} }
if (const auto user = _peer->asUser()) { if (const auto user = _sublist ? nullptr : _peer->asUser()) {
add(setupPersonalChannel(user)); add(setupPersonalChannel(user));
} }
add(CreateSkipWidget(_wrap)); add(CreateSkipWidget(_wrap));
@@ -2276,7 +2295,7 @@ object_ptr<Ui::RpWidget> DetailsFiller::fill() {
} }
} }
} }
if (!_peer->isSelf()) { if (!_sublist && !_peer->isSelf()) {
add(setupMuteToggle()); add(setupMuteToggle());
} }
setupMainButtons(); setupMainButtons();
@@ -2739,6 +2758,14 @@ object_ptr<Ui::RpWidget> SetupDetails(
return filler.fill(); return filler.fill();
} }
object_ptr<Ui::RpWidget> SetupDetails(
not_null<Controller*> controller,
not_null<Ui::RpWidget*> parent,
not_null<Data::SavedSublist*> sublist) {
DetailsFiller filler(controller, parent, sublist);
return filler.fill();
}
object_ptr<Ui::RpWidget> SetupDetails( object_ptr<Ui::RpWidget> SetupDetails(
not_null<Controller*> controller, not_null<Controller*> controller,
not_null<Ui::RpWidget*> parent, not_null<Ui::RpWidget*> parent,
@@ -2988,7 +3015,9 @@ Cover *AddCover(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
not_null<Controller*> controller, not_null<Controller*> controller,
not_null<PeerData*> peer, not_null<PeerData*> peer,
Data::ForumTopic *topic) { Data::ForumTopic *topic,
Data::SavedSublist *sublist) {
const auto shown = sublist ? sublist->sublistPeer() : peer;
const auto result = topic const auto result = topic
? container->add(object_ptr<Cover>( ? container->add(object_ptr<Cover>(
container, container,
@@ -2997,13 +3026,13 @@ Cover *AddCover(
: container->add(object_ptr<Cover>( : container->add(object_ptr<Cover>(
container, container,
controller->parentController(), controller->parentController(),
peer, shown,
[=] { return controller->wrapWidget(); })); [=] { return controller->wrapWidget(); }));
result->showSection( result->showSection(
) | rpl::start_with_next([=](Section section) { ) | rpl::start_with_next([=](Section section) {
controller->showSection(topic controller->showSection(topic
? std::make_shared<Info::Memento>(topic, section) ? std::make_shared<Info::Memento>(topic, section)
: std::make_shared<Info::Memento>(peer, section)); : std::make_shared<Info::Memento>(shown, section));
}, result->lifetime()); }, result->lifetime());
result->setOnlineCount(rpl::single(0)); result->setOnlineCount(rpl::single(0));
return result; return result;
@@ -3014,9 +3043,12 @@ void AddDetails(
not_null<Controller*> controller, not_null<Controller*> controller,
not_null<PeerData*> peer, not_null<PeerData*> peer,
Data::ForumTopic *topic, Data::ForumTopic *topic,
Data::SavedSublist *sublist,
Origin origin) { Origin origin) {
if (topic) { if (topic) {
container->add(SetupDetails(controller, container, topic)); container->add(SetupDetails(controller, container, topic));
} else if (sublist) {
container->add(SetupDetails(controller, container, sublist));
} else { } else {
container->add(SetupDetails(controller, container, peer, origin)); container->add(SetupDetails(controller, container, peer, origin));
} }

View File

@@ -16,6 +16,7 @@ class VerticalLayout;
namespace Data { namespace Data {
class ForumTopic; class ForumTopic;
class SavedSublist;
} // namespace Data } // namespace Data
namespace Info { namespace Info {
@@ -55,12 +56,14 @@ Cover *AddCover(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
not_null<Controller*> controller, not_null<Controller*> controller,
not_null<PeerData*> peer, not_null<PeerData*> peer,
Data::ForumTopic *topic); Data::ForumTopic *topic,
Data::SavedSublist *sublist);
void AddDetails( void AddDetails(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
not_null<Controller*> controller, not_null<Controller*> controller,
not_null<PeerData*> peer, not_null<PeerData*> peer,
Data::ForumTopic *topic, Data::ForumTopic *topic,
Data::SavedSublist *sublist,
Origin origin); Origin origin);
} // namespace Info::Profile } // namespace Info::Profile

View File

@@ -77,12 +77,12 @@ object_ptr<Ui::RpWidget> InnerWidget::setupContent(
} }
auto result = object_ptr<Ui::VerticalLayout>(parent); auto result = object_ptr<Ui::VerticalLayout>(parent);
_cover = AddCover(result, _controller, _peer, _topic); _cover = AddCover(result, _controller, _peer, _topic, _sublist);
if (_topic && _topic->creating()) { if (_topic && _topic->creating()) {
return result; return result;
} }
AddDetails(result, _controller, _peer, _topic, origin); AddDetails(result, _controller, _peer, _topic, _sublist, origin);
result->add(setupSharedMedia(result.data())); result->add(setupSharedMedia(result.data()));
if (_topic || _sublist) { if (_topic || _sublist) {
return result; return result;

View File

@@ -110,6 +110,8 @@ void Widget::setInnerFocus() {
rpl::producer<QString> Widget::title() { rpl::producer<QString> Widget::title() {
if (controller()->key().topic()) { if (controller()->key().topic()) {
return tr::lng_info_topic_title(); return tr::lng_info_topic_title();
} else if (controller()->key().sublist()) {
return tr::lng_info_user_title();
} }
const auto peer = controller()->key().peer(); const auto peer = controller()->key().peer();
if (const auto user = peer->asUser()) { if (const auto user = peer->asUser()) {

View File

@@ -135,8 +135,10 @@ void InnerWidget::createProfileTop() {
const auto peer = key.storiesPeer(); const auto peer = key.storiesPeer();
startTop(); startTop();
Profile::AddCover(_top, _controller, peer, nullptr);
Profile::AddDetails(_top, _controller, peer, nullptr, { v::null }); using namespace Profile;
AddCover(_top, _controller, peer, nullptr, nullptr);
AddDetails(_top, _controller, peer, nullptr, nullptr, { v::null });
auto tracker = Ui::MultiSlideTracker(); auto tracker = Ui::MultiSlideTracker();
const auto dividerWrap = _top->add( const auto dividerWrap = _top->add(