| 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; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 129 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 130 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 131 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 132 | < | procedure TMetaManager.InitRootFiles; | 
 
 
 
 
 
 
 
 
 | 132 | > | procedure TMetaManager.InitExtFiles(Ext: String); | 
 
 
 
 
 
 
 
 
 
 
 | 133 |  | var | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 134 |  | files: TStrings; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 135 |  | i: Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 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. |