Skip to content
Snippets Groups Projects
Commit 38962e8a authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Merge branch 'eugeneso/filearealb' into 'master'

Migrate filearea-lb.js to use FileBase

See merge request !240
parents 8f126a2f 85239c30
No related branches found
No related tags found
2 merge requests!463MRC mods by Codefenix (2024-10-20),!240Migrate filearea-lb.js to use FileBase
...@@ -3,7 +3,6 @@ load("sbbsdefs.js"); ...@@ -3,7 +3,6 @@ load("sbbsdefs.js");
load("nodedefs.js"); load("nodedefs.js");
load("cga_defs.js"); // For color definitions load("cga_defs.js"); // For color definitions
load("file_size.js"); load("file_size.js");
load("filedir.js");
load("frame.js"); load("frame.js");
load("tree.js"); load("tree.js");
load("scrollbar.js"); load("scrollbar.js");
...@@ -144,17 +143,20 @@ var Batch = function(parentFrame) { ...@@ -144,17 +143,20 @@ var Batch = function(parentFrame) {
if(typeof colors[c] != "undefined") if(typeof colors[c] != "undefined")
self.tree.colors[c] = colors[c]; self.tree.colors[c] = colors[c];
} }
for(var b in state.batch) { var fileItems = batchGet();
var item = self.tree.addItem( if (fileItems) {
format( fileItems.forEach( function(fileItem) {
"%-13s %7s %s", var item = self.tree.addItem(
state.batch[b].name, format(
file_size_str(file_size(state.batch[b].fullPath)), "%-25s %7s %s",
state.batch[b].description formatFileName(fileItem.name),
) file_size_str(fileItem.size),
); fileItem.desc ? fileItem.desc : ""
item.fileItem = state.batch[b]; )
} );
item.fileItem = fileItem;
});
}
} }
buildTree(); buildTree();
...@@ -162,20 +164,11 @@ var Batch = function(parentFrame) { ...@@ -162,20 +164,11 @@ var Batch = function(parentFrame) {
this.tree.open(); this.tree.open();
var sendBatch = function() { 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) {
var ifn = ixbFilenameFormat(state.batch[b].name);
var ext = ifn.substr(8, 3);
f.writeln(truncsp(ext) == "" ? ifn : (ifn.substr(0, 8) + "." + ext));
}
f.close();
console.clear(BG_BLACK|LIGHTGRAY); console.clear(BG_BLACK|LIGHTGRAY);
bbs.batch_add_list(fn); var result = bbs.batch_download();
bbs.batch_download();
console.clear(BG_BLACK|LIGHTGRAY); console.clear(BG_BLACK|LIGHTGRAY);
frame.invalidate(); frame.invalidate();
return result;
} }
this.cycle = function() { this.cycle = function() {
...@@ -185,15 +178,17 @@ var Batch = function(parentFrame) { ...@@ -185,15 +178,17 @@ var Batch = function(parentFrame) {
this.getcmd = function(cmd) { this.getcmd = function(cmd) {
switch(cmd.toUpperCase()) { switch(cmd.toUpperCase()) {
case "D": case "D":
sendBatch(); if (sendBatch()) {
batchClear();
this.close();
}
break; break;
case "G": case "G":
this.close(); this.close();
break; break;
case "R": case "R":
if(typeof this.tree.currentItem.fileItem != "undefined") { if(typeof this.tree.currentItem.fileItem != "undefined") {
var key = md5_calc(this.tree.currentItem.fileItem.fullPath, true); batchRemove(this.tree.currentItem.fileItem);
delete state.batch[key];
this.tree.close(); this.tree.close();
buildTree(); buildTree();
this.tree.open(); this.tree.open();
...@@ -212,6 +207,7 @@ var Batch = function(parentFrame) { ...@@ -212,6 +207,7 @@ var Batch = function(parentFrame) {
this.frame.delete(); this.frame.delete();
state.chooser = chooser; state.chooser = chooser;
state.browse = browse; state.browse = browse;
chooser.refresh();
} }
} }
...@@ -246,21 +242,22 @@ var Details = function(parentFrame, dirFile) { ...@@ -246,21 +242,22 @@ var Details = function(parentFrame, dirFile) {
subFrame.center(dirFile.name); subFrame.center(dirFile.name);
subFrame.attr = BG_BLACK|LIGHTGRAY; subFrame.attr = BG_BLACK|LIGHTGRAY;
subFrame.gotoxy(1, 3); subFrame.gotoxy(1, 3);
subFrame.putmsg( subFrame.putmsg(
" Size: " + file_size_str(file_size(dirFile.fullPath)) + "\r\n" + " Size: " + file_size_str(dirFile.size) + "\r\n" +
"Uploaded by: " + dirFile.uploader + "\r\n" + "Uploaded by: " + (dirFile.from ? dirFile.from : "") + "\r\n" +
"Uploaded on: " + strftime("%d/%m/%Y %H:%M") + "\r\n" + "Uploaded on: " + system.datestr(dirFile.added) + "\r\n" +
" Downloads: " + dirFile.timesDownloaded + "\r\n" + " Downloads: " + (dirFile.times_downloaded ? dirFile.times_downloaded : "") + "\r\n" +
" Credits: " + dirFile.credit + "\r\n" + " Credits: " + dirFile.cost + "\r\n" +
"Description: " + dirFile.description + "\r\n" + "Description: " + (dirFile.desc ? dirFile.desc : "") + "\r\n" +
" Extended: " " Extended: "
); );
if(dirFile.extendedDescription == "") { if(dirFile.extdesc == "") {
subFrame.gotoxy(14, 9) subFrame.gotoxy(14, 9)
subFrame.putmsg("Not available."); subFrame.putmsg("Not available.");
} else { } else {
subFrame.gotoxy(1, 11); subFrame.gotoxy(1, 11);
subFrame.putmsg(dirFile.extendedDescription); subFrame.putmsg(dirFile.extdesc);
} }
frame.open(); frame.open();
...@@ -373,6 +370,12 @@ var Chooser = function(parentFrame, list, treeBuilder) { ...@@ -373,6 +370,12 @@ var Chooser = function(parentFrame, list, treeBuilder) {
scrollBar.cycle(); scrollBar.cycle();
} }
this.refresh = function() {
self.tree.items = [];
list.forEach(function(item) { treeBuilder(self.tree, item); });
self.tree.open();
}
this.close = function() { this.close = function() {
this.tree.close(); this.tree.close();
this.frame.close(); this.frame.close();
...@@ -381,28 +384,103 @@ var Chooser = function(parentFrame, list, treeBuilder) { ...@@ -381,28 +384,103 @@ 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 batchToggle = function() {
var key = md5_calc(state.chooser.tree.currentItem.fileItem.fullPath, true); if (!batchSelected(state.chooser.tree.currentItem.fileItem)) {
if(typeof state.batch[key] == "undefined") {
state.chooser.tree.currentItem.text = state.chooser.tree.currentItem.text.replace(/^./, "*"); state.chooser.tree.currentItem.text = state.chooser.tree.currentItem.text.replace(/^./, "*");
state.batch[key] = state.chooser.tree.currentItem.fileItem; batchAdd(state.chooser.tree.currentItem.fileItem);
} else { } else {
state.chooser.tree.currentItem.text = state.chooser.tree.currentItem.text.replace(/^\*/, " "); 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(); state.chooser.tree.refresh();
} }
var formatFileName = function(name, length) {
if (length === undefined || length < 5)
length = 24;
var split = name.split(".");
try {
var filename = split[0];
var extension = split[1];
if (extension.length > 3)
extension = extension.substring(0, 3);
if (filename.length > length - 4)
filename = filename.substring(0, length - 4);
var result = filename + '.' + extension;
} catch(err) {
return name;
}
return result;
}
var fileChooser = function(code) { var fileChooser = function(code) {
var treeBuilder = function(tree, item) { var treeBuilder = function(tree, item) {
var str = format( var str = format(
" %-13s%-7s%8s %s", "%c%-25s%-8s%8s %s",
item.name, batchSelected(item) ? '*' : ' ',
file_size_str(file_size(item.fullPath)), formatFileName(item.name),
system.datestr(item.uploadDate), file_size_str(item.size),
item.description system.datestr(item.added),
item.desc ? item.desc : ""
); );
var treeItem = tree.addItem( var treeItem = tree.addItem(
...@@ -417,11 +495,17 @@ var fileChooser = function(code) { ...@@ -417,11 +495,17 @@ var fileChooser = function(code) {
tree.__commands__.SELECT = "I"; tree.__commands__.SELECT = "I";
} }
var fd = new FileDir(file_area.dir[code]); var fd = new FileBase(code);
fd.open();
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( state.chooser = new Chooser(
frame, frame,
fd.files, files,
treeBuilder treeBuilder
); );
state.chooser.open(); state.chooser.open();
...@@ -434,7 +518,7 @@ var fileChooser = function(code) { ...@@ -434,7 +518,7 @@ var fileChooser = function(code) {
); );
state.chooser.headerFrame.putmsg( state.chooser.headerFrame.putmsg(
format( format(
" %-13s%-7s%8s %s", " %-25s%-8s%8s %s",
"Filename", "Size", "Uploaded", "Description" "Filename", "Size", "Uploaded", "Description"
) )
); );
...@@ -531,7 +615,7 @@ var inputHandler = function(userInput) { ...@@ -531,7 +615,7 @@ var inputHandler = function(userInput) {
if(state.browse != BROWSE_BATCH) { if(state.browse != BROWSE_BATCH) {
ret = true; ret = true;
state.chooser = new Batch(state.chooser.frame); state.chooser = new Batch(state.chooser.frame);
} }
break; break;
case "D": // Download case "D": // Download
if(state.browse == BROWSE_FILES && canDownload()) { if(state.browse == BROWSE_FILES && canDownload()) {
...@@ -562,6 +646,7 @@ var inputHandler = function(userInput) { ...@@ -562,6 +646,7 @@ var inputHandler = function(userInput) {
} }
break; break;
case "T": // Tag a file case "T": // Tag a file
case " ":
if(state.browse == BROWSE_FILES) { if(state.browse == BROWSE_FILES) {
ret = true; ret = true;
if(canDownload()) if(canDownload())
...@@ -660,6 +745,7 @@ var init = function() { ...@@ -660,6 +745,7 @@ var init = function() {
// chooser. // chooser.
if ((gStartupDirCode != "") && dirCodeIsValid(gStartupDirCode)) if ((gStartupDirCode != "") && dirCodeIsValid(gStartupDirCode))
{ {
fileChooser(gStartupDirCode); fileChooser(gStartupDirCode);
state.dir = gStartupDirCode; state.dir = gStartupDirCode;
state.lib = file_area.dir[gStartupDirCode].lib_index; state.lib = file_area.dir[gStartupDirCode].lib_index;
...@@ -705,6 +791,8 @@ function dirCodeIsValid(pDirCode) { ...@@ -705,6 +791,8 @@ function dirCodeIsValid(pDirCode) {
if (typeof(pDirCode) != "string") if (typeof(pDirCode) != "string")
return false; return false;
console.print(gStartupDirCode);
console.pause();
var dirCodeUpper = pDirCode.toUpperCase(); var dirCodeUpper = pDirCode.toUpperCase();
var codeIsValid = false; var codeIsValid = false;
for (var dirCode in file_area.dir) for (var dirCode in file_area.dir)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment