X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_res_downloader.pas;h=78b0b2803ddccde223d34b5705f9def7191d5b63;hb=31039aaf7e1623de1a4be292d0c77532fcfbf3e6;hp=fc815dabc5b526302cc20640885a782a0f1e88d0;hpb=41d480b02f4d0257f13a87810c0053b8b0df3b13;p=d2df-sdl.git diff --git a/src/game/g_res_downloader.pas b/src/game/g_res_downloader.pas index fc815da..78b0b28 100644 --- a/src/game/g_res_downloader.pas +++ b/src/game/g_res_downloader.pas @@ -1,3 +1,19 @@ +(* Copyright (C) Doom 2D: Forever Developers + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + *) +{$INCLUDE ../shared/a_modes.inc} unit g_res_downloader; interface @@ -9,7 +25,7 @@ function g_Res_DownloadWAD(const FileName: string): string; implementation -uses g_language, sfs, WADEDITOR; +uses g_language, sfs, utils, wadreader, g_game; const DOWNLOAD_DIR = 'downloads'; @@ -23,7 +39,7 @@ begin repeat if (searchResult.Attr and faDirectory) = 0 then begin - if SFSStrEqu(searchResult.Name, filename) then + if StrEquCI1251(searchResult.Name, filename) then begin files.Add(dirName+'/'+filename); Exit; @@ -90,15 +106,14 @@ end; function SaveWAD(const path, filename: string; const data: array of Byte): string; var - resFile: TFileStream; + resFile: TStream; + dpt: string; begin try - Result := path + DOWNLOAD_DIR + '/' + filename; - if not DirectoryExists(path + DOWNLOAD_DIR) then - begin - CreateDir(path + DOWNLOAD_DIR); - end; - resFile := TFileStream.Create(Result, fmCreate); + result := path+DOWNLOAD_DIR+'/'+filename; + dpt := path+DOWNLOAD_DIR; + if not findFileCI(dpt, true) then CreateDir(dpt); + resFile := createDiskFile(result); resFile.WriteBuffer(data[0], Length(data)); resFile.Free except @@ -109,14 +124,15 @@ end; function g_Res_DownloadWAD(const FileName: string): string; var msgStream: TMemoryStream; - resStream: TFileStream; + resStream: TStream; mapData: TMapDataMsg; i: Integer; resData: TResDataMsg; begin SetLength(mapData.ExternalResources, 0); g_Console_Add(Format(_lc[I_NET_MAP_DL], [FileName])); - e_WriteLog('Downloading map `' + FileName + '` from server', MSG_NOTIFY); + e_WriteLog('Downloading map `' + FileName + '` from server', TMsgType.Notify); + g_Game_SetLoadingText(FileName + '...', 0, False); MC_SEND_MapRequest(); msgStream := g_Net_Wait_Event(NET_MSG_MAP_RESPONSE); @@ -124,7 +140,8 @@ begin begin mapData := MapDataFromMsgStream(msgStream); msgStream.Free; - end; + end else + mapData.FileSize := 0; for i := 0 to High(mapData.ExternalResources) do begin @@ -135,15 +152,17 @@ begin g_Console_Add(Format(_lc[I_NET_WAD_DL], [mapData.ExternalResources[i].Name])); e_WriteLog('Downloading Wad `' + mapData.ExternalResources[i].Name + - '` from server', MSG_NOTIFY); + '` from server', TMsgType.Notify); + g_Game_SetLoadingText(mapData.ExternalResources[i].Name + '...', 0, False); MC_SEND_ResRequest(mapData.ExternalResources[i].Name); msgStream := g_Net_Wait_Event(NET_MSG_RES_RESPONSE); + if msgStream = nil then + continue; + resData := ResDataFromMsgStream(msgStream); - resStream := TFileStream.Create(GameDir+'/wads/'+ - mapData.ExternalResources[i].Name, - fmCreate); + resStream := createDiskFile(GameDir+'/wads/'+mapData.ExternalResources[i].Name); resStream.WriteBuffer(resData.FileData[0], resData.FileSize); resData.FileData := nil; @@ -153,6 +172,8 @@ begin end; Result := SaveWAD(MapsDir, ExtractFileName(FileName), mapData.FileData); + if mapData.FileSize = 0 then + DeleteFile(Result); end; end.