// INFO // var INFO = Mitsugu Oyama MIT

You can save image from TINAMI by this plugin.

'TINAMI' :tinami

You can save image from TINAMI by this plugin.

You must login tinami, and must display image page.(ex. http://www.tinami.com/view/??????)

Not supported manga page and novel page.

; commands.addUserCommand( ['tinami'], 'Save Image File from tinami', function(){ let Cc=Components.classes; let Ci=Components.interfaces; let contents=gBrowser.selectedBrowser.contentDocument; if(contents.domain!="www.tinami.com"){ liberator.echoerr('This page is not tinami.'); return false; } if(contents.URL.search(/view/i)==-1){ liberator.echoerr("This page is not tinami's image page."); return false; } let directoryPicker=function() { let path; let fp=Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker); fp.init(window,'Select Directory',Ci.nsIFilePicker.modeGetFolder); let result=fp.show(); switch(result){ case Ci.nsIFilePicker.returnOK: path=fp.file.path; break; default: case Ci.nsIFilePicker.returnCancel: return ''; } return path; }; const baseInfo="http://www.tinami.com/view/original/"; let id=contents.URL.substr(contents.URL.lastIndexOf('/')+1); let cookie=contents.cookie; let xhrImgInfo; let xhrImg; let savePath=directoryPicker(); if(savePath.length<1) return; let imgUrl; let trueTinamiImg=function(){ let fileName=imgUrl.substr(imgUrl.lastIndexOf('/')); savePath=savePath+fileName; let instream=xhrImg.responseText; let aFile=Cc["@mozilla.org/file/local;1"] .createInstance(Ci.nsILocalFile); aFile.initWithPath(savePath); let outstream=Cc["@mozilla.org/network/safe-file-output-stream;1"] .createInstance(Ci.nsIFileOutputStream); outstream.init(aFile,0x02|0x08|0x20,0664,0); outstream.write(instream,instream.length); if (outstream instanceof Ci.nsISafeOutputStream) { outstream.finish(); }else{ outstream.close(); } }; let falseTinamiImg=function(){ liberator.echoerr("Image file accept error."); return false; }; let saveImag=function(){ xhrImg=Cc["@mozilla.org/xmlextras/xmlhttprequest;1"] .createInstance(); xhrImg.QueryInterface(Ci.nsIDOMEventTarget); xhrImg.addEventListener("load",trueTinamiImg,false); xhrImg.addEventListener("error",falseTinamiImg,false); xhrImg.QueryInterface(Ci.nsIXMLHttpRequest); xhrImg.open("GET",imgUrl,true); xhrImg.overrideMimeType('text/plain;charset=x-user-defined'); xhrImg.setRequestHeader('Referer',contents.URL); xhrImg.setRequestHeader('Cookie',cookie); xhrImg.send(null); }; let getDOMHtmlDocument=function(str){ let doc; let range; try{ if(document.implementation.createHTMLDocument){ doc=document.implementation.createHTMLDocument(''); range=doc.createRange(); range.selectNodeContents(doc.documentElement); range.deleteContents(); doc.documentElement.appendChild(range.createContextualFragment(str)); }else{ doc=document.implementation.createDocument(null,'html',null); range=document.createRange(); range.selectNodeContents(document.documentElement); let content=doc.adoptNode(range.createContextualFragment(str)); doc.documentElement.appendChild(content); } }catch(e){ doc=null; } return doc; }; let getImageUrl=function(pageContents){ let url; let htmldoc=getDOMHtmlDocument(pageContents); if(htmldoc){ if(0