VLCTube

By FurYy Last update Oct 23, 2009 — Installed 6,566 times. Daily Installs: 26, 22, 16, 23, 54, 33, 35, 16, 21, 33, 20, 24, 24, 30, 31, 15, 27, 16, 17, 13, 37, 14, 13, 19, 25, 10, 8, 10, 8, 9, 15, 43

There are 20 previous versions of this script.

// ==UserScript==
// @name           VLCTube
// @namespace      0d92f6be108e4fbee9a6a0ee4366b72e
// @include        http://*youtube.com/watch*
// @version        13
// ==/UserScript==
//Note to self, check 9 times , upload once -_-
var js_server = "http://furyy.planet.ee/VLCcontrols.async/";
//var vlc_version = "0.8.6";
//VLC has some issues with dynamic resizing (it doesn't do it)
var width = 640;
var height = 360; //640 * 9 / 16;
var vlc_id = 'mymovie';
var fmt = "&fmt=18"; //But breaks random videos sometimes

/* Player */
var player = document.getElementById('watch-player-div');

function getArg(args, idx, def){
     return idx in args ? args[idx] : (def ? def : '');
}

if(player) {
	
	var z = null;
	
	try{
        var yt = unsafeWindow['yt'];
        var swf_args = yt.getConfig('SWF_ARGS',null);
        z = [0, swf_args['video_id'], swf_args['t']];
        if(!yt.getConfig('IS_WIDESCREEN',false)) height = width * 3/4;
        if(yt.getConfig('IS_HD_AVAILABLE',false)) fmt = "&fmt=22";
	}catch(e){ 
        GM_log(e); 
        var scripts = document.getElementsByTagName('script');
        for(var i = 0; i < scripts.length && z == null; ++i) {
            z = scripts[i].text.match(/video_id": "([^"]+).+, "t": "([^"]+)/); //"
        }
    }
    
	if(z == null) {
		insertYTmessage ('VlcTube: Unable to find video source');
		return;
	}

	var f = window.location.href.match(/fmt=(\d+)/);
	if( f ){ fmt = '&fmt=' + f[1] }
	
	var src = 'http://' + document.domain + '/get_video?video_id=' + z[1]+ '&t=' + z[2] + fmt;
	
	var vlc = document.createElement('div');
	vlc.id = "vlccontent";
	
	addScriptSrc(js_server + "ExternalLibLoader.js");//"SimpleSlider.js";
	addScriptSrc(js_server + "VLCobject.js");
	addScriptSrc(js_server + "VLCcontrols.js");
	
	var s0 = document.createElement('script');
	var s1 = 
	    'var myvlc = new VLCObject("'+vlc_id+'", "'+width+'", "'+height+ /*'", "'+vlc_version+*/ '"); \
		 myvlc.write("vlccontent"); \
		 var vlc_controls = new VLCcontrols(myvlc); \
         vlc_controls.onready = function(){ \
            vlc_controls.options.set("show-intf"); \
         	vlc_controls.play("'+ src +'"); \
         };';
		
    s0.appendChild(document.createTextNode(s1));

	player.innerHTML="";//"<div id='vlctube_message'>VLCTUBE</div>";
	
	player.appendChild(vlc);
	player.appendChild(s0);
	
	var settings_loaded = false;
	player.addEventListener('load', function(ev){
			if(settings_loaded)return;
			settings_loaded = restoreSettings(ev);
		}, true);
		
	window.addEventListener('unload', saveSettings,true);
}

function restoreSettings(ev){
	
	if(unsafeWindow['vlc_controls'] && unsafeWindow['vlc_controls'].loaded){
		//insertYTmessage("Scripts loaded: " +ev.target.id);
		//insertYTmessage(unsafeWindow['vlc_controls'].target.audio.volume = GM_getValue('vlc_vol', 100));
        unsafeWindow['vlc_controls'].target.audio.volume = GM_getValue('vlc_vol', 100);
		setHTML(vlc_id + '_vollabel', GM_getValue('vlc_vol', 100));
        unsafeWindow['vlc_controls'].options.set("http-caching",GM_getValue('vlc_http-caching', 5000));
        setValue('VLC_controller_options_http-caching', GM_getValue('vlc_http-caching', 5000) / 1000);
		return true;
	}
	return false;
}

function saveSettings(ev){
	GM_setValue('vlc_vol', unsafeWindow['vlc_controls'].target.audio.volume);
    GM_setValue('vlc_http-caching', unsafeWindow['vlc_controls'].options.get("http-caching"));
}

function setValue(id, val){
	var el = document.getElementById(id);
	if(el){
		el.setAttribute('value',val);
	}
}

function setHTML(id, val){
	var el = document.getElementById(id);
	if(el){
		el.innerHTML = val;
	}
}

function insertYTmessage(message){

    var baseDiv,container,msg;
    msg = document.getElementById('iytmsg');

    if(!msg){
        baseDiv = document.getElementById('baseDiv');
        container = document.createElement('div');
        msg = document.createElement('pre');
        msg.id = "iytmsg";
        container.setAttribute("style","background: #FFA0A0; color: #800000; border: 1px solid; border-color: #F00;");
        msg.setAttribute("style","text-align:center; margin-top:1em; margin-bottom:1em;");
        container.appendChild(msg);
        baseDiv.insertBefore(container,/*baseDiv.childNodes[2]*/ 
            document.getElementById('watch-vid-title'));

    }else{
        message = "\r\n" + message;
	}
        
	msg.appendChild(document.createTextNode(message));
}

function replaceYTmessage(message){
    document.getElementById('iytmsg').innerHTML=message;
}

function addScriptSrc(src) {
    var head, script;
    head = document.getElementsByTagName('head')[0];
    if (!head) { return; }
    script = document.createElement('script');
    script.type = 'text/javascript';
    script.setAttribute('src', src);
    head.appendChild(script);
}