diff --git a/mystic/HISTORY.txt b/mystic/HISTORY.txt index 73b612a..d4abc71 100644 --- a/mystic/HISTORY.txt +++ b/mystic/HISTORY.txt @@ -4144,3 +4144,47 @@ + Mystic Internet Server (MIS) can now be started in daemon mode by executing MIS with the -d command line option for Unix platforms. + + + Added new Message Base "QuickScan" menu command (MQ). This command + does a scan of message bases and shows you the number of new messages, + new messages to you, total messages, etc. This is modeled after PCBoard + scans and only scans bases in the bases flagged for scanning by the + user. For example: + + Starting QuickScan + + Base: General Messages Total: 1,000 New: 24 Yours: 3 + Base: Test Message Base Total: 1,000 New: 24 Yours: 3 + + Quick Scan Complete + + By default the QuickScan will do a global scan of all message bases in + all groups. However there are many optional data options: + + /CURRENT = scan only current message base + /GROUP = scan only current group's bases + /NOSCAN = do not show "scanning" prompt + /NOFOOT = do not show "end of scan" prompt + /NOHEAD = do not show "starting quickscan" prompt + + This can be combined with the MN menu command to prompt the user what to + do next. You could even get creative with the & MCI codes and MPL to + make logical decisions for the user based on the results of the scan! + + Four new prompts go along with this: + + ; MsgBase quickscan header prompt + 486 |CR|12Starting Quick Scan|CR + + ; MsgBase quickscan Scanning prompt + ; &1=basename &2=current base# &3=total bases# + 487 Scanning |&1 [|&2 of |&3]... + + ; MsgBase quickscan base list prompt + ; &4=msgs in base &5=new messages &6=your messages &7=global total msg + ; &8=global new msgs &9=global your msgs + 488 |03Base: |14|$R40|&1 |03Total: |09|$L04|&4|03 New: |11|$L04|&5 |03Yours: |12|$L03|&6 + + ; MsgBase quickscan footer prompt + ; &7=global total msg &8=global new msgs &9=global your msgs + 489 |CRQuick Scan complete. |CR|CR|PA diff --git a/mystic/bbs_menus.pas b/mystic/bbs_menus.pas index 10dce3e..9839d48 100644 --- a/mystic/bbs_menus.pas +++ b/mystic/bbs_menus.pas @@ -244,7 +244,7 @@ Begin 'M' : Session.Msgs.SendMassEmail; 'N' : Session.Msgs.MessageNewScan (strUpper(Data)); 'P' : Session.Msgs.PostMessage (False, Data); -// 'Q' : Session.Msgs.Message_QuickScan(UpCase(Data[1])); + 'Q' : Session.Msgs.MessageQuickScan(strUpper(Data)); 'R' : Begin If Data = '' Then Data := ' '; diff --git a/mystic/bbs_msgbase.pas b/mystic/bbs_msgbase.pas index a29904d..13f8e52 100644 --- a/mystic/bbs_msgbase.pas +++ b/mystic/bbs_msgbase.pas @@ -51,6 +51,7 @@ Type Procedure PostMessage (Email: Boolean; Data: String); Procedure CheckEMail; Procedure MessageNewScan (Data: String); + Procedure MessageQuickScan (Data: String); Procedure GlobalMessageSearch (Mode: Char); Procedure SetMessagePointers; Procedure ViewSentEmail; @@ -3414,19 +3415,28 @@ Begin DirClean (Session.TempPath, ''); End; -(* -// not completed or documented. is this worth bothering with? pcboard style -Procedure TMsgBase.Message_QuickScan (Mode: Char); -{ C = Current G = Group A = All Areas/Groups } -{ ADD: /NEW show only if new } -{ ADD: /YOU show only if new to you } -{ ADD for prompts: /NOSCAN }{ ADD: /NOFOOT }{ ADD: /NOHEAD } +Procedure TMsgBase.MessageQuickScan (Data: String); +// defaults to ALL mode +// /CURRENT = scan only current message base +// /GROUP = scan only current group bases +// /ALL = scan all bases in all groups +// options: +// /NOSCAN = do not show "scanning" prompt +// /NOFOOT = do not show "end of scan" prompt +// /NOHEAD = do not show "starting quickscan" prompt +// Only scans bases that they have selected in Newscan, of course Const Global_CurBase : LongInt = 1; Global_TotalBases : LongInt = 1; Global_TotalMsgs : LongInt = 0; Global_NewMsgs : LongInt = 0; Global_YourMsgs : LongInt = 0; + ShowIfNew : Boolean = False; + ShowIfYou : Boolean = False; + ShowScanPrompt : Boolean = True; + ShowHeadPrompt : Boolean = True; + ShowFootPrompt : Boolean = True; + Mode : Char = 'A'; Procedure ScanBase; Var @@ -3436,15 +3446,16 @@ Const TotalMsgs : LongInt; MsgTo : String; Begin - Session.io.PromptInfo[1] := MBase.Name; - Session.io.PromptInfo[2] := strI2S(Global_CurBase); - Session.io.PromptInfo[3] := strI2S(Global_TotalBases); + Session.io.PromptInfo[1] := MBase.Name; + Session.io.PromptInfo[2] := strI2S(Global_CurBase); + Session.io.PromptInfo[3] := strI2S(Global_TotalBases); NewMsgs := 0; YourMsgs := 0; TotalMsgs := 0; - Session.io.OutFull('Scanning |&1 [|&2 of |&3]...'); + If ShowScanPrompt Then + Session.io.OutFull(Session.GetPrompt(487)); Case MBase.BaseType of 0 : MsgBase := New(PMsgBaseJAM, Init); @@ -3485,21 +3496,32 @@ Const Session.io.PromptInfo[8] := strI2S(Global_NewMsgs); Session.io.PromptInfo[9] := strI2S(Global_YourMsgs); - Session.io.OutBS(Screen.CursorX, True); - Session.io.OutFullLn('|03Base: |14|$R40|&1 |03Total: |09|$L04|&4|03 New: |11|$L04|&5 |03Yours: |12|$L03|&6'); + If ShowScanPrompt Then + Session.io.OutBS(Screen.CursorX, True); + + If (ShowIfNew And (NewMsgs > 0)) or (ShowIfYou And (YourMsgs > 0)) or (Not ShowIfNew And Not ShowIfYou) Then + Session.io.OutFullLn(Session.GetPrompt(488)); Dispose (MsgBase, Done); End; Var - Old : MBaseRec; + Old : RecMessageBase; Begin - If Not (Mode in ['A', 'C', 'G']) Then Mode := 'G'; + FillChar(Session.io.PromptInfo, SizeOf(Session.io.PromptInfo), 0); - Old := MBase; - Session.User.IgnoreGroup := Mode = 'A'; + If Pos('/GROUP', Data) > 0 Then Mode := 'G'; + If Pos('/CURRENT', Data) > 0 Then Mode := 'C'; - Session.io.OutFullLn ('|CRStarting Quick Scan|CR'); + ShowScanPrompt := Pos('/NOSCAN', Data) = 0; + ShowHeadPrompt := Pos('/NOHEAD', Data) = 0; + ShowFootPrompt := Pos('/NOFOOT', Data) = 0; + + Old := MBase; + Session.User.IgnoreGroup := Mode = 'A'; + + If ShowHeadPrompt Then + Session.io.OutFullLn (Session.GetPrompt(486)); If Mode = 'C' Then ScanBase @@ -3523,12 +3545,12 @@ Begin Close (MBaseFile); End; - Session.io.OutFullLn('|CRQuick Scan complete. |PA'); + If ShowFootPrompt Then + Session.io.OutFullLn(Session.GetPrompt(489)); Session.User.IgnoreGroup := False; - MBase := Old; + MBase := Old; End; -*) Function TMsgBase.SaveMessage (mArea: RecMessageBase; mFrom, mTo, mSubj: String; mAddr: RecEchoMailAddr; mLines: Integer) : Boolean; Var diff --git a/mystic/default.txt b/mystic/default.txt index 6491549..6feaa40 100644 --- a/mystic/default.txt +++ b/mystic/default.txt @@ -942,3 +942,15 @@ 484 |CL|09|17 ° |15Chat mode end.|$X79 |16|DE|DE ; User2User accept chat page request? &1=user &2=Node 485 |CL|15|&1 is requesting private user chat. Accept? |11 +; MsgBase quickscan header prompt +486 |CR|12Starting Quick Scan|CR +; MsgBase quickscan Scanning prompt +; &1=basename &2=current base# &3=total bases# +487 Scanning |&1 [|&2 of |&3]... +; MsgBase quickscan base list prompt +; &4=msgs in base &5=new messages &6=your messages &7=global total msg +; &8=global new msgs &9=global your msgs +488 |03Base: |14|$R40|&1 |03Total: |09|$L04|&4|03 New: |11|$L04|&5 |03Yours: |12|$L03|&6 +; MsgBase quickscan footer prompt +; &7=global total msg &8=global new msgs &9=global your msgs +489 |CRQuick Scan complete. |CR|CR|PA diff --git a/mystic/records.pas b/mystic/records.pas index 03a452a..bcf153d 100644 --- a/mystic/records.pas +++ b/mystic/records.pas @@ -47,7 +47,7 @@ Const mysMaxVoteQuestion = 20; // Max number of voting questions mysMaxMenuNameLen = 20; // menu name size mysMaxMenuCmds = 75; // Maximum menu commands per menu - mysMaxThemeText = 485; // Total prompts in theme file + mysMaxThemeText = 489; // Total prompts in theme file fn_SemFileEcho = 'echomail.now'; fn_SemFileNews = 'newsmail.now';