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