X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=bottleclient%2FMainForm.pas;fp=bottleclient%2FMainForm.pas;h=e98499f88d0ab256926b7746e47c810fab54c7fd;hb=cde1a4cc24b79b31c427d191dbcd4bf9cb99f26a;hp=cfd56b9ea0b910824b9a8b987004bcfbfc8939d3;hpb=406cd9561d232dbd674d061dfc769f8372a11a0c;p=winbottle%2Fwinbottle.git diff --git a/bottleclient/MainForm.pas b/bottleclient/MainForm.pas index cfd56b9..e98499f 100755 --- a/bottleclient/MainForm.pas +++ b/bottleclient/MainForm.pas @@ -174,8 +174,8 @@ type mnUndo: TMenuItem; mnRedo: TMenuItem; N9: TMenuItem; - ScriptBackUp: TTimer; mnPresetReplaceRoot: TMenuItem; + ScriptBackup: TTimer; OpenDialog: TOpenDialog; mnFileOpen: TMenuItem; actFileOpen: TAction; @@ -280,7 +280,7 @@ type procedure actUndoExecute(Sender: TObject); procedure actRedoExecute(Sender: TObject); // procedure IdSLPP20ConnectFailed(Sender: TObject); - procedure ScriptBackUpTimer(Sender: TObject); + procedure ScriptBackupTimer(Sender: TObject); procedure actFileOpenExecute(Sender: TObject); procedure actFileSaveAsExecute(Sender: TObject); procedure actFileSaveExecute(Sender: TObject); @@ -304,7 +304,10 @@ type // // ƒ[ƒJƒ‹Šm”F‹­§—pƒtƒ‰ƒOBTRichEdit.Modified‚Í // //•Ê‚Ì—p“r‚ÅŽg‚Á‚Ä‚¢‚é‚Ì‚ÅŽg‚¦‚È‚¢ // - FScriptBackModified: boolean; //ƒXƒNƒŠƒvƒgŽ©“®•Û‘¶ƒtƒ‰ƒO + FScriptBackupModified: boolean; // ƒXƒNƒŠƒvƒgƒoƒbƒNƒAƒbƒvƒtƒ‰ƒO + FScriptBackupFile: string; // Œ»Ý‚̃oƒbƒNƒAƒbƒvƒtƒ@ƒCƒ‹–¼ + FScriptBackupDir: string; // ƒoƒbƒNƒAƒbƒvæ‚̃tƒHƒ‹ƒ_–¼ + // FFileModified: boolean; //ƒtƒ@ƒCƒ‹“à—e‚ª•ÏX‚³‚ê‚Ä‚¢‚é‚©B FFileName: string; //V‹K‚©Šù‘¶ƒtƒ@ƒCƒ‹‚Ì”»’fA‚Ü‚½‚ÍŠù‘¶ƒtƒ@ƒCƒ‹‚̏ꏊ // @@ -381,7 +384,7 @@ type procedure AppendTextLog(const FileName, Line: String; FAppend: boolean); procedure AppendXMLLog(const FileName: String; Args: THeadValue); //Ž©“®•Û‘¶Ý’è - procedure SetScriptAutoBackUp; + procedure SetScriptAutoBackup; //’P‘̃tƒ@ƒCƒ‹“üo—ÍŠÖŒW procedure PerformFileOpen(const AFileName: string); procedure PerformFileSave(const AFileName: string); @@ -391,7 +394,8 @@ type function FileSaveAs(Sender: TObject): integer; procedure EditerStatusChange; procedure SetFileModified(Value: boolean); - function CheckFileExt(const AFileName: string): boolean; + function CheckFileExt(const FileName: string): boolean; + procedure DeleteBackupFile(const FileName: string); protected procedure WndProc(var Message: TMessage); override; @@ -446,7 +450,7 @@ const SendButtonLongHint = 'Bottle‚Ì‘—M'; NewFileTitle = '–¼Ì–¢’è'; // V‹Kƒ^ƒCƒgƒ‹ - AutoSaveFile = 'Script.bak'; // FileCheckŽw’è‚ÌŠg’£Žq‚ðŽg‚¤ + StdBackupFile = 'Script.bak'; // FileCheckŽw’è‚ÌŠg’£Žq‚ðŽg‚¤ function Token(const Str: String; const Delimiter: char; const Index: integer): String; @@ -587,6 +591,7 @@ begin Spps.LoadFromDirectory(FSppDir); ConstructMenu(false); BuildReplaceMenu(mnPresetReplaceRoot); + FScriptBackupDir := ExtractFileDir(Application.ExeName) + '\temp\'; Str := TStringList.Create; try @@ -1035,7 +1040,7 @@ begin Self.Show; SakuraSeeker.BeginDetect; SakuraSeekerDetectResultChanged(self); - SetScriptAutoBackUp; // Ž©“®•Û‘¶Ý’è‚̃[ƒh + SetScriptAutoBackup; // Ž©“®•Û‘¶Ý’è‚̃[ƒh { if (SakuraSeeker.Count = 0) and (Pref.NotWarnGhostIsntExists = False) then frmMessageBox.ShowMessage('ƒS[ƒXƒg(SSTPƒT[ƒo)‚ª1‚‚à‹N“®‚µ‚Ä‚¢‚Ü‚¹‚ñB'#13#10 + @@ -1075,7 +1080,7 @@ procedure TfrmSender.memScriptChange(Sender: TObject); begin //ƒGƒfƒBƒ^“à—e‚ª•ÏX‚³‚ꂽ‚Æ‚« EditerStatusChange; // ƒXƒe[ƒ^ƒXXV‚Ö - FScriptBackModified := true; // Ž©“®•Û‘¶ÄŠJ + FScriptBackupModified := true; // Ž©“®•Û‘¶ÄŠJ SetFileModified(true); // ƒtƒ@ƒCƒ‹•ÏXƒtƒ‰ƒO end; @@ -1549,15 +1554,24 @@ begin //ƒƒbƒZ[ƒWŽóM DispatchBottle(EventType, HeadValue); end; + etMemberCount: begin + //‘ŽQ‰ÁŽÒ” StatusBar.Panels[PanelMembers].Text := HeadValue['Num'] + 'l' end; + etChannelCount: begin + //ƒ`ƒƒƒ“ƒlƒ‹•ÊŽQ‰ÁŽÒ” try - ChannelList.Channel[HeadValue['Channel']].Members := StrToInt(HeadValue['Num']); + if HeadValue['Channel'] <> '' then begin + if ChannelList.Channel[HeadValue['Channel']] <> nil then begin + ChannelList.Channel[HeadValue['Channel']].Members := StrToInt(HeadValue['Num']); + end; + end; except end; end; + etConnectOk: begin ShowHintLabel('SSTP BottleƒT[ƒo‚ƒʐMŠm—§B'); Added := true; @@ -1565,34 +1579,50 @@ begin //ƒ`ƒƒƒ“ƒlƒ‹Ž©“®“o˜^ if not Connecting then PostCommand(['Command: getChannels']); - SakuraSeeker.BeginDetect; + try + SakuraSeeker.BeginDetect; + except + on E: Exception do ShowHintLabel(E.Message,WarningColor); + end; end; + etChannelList: begin UpdateJoinChannelList(HeadValue); // ÅŒã‚ÉŽQ‰Á‚µ‚Ä‚¢‚½ƒ`ƒƒƒ“ƒlƒ‹‚ð‹L˜^‚·‚é if JoinChannelsBackup = nil then JoinChannelsBackup := TStringList.Create; JoinChannelsBackup.Assign(JoinChannels); end; + etCloseChannel: begin - with JoinChannels do - if IndexOf(HeadValue['Channel']) >= 0 then - Delete(IndexOf(HeadValue['Channel'])); - with tabChannel do begin - if Tabs.IndexOf(HeadValue['Channel']) >= 0 then - Tabs.Delete(Tabs.IndexOf(HeadValue['Channel'])); - if Tabs.Count > 0 then TabIndex := 0 else TabIndex := -1; - tabChannelChange(self); + //ƒ`ƒƒƒ“ƒlƒ‹”pŽ~ + if HeadValue['Channel'] <> '' then begin + with JoinChannels do + if IndexOf(HeadValue['Channel']) >= 0 then + Delete(IndexOf(HeadValue['Channel'])); + with tabChannel do begin + if Tabs.IndexOf(HeadValue['Channel']) >= 0 then + Tabs.Delete(Tabs.IndexOf(HeadValue['Channel'])); + if Tabs.Count > 0 then TabIndex := 0 else TabIndex := -1; + tabChannelChange(self); + end; + ShowHintLabel(HeadValue['Channel'] + 'ƒ`ƒƒƒ“ƒlƒ‹‚Í”pŽ~‚³‚ê‚Ü‚µ‚½', + WarningColor); + frmLog.AddCurrentSystemLog('SYSTEM', HeadValue['Channel'] + 'ƒ`ƒƒƒ“ƒlƒ‹‚Í”pŽ~‚³‚ê‚Ü‚µ‚½'); + frmMessageBox.ShowMessage(HeadValue['Channel'] + 'ƒ`ƒƒƒ“ƒlƒ‹‚Í”pŽ~‚³‚ê‚Ü‚µ‚½'); end; - ShowHintLabel(HeadValue['Channel'] + 'ƒ`ƒƒƒ“ƒlƒ‹‚Í”pŽ~‚³‚ê‚Ü‚µ‚½', - WarningColor); - frmLog.AddCurrentSystemLog('SYSTEM', HeadValue['Channel'] + 'ƒ`ƒƒƒ“ƒlƒ‹‚Í”pŽ~‚³‚ê‚Ü‚µ‚½'); - frmMessageBox.ShowMessage(HeadValue['Channel'] + 'ƒ`ƒƒƒ“ƒlƒ‹‚Í”pŽ~‚³‚ê‚Ü‚µ‚½'); end; + etForceBroadcastInformation: begin - if HeadValue['Type'] = 'Vote' then begin - frmLog.VoteLog(HeadValue['MID'], StrToIntDef(HeadValue['Num'], 0)); - end else if HeadValue['Type'] = 'Agree' then begin - frmLog.AgreeLog(HeadValue['MID'], StrToIntDef(HeadValue['Num'], 0)); + //“Š•[^“¯ˆÓ^‚»‚Ì‘¼ƒuƒ[ƒhƒLƒƒƒXƒgî•ñ + if HeadValue['MID'] <> '' then begin + try //Num‚ª”’l‚Å‚È‚©‚Á‚½‚Æ‚«‘΍ô + if HeadValue['Type'] = 'Vote' then begin + frmLog.VoteLog(HeadValue['MID'], StrToIntDef(HeadValue['Num'], 0)); + end else if HeadValue['Type'] = 'Agree' then begin + frmLog.AgreeLog(HeadValue['MID'], StrToIntDef(HeadValue['Num'], 0)); + end; + except + end; end; end; end; @@ -1615,7 +1645,10 @@ begin end; procedure TfrmSender.actSettingExecute(Sender: TObject); +var + FTBackupMode: boolean; begin + FTBackupMode := Pref.ScriptBackupMode; Application.CreateForm(TfrmSetting, frmSetting); try frmSetting.Execute; @@ -1630,8 +1663,12 @@ begin UpdateLayout; tabChannel.Repaint; frmLog.UpdateWindow; - SetScriptAutoBackUp; //ƒXƒNƒŠƒvƒgŽ©“®•Û‘¶Ý’èXV + SetScriptAutoBackup; //ƒXƒNƒŠƒvƒgŽ©“®•Û‘¶Ý’èXV UpdateChannelList; //ƒ`ƒƒƒ“ƒlƒ‹ƒS[ƒXƒgÄƒ[ƒh + + // ƒoƒbƒNƒAƒbƒvƒ‚[ƒh‚ª•ÏX‚³‚ꂽ‚Æ‚«FScriptBackupFile‚à•ÏX‚·‚é + if FTBackupMode <> Pref.ScriptBackupMode then + SetFileName(FFileName, false); end; procedure TfrmSender.memScriptKeyPress(Sender: TObject; var Key: Char); @@ -1768,8 +1805,9 @@ begin Tabs.Clear; for i := 0 to JoinChannels.Count-1 do begin //ŽóMê—pƒ`ƒƒƒ“ƒlƒ‹‚Í•\Ž¦‚µ‚È‚¢ - if not ChannelList.Channel[JoinChannels[i]].NoPost then - Tabs.Add(JoinChannels[i]); + if ChannelList.Channel[JoinChannels[i]] <> nil then + if not ChannelList.Channel[JoinChannels[i]].NoPost then + Tabs.Add(JoinChannels[i]); end; Tabs.EndUpdate; // Œ³‚©‚çƒ`ƒƒƒ“ƒlƒ‹‚ÉŽQ‰Á‚µ‚Ä‚¢‚½ê‡‚Í @@ -1847,10 +1885,11 @@ var Opt: TSstpSendOptions; CueItem: TLogItem; ReplaceHash: THeadValue; begin + Channel := Dat['Channel']; + Opt := []; if Pref.NoTranslate then Opt := Opt + [soNoTranslate]; if Pref.NoDescript then Opt := Opt + [soNoDescript]; - Channel := Dat['Channel']; { case EventType of etScript: Sender := Channel; @@ -2337,10 +2376,17 @@ begin exit; end; if (not Pref.ConfirmOnExit) or FEndSession then + begin + DeleteBackupFile(FScriptBackupFile); // ˆêŽžƒtƒ@ƒCƒ‹íœ‚Ö Exit; + end; if MessageDlg('Yasagure Client‚ðI—¹‚µ‚Ü‚·', mtConfirmation, mbOkCancel, 0) = mrCancel then - CanClose := false; + begin + CanClose := false; + exit; + end; + DeleteBackupFile(FScriptBackupFile); // ˆêŽžƒtƒ@ƒCƒ‹íœ‚Ö end; procedure TfrmSender.UpdateIfGhostBox; @@ -3177,9 +3223,9 @@ begin frmSender.actClear.Execute; // Œ»Ý‚̃XƒNƒŠƒvƒg‚ðƒNƒŠƒbƒv‚·‚é(Ý’è‚É‚æ‚Á‚Ä) memScript.Lines.Clear; memScript.Lines.Add(Log.Script); - SetFileName(Log.MID, false); //ƒ^ƒCƒgƒ‹‚¾‚¯•ÏX - SetFileModified(false); //•ÏX–³‚µ‚É - FScriptBackModified := false; //Ž©“®•Û‘¶ˆêŽž’âŽ~ + SetFileName(Log.MID, false); //ƒ^ƒCƒgƒ‹‚¾‚¯•ÏX + SetFileModified(false); //•ÏX–³‚µ‚É + FScriptBackupModified := false; //Ž©“®•Û‘¶ˆêŽž’âŽ~ Ghost := Log.Ghost; //ƒ`ƒƒƒ“ƒlƒ‹ƒS[ƒXƒg‘΍ô if Ghost = '' then @@ -3251,10 +3297,12 @@ begin if Visible then memScript.SetFocus; // FScriptModified := false; - FScriptBackModified := false; // Ž©“®•Û‘¶ˆêŽž’âŽ~ - SetFileName(NewFileTitle, true); // ƒtƒ@ƒCƒ‹‚ðV‹Kˆµ‚¢‚É‚·‚é - SetFileModified(false); // •ÏX–³‚µ - EditerStatusChange; // ƒXƒe[ƒ^ƒXXV + + DeleteBackupFile(FScriptBackupFile); // ˆêŽžƒtƒ@ƒCƒ‹íœ‚Ö + FScriptBackupModified := false; // Ž©“®•Û‘¶ˆêŽž’âŽ~ + SetFileName(NewFileTitle, true); // ƒtƒ@ƒCƒ‹‚ðV‹Kˆµ‚¢‚É‚·‚é + SetFileModified(false); // •ÏX–³‚µ + EditerStatusChange; // ƒXƒe[ƒ^ƒXXV end; procedure TfrmSender.AppendTextLog(const FileName, Line: String; FAppend: boolean); @@ -3265,8 +3313,7 @@ begin try ForceDirectories(ExtractFileDir(FileName)); AssignFile(F, FileName); - // if FileExists(FileName) AND FAppend then // ’Ç‹L‚©ã‘‚«”»’è - if FileExists(FileName) then + if FileExists(FileName) AND FAppend then // ’Ç‹L‚©ã‘‚«”»’è Append(F) else Rewrite(F); @@ -3536,25 +3583,27 @@ begin end; end; -procedure TfrmSender.SetScriptAutoBackUp; +procedure TfrmSender.SetScriptAutoBackup; begin //ƒoƒbƒNƒAƒbƒvƒ^ƒCƒ}[‚Ö’l‚̃Zƒbƒg - frmSender.ScriptBackUp.Enabled := Pref.ScriptBackUp; - frmSender.ScriptBackUp.Interval := Pref.ScriptBackUpTime * 60000; + frmSender.ScriptBackup.Enabled := Pref.ScriptBackup; + frmSender.ScriptBackup.Interval := Pref.ScriptBackupTime * 60000; end; -procedure TfrmSender.ScriptBackUpTimer(Sender: TObject); +procedure TfrmSender.ScriptBackupTimer(Sender: TObject); var Script: string; begin - //ƒXƒNƒŠƒvƒg‚ÌŽ©“®ƒoƒbƒNƒAƒbƒv - if FScriptBackModified then + // ƒXƒNƒŠƒvƒg‚̃oƒbƒNƒAƒbƒv + if FScriptBackupModified then begin Script := FormatDateTime('yy/mm/dd hh:nn:ss', Now) + #13#10 + GetScriptText; - AppendTextLog(ExtractFilePath(Application.ExeName) + AutoSaveFile, - Script, Pref.ScriptBackUpMode); + + AppendTextLog(FScriptBackupDir + FScriptBackupFile, Script, + not Pref.ScriptBackupMode); + ShowHintLabel('ƒoƒbƒNƒAƒbƒvŽÀs'); - FScriptBackModified := False; + FScriptBackupModified := False; end; end; @@ -3651,11 +3700,21 @@ begin end; procedure TfrmSender.SetFileName(const FileName: string; Value: boolean); +var + FPath: string; begin // ƒ^ƒCƒgƒ‹•ÏX‚ƃtƒ@ƒCƒ‹ƒpƒXƒZƒbƒg // ‚à‚µA‘æ“ñˆø”‚ªfalse‚È‚çƒ^ƒCƒgƒ‹‚¾‚¯•ÏX - if Value then FFileName := FileName; - Self.Caption := Format('%s - %s', [ExtractFileName(FileName), FOriginalCaption]); + if Value then + FFileName := FileName; + + FPath := ExtractFileName(FileName); + + if Pref.ScriptBackupMode then + FScriptBackupFile := FormatDateTime('yymmddhhnnss', Now) + FPath + else + FScriptBackupFile := StdBackupFile; + Self.Caption := Format('%s - %s', [FPath, FOriginalCaption]); end; function TfrmSender.CheckFileModified(Sender: TObject): integer; @@ -3753,13 +3812,13 @@ begin end; end; -function TfrmSender.CheckFileExt(const AFileName: string): boolean; +function TfrmSender.CheckFileExt(const FileName: string): boolean; var Res: boolean; begin // Šg’£Žq.bak‚̃tƒ@ƒCƒ‹‚͓Ǐ‘‚«‚µ‚È‚¢B Res := true; - if LowerCase(ExtractFileExt(AFileName)) = '.bak' then + if LowerCase(ExtractFileExt(FileName)) = '.bak' then // StdBackupFile‚Æ“¯Šg’£Žq begin beep; ShowMessage('Šg’£Žqbak‚͈µ‚¦‚Ü‚¹‚ñB'#13#10 + '‘¼‚̃GƒfƒBƒ^‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢B'); @@ -3768,6 +3827,24 @@ begin Result := Res; end; +procedure TfrmSender.DeleteBackupFile(const FileName: string); +var + FPath: string; +begin + // ã‘•Û‘¶‚̈ꎞƒtƒ@ƒCƒ‹‚ðíœ + if not Pref.ScriptBackupMode or (FileName = '') or + (StdBackupFile = FileName) then exit; + + FPath := FScriptBackupDir + FileName; + try + if FileExists(FPath) then + DeleteFile(FPath); + except + on E: Exception do + ShowMessage('ˆêŽžƒtƒ@ƒCƒ‹íœƒGƒ‰[:'#13#10#13#10 + E.Message); + end; +end; + {$IFDEF PASS} procedure TfrmSender.CopyDataMessage(var WMCopyData: TWMCopyData); var