Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions Classes/Controller/MediaPlayerController.php
Original file line number Diff line number Diff line change
Expand Up @@ -103,14 +103,21 @@ protected function getMediaplayerInfo(AbstractDocument $doc, int $pageNo): ?arra
// Get additional audio/video-media URLs
$mediaUrl = $this->collectAdditionalMediaUrls($doc, $pageNo, $thumbnailUseGroups, $waveformUseGroups, $imageUseGroups);

return [
'start' => $mediaChapters[$pageNo - 1]['timecode'] ?? '',
$media = [
'mode' => $this->mediaPlayerService->determineInitialMode($mediaplayerSources, $mainVideoUseGroup),
'chapters' => $mediaChapters,
'metadata' => $doc->getToplevelMetadata(),
'sources' => $mediaplayerSources,
'url' => $mediaUrl,
];

// Determine the start timecode for the current page, if available
$startTimecode = $mediaChapters[$pageNo - 1]['timecode'] ?? null;
if ($startTimecode !== null && $startTimecode !== '') {
$media['start'] = $startTimecode;
}

return $media;
}


Expand Down
18 changes: 15 additions & 3 deletions Resources/Private/JavaScript/DlfMediaPlayer/DlfMediaPlayer.js
Original file line number Diff line number Diff line change
Expand Up @@ -215,11 +215,13 @@ export default class DlfMediaPlayer extends HTMLElement {
this.autoplay_ = autoplay !== null && autoplay !== "false";

this.timeRange = this.getTimeRange();
if (this.timeRange !== null) {

const sharedTimeRange = this.getSharedTimeRange();
if (sharedTimeRange !== null) {
this.markers_.add({
id: 'dlf.segment_shared',
startTime: this.timeRange.startTime,
endTime: this.timeRange.endTime ?? undefined,
startTime: sharedTimeRange.startTime,
endTime: sharedTimeRange.endTime ?? undefined,
labelText: this.env.t('share.shared_timecode'),
editable: false,
});
Expand Down Expand Up @@ -744,6 +746,16 @@ export default class DlfMediaPlayer extends HTMLElement {
this.setDefaultPanel();
}

/**
* Returns the explicitly shared time range.
*
* @protected
* @returns {dlf.media.TimeRange | null}
*/
getSharedTimeRange() {
return null;
}

/**
* Determines time range from user settings. Returns `null` if no such setting
* is made, which a child class may take as a hint to use another value.
Expand Down
20 changes: 14 additions & 6 deletions Resources/Private/JavaScript/SlubMediaPlayer/SlubMediaPlayer.js
Original file line number Diff line number Diff line change
Expand Up @@ -230,12 +230,7 @@ export default class SlubMediaPlayer extends DlfMediaPlayer {
/**
* @override
*/
getTimeRange() {
const baseValue = super.getTimeRange();
if (baseValue !== null) {
return baseValue;
}

getSharedTimeRange() {
// TODO: Also from hash?
const searchTimecode = this.env.getLocation().searchParams.get('timecode');
if (searchTimecode) {
Expand All @@ -246,6 +241,19 @@ export default class SlubMediaPlayer extends DlfMediaPlayer {
return null;
}

/**
* @override
*/
getTimeRange() {
// Timecode priority:
// 1. Explicit query timecode from a shared link
// 2. Implicit start point from media.start
// 3. No value - the player starts default at 0 (Note timecode=0 gets also be accepted as a valid value.)
const sharedTimeRange = this.getSharedTimeRange();

return sharedTimeRange ?? super.getTimeRange();
}

/**
* Extracts chapter to jump to when clicking on {@link link},
* or `null` if none could be determined.
Expand Down

Large diffs are not rendered by default.