/**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 = ''; } //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'; } } }