1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

fixes #898 - Google Cast Ready

This commit is contained in:
Luke Pulverenti 2015-12-25 23:08:25 -05:00
parent 9af2992260
commit 2a800129cb
4 changed files with 106 additions and 18 deletions

View file

@ -0,0 +1,51 @@
(function () {
function transferPlayback(oldPlayer) {
oldPlayer.getPlayerState().then(function (state) {
var item = state.NowPlayingItem;
if (!item) {
return;
}
var playState = state.PlayState || {};
oldPlayer.stop();
var itemId = item.Id;
var resumePositionTicks = playState.PositionTicks || 0;
MediaController.play({
ids: [itemId],
startPositionTicks: resumePositionTicks
});
});
}
Events.on(MediaController, 'playerchange', function (e, newPlayer, newTarget, oldPlayer) {
if (!oldPlayer) {
console.log('Skipping remote control autoplay because oldPlayer is null');
return;
}
if (!oldPlayer.isLocalPlayer) {
console.log('Skipping remote control autoplay because oldPlayer is not a local player');
return;
}
if (newPlayer.isLocalPlayer) {
console.log('Skipping remote control autoplay because newPlayer is a local player');
return;
}
// If playback is playing locally and a new player is activated, transfer the media to that player
if (oldPlayer.isPlaying()) {
transferPlayback(oldPlayer);
}
});
})();

View file

@ -1,6 +1,31 @@
(function (window, chrome, console) {
// Based on https://github.com/googlecast/CastVideos-chrome/blob/master/CastVideos.js
var currentResolve;
var currentReject;
var PlayerName = 'Chromecast';
function sendConnectionResult(isOk) {
var resolve = currentResolve;
var reject = currentReject;
currentResolve = null;
currentReject = null;
if (isOk) {
if (resolve) {
resolve();
}
} else {
if (reject) {
reject();
} else {
MediaController.removeActivePlayer(PlayerName);
}
}
}
/**
* Constants of states for Chromecast device
@ -26,8 +51,6 @@
'ERROR': 'ERROR'
};
var PlayerName = 'Chromecast';
var applicationID = "2D4B1DA3";
var messageNamespace = 'urn:x-cast:com.connectsdk';
@ -191,7 +214,7 @@
console.log('sessionUpdateListener: setting currentMediaSession to null');
this.currentMediaSession = null;
MediaController.removeActivePlayer(PlayerName);
sendConnectionResult(false);
}
};
@ -257,7 +280,7 @@
//});
MediaController.removeActivePlayer(PlayerName);
sendConnectionResult(false);
};
/**
@ -485,7 +508,11 @@
Events.on(castPlayer, "connect", function (e) {
if (currentResolve) {
sendConnectionResult(true);
} else {
MediaController.setActivePlayer(PlayerName, self.getCurrentTargetInfo());
}
console.log('cc: connect');
// Reset this so the next query doesn't make it appear like content is playing.
@ -832,7 +859,19 @@
self.tryPair = function (target) {
return new Promise(function (resolve, reject) {
resolve();
if (castPlayer.deviceState != DEVICE_STATE.ACTIVE && castPlayer.isInitialized) {
currentResolve = resolve;
currentReject = reject;
castPlayer.launchApp();
} else {
currentResolve = null;
currentReject = null;
reject();
}
});
};
}
@ -842,14 +881,6 @@
castPlayer = new CastPlayer();
MediaController.registerPlayer(new chromecastPlayer());
Events.on(MediaController, 'playerchange', function (e, newPlayer, newTarget) {
if (newPlayer.name == PlayerName) {
if (castPlayer.deviceState != DEVICE_STATE.ACTIVE && castPlayer.isInitialized) {
castPlayer.launchApp();
}
}
});
}
requirejs(["https://www.gstatic.com/cv/js/sender/v1/cast_sender.js"], initializeChromecast);

View file

@ -286,9 +286,9 @@
};
};
function triggerPlayerChange(newPlayer, newTarget) {
function triggerPlayerChange(newPlayer, newTarget, previousPlayer) {
Events.trigger(self, 'playerchange', [newPlayer, newTarget]);
Events.trigger(self, 'playerchange', [newPlayer, newTarget, previousPlayer]);
}
self.setActivePlayer = function (player, targetInfo) {
@ -303,13 +303,15 @@
throw new Error('null player');
}
var previousPlayer = currentPlayer;
currentPairingId = null;
currentPlayer = player;
currentTargetInfo = targetInfo;
console.log('Active player: ' + JSON.stringify(currentTargetInfo));
triggerPlayerChange(player, targetInfo);
triggerPlayerChange(player, targetInfo, previousPlayer);
};
var currentPairingId = null;
@ -333,12 +335,14 @@
player.tryPair(targetInfo).then(function () {
var previousPlayer = currentPlayer;
currentPlayer = player;
currentTargetInfo = targetInfo;
console.log('Active player: ' + JSON.stringify(currentTargetInfo));
triggerPlayerChange(player, targetInfo);
triggerPlayerChange(player, targetInfo, previousPlayer);
});
};

View file

@ -2267,6 +2267,8 @@ var AppInfo = {};
postInitDependencies.push('cordova/ios/tabbar');
}
postInitDependencies.push('components/remotecontrolautoplay');
require(postInitDependencies);
});
}