ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/oup/current/FileClasses/_MetaManager.pas
(Generate patch)

Comparing oup/current/FileClasses/_MetaManager.pas (file contents):
Revision 213 by alloc, Tue Jun 12 17:00:48 2007 UTC vs.
Revision 233 by alloc, Fri Jun 29 12:38:24 2007 UTC

# Line 1 | Line 1
1   unit _MetaManager;
2   interface
3  
4 < uses _FileTypes, TXAN, TXMP, _EmptyFile;
5 <
6 < type
7 <  TFileType = class of TFile;
8 <  TFileDesc = record
9 <    ext: String;
10 <    ftype: TFileType;
11 <  end;
12 <
13 < const
14 <  FileDescs: array[0..1] of TFileDesc = (
15 <    (ext: 'TXAN'; ftype: TFile_TXAN),
16 <    (ext: 'TXMP'; ftype: TFile_TXMP)
17 <  );
4 > uses _MetaTypes;
5  
6   type
7    TMetaManager = class
8      protected
9        FFiles: array of TFile;
10 +      FRoot: TExtensions;
11        FConnectionID: Integer;
12 +      FDataAccess: TObject;
13        function GetFileCount: Integer;
14        function GetFileById(Id: Integer): TFile;
15      private
27      procedure InitRootFiles;
16      public
17 <      constructor Create(ConnectionID: Integer);
17 >      constructor Create(ConnectionID: Integer; DataAccess: TObject);
18        procedure InitFile(id: Integer);
19        procedure InitFileFields(id: Integer);
20  
21 +      property Root: TExtensions read FRoot;
22        property FileCount: Integer read GetFileCount;
23        property FileById[Id: Integer]: TFile read GetFileById;
24    end;
# Line 37 | Line 26 | type
26   implementation
27  
28   uses
29 <  Classes, ConnectionManager, Access_OniArchive, TypeDefs, Dialogs, SysUtils, StrUtils;
29 >  Classes, ConnectionManager, Access_OniArchive, TypeDefs,
30 >  Dialogs, SysUtils, StrUtils, DataAccess, _Extensions;
31  
32   { TFileManager }
33  
34 < constructor TMetaManager.Create(ConnectionID: Integer);
34 > constructor TMetaManager.Create(ConnectionID: Integer; DataAccess: TObject);
35   begin
36    FConnectionID := ConnectionID;
37 <  InitRootFiles;
37 >  FDataAccess := DataAccess;
38 >  SetLength(FFiles, TDataAccess(DataAccess).GetFileCount);
39 >  FRoot := TExtensions.Create(DataAccess, ConnectionID);
40   end;
41  
42 +
43   function TMetaManager.GetFileById(Id: Integer): TFile;
44   begin
45 +  InitFile(Id);
46    Result := FFiles[Id];
47   end;
48  
# Line 73 | Line 67 | begin
67          begin
68            if FileDescs[typei].ext = finfo.Extension then
69            begin
70 <            FFiles[id] := TFileType(FileDescs[typei].ftype).Create(FConnectionID, id);
70 >            FFiles[id] := TFileClass(FileDescs[typei].ftype).Create(FConnectionID, id);
71              Break;
72            end;
73          end;
# Line 99 | Line 93 | begin
93    end;
94   end;
95  
102 procedure TMetaManager.InitRootFiles;
103 var
104  files: TStrings;
105  i: Integer;
106  typei: Integer;
107  fid: Integer;
108  finfo: TFileInfo;
109 begin
110  if ConManager.Connection[FConnectionID] is TAccess_OniArchive then
111    TAccess_OniArchive(ConManager.Connection[FConnectionID]).UnloadWhenUnused := False;
112  files := TStringList.Create;
113  files := ConManager.Connection[FConnectionID].GetFilesList('', '', False, ST_IDAsc);
114  SetLength(FFiles, ConManager.Connection[FConnectionID].GetFileCount);
115  for i := 0 to High(FFiles) do
116    FFiles[i] := nil;
117  if files.Count > 0 then
118  begin
119    for i := 0 to files.Count - 1 do
120    begin
121      fid := StrToInt(MidStr(files.Strings[i], 1, 5));
122      finfo := ConManager.Connection[FConnectionID].GetFileInfo(fid);
123      if Length(finfo.Name) > 0 then
124      begin
125        if finfo.Size > 0 then
126        begin
127          for typei := 0 to High(FileDescs) do
128          begin
129            if FileDescs[typei].ext = finfo.Extension then
130            begin
131              FFiles[fid] := TFileType(FileDescs[typei].ftype).Create(FConnectionID, fid);
132              Break;
133            end;
134          end;
135        end
136        else
137          FFiles[fid] := TFile_Empty.Create(FConnectionID, fid);
138      end;
139    end;
140  end;
141  files.Free;
142  if ConManager.Connection[FConnectionID] is TAccess_OniArchive then
143    TAccess_OniArchive(ConManager.Connection[FConnectionID]).UnloadWhenUnused := True;
144 end;
145
96   end.

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)