Changeset 93


Ignore:
Timestamp:
Sep 7, 2012, 10:31:31 PM (12 years ago)
Author:
chronos
Message:
  • Přidáno: Udržovní inforamce o instalovaných modulech v databázi.
Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Modules/System/UModuleSystem.pas

    r92 r93  
    66
    77uses
    8   Classes, SysUtils, UModularSystem;
     8  Classes, SysUtils, UModularSystem, SpecializedDictionary;
    99
    1010type
     
    1313
    1414  TModuleSystem = class(TModule)
     15  private
     16    procedure ModuleChange(Sender: TObject; Module: TModule);
    1517  public
    1618    constructor Create(Owner: TComponent); override;
     
    2123    procedure Uninstall; override;
    2224    procedure Upgrade; override;
     25    procedure UpdateModuleList;
    2326  end;
    2427
     
    3033
    3134{ TModuleSystem }
     35
     36procedure TModuleSystem.ModuleChange(Sender: TObject; Module: TModule);
     37var
     38  DbRows: TDbRows;
     39  Data: TDictionaryStringString;
     40begin
     41  try
     42    DbRows := TDbRows.Create;
     43    Data := TDictionaryStringString.Create;
     44    if Module.Installed then Data.Add('Installed', '1')
     45      else Data.Add('Installed', '0');
     46    Core.CommonDatabase.Update('SystemModule', Data, 'Name="' + Module.Identification + '"');
     47  finally
     48    Data.Free;
     49    DbRows.Free;
     50  end;
     51end;
    3252
    3353constructor TModuleSystem.Create(Owner: TComponent);
     
    4767
    4868procedure TModuleSystem.Start;
     69var
     70  DbRows: TDbRows;
     71  I: Integer;
     72  Module: TModule;
    4973begin
     74  try
     75    DbRows := TDbRows.Create;
     76    Core.CommonDatabase.Select(DbRows, 'SystemModule', 'Name, Installed');
     77    for I := 0 to DbRows.Count - 1 do
     78    with DbRows[I] do begin
     79      Module := Core.ModuleManager.FindModuleByName(Values['Name']);
     80      if Assigned(Module) then
     81        if Values['Installed'] = '1' then Module.SetInstalledState(True)
     82          else Module.SetInstalledState(False);
     83    end;
     84  finally
     85    DbRows.Free;
     86  end;
     87  Core.ModuleManager.OnModuleChange := ModuleChange;
    5088  inherited Start;
    5189end;
     
    5492begin
    5593  inherited Stop;
     94  Core.ModuleManager.OnModuleChange := nil;
    5695end;
    5796
     
    78117    DbRows.Free;
    79118  end;
     119  UpdateModuleList;
    80120  inherited Install;
    81121end;
     
    99139end;
    100140
     141procedure TModuleSystem.UpdateModuleList;
     142var
     143  DbRows: TDbRows;
     144  I: Integer;
     145  Index: Integer;
     146  Data: TDictionaryStringString;
     147begin
     148  try
     149    DbRows := TDbRows.Create;
     150    Data := TDictionaryStringString.Create;
     151
     152    Core.CommonDatabase.Select(DbRows, 'SystemModule', 'Name');
     153
     154    for I := 0 to Core.ModuleManager.Modules.Count - 1 do
     155    with TModule(Core.ModuleManager.Modules[I]) do begin
     156      Data.Clear;
     157      Data.Add('Name', Identification);
     158      Data.Add('Version', Version);
     159      Data.Add('License', License);
     160      Data.Add('Creator', Author);
     161      Data.Add('Description', Description.Text);
     162      Data.Add('Title', Title);
     163      Data.Add('Dependencies', Dependencies.Text);
     164      if Installed then Data.Add('Installed', '1')
     165        else Data.Add('Installed', '0');
     166
     167      Index := 0;
     168      while (Index < DbRows.Count) and (DbRows[Index].Values['Name'] <> Identification) do Inc(Index);
     169      if Index >= DbRows.Count then Core.CommonDatabase.Insert('SystemModule', Data)
     170        else Core.CommonDatabase.Update('SystemModule', Data, 'Name="' + Identification + '"');
     171    end;
     172  finally
     173    Data.Free;
     174    DbRows.Free;
     175  end;
     176end;
     177
    101178end.
    102179
  • trunk/Packages/ModularSystem/UModularSystem.pas

    r92 r93  
    5858  end;
    5959
     60  TModuleEvent = procedure (Sender: TObject; Module: TModule) of object;
     61
    6062  { TModuleManager }
    6163
     
    6365  private
    6466    FAPI: TAPI;
     67    FOnModuleChange: TModuleEvent;
    6568    procedure SetAPI(AValue: TAPI);
    6669  public
     
    8487    destructor Destroy; override;
    8588    property API: TAPI read FAPI write SetAPI;
     89    property OnModuleChange: TModuleEvent read FOnModuleChange write FOnModuleChange;
    8690  end;
    8791
     
    328332  Manager.InstallDependencies(Identification, Dependencies);
    329333  FInstalled := True;
     334  if Assigned(Manager.FOnModuleChange) then
     335    Manager.FOnModuleChange(Manager, Self);
    330336end;
    331337
     
    336342  Manager.UninstallDependencies(Identification);
    337343  FInstalled := False;
     344  if Assigned(Manager.FOnModuleChange) then
     345    Manager.FOnModuleChange(Manager, Self);
    338346end;
    339347
     
    370378begin
    371379  FInstalled := Value;
     380  if Assigned(Manager.FOnModuleChange) then
     381    Manager.FOnModuleChange(Manager, Self);
    372382end;
    373383
  • trunk/Pages/UPageAdmin.pas

    r92 r93  
    4848      else PageName := '';
    4949    with HtmlDocument.Body do begin
    50       LoadUserInfo;
    5150      if PageName = '' then PageName := 'modulelist';
    5251      if PageName = 'modulelist' then HandleModuleList(HandlerData)
  • trunk/UCore.pas

    r92 r93  
    192192  //SaveToRegistry;
    193193  FreeAndNil(CommonDatabase);
     194  ModuleManager.StopAll;
    194195  FreeAndNil(ModuleManager);
    195196  FreeAndNil(Pages);
     
    279280  DbRows: TDbRows;
    280281  Module: TModule;
     282  I: Integer;
    281283begin
    282284  try
Note: See TracChangeset for help on using the changeset viewer.