All pastes #907155 Raw Edit

Unnamed

public text v1 · immutable
·published 2008-02-17 08:56 UTC
rendered paste body

/**javascript console***/
function LOG(msg) {

  var consoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
  consoleService.logStringMessage(msg);
  
}

// Get the "extensions.myext." branch
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
prefs = prefs.getBranch("extensions.youtubealternateplayer.");

function iCanHazTubes(fv, vidID, pD, page, vidTitle, toReplace){

	var getBod = page.getElementsByTagName('body')[0];
		
	var srcWithT = 'http://'+page.domain+'/get_video?video_id='+vidID+'&t='+fv.split("t=")[1].split("&")[0];

	function embedVID(respHead){
	
		//bit dodgy but meh
		getBod.setAttribute('finalLink', respHead);
	
		var whichPlaya = "FlowPlayer";

		var e = document.createElement('embed');
		e.width = "480";
		e.height = "395";
		e.setAttribute('type', 'application/x-shockwave-flash');
		e.allowscriptaccess = "always";
		e.quality="high";
		e.allowfullscreen="true"

		var fVars = [];
		
		function setVars(key, value){
		
			fVars.push(key+value);
		
		}
		
		if( prefs.getCharPref("flow.whichPlayer") == "JW"){
		
			e.id = "mediaplayer";
			e.setAttribute('name', "mediaplayer");
			e.setAttribute('src', "http://gmflowplayer.googlecode.com/files/mediaplayeralt.swf");

			//http://www.jeroenwijering.com/?item=Supported_Flashvars
			setVars('height=', '395');
			setVars('width=', '480');
			setVars('file=', respHead+'.flv'); 
			setVars('image=', 'http://img.youtube.com/vi/'+vidID+'/default.jpg');
			setVars('overstretch=', prefs.getBoolPref("JW.overstretch")); 
			setVars('showdigits=', prefs.getBoolPref("JW.showdigits"));  
			setVars('autostart=', prefs.getBoolPref("JW.autostart"));
			setVars('bufferlength=', prefs.getIntPref("JW.bufferlength")); 
			setVars('repeat=', prefs.getBoolPref("JW.repeat")); 
			setVars('volume=', prefs.getIntPref("JW.volume"));
			setVars('javascriptid=', 'mediaplayer');
			setVars('autobuffer=', prefs.getBoolPref("JW.autoBuffering"));
			
			
			var fVJoined = fVars.join('&');

			e.setAttribute('flashvars', fVJoined);

			pD.appendChild(e);
			
		}
		else if( prefs.getCharPref("flow.whichPlayer") == "flow"){
		
			var pl;
		
			/*if(prefs.getBoolPref("flow.autoPlay")){
			
				pl = "[{ url: '"+respHead+".flv'}]";
			
			}
			else{
			
				pl = "[ { url: 'http://img.youtube.com/vi/"+vidID+"/default.jpg', overlayId: 'play' }, { url: '"+respHead+".flv'}]";
			
			}*/
		
			e.id = "FlowPlayer";
			e.name = "FlowPlayer";
			e.setAttribute('src', "http://gmflowplayer.googlecode.com/files/FlowPlayerLatest.swf");	

			setVars('allowfullscreen:', prefs.getBoolPref("flow.allowfullscreen"));  
			setVars('showPlayListButtons:', prefs.getBoolPref("flow.showPlayListButtons"));
			setVars('initialScale:', "'"+prefs.getCharPref('flow.initialScale')+"'");
			setVars('showLoopButton:', prefs.getBoolPref("flow.showLoopButton"));
			setVars('allowResize:', prefs.getBoolPref("flow.allowResize"));
			setVars('useNativeFullScreen:', prefs.getBoolPref("flow.useNativeFullScreen"));
			setVars('autoBuffering:', prefs.getBoolPref("flow.autoBuffering"));
			setVars('autoPlay:', prefs.getBoolPref("flow.autoPlay"));
			setVars('loop:', prefs.getBoolPref("flow.loop"));
			setVars('usePlayOverlay:', prefs.getBoolPref("flow.usePlayOverlay"));
			setVars('splashImageFile:', '\'http://img.youtube.com/vi/'+vidID+'/default.jpg\'');
			setVars('videoFile:', "'"+respHead+"'");
			setVars('scaleSplash:', prefs.getBoolPref("flow.scaleSplash"));
			setVars('bufferLength:', prefs.getIntPref("flow.bufferLength"));
			setVars('showStopButton:', prefs.getBoolPref("flow.showStopButton"));
			

			var fVJoined = fVars.join(',');

			e.setAttribute('flashvars', 'config={'+fVJoined+'}');			
			LOG('here1');
			LOG(pD);
			LOG(e);
			LOG(toReplace);
			pD.appendChild(e);
			

		}
		else if( prefs.getCharPref("flow.whichPlayer") == "defaultEmbeded"){

			var l = fv.slice( fv.indexOf('&l=')+3, fv.indexOf( '&', fv.indexOf('&l=')+3 ) );

			var t = fv.slice( fv.indexOf('&t=')+3, fv.indexOf( '&', fv.indexOf('&t=')+3 ) );  

			pD.innerHTML = '<embed id="movie_player" flashvars="&rs=1&sn=1&hl=en&iurl=http%3A//img.youtube.com/vi/'+vidID+'/default.jpg"'+
			'type="application/x-shockwave-flash" wmode="transparent" src="/player2.swf?video_id='+vidID+'&t='+t+'&l='+l+'"'+
			'height="395px" width="480px"></embed>';				

		}		

		//I don't get it either, but it wont show up without a mini refresh.
		pD.innerHTML = pD.innerHTML;		
	
	}
	
	
	
	/***Thanks to Sergei Zhirikov for the code ***/
	// accepted HTTP status codes 
	var redirect = {300: null, 301: null, 302: null, 303: null, 307: null}; 

	var listener = { 

	    onStartRequest: function(request, context) {}, 
		
	    onStopRequest: function(request, context, status) { 
		
	        if (status == 0x804B001F) { // NS_ERROR_REDIRECT_LOOP 
			
	            var channel = request.QueryInterface(Components.interfaces.nsIHttpChannel); 
				
	            if (channel.responseStatus in redirect) { 
				
	                var respHead = null; 
					
	                try { 
	                    respHead = channel.getResponseHeader('Location'); 
	                } 
					catch (exc) { 
					
	                    // no 'Location' header sent with the redirect; 
						LOG('no Location header sent with the redirect '+exc);
						
	                } 
	                if (respHead != null) { 

						embedVID(encodeURIComponent(respHead));
						
	                } 
	            } 
	        } 
	    }, 
	    onDataAvailable: function(request, context, stream, offset, length) { 
		
	        // abort the request in case we didn't get redirected 
			request.cancel(Components.results.NS_ERROR_UNEXPECTED); 
			
	    }, 
	    QueryInterface: function(iid) { 
		
	        if (iid.equals(Components.interfaces.nsISupports) || iid.equals(Components.interfaces.nsIStreamListener) || iid.equals(Components.interfaces.nsIRequestObserver)) {
			
	            return this; 
				
			}
	        else {
			
	            throw Components.results.NS_NOINTERFACE; 
				
			}
	    }, 

	}; 

	var channel = null, context = null; 

	try { 
	
		channel = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService).newChannel(srcWithT, null, null).QueryInterface(Components.interfaces.nsIHttpChannel) 
		
	} 
	catch (exc) { 

		// something went wrong when creating a channel instance 
		LOG('something went wrong when creating a channel instance '+exc);
		
	} 
	if (channel) { 
	
		channel.redirectionLimit = 0; 
		channel.asyncOpen(listener, context); 
		
	} 

}  //end of: function icanhaztubes

function runFromS(player){

	var curBrow = getBrowser().selectedBrowser.contentDocument;
	var vidURL = decodeURIComponent(curBrow.evaluate( "//body" ,curBrow, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue.getAttribute('finalLink'));
	var vTitle = curBrow.evaluate( "//div[@id='vidTitle']" ,curBrow, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue.textContent;
	
	if(player == 'download'){
	
			if ( typeof JSLoader == "undefined" ){

				var JSLoader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(Components.interfaces.mozIJSSubScriptLoader);

				JSLoader.loadSubScript("chrome://youtubealternateplayer/content/io.js");	

			}	

			/*** Original Code by Wojciech Walewski. license - MPL 1.1/GPL 2.0/LGPL 2.1 (taken from the "youplayer" extension code) ... GPL FTW!! ***/
			
			// open filepicker dialog
			var nsIFilePicker = Components.interfaces.nsIFilePicker;
			var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
			fp.init(window, null, nsIFilePicker.modeSave);
			fp.appendFilter("Flash Video Files (*.flv)", "*.flv");

			vTitle = vTitle.replace(/[^a-zA-Z0-9\.\-]/g, "_") + ".flv";			
			
			fp.defaultString = vTitle;
			fp.defaultExtension = "flv";

			if(fp.show() == nsIFilePicker.returnCancel)
				return;

			var io_service = Components.classes["@mozilla.org/network/io-service;1"]
					.getService(Components.interfaces.nsIIOService);
			var source_uri = io_service.newURI(vidURL, null, null);

			var persist = Components.classes["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"]
					.createInstance(Components.interfaces.nsIWebBrowserPersist);

			persist.persistFlags = Components.classes["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"]
					.createInstance(Components.interfaces.nsIWebBrowserPersist).PERSIST_FLAGS_REPLACE_EXISTING_FILES;

			// save the movie to a file
			var transfer = Components.classes["@mozilla.org/transfer;1"]
					.createInstance(Components.interfaces.nsITransfer);
			transfer.init(source_uri, fp.fileURL, "", null, null, null, persist);
			persist.progressListener = transfer;
			persist.saveURI(source_uri, null, null, null, null, fp.file);
			
			/*** end Walewski code***/

	}
	else if(player == 'restore'){

		var getEmbeds;

		if(curBrow.URL.match('watch?')){

			getEmbeds = curBrow.evaluate( "//div[@id='playerDiv']//embed", curBrow, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );

		}
		else if(curBrow.URL.match('/user/') ){
		
			getEmbeds = curBrow.evaluate( "/html/body/div[@id='baseDiv']/div[3]/div[2]/div[1]/object//embed", curBrow, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );

		}
		
		for(var s = 0; s < getEmbeds.snapshotLength; s++){
			
			var sEm = getEmbeds.snapshotItem(s);
			
			(sEm.style.display == 'none')? sEm.style.display = 'block': sEm.style.display = 'none';

		}

	
	}


}