178 lines
4.2 KiB
Plaintext
178 lines
4.2 KiB
Plaintext
{
|
|
$Project$
|
|
$Workfile$
|
|
$Revision$
|
|
$DateUTC$
|
|
$Id$
|
|
|
|
This file is part of the Indy (Internet Direct) project, and is offered
|
|
under the dual-licensing agreement described on the Indy website.
|
|
(http://www.indyproject.org/)
|
|
|
|
Copyright:
|
|
(c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
|
|
|
|
|
|
$Log$
|
|
|
|
|
|
Rev 1.6 6/29/04 12:27:14 PM RLebeau
|
|
Updated to remove DotNet conditionals
|
|
|
|
Updated constructor to call SetDataString()
|
|
|
|
|
|
Rev 1.5 2004.02.03 5:44:52 PM czhower
|
|
Name changes
|
|
|
|
|
|
Rev 1.4 2004.02.03 2:12:04 PM czhower
|
|
$I path change
|
|
|
|
|
|
Rev 1.3 24/01/2004 19:07:18 CCostelloe
|
|
Cleaned up warnings
|
|
|
|
|
|
Rev 1.2 14/12/2003 18:07:16 CCostelloe
|
|
Changed GetDataString to avoiud error 'String element cannot be passed to var
|
|
parameter'
|
|
|
|
|
|
Rev 1.1 13/05/2003 20:28:04 CCostelloe
|
|
Bug fix: remove default values in Create to avoid ambiguities with
|
|
Create(TCollection)
|
|
|
|
|
|
Rev 1.0 11/14/2002 02:12:46 PM JPMugaas
|
|
}
|
|
unit IdAttachmentMemory;
|
|
|
|
interface
|
|
|
|
{$I IdCompilerDefines.inc}
|
|
|
|
uses
|
|
Classes, IdAttachment, IdMessageParts, IdGlobal;
|
|
|
|
type
|
|
TIdAttachmentMemory = class(TIdAttachment)
|
|
protected
|
|
FDataStream: TStream;
|
|
FDataStreamBeforeLoadPosition: TIdStreamSize;
|
|
|
|
function GetDataString: string;
|
|
procedure SetDataStream(const Value: TStream);
|
|
procedure SetDataString(const Value: string);
|
|
public
|
|
{CC: Bug fix, remove default values to resolve ambiguities with Create(TCollection).}
|
|
constructor Create(Collection: TCollection); overload; override;
|
|
constructor Create(Collection: TIdMessageParts; const CopyFrom: TStream); reintroduce; overload;
|
|
constructor Create(Collection: TIdMessageParts; const CopyFrom: String); reintroduce; overload;
|
|
destructor Destroy; override;
|
|
|
|
property DataStream: TStream read FDataStream write SetDataStream;
|
|
property DataString: string read GetDataString write SetDataString;
|
|
function OpenLoadStream: TStream; override;
|
|
procedure CloseLoadStream; override;
|
|
procedure FinishTempStream; override;
|
|
function PrepareTempStream: TStream; override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
SysUtils;
|
|
|
|
{ TIdAttachmentMemory }
|
|
|
|
constructor TIdAttachmentMemory.Create(Collection: TCollection);
|
|
begin
|
|
inherited Create(Collection);
|
|
FDataStream := TMemoryStream.Create;
|
|
end;
|
|
|
|
constructor TIdAttachmentMemory.Create(Collection: TIdMessageParts;
|
|
const CopyFrom: TStream);
|
|
var
|
|
LSize: TIdStreamSize;
|
|
begin
|
|
inherited Create(Collection);
|
|
FDataStream := TMemoryStream.Create;
|
|
if Assigned(CopyFrom) then begin
|
|
LSize := IndyLength(CopyFrom);
|
|
if LSize > 0 then begin
|
|
FDataStream.CopyFrom(CopyFrom, LSize);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
constructor TIdAttachmentMemory.Create(Collection: TIdMessageParts;
|
|
const CopyFrom: String);
|
|
begin
|
|
inherited Create(Collection);
|
|
FDataStream := TMemoryStream.Create;
|
|
SetDataString(CopyFrom);
|
|
end;
|
|
|
|
destructor TIdAttachmentMemory.Destroy;
|
|
begin
|
|
FreeAndNil(FDataStream);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TIdAttachmentMemory.CloseLoadStream;
|
|
begin
|
|
DataStream.Position := FDataStreamBeforeLoadPosition;
|
|
end;
|
|
|
|
function TIdAttachmentMemory.GetDataString: string;
|
|
var
|
|
Pos: TIdStreamSize;
|
|
begin
|
|
Pos := FDataStream.Position;
|
|
try
|
|
FDataStream.Position := 0;
|
|
Result := ReadStringFromStream(FDataStream, FDataStream.Size);
|
|
finally
|
|
FDataStream.Position := Pos;
|
|
end;
|
|
end;
|
|
|
|
function TIdAttachmentMemory.OpenLoadStream: TStream;
|
|
begin
|
|
FDataStreamBeforeLoadPosition := DataStream.Position;
|
|
DataStream.Position := 0;
|
|
Result := DataStream;
|
|
end;
|
|
|
|
procedure TIdAttachmentMemory.SetDataStream(const Value: TStream);
|
|
var
|
|
LSize: TIdStreamSize;
|
|
begin
|
|
FDataStream.Size := 0;
|
|
LSize := IndyLength(Value);
|
|
if LSize > 0 then begin
|
|
FDataStream.CopyFrom(Value, LSize);
|
|
end;
|
|
end;
|
|
|
|
procedure TIdAttachmentMemory.SetDataString(const Value: string);
|
|
begin
|
|
FDataStream.Size := 0;
|
|
WriteStringToStream(FDataStream, Value);
|
|
end;
|
|
|
|
procedure TIdAttachmentMemory.FinishTempStream;
|
|
begin
|
|
DataStream.Position := 0;
|
|
end;
|
|
|
|
function TIdAttachmentMemory.PrepareTempStream: TStream;
|
|
begin
|
|
DataStream.Size := 0;
|
|
Result := DataStream;
|
|
end;
|
|
|
|
end.
|