Develop and Download Open Source Software

Browse CVS Repository

Diff of /gikonavigoeson/gikonavi/ItemDownload.pas

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.42 by q9_, Sun Nov 21 07:25:31 2004 UTC revision 1.43 by h677, Sat Jun 25 11:27:21 2005 UTC
# Line 103  type Line 103  type
103    
104  implementation  implementation
105    
106    uses
107            Y_TextConverter;
108    
109  constructor TDownloadThread.Create(CreateSuspended: Boolean);  constructor TDownloadThread.Create(CreateSuspended: Boolean);
110  begin  begin
111          inherited Create(CreateSuspended);          inherited Create(CreateSuspended);
# Line 187  begin Line 190  begin
190                          begin                          begin
191                                  FDownloadTitle := FItem.FThreadItem.Title;                                  FDownloadTitle := FItem.FThreadItem.Title;
192                                  if FItem.FThreadItem <> nil then begin                                  if FItem.FThreadItem <> nil then begin
193                                          if FItem.FThreadItem.IsBoardPlugInAvailable then begin                      if FItem.FThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
194                                                  boardPlugIn     := FItem.FThreadItem.BoardPlugIn;                          boardPlugIn := FItem.FThreadItem.ParentBoard.BoardPlugIn;
195                                                  Item.State      := TGikoDownloadState( boardPlugIn.DownloadThread( DWORD( FItem.FThreadItem ) ) );                          Item.State      := TGikoDownloadState( boardPlugIn.DownloadThread( DWORD( FItem.FThreadItem ) ) );
196                                          end;                      end;
197                        //if FItem.FThreadItem.IsBoardPlugInAvailable then begin
198                                            //      boardPlugIn     := FItem.FThreadItem.BoardPlugIn;
199                                            //      Item.State      := TGikoDownloadState( boardPlugIn.DownloadThread( DWORD( FItem.FThreadItem ) ) );
200                                            //end;
201                                  end;                                  end;
202                          end;                          end;
203                  end;                  end;
# Line 763  begin Line 770  begin
770                          Writeln('URL: ' + URL);                          Writeln('URL: ' + URL);
771                          {$ENDIF}                          {$ENDIF}
772                          FIndy.Get(URL, ResStream);                          FIndy.Get(URL, ResStream);
773                          Item.Content := GikoSys.GzipDecompress(ResStream, FIndy.Response.ContentEncoding);              Item.Content := GikoSys.GzipDecompress(ResStream, FIndy.Response.ContentEncoding);
774                            {$IFDEF DEBUG}
775                            if (FIndy.URL.Host = 'be.2ch.net') and (FIndy.URL.Path = '/be/') then begin
776                                    Item.Content := EUCtoSJIS(Item.Content);
777                            end;
778                {$ENDIF}
779                          Item.LastModified := FIndy.Response.LastModified;                          Item.LastModified := FIndy.Response.LastModified;
780                          //差分取得で1バイト前からとってきたときはマイナスする                          //差分取得で1バイト前からとってきたときはマイナスする
781  //                      Item.ContentLength := FIndy.Response.ContentLength + AdjustLen;  //                      Item.ContentLength := FIndy.Response.ContentLength + AdjustLen;
# Line 943  var Line 955  var
955          NumCount: Integer;          NumCount: Integer;
956          Body: TStringList;          Body: TStringList;
957          Rec: TSubjectRec;          Rec: TSubjectRec;
958            st, rt : Cardinal;
959          function MakeThreadCallBack(          function MakeThreadCallBack(
960                  inInstance      : DWORD;        // TBoardItem のインスタンス                  inInstance      : DWORD;        // TBoardItem のインスタンス
961                  inURL                           : PChar;        // スレッドの URL                  inURL                           : PChar;        // スレッドの URL
# Line 957  var Line 970  var
970                  boardItem       := TBoard( inInstance );                  boardItem       := TBoard( inInstance );
971    
972                  boardItem.IntData := boardItem.IntData + 1;                  boardItem.IntData := boardItem.IntData + 1;
973                  index := boardItem.GetIndexFromURL( string( inURL ) );                  if boardItem.IntData < (boardItem.Count shr      2) then
974                            index := boardItem.GetIndexFromURL( string( inURL ) )
975                    else
976                            index := boardItem.GetIndexFromURL( string( inURL ), True );
977                  if index = -1 then begin                  if index = -1 then begin
978                          //新しいスレッド                          //新しいスレッド
979                          _ThreadItem := TThreadItem.Create( boardItem.BoardPlugIn, string( inURL ) );                          _ThreadItem := TThreadItem.Create( boardItem.BoardPlugIn, boardItem, string( inURL ) );
980    
981                          _ThreadItem.Title                                       := string( inTitle );                          _ThreadItem.Title                                       := string( inTitle );
982                          _ThreadItem.AllResCount         := inCount;                          _ThreadItem.AllResCount         := inCount;
# Line 971  var Line 987  var
987                          _ThreadItem.AgeSage                             := gasNew;                          _ThreadItem.AgeSage                             := gasNew;
988                          boardItem.Add(_ThreadItem);                          boardItem.Add(_ThreadItem);
989                  end else begin                  end else begin
990                            //順位が上がっていればAgeにする
991                          if boardItem.Items[index].No > boardItem.IntData then                          if boardItem.Items[index].No > boardItem.IntData then
992                                  boardItem.Items[index].AgeSage := gasAge                                  boardItem.Items[index].AgeSage := gasAge
993                          else if boardItem.Items[index].AllResCount < inCount then                          //順位が上がってないけど、レスがついてたら、Sageに
994                            else if boardItem.Items[index].AllResCount <> inCount then
995                                  boardItem.Items[index].AgeSage := gasSage                                  boardItem.Items[index].AgeSage := gasSage
996                            //順位上がってないし、レスの増減も無ければ、None
997                          else                          else
998                                  boardItem.Items[index].AgeSage := gasNone;                                  boardItem.Items[index].AgeSage := gasNone;
999    
1000                          boardItem.Items[index].No                                               := boardItem.IntData;                          boardItem.Items[index].No                                               := boardItem.IntData;
1001                          boardItem.Items[index].AllResCount      := inCount;                          boardItem.Items[index].AllResCount      := inCount;
1002                  end;                  end;
1003    
1004          end;          end;
1005  begin  begin
1006    {$IFDEF DEBUG}
1007            st := GetTickCount;
1008            Writeln('SAVELIST');
1009    {$ENDIF}
1010          //Board.ListData := TList.Create;          //Board.ListData := TList.Create;
1011          Body := TStringList.Create;          Body := TStringList.Create;
1012          try          try
# Line 991  begin Line 1015  begin
1015                  //サーバ上ファイルの更新時刻設定                  //サーバ上ファイルの更新時刻設定
1016                  Board.LastModified := LastModified;                  Board.LastModified := LastModified;
1017    
1018    
1019                  //dat落ちスレのソート順を決定するためにソートする                  //dat落ちスレのソート順を決定するためにソートする
1020                  if GikoSys.Setting.DatOchiSortIndex >= 0 then begin                  if GikoSys.Setting.DatOchiSortIndex >= 0 then begin
1021                          Sort.SortNoFlag := true;                          Sort.SortNoFlag := true;
# Line 1000  begin Line 1025  begin
1025                          Board.CustomSort(ThreadItemSortProc);                          Board.CustomSort(ThreadItemSortProc);
1026                  end;                  end;
1027    
1028    {$IFDEF DEBUG}
1029            rt := GetTickCount - st;
1030            Writeln('END Sortd' + IntToStr(rt) + ' ms');
1031    {$ENDIF}
1032    
1033                  for i := Board.Count - 1 downto 0 do                  for i := Board.Count - 1 downto 0 do
1034                          Board.Items[i].AgeSage := gasNull;                          Board.Items[i].AgeSage := gasNull;
1035    
# Line 1008  begin Line 1038  begin
1038                          // 新しいリストに古いリストのログがあるならそれを新しいリストに追加                          // 新しいリストに古いリストのログがあるならそれを新しいリストに追加
1039                          // 古いログがなければ、新たにスレオブジェクトを作成                          // 古いログがなければ、新たにスレオブジェクトを作成
1040                          Board.IntData := 0;                          Board.IntData := 0;
1041    {$IFDEF DEBUG}
1042            rt := GetTickCount - st;
1043            Writeln('Start Enum' + IntToStr(rt) + ' ms');
1044    {$ENDIF}
1045    
1046                            //これが遅い 要改善
1047                            Board.BeginUpdate;
1048                          Board.BoardPlugIn.EnumThread( DWORD( Board ), @MakeThreadCallBack );                          Board.BoardPlugIn.EnumThread( DWORD( Board ), @MakeThreadCallBack );
1049                            Board.EndUpdate;
1050    
1051    {$IFDEF DEBUG}
1052            rt := GetTickCount - st;
1053            Writeln('End Enum' + IntToStr(rt) + ' ms');
1054    {$ENDIF}
1055    
1056              //古いリストにしかないやつらを削除                          //古いリストにしかないやつらを削除
1057                          for i := Board.Count - 1 downto 0 do begin                          for i := Board.Count - 1 downto 0 do begin
1058                                  if( Board.Items[i].AgeSage = gasNull )and not (Board.Items[i].IsLogFile) then                                  if( Board.Items[i].AgeSage = gasNull )and not (Board.Items[i].IsLogFile) then
1059                                          Board.Delete(i);                                          Board.Delete(i);
# Line 1026  begin Line 1069  begin
1069                                          Board.Items[i].AgeSage                  := gasNone;                                          Board.Items[i].AgeSage                  := gasNone;
1070                                  end;                                  end;
1071                          end;                          end;
1072    
1073                  end else begin                  end else begin
1074                          //新しいリストを作成する                          //新しいリストを作成する
1075                          //新しいリストに古いリストのログがあるならそれを新しいリストに追加                          //新しいリストに古いリストのログがあるならそれを新しいリストに追加
# Line 1041  begin Line 1085  begin
1085                                  if index = -1 then begin                                  if index = -1 then begin
1086                                          //新しいスレッド                                          //新しいスレッド
1087                                          NewItem := TThreadItem.Create(                                          NewItem := TThreadItem.Create(
1088                          nil, GikoSys.Get2chBoard2ThreadURL( Board, ChangeFileExt( Rec.FFileName, '' ) ) );                                                                  nil,
1089                                    Board,
1090                                    GikoSys.Get2chBoard2ThreadURL( Board, ChangeFileExt( Rec.FFileName, '' ) ) );
1091                                          NewItem.Title := Rec.FTitle;                                          NewItem.Title := Rec.FTitle;
1092                                          NewItem.AllResCount := Rec.FCount;                                          NewItem.AllResCount := Rec.FCount;
1093                                          NewItem.ParentBoard := Board;                                          NewItem.ParentBoard := Board;
# Line 1194  var Line 1240  var
1240  begin  begin
1241          FileName := ThreadItem.GetThreadFileName;          FileName := ThreadItem.GetThreadFileName;
1242    
1243          if not ThreadItem.IsBoardPlugInAvailable then begin          //if not ThreadItem.IsBoardPlugInAvailable then begin
1244        if not ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
1245                  if Trim(Content) = '' then                  if Trim(Content) = '' then
1246                          Exit;                          Exit;
1247    

Legend:
Removed from v.1.42  
changed lines
  Added in v.1.43

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26