Merge pull request #10552 from CoryG89/webui-magnet-handler

Register protocol handler in WebUI for magnet links
This commit is contained in:
Mike Tzou 2019-05-07 11:12:55 +08:00 committed by GitHub
commit 412b51fb3c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -696,6 +696,7 @@ window.addEvent('load', function() {
loadMethod: 'xhr', loadMethod: 'xhr',
contentURL: 'transferlist.html', contentURL: 'transferlist.html',
onContentLoaded: function() { onContentLoaded: function() {
handleDownloadParam();
updateMainData(); updateMainData();
}, },
column: 'mainColumn', column: 'mainColumn',
@ -800,8 +801,48 @@ window.addEvent('load', function() {
addMainWindowTabsEventListener(); addMainWindowTabsEventListener();
addSearchPanel(); addSearchPanel();
} }
registerMagnetHandler();
}); });
function registerMagnetHandler() {
if (typeof navigator.registerProtocolHandler !== 'function')
return;
const hashParams = getHashParamsFromUrl();
hashParams.download = '';
const templateHashString = Object.toQueryString(hashParams).replace('download=', 'download=%s');
const templateUrl = location.origin + location.pathname
+ location.search + '#' + templateHashString;
navigator.registerProtocolHandler('magnet', templateUrl,
'qBittorrent WebUI magnet handler');
}
function handleDownloadParam() {
// Extract torrent URL from download param in WebUI URL hash
const hashParams = getHashParamsFromUrl();
const url = hashParams.download;
if (!url)
return;
// Remove the download param from WebUI URL hash
delete hashParams.download;
let newHash = Object.toQueryString(hashParams);
newHash = newHash ? ('#' + newHash) : '';
history.replaceState('', document.title,
(location.pathname + location.search + newHash));
showDownloadPage([url]);
}
function getHashParamsFromUrl() {
const hashString = location.hash ? location.hash.replace(/^#/, '') : '';
return (hashString.length > 0) ? String.parseQueryString(hashString) : {};
}
function closeWindows() { function closeWindows() {
MochaUI.closeAll(); MochaUI.closeAll();
} }