Last active
October 12, 2020 12:20
-
-
Save janglapuk/38d4cab117bddd84177bf510c827fa0c to your computer and use it in GitHub Desktop.
[Tampermonkey] Disney+ Hotstar Default Streaming Quality Setter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Disney+ Hotstar Default Streaming Quality Setter | |
// @namespace http://github.com/janglapuk | |
// @version 0.5 | |
// @description Set Disney+ Hotstar default streaming quality and fullscreen options | |
// @author janglapuk | |
// @match https://www.hotstar.com/* | |
// @grant none | |
// @updateURL https://gist.githubusercontent.com/janglapuk/38d4cab117bddd84177bf510c827fa0c/raw/hotstar-default-quality-setter.user.js | |
// @downloadURL https://gist.githubusercontent.com/janglapuk/38d4cab117bddd84177bf510c827fa0c/raw/hotstar-default-quality-setter.user.js | |
// @require https://code.jquery.com/jquery-3.5.1.min.js | |
// @require https://gist.githubusercontent.com/BrockA/2625891/raw/waitForKeyElements.js | |
// @require https://cdn.jsdelivr.net/npm/sweetalert2@10 | |
// @require https://cdnjs.cloudflare.com/ajax/libs/screenfull.js/5.0.2/screenfull.min.js | |
// ==/UserScript== | |
(function() { | |
'use strict'; | |
var defaultFallbackQuality = "medium"; | |
var defaultFallbackFullscreen = false; | |
function getSavedQuality() { | |
var currentSaved; | |
try { | |
currentSaved = JSON.parse(localStorage.getItem("hotstar-saved-state")) || undefined; | |
} catch(e) { | |
console.warn("[Disney+ Hotstar Quality Setter] Session Saved State not parsed :: ", e); | |
} | |
if(currentSaved === undefined) { | |
return {'quality': defaultFallbackQuality, 'fullscreen': defaultFallbackFullscreen}; | |
} | |
return currentSaved; | |
} | |
function setDefaultFullscreen(defaultFullscreen) { | |
var currentSaved = getSavedQuality(); | |
currentSaved.fullscreen = defaultFullscreen; | |
localStorage.setItem("hotstar-saved-state", JSON.stringify(currentSaved)); | |
} | |
function getPlayerState() { | |
var currentState = undefined; | |
try { | |
currentState = JSON.parse(sessionStorage.getItem("vjs-player-state")) || undefined; | |
} catch(e) { | |
console.warn("[Disney+ Hotstar Quality Setter] Session Store Player state not parsed :: ", e); | |
} | |
return currentState; | |
} | |
function setDefaultQuality(defaultQuality) { | |
var currentState = getPlayerState(); | |
if(currentState === undefined) { | |
currentState = {"quality": defaultQuality}; | |
} else { | |
currentState.quality = defaultQuality; | |
} | |
var currentSaved = getSavedQuality(); | |
sessionStorage.setItem("vjs-player-state", JSON.stringify(currentState)); | |
currentSaved.quality = defaultQuality; | |
localStorage.setItem("hotstar-saved-state", JSON.stringify(currentSaved)); | |
console.info("[Disney+ Hotstar Quality Setter] Default state set to: " + JSON.stringify(currentState)); | |
} | |
jQuery(document).ready(function() { | |
var currentSaved = getSavedQuality(); | |
setDefaultQuality(currentSaved.quality); | |
waitForKeyElements('.bottom-right-panel', function() { | |
var $wrapper = jQuery('<div/>').addClass('skin-lock-wrapper'); | |
(function() { | |
var $control = jQuery('<div/>').addClass('default-quality-control player-control'); | |
var $img = jQuery('<img/>'); | |
$img.css('width', '26px'); | |
$img.css('height', '26px'); | |
$img.attr('src', 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgaGVpZ2h0PSI0OCIgaWQ9ImRlc2t0b3AiIHZpZXdCb3g9IjAgMCA0OCA0OCIgd2lkdGg9IjQ4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxzdHlsZT4KICAgICAgLnZpLXByaW1hcnkgewogICAgICAgIGZpbGw6ICNGRjZFNkU7CiAgICAgIH0KCiAgICAgIC52aS1hY2NlbnQgewogICAgICAgIGZpbGw6ICMwQzAwNTg7CiAgICAgIH0KICAgIDwvc3R5bGU+PC9kZWZzPjxwYXRoIGNsYXNzPSJ2aS1wcmltYXJ5IiBkPSJNNDMsMzZINVY5SDQzVjM2Wk0zMSw0M0gxN1Y0MUgzMXYyWiIvPjxwYXRoIGNsYXNzPSJ2aS1hY2NlbnQiIGQ9Ik04LDMzVjEySDQwVjMzSDhabTExLDNIMjl2M2wyLDJIMTdsMi0yVjM2WiIvPjwvc3ZnPg=='); | |
var inputOptions = { | |
"AUTO": "Auto", | |
"low": "Low quality", | |
"medium": "Medium quality", | |
"high": "High quality", | |
}; | |
$img.on('click', async function() { | |
var currentSaved = getSavedQuality(); | |
const { value: quality } = await Swal.fire({ | |
title: 'Select Default Streaming Quality', | |
input: 'radio', | |
showCancelButton: true, | |
width: 400, | |
icon: 'error', | |
iconHtml: '<img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgaGVpZ2h0PSI0OCIgaWQ9ImRlc2t0b3AiIHZpZXdCb3g9IjAgMCA0OCA0OCIgd2lkdGg9IjQ4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxzdHlsZT4KICAgICAgLnZpLXByaW1hcnkgewogICAgICAgIGZpbGw6ICNGRjZFNkU7CiAgICAgIH0KCiAgICAgIC52aS1hY2NlbnQgewogICAgICAgIGZpbGw6ICMwQzAwNTg7CiAgICAgIH0KICAgIDwvc3R5bGU+PC9kZWZzPjxwYXRoIGNsYXNzPSJ2aS1wcmltYXJ5IiBkPSJNNDMsMzZINVY5SDQzVjM2Wk0zMSw0M0gxN1Y0MUgzMXYyWiIvPjxwYXRoIGNsYXNzPSJ2aS1hY2NlbnQiIGQ9Ik04LDMzVjEySDQwVjMzSDhabTExLDNIMjl2M2wyLDJIMTdsMi0yVjM2WiIvPjwvc3ZnPg==" />', | |
inputValue: currentSaved.quality, | |
inputOptions: inputOptions, | |
inputValidator: (value) => { | |
if (!value) { | |
return 'You need to choose something!' | |
} | |
} | |
}); | |
if(quality !== undefined) { | |
setDefaultQuality(quality); | |
document.location.reload(); | |
} | |
}); | |
$wrapper.append( | |
$control.append( | |
$img | |
) | |
).insertBefore('.bottom-right-panel > .skin-lock-wrapper:last'); | |
})(); | |
(function() { | |
var $control = jQuery('<div/>').addClass('default-fullscreen-control player-control'); | |
var $img = jQuery('<img/>'); | |
$img.css('width', '22px'); | |
$img.css('height', '22px'); | |
$img.attr('src', 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNTEyIDUxMiIgaWQ9IkxheWVyXzEiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDUxMiA1MTIiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxnPjxnPjxsaW5lYXJHcmFkaWVudCBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9IlNWR0lEXzFfIiB4MT0iMC4wMDAwMDM4IiB4Mj0iNTEyIiB5MT0iMjU2IiB5Mj0iMjU2Ij48c3RvcCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNBMzY0QUIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiM4QzNEOTYiLz48L2xpbmVhckdyYWRpZW50PjxjaXJjbGUgY3g9IjI1NiIgY3k9IjI1NiIgZmlsbD0idXJsKCNTVkdJRF8xXykiIHI9IjI1NiIvPjxsaW5lYXJHcmFkaWVudCBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9IlNWR0lEXzJfIiB4MT0iNDIuNjY2NjY3OSIgeDI9IjQ2OS4zMzMzNDM1IiB5MT0iMjU2LjAwMDUxODgiIHkyPSIyNTYuMDAwNTE4OCI+PHN0b3Agb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojOEMzRDk2Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojQTM2NEFCIi8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBkPSJNMjU2LDQ2OS4zMzM4NjIzYy0xMTcuNjMxNDY5NywwLTIxMy4zMzMzMjgyLTk1LjcwMTg3MzgtMjEzLjMzMzMyODItMjEzLjMzMzM0MzUgICAgUzEzOC4zNjg1MzAzLDQyLjY2NzE5ODIsMjU2LDQyLjY2NzE5ODJjMTE3LjYzNjI2MSwwLDIxMy4zMzMzNDM1LDk1LjcwMTg2NjEsMjEzLjMzMzM0MzUsMjEzLjMzMzMxMyAgICBTMzczLjYzNjI2MSw0NjkuMzMzODYyMywyNTYsNDY5LjMzMzg2MjN6IiBmaWxsPSJ1cmwoI1NWR0lEXzJfKSIvPjwvZz48cG9seWdvbiBvcGFjaXR5PSIwLjMiIHBvaW50cz0iMzg0LDIwOCAzODQsMTQ0IDMyMCwxNDQgMzIwLDIwMC45MzAxMyAyMDAuOTMwMTMsMzIwIDE0NCwzMjAgMTQ0LDM4NCAyMDgsMzg0IDIwOCwzMjcuMDcwOTIyOSAgICAzMjcuMDcwOTIyOSwyMDggICIvPjxwb2x5Z29uIGZpbGw9IiNGRkZGRkYiIHBvaW50cz0iMzc2LDIwMCAzNzYsMTM2IDMxMiwxMzYgMzEyLDE5Mi45MzAxMyAxOTIuOTMwMTMsMzEyIDEzNiwzMTIgMTM2LDM3NiAyMDAsMzc2IDIwMCwzMTkuMDcwOTIyOSAgICAzMTkuMDcwOTIyOSwyMDAgICIvPjwvZz48L3N2Zz4='); | |
$img.on('click', async function() { | |
var currentSaved = getSavedQuality(); | |
const { value: alwaysFullscreen } = await Swal.fire({ | |
title: 'Fullscreen Option', | |
input: 'checkbox', | |
showCancelButton: true, | |
width: 400, | |
icon: 'error', | |
iconHtml: '<img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgaGVpZ2h0PSI0OCIgaWQ9ImRlc2t0b3AiIHZpZXdCb3g9IjAgMCA0OCA0OCIgd2lkdGg9IjQ4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxzdHlsZT4KICAgICAgLnZpLXByaW1hcnkgewogICAgICAgIGZpbGw6ICNGRjZFNkU7CiAgICAgIH0KCiAgICAgIC52aS1hY2NlbnQgewogICAgICAgIGZpbGw6ICMwQzAwNTg7CiAgICAgIH0KICAgIDwvc3R5bGU+PC9kZWZzPjxwYXRoIGNsYXNzPSJ2aS1wcmltYXJ5IiBkPSJNNDMsMzZINVY5SDQzVjM2Wk0zMSw0M0gxN1Y0MUgzMXYyWiIvPjxwYXRoIGNsYXNzPSJ2aS1hY2NlbnQiIGQ9Ik04LDMzVjEySDQwVjMzSDhabTExLDNIMjl2M2wyLDJIMTdsMi0yVjM2WiIvPjwvc3ZnPg==" />', | |
inputValue: currentSaved.fullscreen, | |
inputPlaceholder: 'Always fullscreen on watching', | |
}); | |
if(alwaysFullscreen !== undefined) { | |
setDefaultFullscreen(Boolean(alwaysFullscreen)); | |
document.location.reload(); | |
} | |
}); | |
$wrapper.append( | |
$control.append( | |
$img | |
) | |
).insertBefore('.bottom-right-panel > .skin-lock-wrapper:last'); | |
})(); | |
}); | |
waitForKeyElements('.skin-lock-wrapper > .fullscreen.player-control', function() { | |
var currentSaved = getSavedQuality(); | |
if(currentSaved.fullscreen) { | |
screenfull.toggle(jQuery('.player-base')[0]); | |
} | |
}); | |
waitForKeyElements('.player-base', function() { | |
jQuery('.player-base').dblclick(function() { | |
screenfull.toggle(jQuery('.player-base')[0]); | |
}); | |
}); | |
}); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment