index 85438c474b4cae73bb9774cb945c740e9d792cb3..73557a590a4c39b6655de16d64a4352c077cb77c 100644 (file)
implementation
implementation
-uses g_language, sfs, utils, wadreader, g_game, hashtable, fhashdb;
+uses g_language, sfs, utils, wadreader, g_game, hashtable, fhashdb, e_res;
var
// cvars
var
// cvars
var
err: Boolean;
st: TStream;
var
err: Boolean;
st: TStream;
+ ccdir: AnsiString = '';
begin
if (not saveDBsToDiskEnabled) or (not g_res_save_databases) then exit;
begin
if (not saveDBsToDiskEnabled) or (not g_res_save_databases) then exit;
+ ccdir := e_GetWriteableDir(CacheDirs, false);
+ if (length(ccdir) = 0) then exit;
// rescan dirs
// save map database
if (saveMap) then
// rescan dirs
// save map database
if (saveMap) then
err := true;
st := nil;
try
err := true;
st := nil;
try
- st := createDiskFile(GameDir+'/data/maphash.db');
+ st := createDiskFile(ccdir+'/maphash.db');
knownMaps.saveTo(st);
err := false;
except
knownMaps.saveTo(st);
err := false;
except
err := true;
st := nil;
try
err := true;
st := nil;
try
- st := createDiskFile(GameDir+'/data/reshash.db');
+ st := createDiskFile(ccdir+'/reshash.db');
knownRes.saveTo(st);
err := false;
except
knownRes.saveTo(st);
err := false;
except
upmap: Boolean;
upres: Boolean;
forcesave: Boolean;
upmap: Boolean;
upres: Boolean;
forcesave: Boolean;
+ ccdir: AnsiString = '';
begin
if not assigned(knownMaps) then
begin
// create and load a know map database, if necessary
begin
if not assigned(knownMaps) then
begin
// create and load a know map database, if necessary
- knownMaps := TFileHashDB.Create(GameDir+'/maps/');
- knownRes := TFileHashDB.Create(GameDir+'/wads/');
+ knownMaps := TFileHashDB.Create({GameDir}'', MapDirs);
+ knownMaps.appendMoreDirs(MapDownloadDirs);
+ knownRes := TFileHashDB.Create({GameDir}'', WadDirs);
+ knownRes.appendMoreDirs(WadDownloadDirs);
saveDBsToDiskEnabled := true;
// load map database
st := nil;
try
saveDBsToDiskEnabled := true;
// load map database
st := nil;
try
- st := openDiskFileRO(GameDir+'/data/maphash.db');
- knownMaps.loadFrom(st);
- e_LogWriteln('loaded map database');
+ ccdir := e_GetWriteableDir(CacheDirs, false);
+ if (length(ccdir) > 0) then
+ begin
+ st := openDiskFileRO(ccdir+'/maphash.db');
+ knownMaps.loadFrom(st);
+ e_LogWriteln('loaded map database');
+ end;
except
end;
st.Free;
// load resource database
st := nil;
try
except
end;
st.Free;
// load resource database
st := nil;
try
- st := openDiskFileRO(GameDir+'/data/reshash.db');
- knownRes.loadFrom(st);
- e_LogWriteln('loaded resource database');
+ if (length(ccdir) > 0) then
+ begin
+ st := openDiskFileRO(ccdir+'/reshash.db');
+ knownRes.loadFrom(st);
+ e_LogWriteln('loaded resource database');
+ end;
except
end;
st.Free;
except
end;
st.Free;
//==========================================================================
function findExistingMapWadWithHash (fname: AnsiString; const resMd5: TMD5Digest): AnsiString;
begin
//==========================================================================
function findExistingMapWadWithHash (fname: AnsiString; const resMd5: TMD5Digest): AnsiString;
begin
- //result := scanDir(GameDir+'/maps', ExtractFileName(fname), resMd5);
result := knownMaps.findByHash(resMd5);
if (length(result) > 0) then
begin
result := knownMaps.findByHash(resMd5);
if (length(result) > 0) then
begin
- result := GameDir+'/maps/'+result;
+ //result := GameDir+'/maps/'+result;
if not FileExists(result) then
begin
if (knownMaps.scanFiles()) then saveDatabases(true, false);
if not FileExists(result) then
begin
if (knownMaps.scanFiles()) then saveDatabases(true, false);
//==========================================================================
function findExistingResWadWithHash (fname: AnsiString; const resMd5: TMD5Digest): AnsiString;
begin
//==========================================================================
function findExistingResWadWithHash (fname: AnsiString; const resMd5: TMD5Digest): AnsiString;
begin
- //result := scanDir(GameDir+'/wads', ExtractFileName(fname), resMd5);
result := knownRes.findByHash(resMd5);
if (length(result) > 0) then
begin
result := knownRes.findByHash(resMd5);
if (length(result) > 0) then
begin
- result := GameDir+'/wads/'+result;
+ //result := GameDir+'/wads/'+result;
if not FileExists(result) then
begin
if (knownRes.scanFiles()) then saveDatabases(false, true);
if not FileExists(result) then
begin
if (knownRes.scanFiles()) then saveDatabases(false, true);
mapdbUpdated: Boolean = false;
resdbUpdated: Boolean = false;
transStarted: Boolean;
mapdbUpdated: Boolean = false;
resdbUpdated: Boolean = false;
transStarted: Boolean;
+ destMapDir: AnsiString = '';
+ destResDir: AnsiString = '';
begin
result := '';
clearReplacementWads();
begin
result := '';
clearReplacementWads();
+ sfsGCCollect(); // why not?
g_Res_CreateDatabases();
g_Res_CreateDatabases();
+ FileName := ExtractFileName(FileName);
+ if (length(FileName) = 0) then FileName := '__untitled__.wad';
try
g_Res_received_map_start := 1;
g_Console_Add(Format(_lc[I_NET_MAP_DL], [FileName]));
try
g_Res_received_map_start := 1;
g_Console_Add(Format(_lc[I_NET_MAP_DL], [FileName]));
- e_WriteLog('Downloading map `' + FileName + '` from server', TMsgType.Notify);
+ e_LogWritefln('Downloading map [%s] from server...', [FileName], TMsgType.Notify);
g_Game_SetLoadingText(FileName + '...', 0, False);
g_Game_SetLoadingText(FileName + '...', 0, False);
- FileName := ExtractFileName(FileName);
- if (length(FileName) = 0) then FileName := 'fucked_map_wad.wad';
-
// this also sends map request
res := g_Net_Wait_MapInfo(tf, resList);
if (res <> 0) then exit;
// this also sends map request
res := g_Net_Wait_MapInfo(tf, resList);
if (res <> 0) then exit;
exit;
end;
try
exit;
end;
try
- CreateDir(GameDir+'/maps/downloads');
+ destMapDir := e_GetWriteableDir(MapDownloadDirs, false); // not required
except
end;
except
end;
- fname := GameDir+'/maps/downloads/'+generateFileName(FileName, mapHash);
+ if (length(destMapDir) = 0) then
+ begin
+ e_LogWriteln('cannot create map download directory', TMsgType.Fatal);
+ result := '';
+ exit;
+ end;
+ fname := destMapDir+'/'+generateFileName(FileName, mapHash);
tf.diskName := fname;
tf.diskName := fname;
+ e_LogWritefln('map disk file for `%s` is `%s`', [FileName, fname], TMsgType.Fatal);
try
strm := openDiskFileRW(fname);
except
try
strm := openDiskFileRW(fname);
except
- e_WriteLog('cannot create map file `'+FileName+'`', TMsgType.Fatal);
+ e_WriteLog('cannot create map file `'+fname+'`', TMsgType.Fatal);
result := '';
exit;
end;
try
res := g_Net_ReceiveResourceFile(-1{map}, tf, strm);
except
result := '';
exit;
end;
try
res := g_Net_ReceiveResourceFile(-1{map}, tf, strm);
except
- e_WriteLog('error downloading map file `'+FileName+'`', TMsgType.Fatal);
+ e_WriteLog('error downloading map file (exception) `'+FileName+'`', TMsgType.Fatal);
strm.Free;
result := '';
exit;
strm.Free;
result := '';
exit;
strm.Free;
if (res <> 0) then
begin
strm.Free;
if (res <> 0) then
begin
- e_WriteLog('error downloading map file `'+FileName+'`', TMsgType.Fatal);
+ e_LogWritefln('error downloading map `%s` (res=%d)', [FileName, res], TMsgType.Fatal);
result := '';
exit;
end;
result := '';
exit;
end;
DeleteFile(fname);
strm := createDiskFile(fname);
except
DeleteFile(fname);
strm := createDiskFile(fname);
except
- e_WriteLog('cannot create map file `'+fname+'`', TMsgType.Fatal);
+ e_WriteLog('cannot create map file `'+fname+'` (exception)', TMsgType.Fatal);
result := '';
exit;
end;
result := '';
exit;
end;
strm.Free;
if (res <> 0) then
begin
strm.Free;
if (res <> 0) then
begin
- e_WriteLog('error downloading map file `'+FileName+'`', TMsgType.Fatal);
+ e_LogWritefln('error downloading map `%s` (res=%d)', [FileName, res], TMsgType.Fatal);
result := '';
exit;
end;
result := '';
exit;
end;
if (res <> 0) then begin result := ''; exit; end;
end;
try
if (res <> 0) then begin result := ''; exit; end;
end;
try
- CreateDir(GameDir+'/wads/downloads');
+ destResDir := e_GetWriteableDir(WadDownloadDirs, false); // not required
except
end;
except
end;
- fname := GameDir+'/wads/downloads/'+generateFileName(tf.diskName, tf.hash);
+ if (length(destResDir) = 0) then
+ begin
+ e_LogWriteln('cannot create wad download directory', TMsgType.Fatal);
+ result := '';
+ exit;
+ end;
+ fname := destResDir+'/'+generateFileName(tf.diskName, tf.hash);
e_LogWritefln('downloading resource `%s` to `%s`...', [tf.diskName, fname]);
try
strm := openDiskFileRW(fname);
e_LogWritefln('downloading resource `%s` to `%s`...', [tf.diskName, fname]);
try
strm := openDiskFileRW(fname);