aboutsummaryrefslogtreecommitdiffstats
path: root/tinami.js
diff options
context:
space:
mode:
authormitsugu oyama2010-10-23 05:59:17 +0900
committermitsugu oyama2010-10-23 05:59:17 +0900
commit64bddb9e7f1e0b93fd207dec33b8cc575145b4a1 (patch)
tree3643a30da3cfab001a3e490d1d1215a29ec66396 /tinami.js
parentcd56427b76277a48ed98db28c9db82d8dfafa658 (diff)
downloadvimperator-plugins-64bddb9e7f1e0b93fd207dec33b8cc575145b4a1.tar.bz2
Add tinami.js
TINAMIから画像をダウンロードします。詳細はUsageやソースを読んでくだされ。
Diffstat (limited to 'tinami.js')
-rw-r--r--tinami.js136
1 files changed, 136 insertions, 0 deletions
diff --git a/tinami.js b/tinami.js
new file mode 100644
index 0000000..2e4738a
--- /dev/null
+++ b/tinami.js
@@ -0,0 +1,136 @@
+// INFO //
+var INFO =
+<plugin name="tinami.js" version="0.1"
+ summary="tinami.js"
+ href="http://gist.github.com/635799"
+ xmlns="http://vimperator.org/namespaces/liberator">
+ <author email="mitsugu.oyama@gmail.com">Mitsugu Oyama</author>
+ <license href="http://opensource.org/licenses/mit-license.php">MIT</license>
+ <project name="Vimperator" minVersion="2.3"/>
+ <p>
+ You can save image from TINAMI by this plugin.
+ </p>
+ <item>
+ <tags>'TINAMI'</tags>
+ <spec>:tinami</spec>
+ <description>
+ <p>You can save image from <link topic="http://www.tinami.com/">TINAMI</link> by this plugin.</p>
+ <p>You must login tinami, and must display image page.(ex. http://www.tinami.com/view/??????)</p>
+ <p>Not supported manga page and novel page.</p>
+ </description>
+ </item>
+</plugin>;
+
+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 trueImgInfo=function(){
+ let con=xhrImgInfo.responseText;
+ let s=con.indexOf('src="')+5;
+ let e=con.indexOf('"',s);
+ imgUrl=con.substr(s,e-s);
+ if(-1!=imgUrl.search(/http:\/\/img.tinami.com\/illust\/img\//i)){
+ saveImag();
+ }else{
+ liberator.echoerr("You should login TINAMI :<");
+ }
+ };
+
+ let falseImgInfo=function(){
+ liberator.echo("Image Infomation page accept error.");
+ return false;
+ };
+
+ if(0<contents.getElementsByClassName('bigger').length){
+ xhrImgInfo=Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance();
+ xhrImgInfo.QueryInterface(Ci.nsIDOMEventTarget);
+ xhrImgInfo.addEventListener("load",trueImgInfo,false);
+ xhrImgInfo.addEventListener("error",falseImgInfo,false);
+ xhrImgInfo.QueryInterface(Ci.nsIXMLHttpRequest);
+ xhrImgInfo.open("GET",baseInfo+id,true);
+ xhrImgInfo.setRequestHeader('Referer',contents.URL);
+ xhrImgInfo.setRequestHeader('Cookie',cookie);
+ xhrImgInfo.send(null);
+ }else{
+ imgUrl=contents.getElementsByClassName('draggable_img').item(0)
+ .firstChild.getAttribute('src');
+ saveImag();
+ }
+ }
+); \ No newline at end of file