Skip to content

Commit

Permalink
Merge pull request #1308 from canalplus/feat/reload-keySystems
Browse files Browse the repository at this point in the history
Add the possibility to set a new `keySystems` option on the `reload` API
  • Loading branch information
peaBerberian committed Dec 22, 2023
2 parents 043d69f + 6ee2433 commit d2bb0a8
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 1 deletion.
11 changes: 11 additions & 0 deletions doc/api/Basic_Methods/reload.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,17 @@ The options argument is an object containing :
content was playing the last time it was played and stay in the `"LOADED"`
state (and paused) if it was paused last time it was played.

- _keySystems_ (`Array.<Object> | undefined`): If set, a new configuration will
be set on this reloaded content regarding its decryption.

The value of this property follows the exact same structure than for the
original `loadVideo` call, it is described in the [decryption options
documentation page](../Decryption_Options.md).

You might for example want to update that way the `keySystems` option compared
to the one of the original `loadVideo` call when you suspect that there is a
decryption-related issue with the original `keySystems` given.

Note that despite this method's name, the player will not go through the
`RELOADING` state while reloading the content but through the regular `LOADING`
state - as if `loadVideo` was called on that same content again.
Expand Down
8 changes: 8 additions & 0 deletions src/core/api/option_utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,8 @@ function parseConstructorOptions(
*/
function checkReloadOptions(options?: {
reloadAt?: { position?: number; relative?: number };
keySystems?: IKeySystemOption[];
autoPlay?: boolean;
}): void {
if (options === null ||
(typeof options !== "object" && options !== undefined)) {
Expand All @@ -414,6 +416,12 @@ function checkReloadOptions(options?: {
options?.reloadAt?.relative !== undefined) {
throw new Error("API: reload - Invalid 'reloadAt.relative' option format.");
}
if (!Array.isArray(options?.keySystems) && options?.keySystems !== undefined) {
throw new Error("API: reload - Invalid 'keySystems' option format.");
}
if (options?.autoPlay !== undefined && typeof options.autoPlay !== "boolean") {
throw new Error("API: reload - Invalid 'autoPlay' option format.");
}
}

/**
Expand Down
14 changes: 13 additions & 1 deletion src/core/api/public_api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ import {
IConstructorOptions,
IDecipherabilityUpdateContent,
IKeySystemConfigurationOutput,
IKeySystemOption,
ILoadVideoOptions,
IPeriod,
IPlayerError,
Expand Down Expand Up @@ -577,6 +578,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
*/
reload(reloadOpts?: {
reloadAt?: { position?: number; relative?: number };
keySystems?: IKeySystemOption[];
autoPlay?: boolean;
}): void {
const { options,
Expand Down Expand Up @@ -609,6 +611,13 @@ class Player extends EventEmitter<IPublicAPIEvent> {
autoPlay = !reloadInPause;
}

let keySystems : IKeySystemOption[] | undefined;
if (reloadOpts?.keySystems !== undefined) {
keySystems = reloadOpts.keySystems;
} else if (this._priv_reloadingMetadata.options?.keySystems !== undefined) {
keySystems = this._priv_reloadingMetadata.options.keySystems;
}

const newOptions = { ...options,
initialManifest: manifest };
if (startAt !== undefined) {
Expand All @@ -617,6 +626,9 @@ class Player extends EventEmitter<IPublicAPIEvent> {
if (autoPlay !== undefined) {
newOptions.autoPlay = autoPlay;
}
if (keySystems !== undefined) {
newOptions.keySystems = keySystems;
}
this._priv_initializeContentPlayback(newOptions);
}

Expand All @@ -626,7 +638,7 @@ class Player extends EventEmitter<IPublicAPIEvent> {
if (features.createDebugElement === null) {
throw new Error("Feature `DEBUG_ELEMENT` not added to the RxPlayer");
}
const canceller = new TaskCanceller() ;
const canceller = new TaskCanceller();
features.createDebugElement(element, this, canceller.signal);
return {
dispose() {
Expand Down

0 comments on commit d2bb0a8

Please sign in to comment.