| 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); |
| 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; |
| 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; |
| 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 |
| 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; |
| 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 |
| 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; |
| 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 |
|
|
| 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); |
| 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 |
//新しいリストに古いリストのログがあるならそれを新しいリストに追加 |
//新しいリストに古いリストのログがあるならそれを新しいリストに追加 |
| 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; |
| 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 |
|
|