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 228 by alloc, Wed Jun 20 09:51:38 2007 UTC vs.
Revision 229 by alloc, Wed Jun 20 10:57:51 2007 UTC

# Line 7 | Line 7 | type
7    TMetaManager = class
8      protected
9        FFiles: array of TFile;
10 <      FRoot: array of TExtension;
10 >      FRoot: TExtensions;
11        FConnectionID: Integer;
12 +      FDataAccess: TObject;
13        function GetFileCount: Integer;
14        function GetFileById(Id: Integer): TFile;
15 +      function GetExt(Ext: String): TExtension;
16 +      procedure AddExt(Ext: String);
17      private
18 <      procedure InitRootFiles;
18 >      procedure InitExts;
19      public
20 <      constructor Create(ConnectionID: Integer);
20 >      constructor Create(ConnectionID: Integer; DataAccess: TObject);
21 >      procedure InitExtFiles(Ext: String);
22        procedure InitFile(id: Integer);
23        procedure InitFileFields(id: Integer);
24  
25 +      property Root: TExtensions read FRoot;
26 +      property RootExt[Ext: String]: TExtension read GetExt;
27        property FileCount: Integer read GetFileCount;
28        property FileById[Id: Integer]: TFile read GetFileById;
29    end;
30  
25 var
26  Meta: TMetaManager;
27
31   implementation
32  
33   uses
34    Classes, ConnectionManager, Access_OniArchive, TypeDefs,
35 <  Dialogs, SysUtils, StrUtils;
35 >  Dialogs, SysUtils, StrUtils, DataAccess;
36  
37   { TFileManager }
38  
39 < constructor TMetaManager.Create(ConnectionID: Integer);
39 > constructor TMetaManager.Create(ConnectionID: Integer; DataAccess: TObject);
40   begin
41    FConnectionID := ConnectionID;
42 <  InitRootFiles;
42 >  FDataAccess := DataAccess;
43 >  SetLength(FFiles, TDataAccess(DataAccess).GetFileCount);
44 >  InitExts;
45 > end;
46 >
47 > function TMetaManager.GetExt(Ext: String): TExtension;
48 > var
49 >  i: Integer;
50 > begin
51 >  Result := nil;
52 >  if Length(FRoot) > 0 then
53 >    for i := 0 to High(FRoot) do
54 >      if FRoot[i].Ext = Ext then
55 >      begin
56 >        Result := FRoot[i];
57 >        Break;
58 >      end;
59 > end;
60 >
61 > procedure TMetaManager.AddExt(Ext: String);
62 > var
63 >  i: Integer;
64 > begin
65 >  SetLength(FRoot, Length(FRoot) + 1);
66 >  for i := High(FRoot) downto 1 do
67 >  begin
68 >    if FRoot[i-1].Ext < Ext then
69 >    begin
70 >      FRoot[i] := TExtension.Create(FConnectionID, Ext);
71 >      Break;
72 >    end
73 >    else
74 >      FRoot[i] := FRoot[i-1];
75 >  end;
76 >  if i = 0 then
77 >    FRoot[0] := TExtension.Create(FConnectionID, Ext);
78   end;
79  
80   function TMetaManager.GetFileById(Id: Integer): TFile;
# Line 91 | Line 129 | begin
129    end;
130   end;
131  
132 < procedure TMetaManager.InitRootFiles;
132 > procedure TMetaManager.InitExtFiles(Ext: String);
133   var
134    files: TStrings;
135    i: Integer;
# Line 135 | Line 173 | begin
173      TAccess_OniArchive(ConManager.Connection[FConnectionID]).UnloadWhenUnused := True;
174   end;
175  
176 + procedure TMetaManager.InitExts;
177 + var
178 +  files: TStrings;
179 +  i: Integer;
180 +  fid: Integer;
181 +  finfo: TFileInfo;
182 + begin
183 +  files := TStringList.Create;
184 +  files := TDataAccess(FDataAccess).GetFilesList('', '', False, ST_IDAsc);
185 +  SetLength(FRoot, 0);
186 +  if files.Count > 0 then
187 +  begin
188 +    for i := 0 to files.Count - 1 do
189 +    begin
190 +      fid := StrToInt(MidStr(files.Strings[i], 1, 5));
191 +      finfo := TDataAccess(FDataAccess).GetFileInfo(fid);
192 +      if Length(finfo.Name) > 0 then
193 +        if not Assigned(GetExt(finfo.Extension)) then
194 +          AddExt(finfo.Extension);
195 +    end;
196 +  end;
197 +  files.Free;
198 + end;
199 +
200   end.

Diff Legend

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