Pārlūkot izejas kodu

removed deprecated units

Unknown 6 gadi atpakaļ
vecāks
revīzija
2ad8e03af9
3 mainītis faili ar 0 papildinājumiem un 929 dzēšanām
  1. 0 155
      Quick.Config.Provider.Json.pas
  2. 0 544
      Quick.Config.Provider.Registry.pas
  3. 0 230
      Quick.Config.pas

+ 0 - 155
Quick.Config.Provider.Json.pas

@@ -1,155 +0,0 @@
-{ ***************************************************************************
-
-  Copyright (c) 2015-2018 Kike Pérez
-
-  Unit        : Quick.Config.Provider.Json
-  Description : Save config to JSON file
-  Author      : Kike Pérez
-  Version     : 1.4
-  Created     : 21/10/2017
-  Modified    : 10/12/2018
-
-  This file is part of QuickLib: https://github.com/exilon/QuickLib
-
- ***************************************************************************
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-
- *************************************************************************** }
-unit Quick.Config.Provider.Json;
-
-{$i QuickLib.inc}
-
-interface
-
-uses
-  Classes,
-  SysUtils,
-  {$IFDEF DELPHIXE_UP}
-  IOUtils,
-  {$ELSE}
-  Quick.Files,
-  {$ENDIF}
-  Rtti,
-  Quick.Json.Serializer,
-  {$IFDEF FPC}
-  fpjson,
-  fpjsonrtti,
-  {$ELSE}
-  Rest.Json.Types,
-  System.JSON,
-  {$ENDIF}
-  Quick.Config;
-
-type
-
-  TAppConfigJsonProvider<T: class> = class(TAppConfigProviderBase<T>)
-  private
-    fFilename : string;
-  public
-    constructor Create(var cConfig : T); override;
-    property Filename : string read fFilename write fFilename;
-    procedure Load(var cConfig : T); override;
-    procedure Save(var cConfig : T); override;
-  end;
-
-
-implementation
-
-constructor TAppConfigJsonProvider<T>.Create(var cConfig : T);
-begin
-  inherited Create(cConfig);
-  fFilename := TPath.ChangeExtension(ParamStr(0),'json');
-end;
-
-procedure TAppConfigJsonProvider<T>.Load(var cConfig : T);
-var
-  json : TStrings;
-  Serializer : TJsonSerializer;
-  NewObj : T;
-begin
-  //create object with rtti if nil
-  //if not Assigned(Config) then Config := InitObject;
-
-  if (not FileExists(fFilename)) and (CreateIfNotExists) then
-  begin
-    TAppConfig(cConfig).DefaultValues;
-    Self.Save(cConfig);
-  end;
-
-  try
-    json := TStringList.Create;
-    try
-      json.LoadFromFile(fFilename);
-      serializer := TJsonSerializer.Create(slPublishedProperty);
-      try
-        //Streamer.Options := Streamer.Options + [jsoDateTimeAsString ,jsoUseFormatString];
-        //Streamer.DateTimeFormat := 'yyyy-mm-dd"T"hh:mm:ss.zz';
-        serializer.JsonToObject(cConfig,json.Text);
-        Exit;
-      finally
-        serializer.Free;
-      end;
-      if Assigned(cConfig) then cConfig.Free;
-      cConfig := NewObj;
-    finally
-      json.Free;
-    end;
-  except
-    on e : Exception do raise e;
-  end;
-end;
-
-procedure TAppConfigJsonProvider<T>.Save(var cConfig : T);
-var
-  json : TStrings;
-  Serializer : TJsonSerializer;
-  ctx : TRttiContext;
-  rprop : TRttiProperty;
-begin
-  //create object with rtti if nil
-  if not Assigned(cConfig) then cConfig := InitObject;
-
-  try
-    json := TStringList.Create;
-    try
-      serializer := TJsonSerializer.Create(TSerializeLevel.slPublishedProperty);
-      try
-        //Streamer.Options := Streamer.Options + [jsoDateTimeAsString ,jsoUseFormatString];
-        //Streamer.DateTimeFormat := 'yyyy-mm-dd"T"hh:mm:ss.zz';
-        json.Text := serializer.ObjectToJson(cConfig,True);
-      finally
-        serializer.Free;
-      end;
-      json.SaveToFile(fFilename);
-      {$IFDEF FPC}
-      //TAppConfig(cConfig).LastSaved := Now;
-      {$ELSE}
-      ctx := TRttiContext.Create;
-      try
-        rprop := ctx.GetType(TypeInfo(T)).GetProperty('LastSaved');
-        rprop.SetValue(TObject(cConfig),TValue.FromVariant(Now()));
-      finally
-        ctx.Free;
-      end;
-      {$ENDIF}
-    finally
-      json.Free;
-    end;
-  except
-    on e : Exception do raise e;
-  end;
-end;
-
-
-end.

+ 0 - 544
Quick.Config.Provider.Registry.pas

@@ -1,544 +0,0 @@
-{ ***************************************************************************
-
-  Copyright (c) 2015-2018 Kike Pérez
-
-  Unit        : Quick.Config.Provider.Registry
-  Description : Save config to Windows Registry
-  Author      : Kike Pérez
-  Version     : 1.2
-  Created     : 21/10/2017
-  Modified    : 12/09/2018
-
-  This file is part of QuickLib: https://github.com/exilon/QuickLib
-
- ***************************************************************************
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-
- *************************************************************************** }
-unit Quick.Config.Provider.Registry;
-
-{$i QuickLib.inc}
-
-interface
-
-uses
-  Classes,
-  Windows,
-  SysUtils,
-  Registry,
-  Quick.Json.Serializer,
-  {$IFDEF DELPHIRX102_UP}
-    System.Json,
-    System.JSON.Types,
-  {$ELSE}
-    {$IFDEF FPC}
-    fpjson,
-    //jsonparser,
-    //fpjsonrtti,
-    Quick.Json.fpc.Compatibility,
-    {$ELSE}
-    Rest.Json.Types,
-    System.JSON,
-    Rest.Json,
-    {$ENDIF}
-  {$ENDIF}
-  Quick.Commons,
-  Quick.Config;
-
-type
-
-  TAppConfigRegistryProvider<T : class> = class(TAppConfigProviderBase<T>)
-  private
-    fRootKey : HKEY;
-    fMainKey : string;
-    fRegConfig : TRegistry;
-    function JsonToRegistry(const StrJson : string) : Boolean;
-    function RegistryToJson(out StrJson : string) : Boolean;
-    class function IsSimpleJsonValue(v: TJSONValue): Boolean;
-    function IsRegKeyObject(const cCurrentKey : string = '') : Boolean;
-    function IsRegKeyArray(const cCurrentKey : string = '') : Boolean;
-    function ProcessPairRead(const cCurrentKey, cRegKey : string; aIndex : Integer) : TJSONValue;
-    function ProcessElementRead(const cCurrentKey, cRegKey : string; aIndex : Integer) : TJSONValue;
-    procedure ProcessPairWrite(const cCurrentKey: string; obj: TJSONObject; aIndex: integer);
-    procedure ProcessElementWrite(const cCurrentKey: string; arr: TJSONArray; aIndex, aMax : integer);
-    function AddRegKey(const cCurrentKey, NewKey : string) : Boolean;
-    function ReadRegValue(const cCurrentKey, cName : string) : TJSONValue;
-    procedure AddRegValue(const cCurrentKey, cName : string; cValue : TJSONValue);
-  public
-    constructor Create(var cConfig : T); override;
-    destructor Destroy; override;
-    property HRoot : HKEY read fRootKey write fRootKey;
-    property MainKey : string read fMainKey write fMainKey;
-    procedure Load(var cConfig : T); override;
-    procedure Save(var cConfig : T); override;
-  end;
-
-  EAppConfig = Exception;
-
-
-implementation
-
-
-{ TAppConfigRegistryProvider }
-
-constructor TAppConfigRegistryProvider<T>.Create(var cConfig : T);
-begin
-  inherited Create(cConfig);
-  fRootKey := HKEY_CURRENT_USER;
-  fMainKey := '_AppConfig';
-  fRegConfig := TRegistry.Create(KEY_READ or KEY_WRITE);
-end;
-
-destructor TAppConfigRegistryProvider<T>.Destroy;
-begin
-  if Assigned(fRegConfig) then fRegConfig.Free;
-  inherited;
-end;
-
-procedure TAppConfigRegistryProvider<T>.Load(var cConfig : T);
-var
-  Serializer: TJsonSerializer;
-  json : string;
-  newObj : T;
-begin
-  fRegConfig.Access := KEY_READ;
-  fRegConfig.RootKey := fRootKey;
-  if not fRegConfig.KeyExists('\Software\' + fMainKey) then
-  begin
-    if CreateIfNotExists then Save(cConfig)
-    else
-    begin
-      cConfig := InitObject;
-      Exit;
-    end;
-  end;
-  RegistryToJson(json);
-  serializer := TJsonSerializer.Create(slPublishedProperty);
-  try
-    //Streamer.Options := Streamer.Options + [jsoDateTimeAsString ,jsoUseFormatString];
-    //Streamer.DateTimeFormat := 'yyyy-mm-dd"T"hh:mm:ss.zz';
-    serializer.JsonToObject(cConfig,json);
-    Exit;
-  finally
-    serializer.Free;
-  end;
-  if Assigned(cConfig) then cConfig.Free;
-  cConfig := newObj;
-end;
-
-procedure TAppConfigRegistryProvider<T>.Save(var cConfig : T);
-begin
-  //create object with rtti if nil
-  if not Assigned(cConfig) then cConfig := InitObject;
-  JsonToRegistry(TAppConfig(cConfig).ToJSON);
-end;
-
-function TAppConfigRegistryProvider<T>.JsonToRegistry(const StrJson : string) : Boolean;
-var
-  jValue  : TJSONValue;
-  aCount : Integer;
-  i : Integer;
-  aCurrentKey : string;
-begin
-  Result := False;
-  if fMainKey = '' then raise EAppConfig.Create('MainKey not defined!');
-
-  fRegConfig.Access := KEY_READ or KEY_WRITE;
-  fRegConfig.RootKey := fRootKey;
-  aCurrentKey := '\Software\' + fMainKey;
-
-  if fRegConfig.KeyExists(aCurrentKey) then
-  begin
-    try
-     if fRegConfig.KeyExists(aCurrentKey + '_bak') then fRegConfig.DeleteKey(aCurrentKey + '_bak');
-     fRegConfig.MoveKey(aCurrentKey,aCurrentKey + '_bak',True);
-    except
-      raise EAppConfig.Create('Can''t write Config Registry');
-    end;
-  end;
-  try
-    if not AddRegKey('\Software',fMainKey) then
-    begin
-      raise EAppConfig.Create('Can''t create key');
-    end;
-
-    {$IFNDEF FPC}
-    jValue := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StrJson),0) as TJSONValue;
-    {$ELSE}
-    jValue := TJSONObject.ParseJSONValue(StrJson) as TJSONValue;
-    {$ENDIF}
-    try
-      if IsSimpleJsonValue(jValue) then
-      begin
-        {$IFNDEF FPC}
-        AddRegValue(aCurrentKey,TJSONPair(jValue).JsonString.ToString.DeQuotedString('"'),TJSONPair(jValue).JsonValue);
-        {$ELSE}
-        AddRegValue(aCurrentKey,TJSONPair(jValue).JsonString.DeQuotedString('"'),TJSONPair(jValue).JsonValue);
-        {$ENDIF}
-      end
-      {$IFNDEF FPC}
-      else if jValue is TJSONObject then
-      {$ELSE}
-      else if jvalue.JSONType = jtObject then
-      {$ENDIF}
-      begin
-        aCount := TJSONObject(jValue).Count;
-        for i := 0 to aCount - 1 do
-          ProcessPairWrite(aCurrentKey,TJSONObject(jValue),i);
-      end
-      {$IFNDEF FPC}
-      else if jValue is TJSONArray then
-      {$ELSE}
-      else if jValue.JSONType = jtArray then
-      {$ENDIF}
-      begin
-        aCount := TJSONArray(jValue).Count;
-        for i := 0 to aCount - 1 do
-          ProcessElementWrite(aCurrentKey,TJSONArray(jValue),i,aCount);
-      end
-      else raise EAppConfig.Create('Error Saving config to Registry');
-      Result := True;
-    finally
-       jValue.Free;
-    end;
-    if fRegConfig.KeyExists(aCurrentKey + '_bak') then fRegConfig.DeleteKey(aCurrentKey + '_bak');
-  except
-    fRegConfig.DeleteKey(aCurrentKey);
-    fRegConfig.MoveKey(aCurrentKey+'_bak',aCurrentKey,True);
-  end;
-end;
-
-function TAppConfigRegistryProvider<T>.RegistryToJson(out StrJson : string) : Boolean;
-var
-  jValue  : TJSONValue;
-  jPair : TJSONPair;
-  jArray : TJSONArray;
-  a, b : string;
-  aCount : Integer;
-  i : Integer;
-  aName : string;
-  aValue : TJSONValue;
-  aCurrentKey : string;
-  newObj : TJSONObject;
-  RegKeyList : TStringList;
-  RegValueList : TStringList;
-  RegKey : string;
-  RegValue : string;
-  RegKeyInfo : TRegKeyInfo;
-begin
-  Result := False;
-  //check if exists root key
-  fRegConfig.Access := KEY_READ;
-  fRegConfig.RootKey := fRootKey;
-  if fRegConfig.KeyExists('\Software\' + fMainKey) then
-  begin
-    fRegConfig.OpenKeyReadOnly('\Software\' + fMainKey);
-    aCurrentKey := '\Software\' + fMainKey;
-  end
-  else raise EAppConfig.Create('Can''t read key');
-
-  newObj := TJSONObject.Create;
-  try
-    //read root values
-    RegValueList := TStringList.Create;
-    try
-      fRegConfig.GetValueNames(RegValueList);
-      for RegValue in RegValueList do
-      begin
-        newObj.AddPair(RegValue,ReadRegValue(aCurrentKey,RegValue));
-      end;
-    finally
-      RegValueList.Free;
-    end;
-    //read root keys
-    RegKeyList := TStringList.Create;
-    try
-      fRegConfig.GetKeyNames(RegKeyList);
-      for RegKey in RegKeyList do
-      begin
-        fRegConfig.OpenKeyReadOnly(aCurrentKey + '\' + RegKey);
-        if IsRegKeyObject then
-        begin
-          jValue := ProcessPairRead(aCurrentKey + '\' + RegKey,Regkey,i);
-          newObj.AddPair(RegKey,jValue);
-        end
-        else if IsRegKeyArray then
-        begin
-          jValue := ProcessElementRead(aCurrentKey + '\' + RegKey,Regkey,i);
-          newObj.AddPair(RegKey,jValue);
-        end
-        else raise EAppConfig.Create('Unknow value reading Config Registry');
-      end;
-    finally
-      RegKeyList.Free;
-    end;
-    StrJson := newObj.ToJSON;
-  finally
-    newObj.Free;
-  end;
-end;
-
-function TAppConfigRegistryProvider<T>.IsRegKeyObject(const cCurrentKey : string = '') : Boolean;
-begin
-  Result := not IsRegKeyArray(cCurrentKey);
-end;
-
-function TAppConfigRegistryProvider<T>.IsRegKeyArray(const cCurrentKey : string = '') : Boolean;
-var
-  RegValue : string;
-  RegValueList : TStrings;
-  RegKey : string;
-  RegKeyList : TStrings;
-  n : Integer;
-begin
-  Result := False;
-  if cCurrentKey <> '' then fRegConfig.OpenKeyReadOnly(cCurrentKey);
-  //check if exists RegKey numeric (indicates is a Array)
-  RegKeyList := TStringList.Create;
-  try
-    fRegConfig.GetKeyNames(RegKeyList);
-    for RegKey in RegKeyList do
-      if TryStrToInt(RegKey,n) then
-      begin
-        Result := True;
-        Break;
-      end;
-  finally
-    RegKeyList.Free;
-  end;
-  //check if exists RegValue numeric (indicates is a Array)
-  RegValueList := TStringList.Create;
-  try
-    fRegConfig.GetValueNames(RegValueList);
-    for RegValue in RegValueList do
-      if TryStrToInt(RegValue,n) then
-      begin
-        Result := True;
-        Break;
-      end;
-  finally
-    RegValueList.Free;
-  end;
-end;
-
-class function TAppConfigRegistryProvider<T>.IsSimpleJsonValue(v: TJSONValue): Boolean;
-begin
-  Result := (v is TJSONNumber)
-    or (v is TJSONString)
-    {$IFNDEF FPC}
-    or (v is TJSONTrue)
-    or (v is TJSONFalse)
-    {$ELSE}
-    or (v is TJsonBool)
-    {$ENDIF}
-    or (v is TJSONNull);
-end;
-
-function TAppConfigRegistryProvider<T>.ReadRegValue(const cCurrentKey, cName : string) : TJSONValue;
-var
-  aValue : string;
-  RegInfo : TRegDataInfo;
-begin
-  if fRegConfig.OpenKeyReadOnly(cCurrentKey) then
-  begin
-    if fRegConfig.GetDataInfo(cName,RegInfo) then
-    case RegInfo.RegData of
-      rdInteger : Result := TJSONNumber.Create(fRegConfig.ReadInteger(cName));
-      rdString :
-        begin
-          aValue := fRegConfig.ReadString(cName);
-          if aValue.ToLower = 'true' then Result := TJSONBool.Create(True)
-           else if aValue.ToLower = 'false' then Result := TJSONBool.Create(False)
-            else Result := TJSONString.Create(aValue);
-        end;
-      else Result := TJSONNull.Create;
-    end;
-  end;
-end;
-
-function TAppConfigRegistryProvider<T>.AddRegKey(const cCurrentKey, NewKey : string) : Boolean;
-begin
-  Result := fRegConfig.CreateKey(Format('%s\%s',[cCurrentKey,NewKey]));
-end;
-
-procedure TAppConfigRegistryProvider<T>.AddRegValue(const cCurrentKey, cName : string; cValue : TJSONValue);
-var
-  aName : string;
-  aValue : string;
-begin
-  aName := cName.DeQuotedString('"');
-  aValue := cValue.ToString.DeQuotedString('"');
-  fRegConfig.OpenKey(cCurrentKey,True);
-  if cValue is TJSONNumber then  fRegConfig.WriteInteger(aName,StrToInt64(aValue))
-   else if cValue is TJSONString then fRegConfig.WriteString(aName,aValue)
-    else if cValue is TJSONBool then fRegConfig.WriteString(aName,aValue);
-      //else if cValue is TJSONNull then fRegConfig.WriteString(aName,'');
-end;
-
-function TAppConfigRegistryProvider<T>.ProcessPairRead(const cCurrentKey, cRegKey : string; aIndex : Integer) : TJSONValue;
-var
-  i : Integer;
-  jValue : TJSONValue;
-  RegValue : string;
-  RegValueList : TStrings;
-  RegKey : string;
-  RegKeyList : TStrings;
-  newObj : TJSONObject;
-begin
-  newObj := TJSONObject.Create;
-  //read root values
-  RegValueList := TStringList.Create;
-  try
-    fRegConfig.GetValueNames(RegValueList);
-    for RegValue in RegValueList do
-    begin
-      newObj.AddPair(RegValue,ReadRegValue(cCurrentKey,RegValue));
-    end;
-  finally
-    RegValueList.Free;
-  end;
-  //read root keys
-  RegKeyList := TStringList.Create;
-  try
-    fRegConfig.GetKeyNames(RegKeyList);
-    for RegKey in RegKeyList do
-    begin
-      fRegConfig.OpenKeyReadOnly(cCurrentKey + '\' + RegKey);
-      if IsRegKeyObject then
-      begin
-        jValue := ProcessPairRead(cCurrentKey + '\' + RegKey,Regkey,i);
-        newObj.AddPair(RegKey,jValue);
-      end
-      else if IsRegKeyArray then
-      begin
-        jValue := ProcessElementRead(cCurrentKey + '\' + RegKey,Regkey,i);
-        newObj.AddPair(RegKey,jValue);
-      end
-      else raise EAppConfig.Create('Unknow value reading Config Registry');
-    end;
-  finally
-    RegKeyList.Free;
-  end;
-  Result := TJsonValue(newObj);
-end;
-
-function TAppConfigRegistryProvider<T>.ProcessElementRead(const cCurrentKey, cRegKey : string; aIndex : Integer) : TJSONValue;
-var
-  i : Integer;
-  jValue : TJSONValue;
-  RegValue : string;
-  RegValueList : TStrings;
-  RegKey : string;
-  RegKeyList : TStrings;
-  newObj : TJSONArray;
-begin
-  newObj := TJSONArray.Create;
-  //read root values
-  RegValueList := TStringList.Create;
-  try
-    fRegConfig.GetValueNames(RegValueList);
-    for RegValue in RegValueList do
-    begin
-      newObj.AddElement(ReadRegValue(cCurrentKey,RegValue));
-    end;
-  finally
-    RegValueList.Free;
-  end;
-  //read root keys
-  RegKeyList := TStringList.Create;
-  try
-    fRegConfig.GetKeyNames(RegKeyList);
-    for RegKey in RegKeyList do
-    begin
-      fRegConfig.OpenKeyReadOnly(cCurrentKey + '\' + RegKey);
-      if IsRegKeyObject then
-      begin
-        jValue := ProcessPairRead(cCurrentKey + '\' + RegKey,Regkey,i);
-        newObj.AddElement(jValue);
-      end
-      else if IsRegKeyArray then
-      begin
-        jValue := ProcessElementRead(cCurrentKey + '\' + RegKey,Regkey,i);
-        newObj.AddElement(jValue);
-      end
-      else raise EAppConfig.Create('Unknow value reading Config Registry');
-    end;
-  finally
-    RegKeyList.Free;
-  end;
-  Result := TJsonValue(newObj);
-end;
-
-procedure TAppConfigRegistryProvider<T>.ProcessPairWrite(const cCurrentKey: string; obj: TJSONObject; aIndex: integer);
-var
-  jPair: TJSONPair;
-  i : Integer;
-  aCount: integer;
-begin
-  jPair := obj.Pairs[aIndex];
-
-  if IsSimpleJsonValue(jPair.JsonValue) then
-  begin
-    AddRegValue(cCurrentKey,jPair.JsonString{$IFNDEF FPC}.ToString{$ENDIF},jPair.JsonValue);
-    Exit;
-  end;
-
-  if jPair.JsonValue is TJSONObject then
-  begin
-    aCount := TJSONObject(jPair.JsonValue).Count;
-    for i := 0 to aCount - 1 do
-      ProcessPairWrite(cCurrentKey + '\' + jPair.JsonString{$IFNDEF FPC}.ToString{$ENDIF}.DeQuotedString('"'), TJSONObject(jPair.JsonValue),i);
-  end
-  else if jPair.JsonValue is TJSONArray then
-  begin
-    aCount := TJSONArray(jPair.JsonValue).Count;
-    for i := 0 to aCount - 1 do
-      ProcessElementWrite(cCurrentKey + '\' + jPair.JsonString{$IFNDEF FPC}.ToString{$ENDIF}.DeQuotedString('"'), TJSONArray(jPair.JsonValue),i,aCount);
-  end
-  else raise EAppConfig.Create('Error Saving config to Registry');
-end;
-
-procedure TAppConfigRegistryProvider<T>.ProcessElementWrite(const cCurrentKey: string; arr: TJSONArray; aIndex, aMax: integer);
-var
-  jValue: TJSONValue;
-  i : Integer;
-  aCount: integer;
-  dig : Integer;
-begin
-  jValue := arr.Items[aIndex];
-  dig := CountDigits(aMax);
-
-  if IsSimpleJsonValue(jValue) then
-  begin
-    AddRegValue(cCurrentKey,Zeroes(aIndex,dig),jValue);
-    Exit;
-  end;
-
-  if jValue is TJSONObject then
-  begin
-    aCount := TJSONObject(jValue).Count;
-    for i := 0 to aCount - 1 do
-      ProcessPairWrite(cCurrentKey + '\' + Zeroes(aIndex,dig),TJSONObject(jValue),i);
-  end
-  else if jValue is TJSONArray then
-  begin
-    aCount := TJSONArray(jValue).Count;
-    for i := 0 to aCount - 1 do
-      ProcessElementWrite(cCurrentKey + '\' + Zeroes(i,dig),TJSONArray(jValue),i,aCount);
-  end
-  else raise EAppConfig.Create('Error Saving config to Registry');
-end;
-
-end.
-

+ 0 - 230
Quick.Config.pas

@@ -1,230 +0,0 @@
-{ ***************************************************************************
-
-  Copyright (c) 2015-2018 Kike Pérez
-
-  Unit        : Quick.Config
-  Description : Load/Save config from/to JSON file
-  Author      : Kike Pérez
-  Version     : 1.5
-  Created     : 26/01/2017
-  Modified    : 10/12/2018
-
-  This file is part of QuickLib: https://github.com/exilon/QuickLib
-
- ***************************************************************************
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-
- *************************************************************************** }
-
-unit Quick.Config;
-
-interface
-
-{$i QuickLib.inc}
-
-uses
-  Classes,
-  SysUtils,
-  Rtti,
-  {$IFDEF FPC}
-  fpjson,
-  jsonparser,
-  fpjsonrtti,
-  Quick.Json.Serializer;
-  {$ELSE}
-  Quick.Json.Serializer,
-  DBXJSON,
-  System.JSON,
-  Rest.Json.Types,
-  Rest.Json;
-  {$ENDIF}
-
-type
-
-  TDateTimeZone = (tzLocal, tzUTC);
-
-  IAppConfigProvider<T> = interface
-  ['{D55B1EBF-47F6-478B-8F70-9444575CB825}']
-    procedure Load(var cConfig : T);
-    procedure Save(var cConfig : T);
-  end;
-
-  TSerializeProperty = (spPublic, spPublished);
-
-  TAppConfigProviderBase<T : class> = class(TInterfacedObject,IAppConfigProvider<T>)
-  private
-    fCreateIfNotExists : Boolean;
-    fSerializeLevel : TSerializeProperty;
-  public
-    constructor Create(var cConfig : T); virtual;
-    property CreateIfNotExists : Boolean read fCreateIfNotExists write fCreateIfNotExists;
-    property SerializeLevel : TSerializeProperty read fSerializeLevel write fSerializeLevel;
-    function InitObject : T;
-    procedure Load(var cConfig : T); virtual; abstract;
-    procedure Save(var cConfig : T); virtual; abstract;
-  end;
-
-  TApplyConfigEvent = procedure of object;
-
-  {$IFDEF DELPHIXE2_UP}[JsonSerialize(TJsonMemberSerialization.&Public)]{$ENDIF}
-  TAppConfig = class
-  private
-    {$IFDEF FPC}
-    fOnApplyConfig : TApplyConfigEvent;
-    fDateTimeZone: TDateTimeZone;
-    fJsonIndent: Boolean;
-    fLastSaved : TDateTime;
-    {$ELSE}
-    {$IF CompilerVersion < 32.0}[JSONMarshalledAttribute(False)]{$ENDIF}
-    fOnApplyConfig : TApplyConfigEvent;
-    {$IF CompilerVersion < 32.0}[JSONMarshalledAttribute(False)]{$ENDIF}
-    fDateTimeZone: TDateTimeZone;
-    {$IF CompilerVersion < 32.0}[JSONMarshalledAttribute(False)]{$ENDIF}
-    fJsonIndent: Boolean;
-    {$IF CompilerVersion < 32.0}[JSONMarshalledAttribute(False)]{$ENDIF}
-    fLastSaved : TDateTime;
-    {$ENDIF}
-  public
-    constructor Create; virtual;
-    {$IFDEF DELPHIRX102_UP}[JsonIgnoreAttribute]{$ENDIF}
-    property OnApplyConfig : TApplyConfigEvent read fOnApplyConfig write fOnApplyConfig;
-    {$IFDEF DELPHIRX102_UP}[JsonIgnoreAttribute]{$ENDIF}
-    property DateTimeZone : TDateTimeZone read fDateTimeZone write fDateTimeZone;
-    {$IFDEF DELPHIRX102_UP}[JsonIgnoreAttribute]{$ENDIF}
-    property JsonIndent : Boolean read fJsonIndent write fJsonIndent;
-    {$IFDEF DELPHIRX102_UP}[JsonIgnoreAttribute]{$ENDIF}
-    property LastSaved : TDateTime read fLastSaved write fLastSaved;
-    procedure Apply;
-    procedure DefaultValues; virtual;
-    function ToJSON : string;
-    procedure FromJSON(const json : string);
-  end;
-
-  {Usage: create a descend class from TAppConfig and add published properties to be loaded/saved
-
-  TMyConfig = class(TAppConfig)
-  private
-    fName : string;
-    fSurname : string;
-    fStatus : Integer;
-  published
-    property Name : string read fName write fName;
-    property SurName : string read fSurname write fSurname;
-    property Status : Integer read fStatus write fStatus;
-  end;
-
-  AppConfigProvider := TAppConfigJsonProvider<TMyConfig>.Create(MyConfig);
-  MyConfig.Name := 'John';
-  }
-
-implementation
-
-
-{ TAppConfigProviderBase }
-
-constructor TAppConfigProviderBase<T>.Create(var cConfig : T);
-begin
-  fCreateIfNotExists := True;
-  fSerializeLevel := spPublished;
-  //create object with rtti
-  if Assigned(cConfig) then cConfig.Free;
-  cConfig := InitObject;
-end;
-
-function TAppConfigProviderBase<T>.InitObject : T;
-var
-  AValue: TValue;
-  ctx: TRttiContext;
-  rType: TRttiType;
-  AMethCreate: TRttiMethod;
-begin
-  ctx := TRttiContext.Create;
-  try
-    rType := ctx.GetType(TypeInfo(T));
-    for AMethCreate in rType.GetMethods do
-    begin
-      if (AMethCreate.IsConstructor) and (Length(AMethCreate.GetParameters) = 0) then
-      begin
-        {$IFDEF FPC}
-        Result := T(GetClass(T.ClassName).Create);
-        {$ELSE}
-        AValue := AMethCreate.Invoke(rType.AsInstance.AsInstance.MetaclassType,[]);
-        Result := AValue.AsType<T>;
-        {$ENDIF}
-        Break;
-      end;
-    end;
-  finally
-    ctx.Free;
-  end;
-end;
-
-{ TAppConfig }
-
-constructor TAppConfig.Create;
-begin
-  fDateTimeZone := TDateTimeZone.tzLocal;
-  fJsonIndent := True;
-  fLastSaved := 0;
-end;
-
-procedure TAppConfig.Apply;
-begin
-  if Assigned(fOnApplyConfig) then fOnApplyConfig;
-end;
-
-procedure TAppConfig.DefaultValues;
-begin
-  //inherit to set default values if no config exists before
-end;
-
-
-function TAppConfig.ToJSON : string;
-var
-  Serializer : TJsonSerializer;
-begin
-  Result := '';
-  try
-    serializer := TJsonSerializer.Create(slPublishedProperty);
-    try
-      Result := serializer.ObjectToJSON(Self,True);
-    finally
-      serializer.Free;
-    end;
-  except
-    on e : Exception do raise Exception.Create(e.Message);
-  end;
-end;
-
-procedure TAppConfig.FromJSON(const json : string);
-var
-  Serializer : TJsonSerializer;
-begin
-  try
-    serializer := TJsonSerializer.Create(slPublishedProperty);
-    try
-      {$IF NOT DEFINED(FPC) AND DEFINED(ANDROID)}
-      serializer.JsonToObject(Self,json);
-      {$ELSE}
-      Self := TAppConfig(serializer.JsonToObject(Self,json));
-      {$ENDIF}
-    finally
-      serializer.Free;
-    end;
-  except
-    on e : Exception do raise Exception.Create(e.Message);
-  end;
-end;
-
-end.