mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-13 04:37:11 +02:00
Parse and store video_timestamp.
This commit is contained in:
parent
23ae638512
commit
b618d1e56a
5 changed files with 71 additions and 72 deletions
|
@ -557,6 +557,10 @@ PhotoData *Media::videoCover() const {
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
TimeId Media::videoTimestamp() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool Media::hasQualitiesList() const {
|
||||
return false;
|
||||
}
|
||||
|
@ -973,19 +977,16 @@ std::unique_ptr<HistoryView::Media> MediaPhoto::createView(
|
|||
MediaFile::MediaFile(
|
||||
not_null<HistoryItem*> parent,
|
||||
not_null<DocumentData*> document,
|
||||
PhotoData *videoCover,
|
||||
bool skipPremiumEffect,
|
||||
bool hasQualitiesList,
|
||||
bool spoiler,
|
||||
crl::time ttlSeconds)
|
||||
Args &&args)
|
||||
: Media(parent)
|
||||
, _document(document)
|
||||
, _videoCover(videoCover)
|
||||
, _videoCover(args.videoCover)
|
||||
, _ttlSeconds(args.ttlSeconds)
|
||||
, _emoji(document->sticker() ? document->sticker()->alt : QString())
|
||||
, _skipPremiumEffect(skipPremiumEffect)
|
||||
, _hasQualitiesList(hasQualitiesList)
|
||||
, _spoiler(spoiler)
|
||||
, _ttlSeconds(ttlSeconds) {
|
||||
, _videoTimestamp(args.videoTimestamp)
|
||||
, _skipPremiumEffect(args.skipPremiumEffect)
|
||||
, _hasQualitiesList(args.hasQualitiesList)
|
||||
, _spoiler(args.spoiler) {
|
||||
parent->history()->owner().registerDocumentItem(_document, parent);
|
||||
|
||||
if (!_emoji.isEmpty()) {
|
||||
|
@ -1009,14 +1010,14 @@ MediaFile::~MediaFile() {
|
|||
}
|
||||
|
||||
std::unique_ptr<Media> MediaFile::clone(not_null<HistoryItem*> parent) {
|
||||
return std::make_unique<MediaFile>(
|
||||
parent,
|
||||
_document,
|
||||
_videoCover,
|
||||
!_document->session().premium(),
|
||||
_hasQualitiesList,
|
||||
_spoiler,
|
||||
_ttlSeconds);
|
||||
return std::make_unique<MediaFile>(parent, _document, MediaFile::Args{
|
||||
.ttlSeconds = _ttlSeconds,
|
||||
.videoCover = _videoCover,
|
||||
.videoTimestamp = _videoTimestamp,
|
||||
.hasQualitiesList = _hasQualitiesList,
|
||||
.skipPremiumEffect = !_document->session().premium(),
|
||||
.spoiler = _spoiler,
|
||||
});
|
||||
}
|
||||
|
||||
DocumentData *MediaFile::document() const {
|
||||
|
@ -1027,6 +1028,10 @@ PhotoData *MediaFile::videoCover() const {
|
|||
return _videoCover;
|
||||
}
|
||||
|
||||
TimeId MediaFile::videoTimestamp() const {
|
||||
return _videoTimestamp;
|
||||
}
|
||||
|
||||
bool MediaFile::hasQualitiesList() const {
|
||||
return _hasQualitiesList;
|
||||
}
|
||||
|
|
|
@ -180,6 +180,7 @@ public:
|
|||
|
||||
virtual DocumentData *document() const;
|
||||
virtual PhotoData *videoCover() const;
|
||||
virtual TimeId videoTimestamp() const;
|
||||
virtual bool hasQualitiesList() const;
|
||||
virtual PhotoData *photo() const;
|
||||
virtual WebPageData *webpage() const;
|
||||
|
@ -299,20 +300,26 @@ private:
|
|||
|
||||
class MediaFile final : public Media {
|
||||
public:
|
||||
struct Args {
|
||||
crl::time ttlSeconds = 0;
|
||||
PhotoData *videoCover = nullptr;
|
||||
TimeId videoTimestamp = 0;
|
||||
bool hasQualitiesList = false;
|
||||
bool skipPremiumEffect = false;
|
||||
bool spoiler = false;
|
||||
};
|
||||
|
||||
MediaFile(
|
||||
not_null<HistoryItem*> parent,
|
||||
not_null<DocumentData*> document,
|
||||
PhotoData *videoCover,
|
||||
bool skipPremiumEffect,
|
||||
bool hasQualitiesList,
|
||||
bool spoiler,
|
||||
crl::time ttlSeconds);
|
||||
Args &&args);
|
||||
~MediaFile();
|
||||
|
||||
std::unique_ptr<Media> clone(not_null<HistoryItem*> parent) override;
|
||||
|
||||
DocumentData *document() const override;
|
||||
PhotoData *videoCover() const override;
|
||||
TimeId videoTimestamp() const override;
|
||||
bool hasQualitiesList() const override;
|
||||
|
||||
bool uploading() const override;
|
||||
|
@ -343,14 +350,16 @@ public:
|
|||
private:
|
||||
not_null<DocumentData*> _document;
|
||||
PhotoData *_videoCover = nullptr;
|
||||
QString _emoji;
|
||||
bool _skipPremiumEffect = false;
|
||||
bool _hasQualitiesList = false;
|
||||
bool _spoiler = false;
|
||||
|
||||
// Video (unsupported) / Voice / Round.
|
||||
crl::time _ttlSeconds = 0;
|
||||
|
||||
QString _emoji;
|
||||
TimeId _videoTimestamp = 0;
|
||||
bool _skipPremiumEffect = false;
|
||||
bool _hasQualitiesList = false;
|
||||
bool _spoiler = false;
|
||||
|
||||
};
|
||||
|
||||
class MediaContact final : public Media {
|
||||
|
|
|
@ -304,16 +304,18 @@ std::unique_ptr<Data::Media> HistoryItem::CreateMedia(
|
|||
return document->match([&](const MTPDdocument &document) -> Result {
|
||||
const auto list = media.valt_documents();
|
||||
const auto owner = &item->history()->owner();
|
||||
return std::make_unique<Data::MediaFile>(
|
||||
item,
|
||||
owner->processDocument(document, list),
|
||||
(media.vvideo_cover()
|
||||
const auto data = owner->processDocument(document);
|
||||
using Args = Data::MediaFile::Args;
|
||||
return std::make_unique<Data::MediaFile>(item, data, Args{
|
||||
.ttlSeconds = media.vttl_seconds().value_or_empty(),
|
||||
.videoCover = (media.vvideo_cover()
|
||||
? owner->processPhoto(*media.vvideo_cover()).get()
|
||||
: nullptr),
|
||||
media.is_nopremium(),
|
||||
list && !list->v.isEmpty(),
|
||||
media.is_spoiler(),
|
||||
media.vttl_seconds().value_or_empty());
|
||||
.videoTimestamp = media.vvideo_timestamp().value_or_empty(),
|
||||
.hasQualitiesList = list && !list->v.isEmpty(),
|
||||
.skipPremiumEffect = media.is_nopremium(),
|
||||
.spoiler = media.is_spoiler(),
|
||||
});
|
||||
}, [](const MTPDdocumentEmpty &) -> Result {
|
||||
return nullptr;
|
||||
});
|
||||
|
@ -657,17 +659,12 @@ HistoryItem::HistoryItem(
|
|||
: HistoryItem(history, fields) {
|
||||
createComponentsHelper(std::move(fields));
|
||||
|
||||
const auto skipPremiumEffect = !history->session().premium();
|
||||
const auto video = document->video();
|
||||
const auto spoiler = false;
|
||||
_media = std::make_unique<Data::MediaFile>(
|
||||
this,
|
||||
document,
|
||||
/*videoCover=*/nullptr,
|
||||
skipPremiumEffect,
|
||||
video && !video->qualities.empty(),
|
||||
spoiler,
|
||||
/*ttlSeconds = */0);
|
||||
using Args = Data::MediaFile::Args;
|
||||
_media = std::make_unique<Data::MediaFile>(this, document, Args{
|
||||
.hasQualitiesList = video && !video->qualities.empty(),
|
||||
.skipPremiumEffect = !history->session().premium(),
|
||||
});
|
||||
setText(caption);
|
||||
}
|
||||
|
||||
|
@ -1853,18 +1850,12 @@ void HistoryItem::applyChanges(not_null<Data::Story*> story) {
|
|||
}
|
||||
|
||||
void HistoryItem::setStoryFields(not_null<Data::Story*> story) {
|
||||
const auto spoiler = false;
|
||||
if (const auto photo = story->photo()) {
|
||||
const auto spoiler = false;
|
||||
_media = std::make_unique<Data::MediaPhoto>(this, photo, spoiler);
|
||||
} else if (const auto document = story->document()) {
|
||||
_media = std::make_unique<Data::MediaFile>(
|
||||
this,
|
||||
document,
|
||||
/*videoCover=*/nullptr,
|
||||
/*skipPremiumEffect=*/false,
|
||||
/*hasQualitiesList=*/false,
|
||||
spoiler,
|
||||
/*ttlSeconds = */0);
|
||||
using Args = Data::MediaFile::Args;
|
||||
_media = std::make_unique<Data::MediaFile>(this, document, Args{});
|
||||
}
|
||||
setText(story->caption());
|
||||
if (story->pinnedToTop()) {
|
||||
|
|
|
@ -76,16 +76,11 @@ constexpr auto kSponsoredUserpicLines = 2;
|
|||
const auto spoiler = false;
|
||||
for (const auto &item : data.items) {
|
||||
if (const auto document = std::get_if<DocumentData*>(&item)) {
|
||||
const auto hasQualitiesList = false;
|
||||
const auto skipPremiumEffect = false;
|
||||
result.push_back(std::make_unique<Data::MediaFile>(
|
||||
parent,
|
||||
*document,
|
||||
/*videoCover=*/nullptr,
|
||||
skipPremiumEffect,
|
||||
hasQualitiesList,
|
||||
spoiler,
|
||||
/*ttlSeconds = */0));
|
||||
using MediaFile = Data::MediaFile;
|
||||
using Args = MediaFile::Args;
|
||||
const auto data = *document;
|
||||
result.push_back(
|
||||
std::make_unique<Data::MediaFile>(parent, data, Args{}));
|
||||
} else if (const auto photo = std::get_if<PhotoData*>(&item)) {
|
||||
result.push_back(std::make_unique<Data::MediaPhoto>(
|
||||
parent,
|
||||
|
|
|
@ -310,14 +310,13 @@ void AddViewMediaHandler(
|
|||
owner->photo(item.id),
|
||||
false)); // spoiler
|
||||
} else {
|
||||
fake.push_back(std::make_unique<Data::MediaFile>(
|
||||
state->item,
|
||||
owner->document(item.id),
|
||||
nullptr, // videoCover
|
||||
true, // skipPremiumEffect
|
||||
false, // hasQualitiesList
|
||||
false, // spoiler
|
||||
0)); // ttlSeconds
|
||||
const auto document = owner->document(item.id);
|
||||
const auto item = state->item;
|
||||
using MediaFile = Data::MediaFile;
|
||||
using Args = MediaFile::Args;
|
||||
fake.push_back(std::make_unique<MediaFile>(item, document, Args{
|
||||
.skipPremiumEffect = true,
|
||||
}));
|
||||
}
|
||||
}
|
||||
state->item->overrideMedia(std::make_unique<Data::MediaInvoice>(
|
||||
|
|
Loading…
Add table
Reference in a new issue