Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var iViewFox = {
- log:function(msg){
- var lg = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
- lg.logStringMessage(msg);
- },
- seriesIndex:null,
- hashReg:new RegExp(/http:\/\/www.abc.net.au\/iview\/#\/view\/[0-9]{6}/),
- uA:null,
- osString:Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS,
- prefs:Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.iViewFox."),
- extItem:null,
- hideIViewFoxStatusBeforeUnload:function(){
- document.getElementById('iViewFoxStatus').setAttribute('hidden','true');
- gBrowser.contentWindow.removeEventListener('beforeunload',iViewFox.hideIViewFoxStatusBeforeUnload,false);
- },
- status:function(){
- if(!iViewFox.prefs.getBoolPref("enabled")){
- document.getElementById('iViewFoxStatus').src="chrome://iViewFox/content/abc_logo2.png";
- }
- gBrowser.tabContainer.addEventListener("TabSelect", function(){
- if(gBrowser.selectedBrowser.contentWindow.location.toString().match("http://www.abc.net.au/iview/")){
- document.getElementById('iViewFoxStatus').setAttribute('hidden','false');
- }
- else{
- document.getElementById('iViewFoxStatus').setAttribute('hidden','true');
- }
- }, false);
- document.getElementById('iViewFoxStatus').addEventListener('click', function(e){
- window.openDialog('chrome://iViewFox/content/iViewFoxoptions.xul');
- },false);
- },
- init:function(event){
- if(Number(iViewFox.extItem.replace(/\./g,'')) > iViewFox.prefs.getIntPref('version') && iViewFox.osString=="Darwin"){
- iViewFox.prefs.setIntPref("version", Number(iViewFox.extItem.replace(/\./g,'')));
- gBrowser.selectedTab = gBrowser.addTab('chrome://iViewFox/content/ohHai.html');
- }
- if(event.originalTarget instanceof HTMLDocument && event.originalTarget.location && event.originalTarget.location.toString().match("http://www.abc.net.au/iview/")){
- iViewFox.iVtabDoc=event.originalTarget;
- if(!iViewFox.uA){
- iViewFox.uA=gBrowser.contentWindow.navigator.userAgent;
- }
- if(gBrowser.selectedBrowser.contentDocument.location.href==event.originalTarget.location.href){
- document.getElementById('iViewFoxStatus').setAttribute('hidden','false');
- }
- gBrowser.contentWindow.addEventListener('beforeunload',iViewFox.hideIViewFoxStatusBeforeUnload,false);
- var req = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Components.interfaces.nsIXMLHttpRequest);
- req.onload = function(data){
- var rT = req.responseText;
- iViewFox.seriesIndex=JSON.parse(rT);
- };
- req.onerror = function(err){
- iViewFox.log(err);
- };
- req.open("GET", 'http://tviview.abc.net.au/iview/api2/?seriesIndex', true);
- req.send(null);
- gBrowser.contentWindow.addEventListener('hashchange',function(e){
- var tL = this.location;
- if(tL.href.match(iViewFox.hashReg) && iViewFox.prefs.getBoolPref("enabled")){
- var locSplit=tL.href.split('#/view/');
- iViewFox.findEpDetails(locSplit[1]);
- //https://developer.mozilla.org/en/nsITimer
- //have to add a small delay here otherwise flash sometimes doesn't seem to notice the hashchange if it's too quick
- var event = {
- notify: function(timer) {
- tL.href=locSplit[0]+'#';
- }
- }
- var timer = Components.classes["@mozilla.org/timer;1"].createInstance(Components.interfaces.nsITimer);
- var secs=2000;
- if(locSplit[1].match(/587926|597007/)){
- secs=5000;
- }
- timer.initWithCallback(event,secs, Components.interfaces.nsITimer.TYPE_ONE_SHOT);
- }
- },false);
- }
- },
- findEpDetails:function(epNumber){
- iViewFox.seriesIndex.forEach(function(sitem, sindex, sarray){
- var seriesNum = sitem.a;
- sitem.f.forEach(function(item, index, array){
- if(item.a==epNumber){
- var req = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Components.interfaces.nsIXMLHttpRequest);
- req.onload = function(data){
- var rT = req.responseText;
- var jPar=JSON.parse(rT);
- if(jPar[0].f.length){
- jPar[0].f.forEach(function(jfitem, jfindex, jfarray){
- if(jfitem.a == epNumber){
- iViewFox.handshake(jfitem.n, seriesNum, jfitem.b);
- }
- });
- }
- };
- req.onerror = function(err){
- iViewFox.log(err);
- };
- req.open("GET", 'http://tviview.abc.net.au/iview/api2/?series='+seriesNum, true);
- req.send(null);
- }
- });
- });
- },
- unload:function(aEvent){
- if (aEvent.originalTarget instanceof HTMLDocument && aEvent.originalTarget.location.href.match("http://www.abc.net.au/iview/")) {
- iViewFox.iVtab=null;
- iViewFox.iVtabDoc=null;
- }
- },
- handshake:function(epDS, seriesNum, epName){
- var req = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Components.interfaces.nsIXMLHttpRequest);
- req.onload = function(data){
- var rT = req.responseText;
- var x= new DOMParser().parseFromString(rT, "text/xml");
- var xStore={};
- [].forEach.call(x.querySelectorAll('*'),function(item,index,array){xStore[item.nodeName]=item.textContent;}); //may as well store it all
- iViewFox.grabEpisode(epDS, xStore, seriesNum, epName);
- };
- req.onerror = function(err){
- iViewFox.log(err);
- };
- req.open("GET", 'http://tviview.abc.net.au/iview/auth/?v2', true);
- req.send(null);
- },
- parseCaptionsXML:function(f, x){
- var data="";
- [].forEach.call(x.querySelectorAll('title'), function (element, index, array) {
- data+=(index+1)+"\n"+(element.getAttribute('start')+"0 --> "+
- element.getAttribute('end')+"0\n").replace(/((?:\d{2}:){2}\d{2}):(\d{3})/g, "$1,$2")+
- element.textContent.replace(/\|/g,'\n')+"\n\n";
- });
- iViewFox.writeTextFile(f, data);
- },
- writeTextFile:function(fyle, data){
- var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
- foStream.init(fyle, 0x02 | 0x08 | 0x20, 0666, 0);
- var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].createInstance(Components.interfaces.nsIConverterOutputStream);
- converter.init(foStream, "UTF-8", 0, 0);
- converter.writeString(data);
- converter.close();
- },
- grabEpisode:function(epDS, xStore, seriesNum, epName){
- var dirService = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties);
- if(iViewFox.osString=="WINNT"){
- }
- var getrtDump = dirService.get("ProfD", Components.interfaces.nsIFile).path+pathAndExeText;
- var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
- var nsIFilePicker = Components.interfaces.nsIFilePicker;
- var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
- fp.init(window, "Save To...", nsIFilePicker.modeSave);
- /*var defString=epDS;
- if(defString.indexOf('/')>-1){
- defString=defString.slice(defString.lastIndexOf('/')+1);
- } */
- var fTypeSplit = epDS.split('.');
- var serCheq=(seriesNum=='2932730');
- fp.defaultString=epName+'.'+fTypeSplit[1];
- if(serCheq){
- fp.defaultString=epName+' '+new Date().toString()+'.'+fTypeSplit[1];
- }
- if(serCheq){ //if 24 hour news stream
- var params = {time:'30', quality:'news24-hi@28773'};
- if(epName.match('Medium Bandwidth')){
- params.quality='news24-med@28772';
- }
- window.openDialog("chrome://iViewFox/content/24streamchoice.xul", "", "chrome, dialog, modal, resizable=yes", params).focus();
- }
- var rv = fp.show();
- if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
- var filePathAndName = fp.file.path;
- //http://rtmpdump.mplayerhq.hu/rtmpdump.1.html
- var args = [];
- if(serCheq){ //if 24 hour news stream
- args = ["-r",
- "rtmp://cp81899.live.edgefcs.net/",
- "-y",
- params.quality,
- "-a",
- "live/"+params.quality+"?auth="+xStore.token,
- "-W",
- "http://www.abc.net.au/iview/images/iview.jpg",
- "-o",
- filePathAndName,
- "-v",
- "-B",
- (Number(params.time)*60).toString()];
- }
- else{
- args = ['-r',
- 'rtmp://cp53909.edgefcs.net////flash/playback/_definst_/'+epDS,
- '-a',
- 'ondemand?auth='+xStore.token,
- '-o',
- filePathAndName,
- '-W',
- 'http://www.abc.net.au/iview/images/iview.jpg'];
- if(xStore.host=='Hostworks'){
- var fileEx;
- if(fTypeSplit[1]=='mp4'){
- fileEx='mp4:';
- }
- else{
- fileEx='flv:';
- }
- args = ['-r',
- 'rtmp://203.18.195.10/',
- '-a',
- 'ondemand?auth='+xStore.token,
- '-y',
- fileEx+fTypeSplit[0],
- '-o',
- filePathAndName,
- '-W',
- 'http://www.abc.net.au/iview/images/iview.jpg'];
- }
- }
- iViewFox.log(args);
- if(iViewFox.prefs.getBoolPref("downloadSubtitles")){
- var subFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
- var fName = fp.file.path;
- if(fName.match('.')){
- fName=fName.slice(0,fName.lastIndexOf('.'));
- }
- subFile.initWithPath(fName+'.srt');
- var req = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Components.interfaces.nsIXMLHttpRequest);
- req.onreadystatechange = function (aEvt) {
- if (req.readyState == 4) {
- if(req.status == 200){
- var subbersXML=new DOMParser().parseFromString(req.responseText, "text/xml");
- iViewFox.parseCaptionsXML(subFile,subbersXML);
- }
- else{
- iViewFox.log("No Captions Available");
- }
- }
- };
- req.onerror = function(err){
- iViewFox.log(err);
- };
- req.open("GET", 'http://www.abc.net.au/iview/captions/'+fTypeSplit[0]+'.xml', true);
- req.send(null);
- }
- if(iViewFox.osString=="Darwin"){
- var dfile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
- dfile.initWithPath(getrtDump+'b.command');
- var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
- foStream.init(dfile, 0x02 | 0x08 | 0x20, 0666, 0);
- var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].createInstance(Components.interfaces.nsIConverterOutputStream);
- converter.init(foStream, "UTF-8", 0, 0);
- var data='#!/bin/bash\n"'+getrtDump+'rtmpdump-OSX-Intel" ';
- if(iViewFox.uA.match('PPC Mac')){
- data='#!/bin/bash\n"'+getrtDump+'rtmpdump-OSX-PPC" ';
- }
- args.forEach(function(item,index,array){
- if(index%2){
- data+=' "'+item+'" ';
- }
- else{
- data+=item;
- }
- });
- converter.writeString(data);
- converter.close();
- dfile.launch();
- }
- else{
- var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
- file.initWithPath(getrtDump);
- process.init(file);
- process.run(false, args, args.length);
- }
- }
- }
- };
- window.addEventListener("load", function() {
- if (typeof(Components.classes["@mozilla.org/extensions/manager;1"]) != 'undefined') { //borrowed from ^critter's extension - http://netusage.iau5.com/
- iViewFox.extItem= Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager).getItemForID("[email protected]").version;
- }
- else{
- Components.utils.import("resource://gre/modules/AddonManager.jsm");
- AddonManager.getAddonByID("[email protected]", function(aAddon) {iViewFox.extItem=aAddon.version;});
- }
- iViewFox.status();
- gBrowser.addEventListener("DOMContentLoaded", iViewFox.init, false);
- }, false);
- window.addEventListener("pagehide", iViewFox.unload, false);
Advertisement
Add Comment
Please, Sign In to add comment