diff --git a/exec/filearea-lb.js b/exec/filearea-lb.js index af8bf4d179f4d3c5edc8b51fd891d253b139d593..fc1a780f22e3811f1e89aa05668ed88056842603 100644 --- a/exec/filearea-lb.js +++ b/exec/filearea-lb.js @@ -143,17 +143,20 @@ var Batch = function(parentFrame) { if(typeof colors[c] != "undefined") self.tree.colors[c] = colors[c]; } - for(var b in state.batch) { - var item = self.tree.addItem( - format( - "%-25s %7s %s", - formatFileName(state.batch[b].name), - file_size_str(state.batch[b].size), - state.batch[b].desc ? state.batch[b].desc : "" - ) - ); - item.fileItem = state.batch[b]; - } + var fileItems = batchGet(); + if (fileItems) { + fileItems.forEach( function(fileItem) { + var item = self.tree.addItem( + format( + "%-25s %7s %s", + formatFileName(fileItem.name), + file_size_str(fileItem.size), + fileItem.desc ? fileItem.desc : "" + ) + ); + item.fileItem = fileItem; + }); + } } buildTree(); @@ -161,18 +164,11 @@ var Batch = function(parentFrame) { this.tree.open(); var sendBatch = function() { - var fn = system.temp_dir + format("%04d.dwn", user.number); - var f = new File(fn); - f.open("w"); - for(var b in state.batch) { - f.writeln(state.batch[b].name); - } - f.close(); console.clear(BG_BLACK|LIGHTGRAY); - bbs.batch_add_list(fn); - bbs.batch_download(); + var result = bbs.batch_download(); console.clear(BG_BLACK|LIGHTGRAY); frame.invalidate(); + return result; } this.cycle = function() { @@ -182,15 +178,17 @@ var Batch = function(parentFrame) { this.getcmd = function(cmd) { switch(cmd.toUpperCase()) { case "D": - sendBatch(); + if (sendBatch()) { + batchClear(); + this.close(); + } break; case "G": this.close(); break; case "R": if(typeof this.tree.currentItem.fileItem != "undefined") { - var key = md5_calc(this.tree.currentItem.fileItem.fullPath, true); - delete state.batch[key]; + batchRemove(this.tree.currentItem.fileItem); this.tree.close(); buildTree(); this.tree.open(); @@ -209,6 +207,7 @@ var Batch = function(parentFrame) { this.frame.delete(); state.chooser = chooser; state.browse = browse; + chooser.refresh(); } } @@ -371,6 +370,12 @@ var Chooser = function(parentFrame, list, treeBuilder) { scrollBar.cycle(); } + this.refresh = function() { + self.tree.items = []; + list.forEach(function(item) { treeBuilder(self.tree, item); }); + self.tree.open(); + } + this.close = function() { this.tree.close(); this.frame.close(); @@ -379,15 +384,72 @@ var Chooser = function(parentFrame, list, treeBuilder) { } +var batchSelected = function(fileItem) { + var fn = system.data_dir + format("user/%04d.dnload", user.number); + var f = new File(fn); + if (f.open("r")) { + var filenames = f.iniGetSections(); + for (var i = 0; i < filenames.length; ++i) { + if (filenames[i] === fileItem.name) { + var dirCode = f.iniGetValue(fileItem.name, "dir"); + if (dirCode === fileItem.dirCode) + return true; + } + } + } + + return false; +} + +var batchGet = function() { + var fileItems = []; + var fn = system.data_dir + format("user/%04d.dnload", user.number); + var f = new File(fn); + if (!f.open("r")) + return; + + var filenames = f.iniGetSections(); + filenames.forEach( function(filename) { + var dirCode = f.iniGetValue(filename, "dir"); + var fb = new FileBase(dirCode); + fb.open(); + var item = fb.get(filename); + item.fullPath = fb.get_path(filename); + item.dirCode = dirCode; + fileItems.push(item); + }); + + return fileItems; +} + +var batchAdd = function(fileItem) { + var fn = system.data_dir + format("user/%04d.dnload", user.number); + var f = new File(fn); + f.open(f.exists ? "r+" : "w+"); + f.iniSetValue(fileItem.name, "dir", fileItem.dirCode); + f.close(); +} + +var batchRemove = function(fileItem) { + var fn = system.data_dir + format("user/%04d.dnload", user.number); + var f = new File(fn); + f.open(f.exists ? "r+" : "w+"); + f.iniRemoveSection(fileItem.name); + f.close(); +} + +var batchClear = function() { + file_remove(system.data_dir + format("user/%04d.dnload", user.number)); +} + var batchToggle = function() { - var key = md5_calc(state.chooser.tree.currentItem.fileItem.fullPath, true); - if(typeof state.batch[key] == "undefined") { + if (!batchSelected(state.chooser.tree.currentItem.fileItem)) { state.chooser.tree.currentItem.text = state.chooser.tree.currentItem.text.replace(/^./, "*"); - state.batch[key] = state.chooser.tree.currentItem.fileItem; - } else { + batchAdd(state.chooser.tree.currentItem.fileItem); + } else { state.chooser.tree.currentItem.text = state.chooser.tree.currentItem.text.replace(/^\*/, " "); - delete state.batch[key]; - } + batchRemove(state.chooser.tree.currentItem.fileItem); + } state.chooser.tree.refresh(); } @@ -412,9 +474,9 @@ var formatFileName = function(name, length) { var fileChooser = function(code) { var treeBuilder = function(tree, item) { - var str = format( - " %-25s%-8s%8s %s", + "%c%-25s%-8s%8s %s", + batchSelected(item) ? '*' : ' ', formatFileName(item.name), file_size_str(item.size), system.datestr(item.added), @@ -438,6 +500,7 @@ var fileChooser = function(code) { var files = fd.get_list("", FileBase.DETAIL.EXTENDED); files.forEach(function(item) { item.fullPath = fd.get_path(item.name); + item.dirCode = code; }); state.chooser = new Chooser( @@ -552,7 +615,7 @@ var inputHandler = function(userInput) { if(state.browse != BROWSE_BATCH) { ret = true; state.chooser = new Batch(state.chooser.frame); - } + } break; case "D": // Download if(state.browse == BROWSE_FILES && canDownload()) {