mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-18 23:27:09 +02:00
Support General topic somehow.
This commit is contained in:
parent
8cd5105813
commit
57af221d39
12 changed files with 29 additions and 27 deletions
|
@ -689,7 +689,7 @@ QString ApiWrap::exportDirectMessageLink(
|
|||
auto linkItemId = item->id;
|
||||
auto linkCommentId = MsgId();
|
||||
auto linkThreadId = MsgId();
|
||||
//auto linkThreadIsTopic = false;
|
||||
auto linkThreadIsTopic = false;
|
||||
if (inRepliesContext) {
|
||||
if (const auto rootId = item->replyToTop()) {
|
||||
const auto root = item->history()->owner().message(
|
||||
|
@ -711,7 +711,7 @@ QString ApiWrap::exportDirectMessageLink(
|
|||
} else {
|
||||
// Reply in a thread, maybe comment in a private channel.
|
||||
linkThreadId = rootId;
|
||||
//linkThreadIsTopic = (item->topicRootId() == rootId);
|
||||
linkThreadIsTopic = (item->topicRootId() == rootId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -723,7 +723,7 @@ QString ApiWrap::exportDirectMessageLink(
|
|||
+ '/'
|
||||
+ (linkCommentId
|
||||
? (post + "?comment=" + QString::number(linkCommentId.bare))
|
||||
: (linkThreadId/* && !linkThreadIsTopic*/)
|
||||
: (linkThreadId && !linkThreadIsTopic)
|
||||
? (post + "?thread=" + QString::number(linkThreadId.bare))
|
||||
: linkThreadId
|
||||
? (QString::number(linkThreadId.bare) + '/' + post)
|
||||
|
|
|
@ -51,6 +51,8 @@ class Forum;
|
|||
|
||||
class ForumTopic final : public Thread {
|
||||
public:
|
||||
static constexpr auto kGeneralId = 1;
|
||||
|
||||
ForumTopic(not_null<Forum*> forum, MsgId rootId);
|
||||
~ForumTopic();
|
||||
|
||||
|
@ -58,6 +60,10 @@ public:
|
|||
return history();
|
||||
}
|
||||
|
||||
[[nodiscard]] bool isGeneral() const {
|
||||
return (_rootId == kGeneralId);
|
||||
}
|
||||
|
||||
[[nodiscard]] std::shared_ptr<RepliesList> replies() const;
|
||||
[[nodiscard]] not_null<ChannelData*> channel() const;
|
||||
[[nodiscard]] not_null<History*> history() const;
|
||||
|
|
|
@ -304,7 +304,7 @@ void RepliesList::injectRootMessage(not_null<Viewer*> viewer) {
|
|||
return;
|
||||
}
|
||||
const auto root = lookupRoot();
|
||||
if (!root || root->topicRootId()) {
|
||||
if (!root || root->topicRootId() != Data::ForumTopic::kGeneralId) {
|
||||
return;
|
||||
}
|
||||
injectRootDivider(root, slice);
|
||||
|
|
|
@ -2088,14 +2088,8 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
|
|||
const auto itemId = item->fullId();
|
||||
const auto canReply = [&] {
|
||||
const auto peer = item->history()->peer;
|
||||
if (const auto forum = peer->forum()) {
|
||||
const auto topicRootId = item->topicRootId();
|
||||
const auto topic = item->topic();
|
||||
return topic
|
||||
? topic->canWrite()
|
||||
: peer->canWrite(!topicRootId);
|
||||
}
|
||||
return peer->canWrite();
|
||||
const auto topic = item->topic();
|
||||
return topic ? topic->canWrite() : peer->canWrite();
|
||||
}();
|
||||
if (canReply) {
|
||||
_menu->addAction(tr::lng_context_reply_msg(tr::now), [=] {
|
||||
|
|
|
@ -231,7 +231,8 @@ MsgId LookupReplyToTop(HistoryItem *replyTo) {
|
|||
}
|
||||
|
||||
bool LookupReplyIsTopicPost(HistoryItem *replyTo) {
|
||||
return replyTo && (replyTo->topicRootId() != 0);
|
||||
return replyTo
|
||||
&& (replyTo->topicRootId() != Data::ForumTopic::kGeneralId);
|
||||
}
|
||||
|
||||
MTPMessageReplyHeader NewMessageReplyHeader(const Api::SendAction &action) {
|
||||
|
@ -1502,7 +1503,7 @@ MsgId HistoryMessage::topicRootId() const {
|
|||
; reply && reply->topicPost) {
|
||||
return reply->replyToTop();
|
||||
}
|
||||
return 0;
|
||||
return Data::ForumTopic::kGeneralId;
|
||||
}
|
||||
|
||||
void HistoryMessage::setText(const TextWithEntities &textWithEntities) {
|
||||
|
|
|
@ -1344,7 +1344,7 @@ MsgId HistoryService::topicRootId() const {
|
|||
} else if (Has<HistoryServiceTopicInfo>()) {
|
||||
return id;
|
||||
}
|
||||
return 0;
|
||||
return Data::ForumTopic::kGeneralId;
|
||||
}
|
||||
|
||||
void HistoryService::setReplyFields(
|
||||
|
|
|
@ -6721,7 +6721,7 @@ void HistoryWidget::processReply() {
|
|||
return processCancel();
|
||||
} else if (const auto forum = _peer->forum()) {
|
||||
const auto topicRootId = _processingReplyItem->topicRootId();
|
||||
if (!topicRootId || forum->topicDeleted(topicRootId)) {
|
||||
if (forum->topicDeleted(topicRootId)) {
|
||||
return processCancel();
|
||||
} else if (const auto topic = forum->topicFor(topicRootId)) {
|
||||
if (!topic->canWrite()) {
|
||||
|
|
|
@ -686,7 +686,7 @@ auto Element::contextDependentServiceText() -> TextWithLinks {
|
|||
}
|
||||
const auto peerId = item->history()->peer->id;
|
||||
const auto topicRootId = item->topicRootId();
|
||||
if (!topicRootId || !peerIsChannel(peerId)) {
|
||||
if (!peerIsChannel(peerId)) {
|
||||
return {};
|
||||
}
|
||||
const auto from = item->from();
|
||||
|
|
|
@ -2711,13 +2711,8 @@ bool Message::displayFastReply() const {
|
|||
const auto canWrite = [&] {
|
||||
const auto item = data();
|
||||
const auto peer = item->history()->peer;
|
||||
if (peer->isForum()) {
|
||||
const auto topic = item->topic();
|
||||
return topic
|
||||
? topic->canWrite()
|
||||
: peer->canWrite(!item->topicRootId());
|
||||
}
|
||||
return peer->canWrite();
|
||||
const auto topic = item->topic();
|
||||
return topic ? topic->canWrite() : peer->canWrite();
|
||||
};
|
||||
|
||||
return hasFastReply()
|
||||
|
|
|
@ -1467,7 +1467,11 @@ void RepliesWidget::refreshTopBarActiveChat() {
|
|||
|
||||
MsgId RepliesWidget::replyToId() const {
|
||||
const auto custom = _composeControls->replyingToMessage().msg;
|
||||
return custom ? custom : _rootId;
|
||||
return custom
|
||||
? custom
|
||||
: (_rootId == Data::ForumTopic::kGeneralId)
|
||||
? MsgId()
|
||||
: _rootId;
|
||||
}
|
||||
|
||||
void RepliesWidget::refreshUnreadCountBadge(std::optional<int> count) {
|
||||
|
|
|
@ -4166,9 +4166,9 @@ void OverlayWidget::setContext(
|
|||
not_null<PeerData*>> context) {
|
||||
if (const auto item = std::get_if<ItemContext>(&context)) {
|
||||
_message = item->item;
|
||||
_topicRootId = item->topicRootId;
|
||||
_history = _message->history();
|
||||
_peer = _history->peer;
|
||||
_topicRootId = _peer->isForum() ? item->topicRootId : MsgId();
|
||||
} else if (const auto peer = std::get_if<not_null<PeerData*>>(&context)) {
|
||||
_peer = *peer;
|
||||
_history = _peer->owner().history(_peer);
|
||||
|
|
|
@ -257,10 +257,12 @@ void Uploader::sendProgressUpdate(
|
|||
const auto history = item->history();
|
||||
auto &manager = _api->session().sendProgressManager();
|
||||
manager.update(history, type, progress);
|
||||
if (const auto replyTo = item->topicRootId()) {
|
||||
if (const auto replyTo = item->replyToTop()) {
|
||||
if (history->peer->isMegagroup()) {
|
||||
manager.update(history, replyTo, type, progress);
|
||||
}
|
||||
} else if (history->peer->isForum()) {
|
||||
manager.update(history, item->topicRootId(), type, progress);
|
||||
}
|
||||
_api->session().data().requestItemRepaint(item);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue