OSDN Git Service

Fix: Index error on log download
authornaru <bottle@mikage.to>
Fri, 7 Mar 2003 20:05:31 +0000 (20:05 +0000)
committernaru <bottle@mikage.to>
Fri, 7 Mar 2003 20:05:31 +0000 (20:05 +0000)
bottleclient/LogForm.pas
bottleclient/Logs.pas

index 95a143f..9f77630 100755 (executable)
@@ -889,8 +889,7 @@ procedure TfrmLog.LogLoadFailure(Sender: TObject; const Message: String);
 begin
   Beep;
   ShowMessage(Message);
-  (Sender as TBottleLogList).AddSystemLog(Message);
-  lvwLog.Invalidate;
+  if Sender = SelectedBottleLog then UpdateWindow;
 end;
 
 procedure TfrmLog.AgreeLog(const MID: String; const Agree: integer);
index c87b657..e33dc0e 100755 (executable)
@@ -84,6 +84,7 @@ type
     procedure SetOnLoadFailure(const Value: TBottleLogLoadFailureEvent);
     procedure SetSelectedIndex(const Value: integer);
     procedure SetOnLoadWork(const Value: TNotifyEvent);
+    procedure DoLoadFailure(const ErrorMessage: String);
   public
     constructor Create(const Title: String);
     destructor Destroy; override;
@@ -237,14 +238,24 @@ procedure TBottleLogList.AddScriptLog(const Script, Channel, MID,
 var LogItem: TLogItem;
 begin
   LogItem := TLogItem.Create(ltBottle, MID, Channel, Script, Ghost, Now());
-  Insert(0, LogItem);
+  try
+    Insert(0, LogItem);
+  except
+    LogItem.Free;
+    raise;
+  end;
 end;
 
 procedure TBottleLogList.AddSystemLog(const MessageString: String);
 var LogItem: TLogItem;
 begin
   LogItem := TLogItem.Create(ltSystemLog, '', '', MessageString, '', Now());
-  Insert(0, LogItem);
+  try
+    Insert(0, LogItem);
+  except
+    LogItem.Free;
+    raise;
+  end;
 end;
 
 function TBottleLogList.Bottle(MID: String): TLogItem;
@@ -277,6 +288,13 @@ begin
   end;
 end;
 
+procedure TBottleLogList.DoLoadFailure(const ErrorMessage: String);
+begin
+  self.Clear;
+  self.AddSystemLog(ErrorMessage);
+  if Assigned(FOnLoadFailure) then FOnLoadFailure(self, ErrorMessage);
+end;
+
 function TBottleLogList.GetBottles(Index: integer): TLogItem;
 begin
   Result := Items[Index] as TLogItem;
@@ -284,7 +302,7 @@ end;
 
 procedure TBottleLogList.HttpFailure(Sender: TObject);
 begin
-  if Assigned(FOnLoadFailure) then FOnLoadFailure(Self, '\83T\81[\83o\82Ì\90Ú\91±\82É\8e¸\94s\82µ\82Ü\82µ\82½');
+  if Assigned(FOnLoadFailure) then DoLoadFailure('\83T\81[\83o\82Ì\90Ú\91±\82É\8e¸\94s\82µ\82Ü\82µ\82½');
 end;
 
 procedure TBottleLogList.HttpSuccess(Sender: TObject);
@@ -297,7 +315,7 @@ begin
     StrList.Text := Stream.DataString;
     if StrList[0] <> 'Result: OK' then begin
       if Assigned(FOnLoadFailure) then
-        FOnLoadFailure(Self, '\83T\81[\83o\82ª\83G\83\89\81[\82ð\95Ô\82µ\82Ü\82µ\82½'#13#10 + Stream.DataString);
+        DoLoadFailure('\83T\81[\83o\82ª\83G\83\89\81[\82ð\95Ô\82µ\82Ü\82µ\82½'#13#10 + Stream.DataString);
     end else begin
       while StrList.Count > 0 do
         if StrList[0] <> '' then StrList.Delete(0) else Break; //\83w\83b\83_\81[\82ð\8dí\8f\9c\82·\82é
@@ -336,7 +354,6 @@ var i: integer;
       StrToInt(Copy(S, 9, 2)), StrToInt(Copy(S, 11, 2)), StrToInt(Copy(S, 13, 2)), 0);
   end;
 begin
-  Self.Clear;
   Source := nil;
   SourceStream := nil;
   try
@@ -348,11 +365,12 @@ begin
       Source.Text := SourceStream.DataString;
       i := 0;
       if Source.Count = 0 then begin
-        if Assigned(FOnLoadFailure) then FOnLoadFailure(Self, '\83\8d\83O\82ª\93Ç\82Ý\8eæ\82ê\82Ü\82¹\82ñ');
+        DoLoadFailure('\8ew\92è\8fð\8c\8f\82Ì\83\8d\83O\82Í\91\8dÝ\82µ\82Ü\82¹\82ñ');
         Exit;
       end;
       if Source[0] <> 'OK' then begin
       end;
+      Self.Clear;
       while (i + 7) < Source.Count do begin
         LogItem := TLogItem.Create(ltBottle, Source[i+1], Source[i+2],
           Source[i+7], Source[i+3], S2D(Source[i]));
@@ -368,7 +386,7 @@ begin
     end;
   except
     On EConvertError do begin
-      if Assigned(FOnLoadFailure) then FOnLoadFailure(Self, '\83\8d\83O\82Ì\8c`\8e®\82ª\95s\90³\82Å\82·');
+      DoLoadFailure('\83T\81[\83o\89\9e\93\9a\82Ì\8c`\8e®\82ª\95s\90³\82Å\82·');
       Self.Clear;
     end;
   end;