diff --git a/xtrn/DDAreaChoosers/DDMsgAreaChooser.js b/xtrn/DDAreaChoosers/DDMsgAreaChooser.js index a14c72bbd137c6666521840bca473633f0587db3..37dafe0c6fef0c85b07d3ad145fadf05b41b54eb 100644 --- a/xtrn/DDAreaChoosers/DDMsgAreaChooser.js +++ b/xtrn/DDAreaChoosers/DDMsgAreaChooser.js @@ -54,6 +54,8 @@ * character (they can just be a list of the attribute characters). * 2023-05-14 Eric Oulashin Version 1.35 * Refactored the code for reading the configuration file + * 2023-07-16 Eric Oulashin Version 1.36 + * Possible fix for not allowing to change sub-board if the first group is empty */ // TODO: In the area list, the 10,000ths digit (for # posts) is in a different color) @@ -97,8 +99,8 @@ if (system.version_num < 31400) } // Version & date variables -var DD_MSG_AREA_CHOOSER_VERSION = "1.35"; -var DD_MSG_AREA_CHOOSER_VER_DATE = "2023-05-14"; +var DD_MSG_AREA_CHOOSER_VERSION = "1.36"; +var DD_MSG_AREA_CHOOSER_VER_DATE = "2023-07-16"; // Keyboard input key codes var CTRL_H = "\x08"; @@ -165,6 +167,17 @@ else if (typeof(argv[1]) == "string") // it to let the user choose a message area. if (executeThisScript) { + // Starting with the user's current messsage group, find the first message group with sub-boards. + // If there are none, output an error message and exit. + //var firstGrpIdxWithSubBoards = findNextGrpIdxWithSubBoards(0); + var firstGrpIdxWithSubBoards = findNextGrpIdxWithSubBoards(-1); + if (firstGrpIdxWithSubBoards < 0) + { + console.clear("\x01n"); + console.print("\1y\1hThere are no message sub-boards available.\r\n\1p"); + exit(0); + } + // When exiting this script, make sure to set the ctrl key pasthru back to what it was originally js.on_exit("console.ctrlkey_passthru = " + console.ctrlkey_passthru); console.ctrlkey_passthru = "+ACGKLOPQRTUVWXYZ_"; // So that control key combinations only get caught by this script @@ -176,7 +189,8 @@ if (executeThisScript) // here just in case, and change the user's message area // here. Otherwise, if choosing the message group first, // SelectMsgArea() will change the user's sub-board. - var msgGroupIdx = (gChooseMsgGrpOnStartup ? 0/*null*/ : +bbs.curgrp); + //var msgGroupIdx = (gChooseMsgGrpOnStartup ? firstGrpIdxWithSubBoards/*null*/ : +bbs.curgrp); + var msgGroupIdx = +bbs.curgrp; // Default to the user's current message group if (!gChooseMsgGrpOnStartup) msgAreaChooser.BuildSubBoardPrintfInfoForGrp(msgGroupIdx); var chosenIdx = msgAreaChooser.SelectMsgArea(gChooseMsgGrpOnStartup, msgGroupIdx); @@ -569,13 +583,19 @@ function DDMsgAreaChooser_SelectMsgArea_Lightbar(pLevel, pGrpIdx, pSubIdx) return; else if (level == 1) { - if (typeof(pGrpIdx) !== "number") - return; + // If there are no sub-boards in the given group index, then see if there's a next group with + // sub-boards (and wrap around) if (msg_area.grp_list[pGrpIdx].sub_list.length == 0) { - console.clear("\1n"); - console.print("\1y\1hThere are no sub-boards in " + msg_area.grp_list[pGrpIdx].description + ".\r\n\1p"); - return; + var nextGrpIdx = findNextGrpIdxWithSubBoards(pGrpIdx); + if (nextGrpIdx > -1 && msg_area.grp_list[nextGrpIdx].sub_list.length > 0) + pGrpIdx = nextGrpIdx; + else + { + console.clear("\1n"); + console.print("\1y\1hThere are no sub-boards available.\r\n\1p"); + return; + } } } // 2: Choose a sub-board within a message group @@ -587,7 +607,7 @@ function DDMsgAreaChooser_SelectMsgArea_Lightbar(pLevel, pGrpIdx, pSubIdx) if (msg_area.grp_list[pGrpIdx].sub_list.length == 0) { console.clear("\1n"); - console.print("\1y\1hThere are no sub-boards in " + file_area.lib_list[pLibIdx].description + ".\r\n\1p"); + console.print("\1y\1hThere are no sub-boards in " + msg_area.grp_list[pGrpIdx].description + ".\r\n\1p"); return; } } @@ -3548,4 +3568,36 @@ function attrCodeStr(pAttrCodeCharStr) str += "\x01" + currentChar; } return str; -} \ No newline at end of file +} + +// Finds the index of a message group AFTER the given group index which contains +// sub-boards. If there are none, this will return -1. +// +// Parameters: +// pGrpIdx: An index of a message group; this function will start searching AFTER this one +// +// Return value: An index of a message group after the given group index that contains sub-boards, +// or -1 if there are none +function findNextGrpIdxWithSubBoards(pGrpIdx) +{ + if (typeof(pGrpIdx) !== "number") + return -1; + var nextGrpIdx = -1; + if (pGrpIdx < msg_area.grp_list.length - 1) + { + for (var i = pGrpIdx + 1; i < msg_area.grp_list.length && nextGrpIdx == -1; ++i) + { + if (msg_area.grp_list[i].sub_list.length > 0) + nextGrpIdx = i; + } + } + if (nextGrpIdx == -1 && pGrpIdx > 0) + { + for (var i = 0; i < pGrpIdx && nextGrpIdx == -1; ++i) + { + if (msg_area.grp_list[i].sub_list.length > 0) + nextGrpIdx = i; + } + } + return nextGrpIdx; +}