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 212 by alloc, Tue Jun 12 16:42:53 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 36 | 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 58 | Line 53 | end;
53  
54   procedure TMetaManager.InitFile(id: Integer);
55   var
61 //  i: Integer;
56    typei: Integer;
57    finfo: TFileInfo;
58   begin
# 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 86 | Line 80 | begin
80    end;
81   end;
82  
83 < procedure TMetaManager.InitRootFiles;
90 < var
91 <  files: TStrings;
92 <  i: Integer;
93 <  typei: Integer;
94 <  fid: Integer;
95 <  finfo: TFileInfo;
83 > procedure TMetaManager.InitFileFields(id: Integer);
84   begin
85 <  if ConManager.Connection[FConnectionID] is TAccess_OniArchive then
98 <    TAccess_OniArchive(ConManager.Connection[FConnectionID]).UnloadWhenUnused := False;
99 <  files := TStringList.Create;
100 <  files := ConManager.Connection[FConnectionID].GetFilesList('', '', False, ST_IDAsc);
101 <  SetLength(FFiles, ConManager.Connection[FConnectionID].GetFileCount);
102 <  for i := 0 to High(FFiles) do
103 <    FFiles[i] := nil;
104 <  if files.Count > 0 then
85 >  if id < ConManager.Connection[FConnectionID].GetFileCount then
86    begin
87 <    for i := 0 to files.Count - 1 do
87 >    if not Assigned(FFiles[id]) then
88      begin
89 <      fid := StrToInt(MidStr(files.Strings[i], 1, 5));
90 <      finfo := ConManager.Connection[FConnectionID].GetFileInfo(fid);
91 <      if Length(finfo.Name) > 0 then
111 <      begin
112 <        if finfo.Size > 0 then
113 <        begin
114 <          for typei := 0 to High(FileDescs) do
115 <          begin
116 <            if FileDescs[typei].ext = finfo.Extension then
117 <            begin
118 <              FFiles[fid] := TFileType(FileDescs[typei].ftype).Create(FConnectionID, fid);
119 <              Break;
120 <            end;
121 <          end;
122 <        end
123 <        else
124 <          FFiles[fid] := TFile_Empty.Create(FConnectionID, fid);
125 <      end;
89 >      InitFile(id);
90 >      if not (FFiles[id] is TFile_Empty) then
91 >        FFiles[id].InitDataFields;
92      end;
93    end;
128  files.Free;
129  if ConManager.Connection[FConnectionID] is TAccess_OniArchive then
130    TAccess_OniArchive(ConManager.Connection[FConnectionID]).UnloadWhenUnused := True;
94   end;
95  
96   end.

Diff Legend

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