function getDevice(player, platform) {
var playerObj = players[player];
var platformObj = playerObj[platform];
return {
name: playerObj.title,
type: 'external',
id: player,
onlyHtml5Formats: playerObj.onlyHtml5Formats,
play: function (src) {
// if it's a torrent, use the filename instead of file index
var torrentUrl = src.match(/\/(?<ih>[0-9a-f]{40})\/(?<id>[0-9]+)$/)
if (torrentUrl) {
var fileIdx = torrentUrl.groups.id
var filename = enginefs.getFilename(torrentUrl.groups.ih, fileIdx)
if (filename)
src = src.replace(new RegExp(fileIdx + '$'), encodeURIComponent(filename))
}
var self = this;
// wait for all variables on to become eventually available on 'player' model
setTimeout(function(){
var port = enginefs.baseUrl.match(".*?:([0-9]+)")[1];
var host = enginefs.baseUrl.match("^http://(.*):[0-9]+$")[1];
var subsPath = self.subtitlesSrc;
var time = self.time;
var subsFile = '';
var playExternal = function(){
var playerPaths = platformObj.path.filter(function (path) {
return fs.existsSync(path.replace(/"/ig, ''))
});
if (playerPaths.length > 0) {
var wrappedSrc = '"' + src + '"';
var subsCmd = subsFile && players[player]['subArg'] && players[player]['subArg'].length > 0 ? players[player]['subArg'] + subsFile : '';
var argsCmd = players[player]['args'] && players[player]['args'].length > 0 ? players[player]['args'].join(" ") : '';
var timeCmd = players[player]['timeArg'] && players[player]['timeArg'].length > 0 ? players[player]['timeArg'] + parseInt(time / 1000) : '';
var playCmd = players[player]['playArg'] && players[player]['playArg'].length > 0 ? players[player]['playArg'] + wrappedSrc : wrappedSrc;
var fullCmd = playerPaths[0] + ' ' + timeCmd + ' ' + argsCmd + " " + subsCmd + ' ' + playCmd;
child.exec(fullCmd, function(error) {
console.error('Failed executing external player command:', error);
})
.on('exit', function() {
if(subsFile) try {
fs.unlinkSync(subsFile);
} catch(e) {
console.error('Cannot remove the subtitles file:', e);
}
});
}
};
if(subsPath) {
subsFile = path.join(os.tmpdir(), 'stremio-' + player + '-subtitles.srt');
http.request({
host: host,
path: '/subtitles.srt?from=' + encodeURIComponent(subsPath),
port: port
}, function (response) {
var data = '';
// receive all data and save it to data variable
response.on('data', function (d) {
data += d.toString()
});
// when stop receiving subtitles play video with subtitles in external player
response.on('end', function () {
try {
fs.writeFileSync(subsFile, data.toString());
} catch(e) {
console.error('Cannot get the subtitles:', e);
subsFile = '';
}
playExternal();
});
}).end();
}
else{
playExternal();
}
}, PLAYBACK_DELAY);
}
}
}