mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 14:17:12 +02:00
Moved opening peer from PeerClickHandler to SessionController.
This commit is contained in:
parent
51b259fdea
commit
d8fb5be9b5
4 changed files with 47 additions and 28 deletions
|
@ -29,7 +29,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "main/main_app_config.h"
|
||||
#include "mtproto/mtproto_config.h"
|
||||
#include "core/application.h"
|
||||
#include "mainwindow.h"
|
||||
#include "core/click_handler_types.h"
|
||||
#include "window/window_session_controller.h"
|
||||
#include "ui/image/image.h"
|
||||
#include "ui/empty_userpic.h"
|
||||
|
@ -42,7 +42,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "storage/file_download.h"
|
||||
#include "storage/storage_facade.h"
|
||||
#include "storage/storage_shared_media.h"
|
||||
#include "facades.h" // Ui::showPeerProfile
|
||||
|
||||
namespace {
|
||||
|
||||
|
@ -168,33 +167,22 @@ void PeerClickHandler::onClick(ClickContext context) const {
|
|||
if (context.button != Qt::LeftButton) {
|
||||
return;
|
||||
}
|
||||
const auto &windows = _peer->session().windows();
|
||||
if (windows.empty()) {
|
||||
Core::App().domain().activate(&_peer->session().account());
|
||||
const auto my = context.other.value<ClickHandlerContext>();
|
||||
const auto window = [&]() -> Window::SessionController* {
|
||||
if (const auto controller = my.sessionWindow.get()) {
|
||||
return controller;
|
||||
}
|
||||
const auto &windows = _peer->session().windows();
|
||||
if (windows.empty()) {
|
||||
return;
|
||||
_peer->session().domain().activate(&_peer->session().account());
|
||||
if (windows.empty()) {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
const auto window = windows.front();
|
||||
const auto currentPeer = window->activeChatCurrent().peer();
|
||||
if (_peer && _peer->isChannel() && currentPeer != _peer) {
|
||||
const auto clickedChannel = _peer->asChannel();
|
||||
if (!clickedChannel->isPublic()
|
||||
&& !clickedChannel->amIn()
|
||||
&& (!currentPeer->isChannel()
|
||||
|| currentPeer->asChannel()->linkedChat() != clickedChannel)) {
|
||||
Ui::ShowMultilineToast({
|
||||
.text = { _peer->isMegagroup()
|
||||
? tr::lng_group_not_accessible(tr::now)
|
||||
: tr::lng_channel_not_accessible(tr::now) },
|
||||
});
|
||||
} else {
|
||||
window->showPeerHistory(
|
||||
_peer,
|
||||
Window::SectionShow::Way::Forward);
|
||||
}
|
||||
} else {
|
||||
Ui::showPeerProfile(_peer);
|
||||
return windows.front();
|
||||
}();
|
||||
if (window) {
|
||||
window->showPeer(_peer);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -57,7 +57,12 @@ struct ViewButton::Inner {
|
|||
|
||||
ViewButton::Inner::Inner(not_null<PeerData*> peer, Fn<void()> updateCallback)
|
||||
: margins(st::historyViewButtonMargins)
|
||||
, link(peer->openLink())
|
||||
, link(std::make_shared<LambdaClickHandler>([=](ClickContext context) {
|
||||
const auto my = context.other.value<ClickHandlerContext>();
|
||||
if (const auto controller = my.sessionWindow.get()) {
|
||||
controller->showPeer(peer);
|
||||
}
|
||||
}))
|
||||
, updateCallback(std::move(updateCallback))
|
||||
, text(st::historyViewButtonTextStyle, PeerToPhrase(peer)) {
|
||||
}
|
||||
|
|
|
@ -1074,6 +1074,30 @@ void SessionController::closeThirdSection() {
|
|||
}
|
||||
}
|
||||
|
||||
void SessionController::showPeer(not_null<PeerData*> peer, MsgId msgId) {
|
||||
const auto currentPeer = activeChatCurrent().peer();
|
||||
if (peer && peer->isChannel() && currentPeer != peer) {
|
||||
const auto clickedChannel = peer->asChannel();
|
||||
if (!clickedChannel->isPublic()
|
||||
&& !clickedChannel->amIn()
|
||||
&& (!currentPeer->isChannel()
|
||||
|| currentPeer->asChannel()->linkedChat()
|
||||
!= clickedChannel)) {
|
||||
Ui::ShowMultilineToast({
|
||||
.text = {
|
||||
.text = peer->isMegagroup()
|
||||
? tr::lng_group_not_accessible(tr::now)
|
||||
: tr::lng_channel_not_accessible(tr::now)
|
||||
},
|
||||
});
|
||||
} else {
|
||||
showPeerHistory(peer->id, SectionShow(), msgId);
|
||||
}
|
||||
} else {
|
||||
showPeerInfo(peer, SectionShow());
|
||||
}
|
||||
}
|
||||
|
||||
void SessionController::startOrJoinGroupCall(
|
||||
not_null<PeerData*> peer,
|
||||
QString joinHash,
|
||||
|
|
|
@ -322,6 +322,8 @@ public:
|
|||
void resizeForThirdSection();
|
||||
void closeThirdSection();
|
||||
|
||||
void showPeer(not_null<PeerData*> peer, MsgId msgId = ShowAtUnreadMsgId);
|
||||
|
||||
enum class GroupCallJoinConfirm {
|
||||
None,
|
||||
IfNowInAnother,
|
||||
|
|
Loading…
Add table
Reference in a new issue