--- oup/current/FileClasses/_MetaManager.pas 2007/06/12 17:35:56 214 +++ oup/current/FileClasses/_MetaManager.pas 2007/06/29 12:38:24 233 @@ -1,58 +1,48 @@ unit _MetaManager; interface -uses _FileTypes, SUBT, TXAN, TXMP, _EmptyFile; - -type - TFileType = class of TFile; - TFileDesc = record - ext: String; - ftype: TFileType; - end; - -const - FileDescs: array[0..2] of TFileDesc = ( - (ext: 'SUBT'; ftype: TFile_SUBT), - (ext: 'TXAN'; ftype: TFile_TXAN), - (ext: 'TXMP'; ftype: TFile_TXMP) - ); +uses _MetaTypes; type TMetaManager = class protected FFiles: array of TFile; + FRoot: TExtensions; FConnectionID: Integer; + FDataAccess: TObject; function GetFileCount: Integer; function GetFileById(Id: Integer): TFile; private - procedure InitRootFiles; public - constructor Create(ConnectionID: Integer); + constructor Create(ConnectionID: Integer; DataAccess: TObject); procedure InitFile(id: Integer); procedure InitFileFields(id: Integer); + property Root: TExtensions read FRoot; property FileCount: Integer read GetFileCount; property FileById[Id: Integer]: TFile read GetFileById; end; -var - Meta: TMetaManager; - implementation uses - Classes, ConnectionManager, Access_OniArchive, TypeDefs, Dialogs, SysUtils, StrUtils; + Classes, ConnectionManager, Access_OniArchive, TypeDefs, + Dialogs, SysUtils, StrUtils, DataAccess, _Extensions; { TFileManager } -constructor TMetaManager.Create(ConnectionID: Integer); +constructor TMetaManager.Create(ConnectionID: Integer; DataAccess: TObject); begin FConnectionID := ConnectionID; - InitRootFiles; + FDataAccess := DataAccess; + SetLength(FFiles, TDataAccess(DataAccess).GetFileCount); + FRoot := TExtensions.Create(DataAccess, ConnectionID); end; + function TMetaManager.GetFileById(Id: Integer): TFile; begin + InitFile(Id); Result := FFiles[Id]; end; @@ -77,7 +67,7 @@ begin begin if FileDescs[typei].ext = finfo.Extension then begin - FFiles[id] := TFileType(FileDescs[typei].ftype).Create(FConnectionID, id); + FFiles[id] := TFileClass(FileDescs[typei].ftype).Create(FConnectionID, id); Break; end; end; @@ -103,48 +93,4 @@ begin end; end; -procedure TMetaManager.InitRootFiles; -var - files: TStrings; - i: Integer; - typei: Integer; - fid: Integer; - finfo: TFileInfo; -begin - if ConManager.Connection[FConnectionID] is TAccess_OniArchive then - TAccess_OniArchive(ConManager.Connection[FConnectionID]).UnloadWhenUnused := False; - files := TStringList.Create; - files := ConManager.Connection[FConnectionID].GetFilesList('', '', False, ST_IDAsc); - SetLength(FFiles, ConManager.Connection[FConnectionID].GetFileCount); - for i := 0 to High(FFiles) do - FFiles[i] := nil; - if files.Count > 0 then - begin - for i := 0 to files.Count - 1 do - begin - fid := StrToInt(MidStr(files.Strings[i], 1, 5)); - finfo := ConManager.Connection[FConnectionID].GetFileInfo(fid); - if Length(finfo.Name) > 0 then - begin - if finfo.Size > 0 then - begin - for typei := 0 to High(FileDescs) do - begin - if FileDescs[typei].ext = finfo.Extension then - begin - FFiles[fid] := TFileType(FileDescs[typei].ftype).Create(FConnectionID, fid); - Break; - end; - end; - end - else - FFiles[fid] := TFile_Empty.Create(FConnectionID, fid); - end; - end; - end; - files.Free; - if ConManager.Connection[FConnectionID] is TAccess_OniArchive then - TAccess_OniArchive(ConManager.Connection[FConnectionID]).UnloadWhenUnused := True; -end; - end.