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 229 by alloc, Wed Jun 20 10:57:51 2007 UTC vs.
Revision 233 by alloc, Fri Jun 29 12:38:24 2007 UTC

# Line 12 | Line 12 | type
12        FDataAccess: TObject;
13        function GetFileCount: Integer;
14        function GetFileById(Id: Integer): TFile;
15      function GetExt(Ext: String): TExtension;
16      procedure AddExt(Ext: String);
15      private
18      procedure InitExts;
16      public
17        constructor Create(ConnectionID: Integer; DataAccess: TObject);
21      procedure InitExtFiles(Ext: String);
18        procedure InitFile(id: Integer);
19        procedure InitFileFields(id: Integer);
20  
21        property Root: TExtensions read FRoot;
26      property RootExt[Ext: String]: TExtension read GetExt;
22        property FileCount: Integer read GetFileCount;
23        property FileById[Id: Integer]: TFile read GetFileById;
24    end;
# Line 32 | Line 27 | implementation
27  
28   uses
29    Classes, ConnectionManager, Access_OniArchive, TypeDefs,
30 <  Dialogs, SysUtils, StrUtils, DataAccess;
30 >  Dialogs, SysUtils, StrUtils, DataAccess, _Extensions;
31  
32   { TFileManager }
33  
# Line 41 | Line 36 | begin
36    FConnectionID := ConnectionID;
37    FDataAccess := DataAccess;
38    SetLength(FFiles, TDataAccess(DataAccess).GetFileCount);
39 <  InitExts;
39 >  FRoot := TExtensions.Create(DataAccess, ConnectionID);
40   end;
41  
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;
42  
43   function TMetaManager.GetFileById(Id: Integer): TFile;
44   begin
45 +  InitFile(Id);
46    Result := FFiles[Id];
47   end;
48  
# Line 129 | Line 93 | begin
93    end;
94   end;
95  
132 procedure TMetaManager.InitExtFiles(Ext: String);
133 var
134  files: TStrings;
135  i: Integer;
136  typei: Integer;
137  fid: Integer;
138  finfo: TFileInfo;
139 begin
140  if ConManager.Connection[FConnectionID] is TAccess_OniArchive then
141    TAccess_OniArchive(ConManager.Connection[FConnectionID]).UnloadWhenUnused := False;
142  files := TStringList.Create;
143  files := ConManager.Connection[FConnectionID].GetFilesList('', '', False, ST_IDAsc);
144  SetLength(FFiles, ConManager.Connection[FConnectionID].GetFileCount);
145  for i := 0 to High(FFiles) do
146    FFiles[i] := nil;
147  if files.Count > 0 then
148  begin
149    for i := 0 to files.Count - 1 do
150    begin
151      fid := StrToInt(MidStr(files.Strings[i], 1, 5));
152      finfo := ConManager.Connection[FConnectionID].GetFileInfo(fid);
153      if Length(finfo.Name) > 0 then
154      begin
155        if finfo.Size > 0 then
156        begin
157          for typei := 0 to High(FileDescs) do
158          begin
159            if FileDescs[typei].ext = finfo.Extension then
160            begin
161              FFiles[fid] := TFileClass(FileDescs[typei].ftype).Create(FConnectionID, fid);
162              Break;
163            end;
164          end;
165        end
166        else
167          FFiles[fid] := TFile_Empty.Create(FConnectionID, fid);
168      end;
169    end;
170  end;
171  files.Free;
172  if ConManager.Connection[FConnectionID] is TAccess_OniArchive then
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
96   end.

Diff Legend

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