index 438cd58357c6a1a0ecde23a83ffe62f4cc12c2ed..43a60874b997d9d50f812922f0d40d1a09ec44c9 100644 (file)
function g_Res_FindReplacementWad (oldname: AnsiString): AnsiString;
// call this somewhere in startup sequence
function g_Res_FindReplacementWad (oldname: AnsiString): AnsiString;
// call this somewhere in startup sequence
-procedure g_Res_CreateDatabases ();
+procedure g_Res_CreateDatabases (allowRescan: Boolean=false);
implementation
implementation
// g_Res_CreateDatabases
//
//==========================================================================
// g_Res_CreateDatabases
//
//==========================================================================
-procedure g_Res_CreateDatabases ();
+procedure g_Res_CreateDatabases (allowRescan: Boolean=false);
var
st: TStream;
var
st: TStream;
+ upmap: Boolean;
+ upres: Boolean;
+ forcesave: Boolean;
begin
begin
- // create and load a know map database, if necessary
- knownMaps.Free;
- knownMaps := TFileHashDB.Create(GameDir+'/maps/');
- knownRes := TFileHashDB.Create(GameDir+'/wads/');
- saveDBsToDiskEnabled := true;
- // load map database
- st := nil;
- try
- st := openDiskFileRO(GameDir+'/data/maphash.db');
- knownMaps.loadFrom(st);
- e_LogWriteln('loaded map database');
- except
- end;
- st.Free;
- // load resource database
- st := nil;
- try
- st := openDiskFileRO(GameDir+'/data/reshash.db');
- knownRes.loadFrom(st);
- e_LogWriteln('loaded resource database');
- except
+ 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/');
+ saveDBsToDiskEnabled := true;
+ // load map database
+ st := nil;
+ try
+ st := openDiskFileRO(GameDir+'/data/maphash.db');
+ knownMaps.loadFrom(st);
+ e_LogWriteln('loaded map database');
+ except
+ end;
+ st.Free;
+ // load resource database
+ st := nil;
+ try
+ st := openDiskFileRO(GameDir+'/data/reshash.db');
+ knownRes.loadFrom(st);
+ e_LogWriteln('loaded resource database');
+ except
+ end;
+ st.Free;
+ forcesave := true;
+ end
+ else
+ begin
+ if (not allowRescan) then exit;
+ forcesave := false;
end;
end;
- st.Free;
// rescan dirs
e_LogWriteln('refreshing map database');
// rescan dirs
e_LogWriteln('refreshing map database');
- knownMaps.scanFiles();
+ upmap := knownMaps.scanFiles();
e_LogWriteln('refreshing resource database');
e_LogWriteln('refreshing resource database');
- knownRes.scanFiles();
+ upres := knownRes.scanFiles();
// save databases
// save databases
- saveDatabases(true, true);
+ if (forcesave) then begin upmap := true; upres := true; end;
+ if upmap or upres then saveDatabases(upmap, upres);
end;
end;
begin
result := '';
clearReplacementWads();
begin
result := '';
clearReplacementWads();
+ sfsGCCollect(); // why not?
+ g_Res_CreateDatabases();
try
g_Res_received_map_start := 1;
try
g_Res_received_map_start := 1;
end;
fname := GameDir+'/maps/downloads/'+generateFileName(FileName, mapHash);
tf.diskName := fname;
end;
fname := GameDir+'/maps/downloads/'+generateFileName(FileName, mapHash);
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;