Skip to content

Commit

Permalink
Merge pull request #41 from unclekingpin/add-filename-to-video-params…
Browse files Browse the repository at this point in the history
…-patch

Add filename to video params patch
  • Loading branch information
jaruba authored May 23, 2023
2 parents 1ef3f1d + 4000acf commit e1d3af6
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 94 deletions.
4 changes: 2 additions & 2 deletions src/withStreamingServer/convertStream.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ function convertStream(streamingServerURL, stream, seriesInfo) {
[];
createTorrent(streamingServerURL, parsedMagnetURI.infoHash, null, sources, seriesInfo)
.then(function(torrent) {
resolve({ url: torrent.url, infoHash: parsedMagnetURI.infoHash, fileIdx: torrent.fileIdx });
resolve({ url: torrent.url, infoHash: torrent.infoHash, fileIdx: torrent.fileIdx });
})
.catch(function(error) {
reject(error);
Expand All @@ -39,7 +39,7 @@ function convertStream(streamingServerURL, stream, seriesInfo) {
if (typeof stream.infoHash === 'string') {
createTorrent(streamingServerURL, stream.infoHash, stream.fileIdx, stream.announce, seriesInfo)
.then(function(torrent) {
resolve({ url: torrent.url, infoHash: stream.infoHash, fileIdx: torrent.fileIdx });
resolve({ url: torrent.url, infoHash: torrent.infoHash, fileIdx: torrent.fileIdx });
})
.catch(function(error) {
reject(error);
Expand Down
10 changes: 6 additions & 4 deletions src/withStreamingServer/createTorrent.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
var url = require('url');

function buildTorrentUrl(streamingServerURL, infoHash, fileIdx, sources) {
function buildTorrent(streamingServerURL, infoHash, fileIdx, sources) {
var query = Array.isArray(sources) && sources.length > 0 ?
'?' + new URLSearchParams(sources.map(function(source) {
return ['tr', source];
Expand All @@ -9,13 +9,15 @@ function buildTorrentUrl(streamingServerURL, infoHash, fileIdx, sources) {
'';
return {
url: url.resolve(streamingServerURL, '/' + encodeURIComponent(infoHash) + '/' + encodeURIComponent(fileIdx)) + query,
fileIdx: fileIdx
infoHash: infoHash,
fileIdx: fileIdx,
sources: sources
};
}

function createTorrent(streamingServerURL, infoHash, fileIdx, sources, seriesInfo) {
if ((!Array.isArray(sources) || sources.length === 0) && (fileIdx !== null && isFinite(fileIdx))) {
return Promise.resolve(buildTorrentUrl(streamingServerURL, infoHash, fileIdx, sources));
return Promise.resolve(buildTorrent(streamingServerURL, infoHash, fileIdx, sources));
}

var body = {
Expand Down Expand Up @@ -61,7 +63,7 @@ function createTorrent(streamingServerURL, infoHash, fileIdx, sources, seriesInf

throw new Error(resp.status + ' (' + resp.statusText + ')');
}).then(function(resp) {
return buildTorrentUrl(streamingServerURL, infoHash, body.guessFileIdx ? resp.guessedFileIdx : fileIdx, body.peerSearch ? body.peerSearch.sources : []);
return buildTorrent(streamingServerURL, infoHash, body.guessFileIdx ? resp.guessedFileIdx : fileIdx, body.peerSearch ? body.peerSearch.sources : []);
});
}

Expand Down
25 changes: 0 additions & 25 deletions src/withStreamingServer/fetchFilename.js

This file was deleted.

77 changes: 75 additions & 2 deletions src/withStreamingServer/fetchVideoParams.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
var url = require('url');

function fetchVideoParams(streamingServerURL, mediaURL) {
function fetchOpensubtitlesParams(streamingServerURL, mediaURL, behaviorHints) {
var hash = behaviorHints && typeof behaviorHints.videoHash === 'string' ? behaviorHints.videoHash : null;
var size = behaviorHints && isFinite(behaviorHints.videoSize) ? behaviorHints.videoSize : null;
if (typeof hash === 'string' && size !== null && isFinite(size)) {
return Promise.resolve({ hash: hash, size: size });
}

var queryParams = new URLSearchParams([['videoUrl', mediaURL]]);
return fetch(url.resolve(streamingServerURL, '/opensubHash?' + queryParams.toString()))
.then(function(resp) {
Expand All @@ -15,8 +21,75 @@ function fetchVideoParams(streamingServerURL, mediaURL) {
throw new Error(resp.error);
}

return resp.result;
return {
hash: typeof hash === 'string' ?
hash
:
resp.result && typeof resp.result.hash === 'string' ?
resp.result.hash
:
null,
size: size !== null && isFinite(size) ?
size
:
resp.result && typeof resp.result.size ?
resp.result.size
:
null
}
});
}

function fetchFilename(streamingServerURL, mediaURL, infoHash, fileIdx, behaviorHints) {
if (behaviorHints && typeof behaviorHints.filename === 'string') {
return Promise.resolve(behaviorHints.filename);
}

if (infoHash) {
return fetch(url.resolve(streamingServerURL, '/' + encodeURIComponent(infoHash) + '/' + encodeURIComponent(fileIdx) + '/stats.json'))
.then(function(resp) {
if (resp.ok) {
return resp.json();
}

throw new Error(resp.status + ' (' + resp.statusText + ')');
})
.then(function(resp) {
if (!resp || typeof resp.streamName !== 'string') {
throw new Error('Could not retrieve filename from torrent');
}

return resp.streamName;
});
}

return Promise.resolve(decodeURIComponent(mediaURL.split('/').pop()));
}

function fetchVideoParams(streamingServerURL, mediaURL, infoHash, fileIdx, behaviorHints) {
return Promise.allSettled([
fetchOpensubtitlesParams(streamingServerURL, mediaURL, behaviorHints),
fetchFilename(streamingServerURL, mediaURL, infoHash, fileIdx, behaviorHints)
]).then(function(results) {
var result = { hash: null, size: null, filename: null };

if (results[0].status === 'fulfilled') {
result.hash = results[0].value.hash;
result.size = results[0].value.size;
} else if (results[0].reason) {
// eslint-disable-next-line no-console
console.error(results[0].reason);
}

if (results[1].status === 'fulfilled') {
result.filename = results[1].value;
} else if (results[1].reason) {
// eslint-disable-next-line no-console
console.error(results[1].reason);
}

return result;
});
}

module.exports = fetchVideoParams;
64 changes: 20 additions & 44 deletions src/withStreamingServer/withStreamingServer.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ var deepFreeze = require('deep-freeze');
var mediaCapabilities = require('../mediaCapabilities');
var convertStream = require('./convertStream');
var fetchVideoParams = require('./fetchVideoParams');
var fetchFilename = require('./fetchFilename');
var ERROR = require('../error');

function withStreamingServer(Video) {
Expand Down Expand Up @@ -104,10 +103,10 @@ function withStreamingServer(Video) {
loadArgs = commandArgs;
onPropChanged('stream');
convertStream(commandArgs.streamingServerURL, commandArgs.stream, commandArgs.seriesInfo)
.then(function(converted) {
var mediaURL = converted.url;
var infoHash = converted.infoHash;
var fileIdx = converted.fileIdx;
.then(function(result) {
var mediaURL = result.url;
var infoHash = result.infoHash;
var fileIdx = result.fileIdx;
var formats = Array.isArray(commandArgs.formats) ?
commandArgs.formats
:
Expand Down Expand Up @@ -203,48 +202,25 @@ function withStreamingServer(Video) {
});
loaded = true;
flushActionsQueue();
fetchVideoParams(commandArgs.streamingServerURL, result.mediaURL, result.infoHash, result.fileIdx, commandArgs.stream.behaviorHints)
.then(function(result) {
if (commandArgs !== loadArgs) {
return;
}

Promise.allSettled([
fetchVideoParams(commandArgs.streamingServerURL, result.mediaURL),
fetchFilename(commandArgs.streamingServerURL, result.mediaURL, result.infoHash, result.fileIdx)
]).then(function(results) {
if (commandArgs !== loadArgs) {
return;
}

var result = { hash: null, size: null, filename: null };

if (results[0].status === 'fulfilled' && results[0].value) {
result = results[0].value;
} else if (results[0].reason) {
// eslint-disable-next-line no-console
console.error(results[0].reason);
}
videoParams = result;
onPropChanged('videoParams');
})
.catch(function(error) {
if (commandArgs !== loadArgs) {
return;
}

if (results[1].status === 'fulfilled' && results[1].value) {
result.filename = results[1].value;
} else if (results[1].reason) {
// eslint-disable-next-line no-console
console.error(results[1].reason);
}

var behaviorHints = commandArgs.stream.behaviorHints || {};

if (behaviorHints.videoHash) {
result.hash = behaviorHints.videoHash;
}

if (behaviorHints.videoSize) {
result.size = behaviorHints.videoSize;
}

if (behaviorHints.filename) {
result.filename = behaviorHints.filename;
}

videoParams = result;
onPropChanged('videoParams');
});
console.error(error);
videoParams = { hash: null, size: null, filename: null };
onPropChanged('videoParams');
});
})
.catch(function(error) {
if (commandArgs !== loadArgs) {
Expand Down
21 changes: 4 additions & 17 deletions src/withVideoParams/withVideoParams.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,23 +50,10 @@ function withVideoParams(Video) {
return null;
}

var result = { hash: null, size: null, filename: null };

var behaviorHints = stream.behaviorHints || {};

if (behaviorHints.videoHash) {
result.hash = behaviorHints.videoHash;
}

if (behaviorHints.videoSize) {
result.size = behaviorHints.videoSize;
}

if (behaviorHints.filename) {
result.filename = behaviorHints.filename;
}

return result;
var hash = stream.behaviorHints && typeof stream.behaviorHints.videoHash === 'string' ? stream.behaviorHints.videoHash : null;
var size = stream.behaviorHints && stream.behaviorHints.videoSize !== null && isFinite(stream.behaviorHints.videoSize) ? stream.behaviorHints.videoSize : null;
var filename = stream.behaviorHints && typeof stream.behaviorHints.filename === 'string' ? stream.behaviorHints.filename : null;
return { hash: hash, size: size, filename: filename };
}
default: {
return videoPropValue;
Expand Down

0 comments on commit e1d3af6

Please sign in to comment.