45 lines
1.2 KiB
ObjectPascal
45 lines
1.2 KiB
ObjectPascal
unit KaMResourceInput;
|
|||
|
|
|
||
|
|
interface
|
||
|
|
|
||
|
|
uses
|
||
|
|
Classes;
|
||
|
|
|
||
|
|
function KaMResourceExists(const aReference: string): Boolean;
|
||
|
|
function KaMOpenResourceStream(const aReference: string): TStream;
|
||
|
|
|
||
|
|
implementation
|
||
|
|
|
||
|
|
uses
|
||
|
|
CastleUriUtils, CastleDownload;
|
||
|
|
|
||
|
|
function ResourceProtocol(const aReference: string): string;
|
||
|
|
begin
|
||
|
|
if aReference = '' then
|
||
|
|
raise EDownloadError.Create('KaMResourceInput: empty resource reference');
|
||
|
|
|
||
|
|
Result := UriProtocol(aReference);
|
||
|
|
if (Result <> '') and (Result <> 'file') and (Result <> 'castle-data') then
|
||
|
|
raise EDownloadError.Create('KaMResourceInput: unsupported resource protocol: ' + Result);
|
||
|
|
end;
|
||
|
|
|
||
|
|
function KaMResourceExists(const aReference: string): Boolean;
|
||
|
|
begin
|
||
|
|
ResourceProtocol(aReference);
|
||
|
|
case UriExists(aReference) of
|
||
|
|
ueFile: Result := True;
|
||
|
|
ueNotExists, ueDirectory: Result := False;
|
||
|
|
ueUnknown:
|
||
|
|
raise EDownloadError.Create('KaMResourceInput: resource existence is unknown: ' + aReference);
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
function KaMOpenResourceStream(const aReference: string): TStream;
|
||
|
|
begin
|
||
|
|
if ResourceProtocol(aReference) = '' then
|
||
|
|
Result := TFileStream.Create(aReference, fmOpenRead)
|
||
|
|
else
|
||
|
|
Result := Download(aReference, [soForceMemoryStream]);
|
||
|
|
end;
|
||
|
|
|
||
|
|
end.
|