mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 14:17:12 +02:00
Show story sender / repost userpic under story source.
This commit is contained in:
parent
0fd8ceca6b
commit
38e082422a
7 changed files with 53 additions and 13 deletions
|
@ -164,6 +164,15 @@ using UpdateFlag = StoryUpdate::Flag;
|
|||
return false;
|
||||
}
|
||||
|
||||
[[nodiscard]] PeerData *FromPeer(
|
||||
not_null<Session*> owner,
|
||||
const MTPDstoryItem &data) {
|
||||
if (const auto from = data.vfrom_id()) {
|
||||
return owner->peer(peerFromMTP(*from));
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
class StoryPreload::LoadTask final : private Storage::DownloadMtprotoTask {
|
||||
|
@ -278,6 +287,7 @@ Story::Story(
|
|||
, _repostSourcePeer(RepostSourcePeer(&peer->owner(), data))
|
||||
, _repostSourceName(RepostSourceName(data))
|
||||
, _repostSourceId(RepostSourceId(data))
|
||||
, _fromPeer(FromPeer(&peer->owner(), data))
|
||||
, _date(data.vdate().v)
|
||||
, _expires(data.vexpire_date().v)
|
||||
, _repostModified(RepostModified(data)) {
|
||||
|
@ -890,6 +900,10 @@ StoryId Story::repostSourceId() const {
|
|||
return _repostSourceId;
|
||||
}
|
||||
|
||||
PeerData *Story::fromPeer() const {
|
||||
return _fromPeer;
|
||||
}
|
||||
|
||||
StoryPreload::StoryPreload(not_null<Story*> story, Fn<void()> done)
|
||||
: _story(story)
|
||||
, _done(std::move(done)) {
|
||||
|
|
|
@ -208,6 +208,8 @@ public:
|
|||
[[nodiscard]] QString repostSourceName() const;
|
||||
[[nodiscard]] StoryId repostSourceId() const;
|
||||
|
||||
[[nodiscard]] PeerData *fromPeer() const;
|
||||
|
||||
private:
|
||||
struct ViewsCounts {
|
||||
int views = 0;
|
||||
|
@ -234,6 +236,7 @@ private:
|
|||
PeerData * const _repostSourcePeer = nullptr;
|
||||
const QString _repostSourceName;
|
||||
const StoryId _repostSourceId = 0;
|
||||
PeerData * const _fromPeer = nullptr;
|
||||
Data::ReactionId _sentReactionId;
|
||||
StoryMedia _media;
|
||||
TextWithEntities _caption;
|
||||
|
|
|
@ -538,7 +538,7 @@ std::unique_ptr<Ui::Text::CustomEmoji> CustomEmojiManager::create(
|
|||
return internal(data);
|
||||
} else if (data.startsWith(UserpicEmojiPrefix())) {
|
||||
const auto ratio = style::DevicePixelRatio();
|
||||
const auto size = FrameSizeFromTag(tag, sizeOverride) / ratio;
|
||||
const auto size = EmojiSizeFromTag(tag) / ratio;
|
||||
return userpic(data, std::move(update), size);
|
||||
}
|
||||
const auto parsed = ParseCustomEmojiData(data);
|
||||
|
|
|
@ -883,6 +883,7 @@ void Controller::show(
|
|||
const auto document = story->document();
|
||||
_header->show({
|
||||
.peer = peer,
|
||||
.fromPeer = story->fromPeer(),
|
||||
.repostPeer = _repostView ? _repostView->fromPeer() : nullptr,
|
||||
.repostFrom = _repostView ? _repostView->fromName() : nullptr,
|
||||
.date = story->date(),
|
||||
|
|
|
@ -255,21 +255,37 @@ struct MadePrivacyBadge {
|
|||
result.text.append(
|
||||
QString::fromUtf8(" \xE2\x80\xA2 ") + tr::lng_edited(tr::now));
|
||||
}
|
||||
if (!data.repostFrom.isEmpty()) {
|
||||
if (data.fromPeer || !data.repostFrom.isEmpty()) {
|
||||
result.text = QString::fromUtf8("\xE2\x80\xA2 ")
|
||||
+ result.text;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
[[nodiscard]] TextWithEntities FromNameValue(not_null<PeerData*> from) {
|
||||
auto result = Ui::Text::SingleCustomEmoji(
|
||||
from->owner().customEmojiManager().peerUserpicEmojiData(
|
||||
from,
|
||||
st::storiesRepostUserpicPadding));
|
||||
result.append(from->name());
|
||||
return Ui::Text::Link(result);
|
||||
}
|
||||
|
||||
[[nodiscard]] TextWithEntities RepostNameValue(
|
||||
not_null<Data::Session*> owner,
|
||||
PeerData *peer,
|
||||
QString name) {
|
||||
const auto result = Ui::Text::SingleCustomEmoji(
|
||||
auto result = Ui::Text::SingleCustomEmoji(
|
||||
owner->customEmojiManager().registerInternalEmoji(
|
||||
st::storiesRepostIcon,
|
||||
st::storiesRepostIconPadding)
|
||||
).append(name);
|
||||
st::storiesRepostIconPadding));
|
||||
if (peer) {
|
||||
result.append(Ui::Text::SingleCustomEmoji(
|
||||
owner->customEmojiManager().peerUserpicEmojiData(
|
||||
peer,
|
||||
st::storiesRepostUserpicPadding)));
|
||||
}
|
||||
result.append(name);
|
||||
return Ui::Text::Link(result);
|
||||
}
|
||||
|
||||
|
@ -371,24 +387,28 @@ void Header::show(HeaderData data) {
|
|||
_date->widthValue(
|
||||
) | rpl::start_with_next(updateInfoGeometry, _date->lifetime());
|
||||
|
||||
if (data.repostFrom.isEmpty()) {
|
||||
if (!data.fromPeer && data.repostFrom.isEmpty()) {
|
||||
_repost = nullptr;
|
||||
} else {
|
||||
_repost = std::make_unique<Ui::FlatLabel>(
|
||||
_widget.get(),
|
||||
st::storiesHeaderDate);
|
||||
const auto repostName = RepostNameValue(
|
||||
&data.peer->owner(),
|
||||
data.repostFrom);
|
||||
const auto prefixName = data.fromPeer
|
||||
? FromNameValue(data.fromPeer)
|
||||
: RepostNameValue(
|
||||
&data.peer->owner(),
|
||||
data.repostPeer,
|
||||
data.repostFrom);
|
||||
const auto prefix = data.fromPeer ? data.fromPeer : data.repostPeer;
|
||||
_repost->setMarkedText(
|
||||
data.repostPeer ? Ui::Text::Link(repostName) : repostName,
|
||||
(prefix ? Ui::Text::Link(prefixName) : prefixName),
|
||||
Core::MarkedTextContext{
|
||||
.session = &data.peer->session(),
|
||||
.customEmojiRepaint = [=] { _repost->update(); },
|
||||
});
|
||||
if (const auto peer = data.repostPeer) {
|
||||
if (prefix) {
|
||||
_repost->setClickHandlerFilter([=](const auto &...) {
|
||||
_controller->uiShow()->show(PrepareShortInfoBox(peer));
|
||||
_controller->uiShow()->show(PrepareShortInfoBox(prefix));
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@ enum class PauseState;
|
|||
|
||||
struct HeaderData {
|
||||
not_null<PeerData*> peer;
|
||||
PeerData *fromPeer = nullptr;
|
||||
PeerData *repostPeer = nullptr;
|
||||
QString repostFrom;
|
||||
TimeId date = 0;
|
||||
|
|
|
@ -1046,4 +1046,5 @@ storiesRepostSimpleStyle: QuoteStyle(defaultQuoteStyle) {
|
|||
radius: 10px;
|
||||
}
|
||||
storiesRepostIcon: icon {{ "mediaview/mini_repost", windowFg }};
|
||||
storiesRepostIconPadding: margins(0px, 4px, 4px, 0px);
|
||||
storiesRepostIconPadding: margins(0px, 4px, 2px, 0px);
|
||||
storiesRepostUserpicPadding: margins(0px, 1px, 4px, 0px);
|
||||
|
|
Loading…
Add table
Reference in a new issue