Ignore:
Timestamp:
Jun 29, 2007, 2:38:24 PM (17 years ago)
Author:
alloc
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • oup/current/FileClasses/_MetaManager.pas

    r229 r233  
    1313      function GetFileCount: Integer;
    1414      function GetFileById(Id: Integer): TFile;
    15       function GetExt(Ext: String): TExtension;
    16       procedure AddExt(Ext: String);
    1715    private
    18       procedure InitExts;
    1916    public
    2017      constructor Create(ConnectionID: Integer; DataAccess: TObject);
    21       procedure InitExtFiles(Ext: String);
    2218      procedure InitFile(id: Integer);
    2319      procedure InitFileFields(id: Integer);
    2420
    2521      property Root: TExtensions read FRoot;
    26       property RootExt[Ext: String]: TExtension read GetExt;
    2722      property FileCount: Integer read GetFileCount;
    2823      property FileById[Id: Integer]: TFile read GetFileById;
     
    3328uses
    3429  Classes, ConnectionManager, Access_OniArchive, TypeDefs,
    35   Dialogs, SysUtils, StrUtils, DataAccess;
     30  Dialogs, SysUtils, StrUtils, DataAccess, _Extensions;
    3631
    3732{ TFileManager }
     
    4237  FDataAccess := DataAccess;
    4338  SetLength(FFiles, TDataAccess(DataAccess).GetFileCount);
    44   InitExts;
     39  FRoot := TExtensions.Create(DataAccess, ConnectionID);
    4540end;
    4641
    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;
    7942
    8043function TMetaManager.GetFileById(Id: Integer): TFile;
    8144begin
     45  InitFile(Id);
    8246  Result := FFiles[Id];
    8347end;
     
    13094end;
    13195
    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 
    20096end.
Note: See TracChangeset for help on using the changeset viewer.