Provided video start position to OverlayWidget.

This commit is contained in:
23rd 2022-02-16 10:46:31 +03:00 committed by John Preston
parent 4dee21c0e6
commit 4f6776eeaa
4 changed files with 44 additions and 19 deletions

View File

@ -33,6 +33,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_cloud_themes.h"
#include "data/data_channel.h"
#include "media/player/media_player_instance.h"
#include "media/view/media_view_open_common.h"
#include "window/window_session_controller.h"
#include "window/window_controller.h"
#include "window/themes/window_theme_editor_box.h" // GenerateSlug.
@ -443,12 +444,18 @@ bool OpenMediaTimestamp(
MsgId(parts.value(2).toLongLong()));
const auto session = &controller->session();
const auto document = session->data().document(documentId);
session->settings().setMediaLastPlaybackPosition(
documentId,
time * crl::time(1000));
const auto timeMs = time * crl::time(1000);
if (document->isVideoFile()) {
controller->openDocument(document, itemId, true);
controller->window().openInMediaView(Media::View::OpenRequest(
controller,
document,
session->data().message(itemId),
false,
timeMs));
} else if (document->isSong() || document->isVoiceMessage()) {
session->settings().setMediaLastPlaybackPosition(
documentId,
timeMs);
Media::Player::instance()->play({ document, itemId });
}
return true;

View File

@ -46,11 +46,13 @@ public:
Window::SessionController *controller,
not_null<DocumentData*> document,
HistoryItem *item,
bool continueStreaming = false)
bool continueStreaming = false,
crl::time startTime = 0)
: _controller(controller)
, _document(document)
, _item(item)
, _continueStreaming(continueStreaming) {
, _continueStreaming(continueStreaming)
, _startTime(startTime) {
}
OpenRequest(
Window::SessionController *controller,
@ -89,6 +91,10 @@ public:
return _continueStreaming;
}
crl::time startTime() const {
return _startTime;
}
private:
Window::SessionController *_controller = nullptr;
DocumentData *_document = nullptr;
@ -97,6 +103,7 @@ private:
HistoryItem *_item = nullptr;
std::optional<Data::CloudTheme> _cloudTheme = std::nullopt;
bool _continueStreaming = false;
crl::time _startTime = 0;
};

View File

@ -2375,7 +2375,7 @@ void OverlayWidget::show(OpenRequest request) {
request.cloudTheme()
? *request.cloudTheme()
: Data::CloudTheme(),
request.continueStreaming());
{ request.continueStreaming(), request.startTime() });
if (!isHidden()) {
preloadData(0);
activateControls();
@ -2453,7 +2453,7 @@ void OverlayWidget::redisplayContent() {
void OverlayWidget::displayDocument(
DocumentData *doc,
const Data::CloudTheme &cloud,
bool continueStreaming) {
const StartStreaming &startStreaming) {
_fullScreenVideo = false;
_staticContent = QImage();
clearStreaming(_document != doc);
@ -2481,7 +2481,7 @@ void OverlayWidget::displayDocument(
}
} else {
if (_documentMedia->canBePlayed(_message)
&& initStreaming(continueStreaming)) {
&& initStreaming(startStreaming)) {
} else if (_document->isVideoFile()) {
_documentMedia->automaticLoad(fileOrigin(), _message);
initStreamingThumbnail();
@ -2632,7 +2632,7 @@ bool OverlayWidget::canInitStreaming() const {
|| (_photo && _photo->videoCanBePlayed());
}
bool OverlayWidget::initStreaming(bool continueStreaming) {
bool OverlayWidget::initStreaming(const StartStreaming &startStreaming) {
Expects(canInitStreaming());
if (_streamed) {
@ -2657,20 +2657,21 @@ bool OverlayWidget::initStreaming(bool continueStreaming) {
handleStreamingError(std::move(error));
}, _streamed->instance.lifetime());
if (continueStreaming) {
if (startStreaming.continueStreaming) {
_pip = nullptr;
}
if (!continueStreaming
if (!startStreaming.continueStreaming
|| (!_streamed->instance.player().active()
&& !_streamed->instance.player().finished())) {
startStreamingPlayer();
startStreamingPlayer(startStreaming);
} else {
updatePlaybackState();
}
return true;
}
void OverlayWidget::startStreamingPlayer() {
void OverlayWidget::startStreamingPlayer(
const StartStreaming &startStreaming) {
Expects(_streamed != nullptr);
const auto &player = _streamed->instance.player();
@ -2686,8 +2687,7 @@ void OverlayWidget::startStreamingPlayer() {
}
const auto position = _document
? _document->session().settings().mediaLastPlaybackPosition(
_document->id)
? startStreaming.startTime
: _photo
? _photo->videoStartPosition()
: 0;

View File

@ -140,6 +140,16 @@ private:
QRectF rect;
qreal rotation = 0.;
};
struct StartStreaming {
StartStreaming() : continueStreaming(false), startTime(0) {
}
StartStreaming(bool continueStreaming, crl::time startTime)
: continueStreaming(continueStreaming)
, startTime(startTime) {
}
const bool continueStreaming = false;
const crl::time startTime = 0;
};
[[nodiscard]] not_null<QWindow*> window() const;
[[nodiscard]] int width() const;
@ -287,7 +297,7 @@ private:
void displayDocument(
DocumentData *document,
const Data::CloudTheme &cloud = Data::CloudTheme(),
bool continueStreaming = false);
const StartStreaming &startStreaming = StartStreaming());
void displayFinished();
void redisplayContent();
void findCurrent();
@ -303,8 +313,9 @@ private:
void refreshClipControllerGeometry();
void refreshCaptionGeometry();
bool initStreaming(bool continueStreaming = false);
void startStreamingPlayer();
bool initStreaming(
const StartStreaming &startStreaming = StartStreaming());
void startStreamingPlayer(const StartStreaming &startStreaming);
void initStreamingThumbnail();
void streamingReady(Streaming::Information &&info);
[[nodiscard]] bool createStreamingObjects();