150 lines
4.0 KiB
Plaintext
150 lines
4.0 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.5 10/26/2004 10:03:22 PM JPMugaas
|
||
|
Updated refs.
|
||
|
|
||
|
Rev 1.4 4/19/2004 5:05:42 PM JPMugaas
|
||
|
Class rework Kudzu wanted.
|
||
|
|
||
|
Rev 1.3 2004.02.03 5:45:26 PM czhower
|
||
|
Name changes
|
||
|
|
||
|
Rev 1.2 1/22/2004 7:20:56 AM JPMugaas
|
||
|
System.Delete changed to IdDelete so the code can work in NET.
|
||
|
|
||
|
Rev 1.1 10/19/2003 3:48:20 PM DSiders
|
||
|
Added localization comments.
|
||
|
|
||
|
Rev 1.0 2/19/2003 05:49:50 PM JPMugaas
|
||
|
Parsers ported from old framework.
|
||
|
}
|
||
|
|
||
|
unit IdFTPListParseWinQVTNET;
|
||
|
|
||
|
interface
|
||
|
|
||
|
{$i IdCompilerDefines.inc}
|
||
|
|
||
|
uses
|
||
|
Classes,
|
||
|
IdFTPList, IdFTPListParseBase;
|
||
|
|
||
|
{
|
||
|
This was tested with data obtained from WinQVT/Net Version 3.98.15 running
|
||
|
on Windows 2000.
|
||
|
|
||
|
No parser is required for later versions because those use the Unix listing
|
||
|
format.
|
||
|
}
|
||
|
|
||
|
type
|
||
|
TIdWinQVNetFTPListItem = class(TIdFTPListItem);
|
||
|
|
||
|
TIdFTPLPWinQVNet = class(TIdFTPListBase)
|
||
|
protected
|
||
|
class function MakeNewItem(AOwner : TIdFTPListItems) : TIdFTPListItem; override;
|
||
|
class function ParseLine(const AItem : TIdFTPListItem; const APath : String = ''): Boolean; override;
|
||
|
public
|
||
|
class function GetIdent : String; override;
|
||
|
class function CheckListing(AListing : TStrings; const ASysDescript : String = ''; const ADetails : Boolean = True): Boolean; override;
|
||
|
end;
|
||
|
|
||
|
// RLebeau 2/14/09: this forces C++Builder to link to this unit so
|
||
|
// RegisterFTPListParser can be called correctly at program startup...
|
||
|
|
||
|
{$IFDEF HAS_DIRECTIVE_HPPEMIT_LINKUNIT}
|
||
|
{$HPPEMIT LINKUNIT}
|
||
|
{$ELSE}
|
||
|
{$HPPEMIT '#pragma link "IdFTPListParseWinQVTNET"'}
|
||
|
{$ENDIF}
|
||
|
|
||
|
implementation
|
||
|
|
||
|
uses
|
||
|
IdGlobal, IdFTPCommon, IdGlobalProtocols,
|
||
|
SysUtils;
|
||
|
|
||
|
{ TIdFTPLPWinQVNet }
|
||
|
|
||
|
class function TIdFTPLPWinQVNet.CheckListing(AListing: TStrings;
|
||
|
const ASysDescript: String; const ADetails: Boolean): Boolean;
|
||
|
var
|
||
|
LData : String;
|
||
|
begin
|
||
|
Result := False;
|
||
|
|
||
|
if AListing.Count > 0 then
|
||
|
{
|
||
|
test.txt 0 10-23-2003 01:01
|
||
|
123456789012345678901234567890123456789012345678901234567890
|
||
|
1 2 3 4 5 6
|
||
|
}
|
||
|
begin
|
||
|
LData := AListing[0];
|
||
|
Result := (Copy(LData, 38, 1) = '-') and {do not localize}
|
||
|
(Copy(LData, 41, 1) = '-') and {do not localize}
|
||
|
(Copy(LData, 49, 1) = ':') and {do not localize}
|
||
|
IsMMDDYY(Copy(LData, 36, 10), '-') and {do not localize}
|
||
|
(Copy(LData, 46, 1) = ' ') and {do not localize}
|
||
|
IsHHMMSS(Copy(LData, 47, 5), ':'); {do not localize}
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
class function TIdFTPLPWinQVNet.GetIdent: String;
|
||
|
begin
|
||
|
Result := 'WinQVT/NET'; {do not localize}
|
||
|
end;
|
||
|
|
||
|
class function TIdFTPLPWinQVNet.MakeNewItem(AOwner: TIdFTPListItems): TIdFTPListItem;
|
||
|
begin
|
||
|
Result := TIdWinQVNetFTPListItem.Create(AOwner);
|
||
|
end;
|
||
|
|
||
|
class function TIdFTPLPWinQVNet.ParseLine(const AItem: TIdFTPListItem;
|
||
|
const APath: String): Boolean;
|
||
|
var
|
||
|
LBuf : String;
|
||
|
begin
|
||
|
//filename (note that it can contain spaces on WinNT with my test case
|
||
|
AItem.FileName := ExtractQVNETFileName(AItem.Data);
|
||
|
LBuf := AItem.Data;
|
||
|
//item type
|
||
|
if IndyPos('/', Copy(LBuf, 1, 13)) > 0 then begin {do not localize}
|
||
|
AItem.ItemType := ditDirectory;
|
||
|
end;
|
||
|
IdDelete(LBuf, 1, 13);
|
||
|
LBuf := TrimLeft(LBuf);
|
||
|
//Size
|
||
|
AItem.Size := IndyStrToInt64(Fetch(LBuf), 0);
|
||
|
//Date
|
||
|
LBuf := TrimLeft(LBuf);
|
||
|
AItem.ModifiedDate := DateMMDDYY(Fetch(LBuf));
|
||
|
//Time
|
||
|
LBuf := Trim(LBuf);
|
||
|
AItem.ModifiedDate := AItem.ModifiedDate + TimeHHMMSS(LBuf);
|
||
|
Result := True;
|
||
|
end;
|
||
|
|
||
|
initialization
|
||
|
RegisterFTPListParser(TIdFTPLPWinQVNet);
|
||
|
finalization
|
||
|
UnRegisterFTPListParser(TIdFTPLPWinQVNet);
|
||
|
|
||
|
end.
|