| @@ -249,31 +249,105 @@ plugins.options["twitter_client.use_jmp"] = true; | |||
| // my exts and functions | |||
| var autoSaveTabList = (function(){ | |||
| const PREF_KEY_DEST = ""; | |||
| function init(){ | |||
| // set destination directory | |||
| const PREF_PREFIX = "extensions.keysnail.plugins.autosavetablist."; | |||
| const PREF_DSTDIR = "dstdir"; | |||
| const PREF_ENABLED = "enabled"; | |||
| // use plugin option to set | |||
| var save_interval = 60 * 10; | |||
| // "/" for unix system | |||
| const DIR_DELIM = userscript.directoryDelimitter; | |||
| function selectDirectory(title){ | |||
| // open dialog and return nsILocalFile object | |||
| // https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILocalFile | |||
| // this function blocks. | |||
| var nsIFilePicker = Components.interfaces.nsIFilePicker; | |||
| var fp = Components.classes["@mozilla.org/filepicker;1"]. | |||
| createInstance(nsIFilePicker); | |||
| fp.init(window, | |||
| "Select Directory to Save Tab List", | |||
| nsIFilePicker.modeGetFolder); | |||
| fp.init(window, title, nsIFilePicker.modeGetFolder); | |||
| // block | |||
| var response = fp.show(); | |||
| if (response !== nsIFilePicker.returnOK) { | |||
| var res = fp.show(); | |||
| if (res !== nsIFilePicker.returnOK) { | |||
| return null; | |||
| } | |||
| return fp.file; | |||
| } | |||
| function setup(){ | |||
| // set destination directory | |||
| var dstdir = selectDirectory("Select Directory to Save Tab List"); | |||
| if (! dstdir) { return; } | |||
| if (! dstdir.isWritable()) { | |||
| display.notify("Directory is not writable"); | |||
| return; | |||
| } | |||
| util.setUnicharPref(PREF_PREFIX + PREF_DSTDIR, dstdir.path); | |||
| } | |||
| function genFileName(){ | |||
| function formatCurrent(){ | |||
| var d = new Date(); | |||
| function pad(n){ | |||
| return n < 10 ? '0' + n.toString() : n.toString() | |||
| } | |||
| return [ | |||
| d.getFullYear().toString(), | |||
| pad(d.getMonth() + 1), | |||
| pad(d.getDate()), | |||
| "-", | |||
| pad(d.getHours()), | |||
| pad(d.getMinutes()), | |||
| pad(d.getSeconds()) | |||
| ].join(""); | |||
| } | |||
| return "tablist." + formatCurrent() + ".lst"; | |||
| } | |||
| function getTabList(){ | |||
| // returns list of urls of current tabs. | |||
| return [(function(){ | |||
| var browser = tab.linkedBrowser; | |||
| var win = browser.contentWindow; | |||
| // var title = tab.label; | |||
| var url = win.location.href; | |||
| return url; | |||
| })() for each (tab in Array.slice(gBrowser.mTabContainer.childNodes))]; | |||
| // Array.slice is required? | |||
| } | |||
| function saveCurrentList(){ | |||
| var dstdir = util.getUnicharPref(PREF_PREFIX + PREF_DSTDIR); | |||
| if (! dstdir) { | |||
| display.showPopup("AutoSaveTabList", | |||
| "Dest dir is not set yet. Run setup first"); | |||
| return; | |||
| } | |||
| alert(fp.file.path); | |||
| var filename = genFileName(); | |||
| util.writeTextFile( | |||
| getTabList().join("\n") + "\n", | |||
| dstdir + userscript.directoryDelimiter + filename | |||
| ); | |||
| display.showPopup("AutoSaveTabList", | |||
| "Tab List saved: " + filename); | |||
| } | |||
| return { | |||
| init: init | |||
| selectDirectory: selectDirectory, | |||
| setup: setup, | |||
| getTabList: getTabList, | |||
| saveCurrentList: saveCurrentList | |||
| }; | |||
| })(); | |||
| ext.add("astl-setup", autoSaveTabList.setup, "Auto save tab list - Setup"); | |||
| ext.add("astl-save-current", autoSaveTabList.saveCurrentList, | |||
| "Auto save tab list - Save current list"); | |||
| var echoTabInfo = (function(){ | |||
| var currenttab; | |||
| function _display(msg){ | |||