/*
@author: con_mame
@url: http://d.hatena.ne.jp/con_mame/
@title: Nico DL
@description: Download Movie File from NicoNico Douga
@version: 0.2
*/
(function(){
const ICON = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAG5JREFUOE+tU+0OABAI5Jl6/2dDtjNaJR+34UdcXZdcGtILmAAgosLLghZP2mV50SNWCaIVdfm8IcPpuRCYwo0AejUq+ELgOSATXFeAh9cEs0PbJnr+byuQln7rgSnhdIgWCZjG6CzMdrt/IUJYAffFJ2uA33mhAAAAAElFTkSuQmCC";
function getFlv(videoAddr){
try{
var Cc = jetpack.tabs[0].raw.ownerDocument.defaultView.Cc;
var Ci = jetpack.tabs[0].raw.ownerDocument.defaultView.Ci;
var saveFile = Cc['@mozilla.org/filepicker;1'].createInstance(Ci.nsIFilePicker);
saveFile.init(jetpack.tabs.focused.contentWindow, "Save Nico Vide", Ci.nsIFilePicker.modeSave);
saveFile.defaultExtension = "flv";
saveFile.appendFilters(Ci.nsIFilePicker.filterAll);
var ret = saveFile.show();
if(ret == Ci.nsIFilePicker.returnCancel) return;
var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
var url = ios.newURI(videoAddr, null, null);
var iwp = Cc['@mozilla.org/embedding/browser/nsWebBrowserPersist;1'].createInstance(Ci.nsIWebBrowserPersist);
var trans = Cc["@mozilla.org/transfer;1"].createInstance(Ci.nsITransfer);
trans.init(url, saveFile.fileURL, videoAddr, null, null, null, iwp);
iwp.progressListener = trans;
iwp.saveURI(url, null, null, null, null, saveFile.file);
}catch(e){
console.log(e);
}
}
function showMessege(title, message){
jetpack.notifications.show({
title: title,
body: message,
icon: ICON
});
}
function doDownload(videoId){
$.ajax({
type: "GET",
url: "http://www.nicovideo.jp/api/getflv/" + videoId,
cache: false,
success: function(info){
if(/&url=(.+?)&/.test(decodeURIComponent(info))){
getFlv(RegExp.$1);
}else{
showMessege("Error", "Check Login");
}
},
error: function(xtr, status, thrown){
showMessege("Error", status);
}
});
}
jetpack.statusBar.append({
html: <>
<div id="dl"><img src={ICON}/>DL!</div>
</>,
onReady: function(doc){
$(doc).click(function(){
var watchPage = jetpack.tabs.focused.url;
if(/http:\/\/www.nicovideo.jp\/watch\/(.+)$/.test(watchPage)){
doDownload(RegExp.$1);
}else{
return;
}
});
$("#dl", doc).css({
position: "absolute",
paddingTop: "5px",
fontSize: "12pt",
fontWeight: "bold",
cursor: "pointer"
});
},
width: 50
});
})()