mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-18 23:27:09 +02:00
Provided video start position to OverlayWidget.
This commit is contained in:
parent
4dee21c0e6
commit
4f6776eeaa
4 changed files with 44 additions and 19 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Add table
Reference in a new issue