From 5b627b357297761c975187ea291f38092b26cfe3 Mon Sep 17 00:00:00 2001
From: mitsugu oyama
Date: Sun, 25 Dec 2011 14:13:37 +0900
Subject: fix cannot save some manga page
---
pixiv.js | 238 ++++++++++++++++++++++++++++++++++-----------------------------
1 file changed, 130 insertions(+), 108 deletions(-)
(limited to 'pixiv.js')
diff --git a/pixiv.js b/pixiv.js
index 8edbdcd..35f0b43 100644
--- a/pixiv.js
+++ b/pixiv.js
@@ -1,4 +1,4 @@
-// INFO //
+// {{{ INFO
var INFO =
;
+// }}}
commands.addUserCommand(
['pixiv'],
'Save Image File from pixiv',
function(){
+// {{{ environment
let contents=gBrowser.selectedBrowser.contentDocument;
if(contents.domain!="www.pixiv.net"){
liberator.echoerr('This page is not pixiv.');
@@ -38,8 +40,40 @@ commands.addUserCommand(
const Cc=Components.classes;
const Ci=Components.interfaces;
-
let cookie=contents.cookie;
+// }}}
+
+// {{{ convert to DOM Document from text
+ 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{
+ let doctype=document.implementation.createDocumentType(
+ 'html',
+ '-//W3C//DTD HTML 4.01 Transitional//EN',
+ 'http://www.w3.org/TR/html4/loose.dtd'
+ );
+ doc=document.implementation.createDocument(null,'html',doctype);
+ range=doc.createRange();
+ range.selectNodeContents(doc.documentElement);
+ let content=doc.adoptNode(range.createContextualFragment(str));
+ doc.documentElement.appendChild(content);
+ }
+ }catch(e){
+ doc=null;
+ }
+ return doc;
+ };
+// }}}
+
+// {{{ get image id
let id;
let idTmp=contents.URL.match(/illust_id=(\d+)/i);
if(idTmp===null){
@@ -48,7 +82,9 @@ commands.addUserCommand(
}else{
id=idTmp[1];
}
+// }}}
+// {{{ make ChromeWorker
let createWorker=function(fileName){
let ret;
const resourceName="vimp-plugin";
@@ -68,12 +104,14 @@ commands.addUserCommand(
}
return worker;
};
- let worker=createWorker('libDLImage.js');
- if(worker==null){
+// }}}
+// {{{ save image ChromeWorker process
+ let workerImage=createWorker('libDLImage.js');
+ if(workerImage==null){
liberator.echoerr('plugin directory is not found');
return false;
}
- worker.addEventListener('message',function(event){
+ workerImage.addEventListener('message',function(event){
if(event.data.status=='error'){
liberator.echoerr(event.data.message);
return false;
@@ -92,10 +130,40 @@ commands.addUserCommand(
outstream.close();
}
},false);
- worker.addEventListener('error',function(event){
+ workerImage.addEventListener('error',function(event){
+ liberator.echoerr(event.data.status);
+ },false);
+// }}}
+// {{{ Recieve Manga Contents ChromeWorker
+ let workerManga=createWorker('libDLMangaSingleContent.js');
+ workerManga.addEventListener('message',function(event){
+ if(event.data.status=='error'){
+ liberator.echoerr(event.data.message);
+ return false;
+ };
+ let domContent=getDOMHtmlDocument(event.data.message);
+ if(domContent){
+ // DOM で画像 URL を取得して画像ファイルの取得リクエストを発行
+ let imgUrl=domContent.getElementsByTagName('img')
+ .item(0).getAttribute('src');
+ let destPath=getDestPath(imgUrl);
+ if(destPath==null){
+ return false;
+ };
+ saveImage(
+ imgUrl,
+ destPath.path,
+ event.data.refererUrl,
+ cookie
+ );
+ }
+ },false);
+ workerManga.addEventListener('error',function(event){
liberator.echoerr(event.data.status);
},false);
+// }}}
+// {{{ directory picker
let directoryPicker=function() {
let path;
let fp=Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
@@ -108,55 +176,10 @@ commands.addUserCommand(
};
let saveDirectory=directoryPicker();
if(saveDirectory==null) return false;
+// }}}
- 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{
- let doctype=document.implementation.createDocumentType(
- 'html',
- '-//W3C//DTD HTML 4.01 Transitional//EN',
- 'http://www.w3.org/TR/html4/loose.dtd'
- );
- doc=document.implementation.createDocument(null,'html',doctype);
- range=doc.createRange();
- range.selectNodeContents(doc.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