Skip to content
Snippets Groups Projects
Commit c1af21a5 authored by Eric Oulashin's avatar Eric Oulashin Committed by Rob Swindell
Browse files

DDMsgReader: Updated behavior for indexed menu R (mark all read) when doing a...

DDMsgReader: Updated behavior for indexed menu R (mark all read) when doing a newscan. Ctrl-S does scan refresh in indexed menu. New R "snap-to" option for the indexed menu. Also, command-line options for forcing use of the indexed mode menu when doing a
parent 8eea44bc
No related branches found
No related tags found
1 merge request!387DDMsgReader: Updated behavior for indexed menu R (mark all read) when doing a newscan. Ctrl-S does scan refresh in indexed menu. New R "snap-to" option for the indexed menu. Also, command-line options for forcing use of the indexed mode menu when doing a
...@@ -129,6 +129,20 @@ ...@@ -129,6 +129,20 @@
* New command-line option: -indexModeScope, which can specify the indexed * New command-line option: -indexModeScope, which can specify the indexed
* reader scope (group/all) without prompting the user. * reader scope (group/all) without prompting the user.
* User configuration options for newscan & email only shown when doing those actions * User configuration options for newscan & email only shown when doing those actions
* 2024-01-11 Eric Oulashin Version 1.95
* Removed user option to display indexed mode menu in newscan after all new messages are read.
* Command-line option -indexedMode can now be specified with -search=new_msg_scan to make
* it display the indexed mode menu, regardless of the user setting to use the indexed mode
* menu for a newscan.
* New command-line option: -newscanIndexMenuAfterReadAllNew - Continue to display the
* indexed mode menu after the user has read all new messages during a newscan.
* The following command-line can be used to do a newscan for all sub-boards and continue
* displaying the index mode menu after the user has read all new messages:
* DDMsgReader.js -search=new_msg_scan -indexedMode -indexModeScope=all -newscanIndexMenuAfterReadAllNew
* New indexed mode newscan behavior: R (mark all read) moves to the next sub-board.
* Ctrl-S in the indexed mode menu re-scans sub-boards (to detect more new messages, etc.)
* New DDMsgReader.cfg option for user config default:
* indexedModeMenuSnapToNextWithNewAftarMarkAllRead
*/ */
   
"use strict"; "use strict";
...@@ -234,8 +248,8 @@ var hexdump = load('hexdump_lib.js'); ...@@ -234,8 +248,8 @@ var hexdump = load('hexdump_lib.js');
   
   
// Reader version information // Reader version information
var READER_VERSION = "1.94"; var READER_VERSION = "1.95";
var READER_DATE = "2024-01-08"; var READER_DATE = "2024-01-20";
   
// Keyboard key codes for displaying on the screen // Keyboard key codes for displaying on the screen
var UP_ARROW = ascii(24); var UP_ARROW = ascii(24);
...@@ -573,7 +587,10 @@ if (gDoDDMR) ...@@ -573,7 +587,10 @@ if (gDoDDMR)
readerSubCode = gCmdLineArgVals["subboard"]; readerSubCode = gCmdLineArgVals["subboard"];
} }
var msgReader = new DigDistMsgReader(readerSubCode, gCmdLineArgVals); var msgReader = new DigDistMsgReader(readerSubCode, gCmdLineArgVals);
if (gCmdLineArgVals.indexedmode) // -indexedMode command-line arg specified and not doing a search (including
// newscan): Do indexed read mode (show all sub-boards rather than only
// sub-boards enabled in the user's newscan configuration)
if (gCmdLineArgVals.indexedmode && msgReader.searchType == SEARCH_NONE)
{ {
console.attributes = "N"; console.attributes = "N";
console.crlf(); console.crlf();
...@@ -647,12 +664,23 @@ if (gDoDDMR) ...@@ -647,12 +664,23 @@ if (gDoDDMR)
msgReader.SearchMessages("to_user_search"); msgReader.SearchMessages("to_user_search");
break; break;
case SEARCH_MSG_NEWSCAN: case SEARCH_MSG_NEWSCAN:
if (!gCmdLineArgVals.suppresssearchtypetext) var scopeChar = null;
if (typeof(gCmdLineArgVals.indexmodescope) === "string")
{
var argScopeLower = gCmdLineArgVals.indexmodescope.toLowerCase();
if (argScopeLower == "sub" || argScopeLower == "subboard"|| argScopeLower == "sub-board")
scopeChar = "S";
else if (argScopeLower == "group" || argScopeLower == "grp")
scopeChar = "G";
else if (argScopeLower == "all")
scopeChar = "A";
}
if (scopeChar == null && !gCmdLineArgVals.suppresssearchtypetext)
{ {
console.crlf(); console.crlf();
console.putmsg(msgReader.text.newMsgScanText); console.putmsg(msgReader.text.newMsgScanText);
} }
msgReader.MessageAreaScan(SCAN_CFG_NEW, SCAN_NEW); msgReader.MessageAreaScan(SCAN_CFG_NEW, SCAN_NEW, scopeChar);
break; break;
case SEARCH_MSG_NEWSCAN_CUR_SUB: case SEARCH_MSG_NEWSCAN_CUR_SUB:
msgReader.MessageAreaScan(SCAN_CFG_NEW, SCAN_NEW, "S"); msgReader.MessageAreaScan(SCAN_CFG_NEW, SCAN_NEW, "S");
...@@ -1123,6 +1151,7 @@ function DigDistMsgReader(pSubBoardCode, pScriptArgs) ...@@ -1123,6 +1151,7 @@ function DigDistMsgReader(pSubBoardCode, pScriptArgs)
markAllRead: "R", markAllRead: "R",
help: "?", help: "?",
userSettings: CTRL_U, userSettings: CTRL_U,
reScanSubBoards: CTRL_S
}; };
   
// Message status characters for the message list // Message status characters for the message list
...@@ -1180,10 +1209,11 @@ function DigDistMsgReader(pSubBoardCode, pScriptArgs) ...@@ -1180,10 +1209,11 @@ function DigDistMsgReader(pSubBoardCode, pScriptArgs)
// Whether or not the indexed mode sub-board menu should "snap" selection to sub-boards with new messages // Whether or not the indexed mode sub-board menu should "snap" selection to sub-boards with new messages
// when the menu is shown // when the menu is shown
indexedModeMenuSnapToFirstWithNew: false, indexedModeMenuSnapToFirstWithNew: false,
// For the indexed menu in a newscan, whether or not it should "snap" to the next sub-board with new
// messages after marking all read in a sub-board:
indexedModeMenuSnapToNextWithNewAftarMarkAllRead: true,
// Whether to display the indexed mode newscan menu when there are no new messages // Whether to display the indexed mode newscan menu when there are no new messages
displayIndexedModeMenuIfNoNewMessages: true, displayIndexedModeMenuIfNoNewMessages: true,
// Whether to show the indexed newscan menu after reading all new messages
showIndexedNewscanMenuAfterReadingAllNewMsgs: true,
// Whether or not to list messages in reverse order // Whether or not to list messages in reverse order
listMessagesInReverse: false, listMessagesInReverse: false,
// Whether or not quitting from the reader goes to the message list (instead of exiting altogether) // Whether or not quitting from the reader goes to the message list (instead of exiting altogether)
...@@ -2488,7 +2518,7 @@ function searchTypeRequiresSearchText(pSearchType) ...@@ -2488,7 +2518,7 @@ function searchTypeRequiresSearchText(pSearchType)
function DigDistMsgReader_MessageAreaScan(pScanCfgOpt, pScanMode, pScanScopeChar, pOutputMessages) function DigDistMsgReader_MessageAreaScan(pScanCfgOpt, pScanMode, pScanScopeChar, pOutputMessages)
{ {
var scanScopeChar = ""; var scanScopeChar = "";
if ((typeof(pScanScopeChar) == "string") && /^[SGA]$/.test(pScanScopeChar)) if ((typeof(pScanScopeChar) === "string") && /^[SGA]$/.test(pScanScopeChar))
scanScopeChar = pScanScopeChar; scanScopeChar = pScanScopeChar;
else else
{ {
...@@ -2549,8 +2579,8 @@ function DigDistMsgReader_MessageAreaScan(pScanCfgOpt, pScanMode, pScanScopeChar ...@@ -2549,8 +2579,8 @@ function DigDistMsgReader_MessageAreaScan(pScanCfgOpt, pScanMode, pScanScopeChar
this.doingNewscan = pScanMode === SCAN_NEW; this.doingNewscan = pScanMode === SCAN_NEW;
   
// If doing a newscan of all sub-boards, and the user has their setting for indexed mode // If doing a newscan of all sub-boards, and the user has their setting for indexed mode
// for newscan enabled, then do that and return instead of the traditional newscan. // for newscan enabled, or the command-line option indexedMode is specified, then do that and return instead of the traditional newscan.
if (pScanCfgOpt === SCAN_CFG_NEW && pScanMode === SCAN_NEW && this.userSettings.useIndexedModeForNewscan) if (pScanCfgOpt === SCAN_CFG_NEW && pScanMode === SCAN_NEW && (this.userSettings.useIndexedModeForNewscan || gCmdLineArgVals.indexedmode))
{ {
var scanScope = SCAN_SCOPE_ALL; var scanScope = SCAN_SCOPE_ALL;
if (scanScopeChar === "S") scanScope = SCAN_SCOPE_SUB_BOARD; if (scanScopeChar === "S") scanScope = SCAN_SCOPE_SUB_BOARD;
...@@ -9258,6 +9288,8 @@ function DigDistMsgReader_ReadConfigFile() ...@@ -9258,6 +9288,8 @@ function DigDistMsgReader_ReadConfigFile()
this.userSettings.newscanOnlyShowNewMsgs = settingsObj.newscanOnlyShowNewMsgs; this.userSettings.newscanOnlyShowNewMsgs = settingsObj.newscanOnlyShowNewMsgs;
if (typeof(settingsObj.indexedModeMenuSnapToFirstWithNew) === "boolean") if (typeof(settingsObj.indexedModeMenuSnapToFirstWithNew) === "boolean")
this.userSettings.indexedModeMenuSnapToFirstWithNew = settingsObj.indexedModeMenuSnapToFirstWithNew; this.userSettings.indexedModeMenuSnapToFirstWithNew = settingsObj.indexedModeMenuSnapToFirstWithNew;
if (typeof(settingsObj.indexedModeMenuSnapToNextWithNewAftarMarkAllRead) === "boolean")
this.userSettings.indexedModeMenuSnapToNextWithNewAftarMarkAllRead = settingsObj.indexedModeMenuSnapToNextWithNewAftarMarkAllRead;
if (typeof(settingsObj.promptDelPersonalEmailAfterReply) === "boolean") if (typeof(settingsObj.promptDelPersonalEmailAfterReply) === "boolean")
this.userSettings.promptDelPersonalEmailAfterReply = settingsObj.promptDelPersonalEmailAfterReply; this.userSettings.promptDelPersonalEmailAfterReply = settingsObj.promptDelPersonalEmailAfterReply;
if (typeof(settingsObj.displayIndexedModeMenuIfNoNewMessages) === "boolean") if (typeof(settingsObj.displayIndexedModeMenuIfNoNewMessages) === "boolean")
...@@ -15035,21 +15067,21 @@ function DigDistMsgReader_DoUserSettings_Scrollable(pDrawBottomhelpLineFn, pTopR ...@@ -15035,21 +15067,21 @@ function DigDistMsgReader_DoUserSettings_Scrollable(pDrawBottomhelpLineFn, pTopR
   
// Indexed-mode newscan options // Indexed-mode newscan options
var SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_INDEX = -1; var SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_INDEX = -1;
var INDEXED_MODE_NEWSCAN_MENU_AFTER_READING_ALL_NEW_MSGS_OPT_INDEX = -1;
var INDEXED_MODE_MENU_SNAP_TO_NEW_MSGS_OPT_INDEX = -1; var INDEXED_MODE_MENU_SNAP_TO_NEW_MSGS_OPT_INDEX = -1;
var INDEXED_MODE_MENU_SNAP_TO_NEW_MSGS_WHEN_MARK_ALL_READ_OPT_IDX = -1;
if (this.doingNewscan) if (this.doingNewscan)
{ {
SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_INDEX = optionBox.addTextItem(format(optionFormatStr, "Show indexed menu if there are no new messages")); SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_INDEX = optionBox.addTextItem(format(optionFormatStr, "Show indexed menu if there are no new messages"));
if (this.userSettings.displayIndexedModeMenuIfNoNewMessages) if (this.userSettings.displayIndexedModeMenuIfNoNewMessages)
optionBox.chgCharInTextItem(SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_INDEX, checkIdx, CHECK_CHAR); optionBox.chgCharInTextItem(SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_INDEX, checkIdx, CHECK_CHAR);
   
INDEXED_MODE_NEWSCAN_MENU_AFTER_READING_ALL_NEW_MSGS_OPT_INDEX = optionBox.addTextItem(format(optionFormatStr, "Show indexed menu after reading all new msgs"));
if (this.userSettings.showIndexedNewscanMenuAfterReadingAllNewMsgs)
optionBox.chgCharInTextItem(INDEXED_MODE_NEWSCAN_MENU_AFTER_READING_ALL_NEW_MSGS_OPT_INDEX, checkIdx, CHECK_CHAR);
INDEXED_MODE_MENU_SNAP_TO_NEW_MSGS_OPT_INDEX = optionBox.addTextItem(format(optionFormatStr, "Index newscan: Snap to sub-boards w/ new msgs")); INDEXED_MODE_MENU_SNAP_TO_NEW_MSGS_OPT_INDEX = optionBox.addTextItem(format(optionFormatStr, "Index newscan: Snap to sub-boards w/ new msgs"));
if (this.userSettings.indexedModeMenuSnapToFirstWithNew) if (this.userSettings.indexedModeMenuSnapToFirstWithNew)
optionBox.chgCharInTextItem(INDEXED_MODE_MENU_SNAP_TO_NEW_MSGS_OPT_INDEX, checkIdx, CHECK_CHAR); optionBox.chgCharInTextItem(INDEXED_MODE_MENU_SNAP_TO_NEW_MSGS_OPT_INDEX, checkIdx, CHECK_CHAR);
INDEXED_MODE_MENU_SNAP_TO_NEW_MSGS_WHEN_MARK_ALL_READ_OPT_IDX = optionBox.addTextItem(format(optionFormatStr, "Index newscan: Sub-board snap w/ mark all read"));
if (this.userSettings.indexedModeMenuSnapToNextWithNewAftarMarkAllRead)
optionBox.chgCharInTextItem(INDEXED_MODE_MENU_SNAP_TO_NEW_MSGS_WHEN_MARK_ALL_READ_OPT_IDX, checkIdx, CHECK_CHAR);
} }
   
const INDEX_NEWSCAN_ENTER_SHOWS_MSG_LIST_OPT_INDEX = optionBox.addTextItem(format(optionFormatStr, "Index menu: Enter shows message list")); const INDEX_NEWSCAN_ENTER_SHOWS_MSG_LIST_OPT_INDEX = optionBox.addTextItem(format(optionFormatStr, "Index menu: Enter shows message list"));
...@@ -15080,8 +15112,8 @@ function DigDistMsgReader_DoUserSettings_Scrollable(pDrawBottomhelpLineFn, pTopR ...@@ -15080,8 +15112,8 @@ function DigDistMsgReader_DoUserSettings_Scrollable(pDrawBottomhelpLineFn, pTopR
optionToggles[NEWSCAN_ONLY_SHOW_NEW_MSGS_INDEX] = this.userSettings.newscanOnlyShowNewMsgs; optionToggles[NEWSCAN_ONLY_SHOW_NEW_MSGS_INDEX] = this.userSettings.newscanOnlyShowNewMsgs;
optionToggles[INDEXED_MODE_NEWSCAN_OPT_INDEX] = this.userSettings.useIndexedModeForNewscan; optionToggles[INDEXED_MODE_NEWSCAN_OPT_INDEX] = this.userSettings.useIndexedModeForNewscan;
optionToggles[SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_INDEX] = this.userSettings.displayIndexedModeMenuIfNoNewMessages; optionToggles[SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_INDEX] = this.userSettings.displayIndexedModeMenuIfNoNewMessages;
optionToggles[INDEXED_MODE_NEWSCAN_MENU_AFTER_READING_ALL_NEW_MSGS_OPT_INDEX] = this.userSettings.showIndexedNewscanMenuAfterReadingAllNewMsgs;
optionToggles[INDEXED_MODE_MENU_SNAP_TO_NEW_MSGS_OPT_INDEX] = this.userSettings.indexedModeMenuSnapToFirstWithNew; optionToggles[INDEXED_MODE_MENU_SNAP_TO_NEW_MSGS_OPT_INDEX] = this.userSettings.indexedModeMenuSnapToFirstWithNew;
optionToggles[INDEXED_MODE_MENU_SNAP_TO_NEW_MSGS_WHEN_MARK_ALL_READ_OPT_IDX] = this.userSettings.indexedModeMenuSnapToNextWithNewAftarMarkAllRead;
optionToggles[INDEX_NEWSCAN_ENTER_SHOWS_MSG_LIST_OPT_INDEX] = this.userSettings.enterFromIndexMenuShowsMsgList; optionToggles[INDEX_NEWSCAN_ENTER_SHOWS_MSG_LIST_OPT_INDEX] = this.userSettings.enterFromIndexMenuShowsMsgList;
optionToggles[READER_QUIT_TO_MSG_LIST_OPT_INDEX] = this.userSettings.quitFromReaderGoesToMsgList; optionToggles[READER_QUIT_TO_MSG_LIST_OPT_INDEX] = this.userSettings.quitFromReaderGoesToMsgList;
optionToggles[PROPMT_DEL_PERSONAL_MSG_AFTER_REPLY_OPT_INDEX] = this.userSettings.promptDelPersonalEmailAfterReply; optionToggles[PROPMT_DEL_PERSONAL_MSG_AFTER_REPLY_OPT_INDEX] = this.userSettings.promptDelPersonalEmailAfterReply;
...@@ -15126,12 +15158,12 @@ function DigDistMsgReader_DoUserSettings_Scrollable(pDrawBottomhelpLineFn, pTopR ...@@ -15126,12 +15158,12 @@ function DigDistMsgReader_DoUserSettings_Scrollable(pDrawBottomhelpLineFn, pTopR
case SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_INDEX: case SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_INDEX:
this.readerObj.userSettings.displayIndexedModeMenuIfNoNewMessages = !this.readerObj.userSettings.displayIndexedModeMenuIfNoNewMessages; this.readerObj.userSettings.displayIndexedModeMenuIfNoNewMessages = !this.readerObj.userSettings.displayIndexedModeMenuIfNoNewMessages;
break; break;
case INDEXED_MODE_NEWSCAN_MENU_AFTER_READING_ALL_NEW_MSGS_OPT_INDEX:
this.readerObj.userSettings.showIndexedNewscanMenuAfterReadingAllNewMsgs = !this.readerObj.userSettings.showIndexedNewscanMenuAfterReadingAllNewMsgs;
break;
case INDEXED_MODE_MENU_SNAP_TO_NEW_MSGS_OPT_INDEX: case INDEXED_MODE_MENU_SNAP_TO_NEW_MSGS_OPT_INDEX:
this.readerObj.userSettings.indexedModeMenuSnapToFirstWithNew = !this.readerObj.userSettings.indexedModeMenuSnapToFirstWithNew; this.readerObj.userSettings.indexedModeMenuSnapToFirstWithNew = !this.readerObj.userSettings.indexedModeMenuSnapToFirstWithNew;
break; break;
case INDEXED_MODE_MENU_SNAP_TO_NEW_MSGS_WHEN_MARK_ALL_READ_OPT_IDX:
this.readerObj.userSettings.indexedModeMenuSnapToNextWithNewAftarMarkAllRead = !this.readerObj.userSettings.indexedModeMenuSnapToNextWithNewAftarMarkAllRead;
break;
case INDEX_NEWSCAN_ENTER_SHOWS_MSG_LIST_OPT_INDEX: case INDEX_NEWSCAN_ENTER_SHOWS_MSG_LIST_OPT_INDEX:
this.readerObj.userSettings.enterFromIndexMenuShowsMsgList = !this.readerObj.userSettings.enterFromIndexMenuShowsMsgList; this.readerObj.userSettings.enterFromIndexMenuShowsMsgList = !this.readerObj.userSettings.enterFromIndexMenuShowsMsgList;
break; break;
...@@ -15246,12 +15278,10 @@ function DigDistMsgReader_DoUserSettings_Traditional() ...@@ -15246,12 +15278,10 @@ function DigDistMsgReader_DoUserSettings_Traditional()
} }
// Indexed-mode newscan options (will only be displayed if doing a newscan) // Indexed-mode newscan options (will only be displayed if doing a newscan)
var SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_NUM = -1; var SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_NUM = -1;
var INDEXED_MODE_NEWSCAN_MENU_AFTER_READING_ALL_NEW_MSGS_OPT_INDEX = -1;
if (this.doingNewscan) if (this.doingNewscan)
{ {
SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_NUM = optNum++; SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_NUM = optNum++;
INDEXED_MODE_NEWSCAN_MENU_AFTER_READING_ALL_NEW_MSGS_OPT_INDEX = optNum++; HIGHEST_CHOICE_NUM = SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_NUM;
HIGHEST_CHOICE_NUM = INDEXED_MODE_NEWSCAN_MENU_AFTER_READING_ALL_NEW_MSGS_OPT_INDEX;
} }
   
console.crlf(); console.crlf();
...@@ -15270,10 +15300,7 @@ function DigDistMsgReader_DoUserSettings_Traditional() ...@@ -15270,10 +15300,7 @@ function DigDistMsgReader_DoUserSettings_Traditional()
printTradUserSettingOption(DISPLAY_PERSONAL_MAIL_REPLIED_INDICATOR_CHAR_OPT_NUM, "Display email replied indicator", wordFirstCharAttrs, wordRemainingAttrs); printTradUserSettingOption(DISPLAY_PERSONAL_MAIL_REPLIED_INDICATOR_CHAR_OPT_NUM, "Display email replied indicator", wordFirstCharAttrs, wordRemainingAttrs);
// Newscan options // Newscan options
if (this.doingNewscan) if (this.doingNewscan)
{
printTradUserSettingOption(SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_NUM, "Show indexed menu if there are no new messages", wordFirstCharAttrs, wordRemainingAttrs); printTradUserSettingOption(SHOW_INDEXED_NEWSCAN_MENU_IF_NO_NEW_MSGS_OPT_NUM, "Show indexed menu if there are no new messages", wordFirstCharAttrs, wordRemainingAttrs);
printTradUserSettingOption(INDEXED_MODE_NEWSCAN_MENU_AFTER_READING_ALL_NEW_MSGS_OPT_INDEX, "Show indexed menu after reading all new messages", wordFirstCharAttrs, wordRemainingAttrs);
}
console.crlf(); console.crlf();
console.print("\x01cYour choice (\x01hQ\x01n\x01c: Quit)\x01h: \x01g"); console.print("\x01cYour choice (\x01hQ\x01n\x01c: Quit)\x01h: \x01g");
var userChoiceNum = console.getnum(HIGHEST_CHOICE_NUM); var userChoiceNum = console.getnum(HIGHEST_CHOICE_NUM);
...@@ -15305,11 +15332,6 @@ function DigDistMsgReader_DoUserSettings_Traditional() ...@@ -15305,11 +15332,6 @@ function DigDistMsgReader_DoUserSettings_Traditional()
this.userSettings.displayIndexedModeMenuIfNoNewMessages = !console.noyes("Show indexed menu if there are no new messages"); this.userSettings.displayIndexedModeMenuIfNoNewMessages = !console.noyes("Show indexed menu if there are no new messages");
userSettingsChanged = (this.userSettings.displayIndexedModeMenuIfNoNewMessages != oldIndexedMenuIfNoMsgsSetting); userSettingsChanged = (this.userSettings.displayIndexedModeMenuIfNoNewMessages != oldIndexedMenuIfNoMsgsSetting);
break; break;
case INDEXED_MODE_NEWSCAN_MENU_AFTER_READING_ALL_NEW_MSGS_OPT_INDEX:
var oldIndexedMenuAfterReadingAllNewMsgsSetting = this.userSettings.showIndexedNewscanMenuAfterReadingAllNewMsgs;
this.userSettings.showIndexedNewscanMenuAfterReadingAllNewMsgs = console.yesno("Show indexed menu after reading all new messages");
userSettingsChanged = (this.userSettings.showIndexedNewscanMenuAfterReadingAllNewMsgs != oldIndexedMenuAfterReadingAllNewMsgsSetting);
break;
case INDEX_NEWSCAN_ENTER_SHOWS_MSG_LIST_OPT_NUM: case INDEX_NEWSCAN_ENTER_SHOWS_MSG_LIST_OPT_NUM:
var oldIndexedModeEnterShowsMsgListSetting = this.userSettings.enterFromIndexMenuShowsMsgList; var oldIndexedModeEnterShowsMsgListSetting = this.userSettings.enterFromIndexMenuShowsMsgList;
this.userSettings.enterFromIndexMenuShowsMsgList = !console.noyes("Index menu: Show message list with enter"); this.userSettings.enterFromIndexMenuShowsMsgList = !console.noyes("Index menu: Show message list with enter");
...@@ -15603,7 +15625,7 @@ function DigDistMsgReader_DoIndexedMode(pScanScope, pNewscanOnly) ...@@ -15603,7 +15625,7 @@ function DigDistMsgReader_DoIndexedMode(pScanScope, pNewscanOnly)
console.putmsg(pReader.indexedModeHelpLine); // console.putmsg() can process @-codes, which we use for mouse click tracking console.putmsg(pReader.indexedModeHelpLine); // console.putmsg() can process @-codes, which we use for mouse click tracking
console.attributes = "N"; console.attributes = "N";
} }
}, 2); }, 3);
if (userSettingsRetObj.needWholeScreenRefresh) if (userSettingsRetObj.needWholeScreenRefresh)
{ {
drawMenu = true; drawMenu = true;
...@@ -15621,6 +15643,11 @@ function DigDistMsgReader_DoIndexedMode(pScanScope, pNewscanOnly) ...@@ -15621,6 +15643,11 @@ function DigDistMsgReader_DoIndexedMode(pScanScope, pNewscanOnly)
else else
this.DoUserSettings_Traditional(); this.DoUserSettings_Traditional();
} }
// CTRL-S: Re-scan sub-boards
else if (indexRetObj.lastUserInput == this.indexedModeMenuKeys.reScanSubBoards)
{
drawMenu = true;
}
else else
continueOn = false; continueOn = false;
} }
...@@ -15724,19 +15751,7 @@ function DigDistMsgReader_IndexedModeChooseSubBoard(pClearScreen, pDrawMenu, pDi ...@@ -15724,19 +15751,7 @@ function DigDistMsgReader_IndexedModeChooseSubBoard(pClearScreen, pDrawMenu, pDi
this.indexedModeMenu = this.CreateLightbarIndexedModeMenu(numMsgsWidth, numNewMsgsWidth, lastPostDateWidth, this.indexedModeItemDescWidth, this.indexedModeSubBoardMenuSubBoardFormatStr); this.indexedModeMenu = this.CreateLightbarIndexedModeMenu(numMsgsWidth, numNewMsgsWidth, lastPostDateWidth, this.indexedModeItemDescWidth, this.indexedModeSubBoardMenuSubBoardFormatStr);
} }
else else
{
DigDistMsgReader_IndexedModeChooseSubBoard.selectedItemIdx = this.indexedModeMenu.selectedItemIdx; DigDistMsgReader_IndexedModeChooseSubBoard.selectedItemIdx = this.indexedModeMenu.selectedItemIdx;
/*
// Temporary
if (user.is_sysop)
{
console.print("\x01n\r\n");
console.print("Indexed menu item index: " + DigDistMsgReader_IndexedModeChooseSubBoard.selectedItemIdx + "\r\n");
console.pause();
}
// End Temporary
*/
}
// Ensure the menu is clear, and (re-)populate the menu with sub-board information w/ # of new messages in each, etc. // Ensure the menu is clear, and (re-)populate the menu with sub-board information w/ # of new messages in each, etc.
// Also, build an array of sub-board codes for each menu item. // Also, build an array of sub-board codes for each menu item.
this.indexedModeMenu.RemoveAllItems(); this.indexedModeMenu.RemoveAllItems();
...@@ -15804,9 +15819,9 @@ function DigDistMsgReader_IndexedModeChooseSubBoard(pClearScreen, pDrawMenu, pDi ...@@ -15804,9 +15819,9 @@ function DigDistMsgReader_IndexedModeChooseSubBoard(pClearScreen, pDrawMenu, pDi
} }
return retObj; return retObj;
} }
// For a newscan, if there are no new messages and the user setting to show the indexed menu when there are no new messages // For a newscan, if this is the first function call and there are no new messages and the user setting to show the indexed menu when there are no new messages
// is disabled, then say so and return. // is disabled, then say so and return.
else if (thisFunctionFirstCall && totalNewMsgs == 0 && (!this.userSettings.displayIndexedModeMenuIfNoNewMessages || !this.userSettings.showIndexedNewscanMenuAfterReadingAllNewMsgs)) else if (thisFunctionFirstCall && totalNewMsgs == 0 && !this.userSettings.displayIndexedModeMenuIfNoNewMessages && !gCmdLineArgVals.newscanindexmenuafterreadallnew)
{ {
if (newScanOnly) if (newScanOnly)
{ {
...@@ -15819,7 +15834,7 @@ function DigDistMsgReader_IndexedModeChooseSubBoard(pClearScreen, pDrawMenu, pDi ...@@ -15819,7 +15834,7 @@ function DigDistMsgReader_IndexedModeChooseSubBoard(pClearScreen, pDrawMenu, pDi
} }
// For a newscan, if this is not the first time the indexed newscan menu is being displayed and there are no more new // For a newscan, if this is not the first time the indexed newscan menu is being displayed and there are no more new
// messages, and the user has the setting to show the indexed newscan menu now is disabled, then return. // messages, and the user has the setting to show the indexed newscan menu now is disabled, then return.
else if (!thisFunctionFirstCall && totalNewMsgs == 0 && !this.userSettings.showIndexedNewscanMenuAfterReadingAllNewMsgs) else if (!thisFunctionFirstCall && totalNewMsgs == 0 && !gCmdLineArgVals.newscanindexmenuafterreadallnew)
{ {
if (newScanOnly) if (newScanOnly)
{ {
...@@ -15837,7 +15852,10 @@ function DigDistMsgReader_IndexedModeChooseSubBoard(pClearScreen, pDrawMenu, pDi ...@@ -15837,7 +15852,10 @@ function DigDistMsgReader_IndexedModeChooseSubBoard(pClearScreen, pDrawMenu, pDi
{ {
var savedItemIdx = DigDistMsgReader_IndexedModeChooseSubBoard.selectedItemIdx; var savedItemIdx = DigDistMsgReader_IndexedModeChooseSubBoard.selectedItemIdx;
if (this.indexedModeSetIdxMnuIdxOneMore) if (this.indexedModeSetIdxMnuIdxOneMore)
{
++savedItemIdx; ++savedItemIdx;
this.indexedModeSetIdxMnuIdxOneMore = false;
}
if (savedItemIdx >= 0 && savedItemIdx < this.indexedModeMenu.NumItems()) if (savedItemIdx >= 0 && savedItemIdx < this.indexedModeMenu.NumItems())
setIndexedSubBoardMenuSelectedItemIdx(this.indexedModeMenu, savedItemIdx); setIndexedSubBoardMenuSelectedItemIdx(this.indexedModeMenu, savedItemIdx);
else else
...@@ -15933,30 +15951,114 @@ function DigDistMsgReader_IndexedModeChooseSubBoard(pClearScreen, pDrawMenu, pDi ...@@ -15933,30 +15951,114 @@ function DigDistMsgReader_IndexedModeChooseSubBoard(pClearScreen, pDrawMenu, pDi
}); });
menuItem.text = itemInfo.itemText; menuItem.text = itemInfo.itemText;
this.indexedModeMenu.items[this.indexedModeMenu.selectedItemIdx] = menuItem; this.indexedModeMenu.items[this.indexedModeMenu.selectedItemIdx] = menuItem;
// Visually refresh the item on the menu
//if (usingANSI)
// this.indexedModeMenu.WriteItemAtItsLocation(this.indexedModeMenu.selectedItemIdx, true, false);
// If the user wants to (based on their settings), "snap" to the next sub-board with new messages if there
// is one
var newMsgsExistInOtherSubBoards = false; // Whether or not new messages exist in any other sub-boards
var fullNewMsgCheckEndIdx = this.indexedModeMenu.NumItems(); // For later: End index for full sub-board list new-message check
var originalSelectedSubBoardIdx = this.indexedModeMenu.selectedItemIdx;
if (this.userSettings.indexedModeMenuSnapToNextWithNewAftarMarkAllRead && this.indexedModeMenu.selectedItemIdx < this.indexedModeMenu.NumItems())
{
fullNewMsgCheckEndIdx = this.indexedModeMenu.selectedItemIdx; // For full sub-board list check later
var foundNextItem = false;
for (var i = this.indexedModeMenu.selectedItemIdx+1; i < this.indexedModeMenu.NumItems(); ++i)
{
var menuItem = this.indexedModeMenu.GetItem(i);
if (menuItem == null || typeof(menuItem) !== "object" || !menuItem.hasOwnProperty("retval"))
continue;
if (menuItem.hasOwnProperty("isSelectable") && menuItem.isSelectable && menuItem.retval.numNewMsgs > 0)
{
foundNextItem = true;
// If the new item is on the screen, then refresh the 2 items; and no need to refresh the whole menu
if (i >= this.indexedModeMenu.topItemIdx && i <= this.indexedModeMenu.GetBottomItemIdx() && usingANSI)
{
// Write the current item un-selected, and write the new item selected
this.indexedModeMenu.WriteItemAtItsLocation(this.indexedModeMenu.selectedItemIdx, false, false);
this.indexedModeMenu.WriteItemAtItsLocation(i, true, false);
drawMenu = false;
}
else
drawMenu = true;
this.indexedModeMenu.SetSelectedItemIdx(i);
DigDistMsgReader_IndexedModeChooseSubBoard.selectedItemIdx = i;
break;
}
}
// If another menu item wasn't found, then visually refresh the current one that was marked all read
if (!foundNextItem && usingANSI)
this.indexedModeMenu.WriteItemAtItsLocation(this.indexedModeMenu.selectedItemIdx, true, false);
// If no sub-board with new messages was found going forward, then start at the first and check
newMsgsExistInOtherSubBoards = foundNextItem;
if (!newMsgsExistInOtherSubBoards && originalSelectedSubBoardIdx > 0)
{
for (var i = 0; i < fullNewMsgCheckEndIdx && !newMsgsExistInOtherSubBoards; ++i)
{
var menuItem = this.indexedModeMenu.GetItem(i);
if (menuItem == null || typeof(menuItem) !== "object" || !menuItem.hasOwnProperty("retval"))
continue;
newMsgsExistInOtherSubBoards = (menuItem.hasOwnProperty("isSelectable") && menuItem.isSelectable && menuItem.retval.numNewMsgs > 0);
}
}
}
else
{
// Visually refresh the current sub-board on the menu that was marked all read
if (usingANSI)
{
this.indexedModeMenu.WriteItemAtItsLocation(this.indexedModeMenu.selectedItemIdx, true, false); this.indexedModeMenu.WriteItemAtItsLocation(this.indexedModeMenu.selectedItemIdx, true, false);
drawMenu = false;
}
else
drawMenu = true;
}
// If doing a newscan & the command-line indexed mode override is not specified, then if there are
// no more new messages in any of the sub-boards, exit he newscan.
if (newScanOnly && !gCmdLineArgVals.indexedmode && !newMsgsExistInOtherSubBoards)
{
console.attributes = "N";
if (usingANSI)
console.gotoxy(1, console.screen_rows);
console.crlf();
printf(bbs.text(MessageScanComplete), numSubBoards);
console.pause();
return retObj;
}
} }
drawMenu = false; // No need to re-draw the whole menu else
drawMenu = false;
} }
// Things for the calling function to handle
// User settings dialog
else if (lastUserInputUpper == this.indexedModeMenuKeys.userSettings) else if (lastUserInputUpper == this.indexedModeMenuKeys.userSettings)
{ {
// The calling function will do the user settings dialog
continueOn = false; continueOn = false;
retObj.lastUserInput = this.indexedModeMenuKeys.userSettings; retObj.lastUserInput = this.indexedModeMenuKeys.userSettings;
} }
// Help screen for indexed mode
else if (lastUserInputUpper == this.indexedModeMenuKeys.help) else if (lastUserInputUpper == this.indexedModeMenuKeys.help)
{ {
// The calling function will show the help screen and re-drawe
// the bottom help line below the menu
continueOn = false; continueOn = false;
retObj.lastUserInput = this.indexedModeMenuKeys.help; retObj.lastUserInput = this.indexedModeMenuKeys.help;
} }
// Re-scan sub-boards
else if (lastUserInputUpper == this.indexedModeMenuKeys.reScanSubBoards)
{
continueOn = false;
retObj.lastUserInput = this.indexedModeMenuKeys.reScanSubBoards;
}
} }
console.attributes = "N"; console.attributes = "N";
return retObj; return retObj;
} }
   
// Helper for DigDistMsgReader_IndexedModeChooseSubBoard(): Sets the selected item in the // Helper for DigDistMsgReader_IndexedModeChooseSubBoard(): Sets the selected item in the
// indexed mode sub-board menu and adjusts the menu items to be in a good location // indexed mode sub-board menu and adjusts the menu items to be in a good location.
// This assumes the menu will be re-drawn afterward.
// //
// Parameters: // Parameters:
// pIndexSubBoardMenu: The indexed sub-board menu // pIndexSubBoardMenu: The indexed sub-board menu
...@@ -15980,12 +16082,16 @@ function setIndexedSubBoardMenuSelectedItemIdx(pIndexSubBoardMenu, pSelectedItem ...@@ -15980,12 +16082,16 @@ function setIndexedSubBoardMenuSelectedItemIdx(pIndexSubBoardMenu, pSelectedItem
if (!selectedItemIsFirst && !selectedItemOnLastPage && moreThanOneScreenfulOfItems && !selectedItemIsOnFirstPage) if (!selectedItemIsFirst && !selectedItemOnLastPage && moreThanOneScreenfulOfItems && !selectedItemIsOnFirstPage)
{ {
if (pIndexSubBoardMenu.selectedItemIdx > 0) if (pIndexSubBoardMenu.selectedItemIdx > 0)
{
pIndexSubBoardMenu.topItemIdx = pIndexSubBoardMenu.selectedItemIdx - 1; pIndexSubBoardMenu.topItemIdx = pIndexSubBoardMenu.selectedItemIdx - 1;
}
else else
{
pIndexSubBoardMenu.topItemIdx = pIndexSubBoardMenu.selectedItemIdx; pIndexSubBoardMenu.topItemIdx = pIndexSubBoardMenu.selectedItemIdx;
} }
} }
} }
}
   
// Helper for DigDistMsgReader_IndexedModeChooseSubBoard(): Sets the selected item in the // Helper for DigDistMsgReader_IndexedModeChooseSubBoard(): Sets the selected item in the
// indexed mode sub-board menu to the next sub-board with new messages, including the // indexed mode sub-board menu to the next sub-board with new messages, including the
...@@ -16126,9 +16232,10 @@ function DigDistMsgReader_ShowIndexedListHelp() ...@@ -16126,9 +16232,10 @@ function DigDistMsgReader_ShowIndexedListHelp()
printf(formatStr2, "HOME", "F", "Go to the first item"); printf(formatStr2, "HOME", "F", "Go to the first item");
printf(formatStr2, "END", "L", "Go to the last item"); printf(formatStr2, "END", "L", "Go to the last item");
printf(formatStr, "ENTER", "Read the sub-board"); printf(formatStr, "ENTER", "Read the sub-board");
printf(formatStr, "R", "Mark all read"); printf(formatStr, "R", "Mark all read in the sub-board");
printf(formatStr, "M", "Show message list for the sub-board"); printf(formatStr, "M", "Show message list for the sub-board");
printf(formatStr, "Ctrl-U", "User settings"); printf(formatStr, "Ctrl-U", "User settings");
printf(formatStr, "Ctrl-S", "Re-scan sub-boards");
printf(formatStr, "Q", "Quit"); printf(formatStr, "Q", "Quit");
//printf(formatStr, "?", "Show this help screen"); //printf(formatStr, "?", "Show this help screen");
} }
...@@ -19840,7 +19947,8 @@ function parseArgs(argv) ...@@ -19840,7 +19947,8 @@ function parseArgs(argv)
if ((argName == "chooseareafirst") || (argName == "personalemail") || if ((argName == "chooseareafirst") || (argName == "personalemail") ||
(argName == "personalemailsent") || (argName == "allpersonalemail") || (argName == "personalemailsent") || (argName == "allpersonalemail") ||
(argName == "verboselogging") || (argName == "suppresssearchtypetext") || (argName == "verboselogging") || (argName == "suppresssearchtypetext") ||
(argName == "onlynewpersonalemail") || (argName == "indexedmode")) (argName == "onlynewpersonalemail") || (argName == "indexedmode") ||
(argName == "newscanindexmenuafterreadallnew"))
{ {
argVals[argName] = true; argVals[argName] = true;
} }
...@@ -20053,6 +20161,7 @@ function getDefaultArgParseObj() ...@@ -20053,6 +20161,7 @@ function getDefaultArgParseObj()
verboselogging: false, verboselogging: false,
suppresssearchtypetext: false, suppresssearchtypetext: false,
indexedmode: false, indexedmode: false,
newscanindexmenuafterreadallnew: false,
loadableModule: false, loadableModule: false,
exitNow: false exitNow: false
}; };
...@@ -24153,6 +24262,7 @@ function entryExistsInGlobalEmailFilter(pEmailAddr) ...@@ -24153,6 +24262,7 @@ function entryExistsInGlobalEmailFilter(pEmailAddr)
return entryExists; return entryExists;
} }
   
/////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////
   
// For debugging: Writes some text on the screen at a given location with a given pause. // For debugging: Writes some text on the screen at a given location with a given pause.
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
// If you have DDMsgReader in a directory other than xtrn/DDMsgReader, then the changes to // If you have DDMsgReader in a directory other than xtrn/DDMsgReader, then the changes to
// DDMsgReader.cfg will be saved in that directory (assuming you're running ddmr_cfg.js from // DDMsgReader.cfg will be saved in that directory (assuming you're running ddmr_cfg.js from
// that same directory). // that same directory).
// Currently for DDMsgReader 1.94. // Currently for DDMsgReader 1.94a.
// //
// If you're running DDMsgReader from xtrn/DDMsgReader (the standard location) and you want // If you're running DDMsgReader from xtrn/DDMsgReader (the standard location) and you want
// to save the configuration file there (rather than sbbs/mods), you can use one of the // to save the configuration file there (rather than sbbs/mods), you can use one of the
...@@ -18,7 +18,7 @@ require("sbbsdefs.js", "P_NONE"); ...@@ -18,7 +18,7 @@ require("sbbsdefs.js", "P_NONE");
require("uifcdefs.js", "UIFC_INMSG"); require("uifcdefs.js", "UIFC_INMSG");
if (!uifc.init("DigDist. Message Reader 1.94 Configurator")) if (!uifc.init("DigDist. Message Reader 1.94a Configurator"))
{ {
print("Failed to initialize uifc"); print("Failed to initialize uifc");
exit(1); exit(1);
...@@ -113,6 +113,7 @@ function doMainMenu() ...@@ -113,6 +113,7 @@ function doMainMenu()
"useIndexedModeForNewscan", // Boolean "useIndexedModeForNewscan", // Boolean
"displayIndexedModeMenuIfNoNewMessages", // Boolean "displayIndexedModeMenuIfNoNewMessages", // Boolean
"indexedModeMenuSnapToFirstWithNew", // Boolean "indexedModeMenuSnapToFirstWithNew", // Boolean
"indexedModeMenuSnapToNextWithNewAftarMarkAllRead", // Boolean
"newscanOnlyShowNewMsgs", // Boolean "newscanOnlyShowNewMsgs", // Boolean
"promptDelPersonalEmailAfterReply", // Boolean "promptDelPersonalEmailAfterReply", // Boolean
"themeFilename" // String "themeFilename" // String
...@@ -145,6 +146,7 @@ function doMainMenu() ...@@ -145,6 +146,7 @@ function doMainMenu()
"Use Indexed Mode For Newscan", "Use Indexed Mode For Newscan",
"Display Indexed menu even with no new messages", "Display Indexed menu even with no new messages",
"Index menu: Snap to sub-boards w/ new messages", "Index menu: Snap to sub-boards w/ new messages",
"Index menu mark all read: Snap to subs w/ new msgs",
"During a newscan, only show new messages", "During a newscan, only show new messages",
"Personal email: Prompt to delete after reply", "Personal email: Prompt to delete after reply",
"Theme Filename" "Theme Filename"
...@@ -554,6 +556,10 @@ function getOptionHelpText() ...@@ -554,6 +556,10 @@ function getOptionHelpText()
optionHelpText["indexedModeMenuSnapToFirstWithNew"] += "sub-board menu. This is a default for a user setting that users can toggle "; optionHelpText["indexedModeMenuSnapToFirstWithNew"] += "sub-board menu. This is a default for a user setting that users can toggle ";
optionHelpText["indexedModeMenuSnapToFirstWithNew"] += "for themselves"; optionHelpText["indexedModeMenuSnapToFirstWithNew"] += "for themselves";
optionHelpText["indexedModeMenuSnapToNextWithNewAftarMarkAllRead"] = "Index menu mark all read: Snap to subs w/ new msgs: For the indexed sub-board menu when doing a newscan, ";
optionHelpText["indexedModeMenuSnapToNextWithNewAftarMarkAllRead"] += "whether or not to 'snap' the lightbar selected item to the next sub-board with ";
optionHelpText["indexedModeMenuSnapToNextWithNewAftarMarkAllRead"] += "new messages when the user marks all messages as read in a sub-board on the menu";
optionHelpText["newscanOnlyShowNewMsgs"] = "During a newscan, only show new messages (default for a user setting): Whether or not "; optionHelpText["newscanOnlyShowNewMsgs"] = "During a newscan, only show new messages (default for a user setting): Whether or not ";
optionHelpText["newscanOnlyShowNewMsgs"] += "to only show new messages when the user is doing a newscan. Users can toggle this as "; optionHelpText["newscanOnlyShowNewMsgs"] += "to only show new messages when the user is doing a newscan. Users can toggle this as ";
optionHelpText["newscanOnlyShowNewMsgs"] += "they like."; optionHelpText["newscanOnlyShowNewMsgs"] += "they like.";
...@@ -756,6 +762,8 @@ function readDDMsgReaderCfgFile() ...@@ -756,6 +762,8 @@ function readDDMsgReaderCfgFile()
retObj.cfgOptions.newscanOnlyShowNewMsgs = true; retObj.cfgOptions.newscanOnlyShowNewMsgs = true;
if (!retObj.cfgOptions.hasOwnProperty("indexedModeMenuSnapToFirstWithNew")) if (!retObj.cfgOptions.hasOwnProperty("indexedModeMenuSnapToFirstWithNew"))
retObj.cfgOptions.indexedModeMenuSnapToFirstWithNew = false; retObj.cfgOptions.indexedModeMenuSnapToFirstWithNew = false;
if (!retObj.cfgOptions.hasOwnProperty("indexedModeMenuSnapToNextWithNewAftarMarkAllRead"))
retObj.cfgOptions.indexedModeMenuSnapToNextWithNewAftarMarkAllRead = true;
if (!retObj.cfgOptions.hasOwnProperty("promptDelPersonalEmailAfterReply")) if (!retObj.cfgOptions.hasOwnProperty("promptDelPersonalEmailAfterReply"))
retObj.cfgOptions.promptDelPersonalEmailAfterReply = false; retObj.cfgOptions.promptDelPersonalEmailAfterReply = false;
if (!retObj.cfgOptions.hasOwnProperty("themeFilename")) if (!retObj.cfgOptions.hasOwnProperty("themeFilename"))
......
Digital Distortion Message Reader Digital Distortion Message Reader
Version 1.94 Version 1.95
Release date: 2024-01-08 Release date: 2024-01-20
by by
...@@ -314,6 +314,8 @@ The following are the command-line parameters supported by DDMsgReader.js: ...@@ -314,6 +314,8 @@ The following are the command-line parameters supported by DDMsgReader.js:
This is intended to work if it is the only command-line option. This is intended to work if it is the only command-line option.
-indexModeScope: Specifies the scope (set of sub-boards) for indexed reader mode -indexModeScope: Specifies the scope (set of sub-boards) for indexed reader mode
with -indexedMode. Valid values are "group" or "all". with -indexedMode. Valid values are "group" or "all".
-newscanIndexMenuAfterReadAllNew: Always display the indexed mode menu, even
during a newscan after the user has read all new messages
-search: A search type. Available options: -search: A search type. Available options:
keyword_search: Do a keyword search in message subject/body text (current message area) keyword_search: Do a keyword search in message subject/body text (current message area)
from_name_search: 'From' name search (current message area) from_name_search: 'From' name search (current message area)
...@@ -461,6 +463,14 @@ prompting): ...@@ -461,6 +463,14 @@ prompting):
- Start in indexed reader mode for all sub-boards(without prompting): - Start in indexed reader mode for all sub-boards(without prompting):
?../xtrn/DDMsgReader/DDMsgReader.js -indexedMode -indexModeScope=all ?../xtrn/DDMsgReader/DDMsgReader.js -indexedMode -indexModeScope=all
- Start in indexed reader mode for all sub-boards (without prompting), and still
show the indexed mode menu when the user is done reading all messages:
?../xtrn/DDMsgReader/DDMsgReader.js -indexedMode -indexModeScope=all -newscanIndexMenuAfterReadAllNew
- Do a newscan for all-subobards, use the indexed mode menu, and continue displaying
the index mode menu after the user has read all new messages:
?../xtrn/DDMsgReader/DDMsgReader.js -search=new_msg_scan -indexedMode -indexModeScope=all -newscanIndexMenuAfterReadAllNew
- Text (keyword) search in the current sub-board, and list the messages found: - Text (keyword) search in the current sub-board, and list the messages found:
?../xtrn/DDMsgReader/DDMsgReader.js -search=keyword_search -startMode=list ?../xtrn/DDMsgReader/DDMsgReader.js -search=keyword_search -startMode=list
...@@ -806,6 +816,15 @@ indexedModeMenuSnapToFirstWithNew For the indexed newscan sub-board menu in ...@@ -806,6 +816,15 @@ indexedModeMenuSnapToFirstWithNew For the indexed newscan sub-board menu in
menu. This is a default for a user setting menu. This is a default for a user setting
that users can toggle for themselves. that users can toggle for themselves.
indexedModeMenuSnapToNextWithNewAftarMarkAllRead
For the indexed sub-board menu when doing
a newscan, whether or not to "snap" the
lightbar selected item to the next
sub-board with new messages when the user
marks all messages as read in a sub-board
on the menu. This is a default for a user
setting that users can toggle for
themselves.
promptDelPersonalEmailAfterReply Default for a user setting: When reading promptDelPersonalEmailAfterReply Default for a user setting: When reading
personal email, whether or not to propmt personal email, whether or not to propmt
......
...@@ -5,6 +5,26 @@ Revision History (change log) ...@@ -5,6 +5,26 @@ Revision History (change log)
============================= =============================
Version Date Description Version Date Description
------- ---- ----------- ------- ---- -----------
1.95 2024-01-20 Removed user option to display indexed mode menu in
newscan after all new messages are read.
Command-line option -indexedMode can now be specified with
-search=new_msg_scan to make it display the indexed mode
menu, regardless of the user setting to use the indexed
mode menu for a newscan.
New command-line option: -newscanIndexMenuAfterReadAllNew
This specifies to continue to display the indexed mode
menu after the user has read all new messages during a
newscan.
The following command-line can be used to do a newscan
for all sub-boards and continue displaying the index mode
menu after the user has read all new messages:
DDMsgReader.js -search=new_msg_scan -indexedMode -indexModeScope=all -newscanIndexMenuAfterReadAllNew
New indexed mode newscan behavior: R (mark all read) moves
to the next sub-board.
Ctrl-S in the indexed mode menu re-scans sub-boards (to
detect more new messages, etc.)
New DDMsgReader.cfg option for user config default:
indexedModeMenuSnapToNextWithNewAftarMarkAllRead
1.94 2024-01-07 Fix: For indexed read mode (not doing a newscan), when 1.94 2024-01-07 Fix: For indexed read mode (not doing a newscan), when
choosing a sub-board to read, the correct (first unread) choosing a sub-board to read, the correct (first unread)
message is displayed. Also, the user's scan pointer is message is displayed. Also, the user's scan pointer is
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment