mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-10-31 09:21:43 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			368 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			368 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
| {
 | |
|  ***************************************************************************
 | |
|  *                                                                         *
 | |
|  *   This source is free software; you can redistribute it and/or modify   *
 | |
|  *   it under the terms of the GNU General Public License as published by  *
 | |
|  *   the Free Software Foundation; either version 2 of the License, or     *
 | |
|  *   (at your option) any later version.                                   *
 | |
|  *                                                                         *
 | |
|  *   This code is distributed in the hope that it will be useful, but      *
 | |
|  *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
 | |
|  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
 | |
|  *   General Public License for more details.                              *
 | |
|  *                                                                         *
 | |
|  *   A copy of the GNU General Public License is available on the World    *
 | |
|  *   Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also      *
 | |
|  *   obtain it by writing to the Free Software Foundation,                 *
 | |
|  *   Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA.   *
 | |
|  *                                                                         *
 | |
|  ***************************************************************************
 | |
| 
 | |
|  Author: Balázs Székely
 | |
| }
 | |
| unit opkman_options;
 | |
| 
 | |
| {$mode objfpc}{$H+}
 | |
| 
 | |
| interface
 | |
| 
 | |
| uses
 | |
|   Classes, SysUtils, Graphics,
 | |
|   // LazUtils
 | |
|   Laz2_XMLCfg, LazFileUtils,
 | |
|   // IdeIntf
 | |
|   LazIDEIntf,MacroIntf,
 | |
|   // OpkMan
 | |
|   opkman_const;
 | |
| 
 | |
| const
 | |
|   OpkVersion = 1;
 | |
|   HintColCnt = 3;
 | |
| 
 | |
| type
 | |
|   { TOptions }
 | |
|   TProxySettings = record
 | |
|     FEnabled: boolean;
 | |
|     FServer: string;
 | |
|     FPort: Word;
 | |
|     FUser: string;
 | |
|     FPassword: string;
 | |
|   end;
 | |
| 
 | |
|   TOptions = class
 | |
|   private
 | |
|     FProxySettings: TProxySettings;
 | |
|     FXML: TXMLConfig;
 | |
|     FVersion: Integer;
 | |
|     FRemoteRepository: TStringList;
 | |
|     FRemoteRepositoryTmp: TStringList;
 | |
|     FActiveRepositoryIndex: Integer;
 | |
|     FLoadJsonLocally: Boolean;
 | |
|     FLoadJsonLocallyCnt: Integer;
 | |
|     FForceDownloadAndExtract: Boolean;
 | |
|     FDeleteZipAfterInstall: Boolean;
 | |
|     FIncompatiblePackages: Boolean;
 | |
|     FAlreadyInstalledPackages: Boolean;
 | |
|     FCheckForUpdates: Integer;
 | |
|     FLastUpdate: TDateTime;
 | |
|     FConTimeOut: Integer;
 | |
|     FDaysToShowNewPackages: Integer;
 | |
|     FShowRegularIcons: Boolean;
 | |
|     FUseDefaultTheme: Boolean;
 | |
|     FHintFormOption: Integer;
 | |
|     FHintFormOptionColors: TStringList;
 | |
|     FChanged: Boolean;
 | |
|     FLastDownloadDir: String;
 | |
|     FLastPackageDirSrc: String;
 | |
|     FLastPackageDirDst: String;
 | |
|     FLastPrivateRepository: String;
 | |
|     // Default values for local repositories.
 | |
|     FLocalPackagesDefault: String;
 | |
|     FLocalArchiveDefault: String;
 | |
|     FLocalUpdateDefault: String;
 | |
|     // Actual local repositories in macro format.
 | |
|     FLocalRepositoryPackages: String;
 | |
|     FLocalRepositoryArchive: String;
 | |
|     FLocalRepositoryUpdate: String;
 | |
|     FUserProfile: Integer;
 | |
|     FExcludedFiles: String;
 | |
|     FExcludedFolders: String;
 | |
|     FOpenSSLDownloadType: Integer;
 | |
|     procedure CheckColors;
 | |
|     function GetLocalRepositoryArchiveExpanded:string;
 | |
|     function GetLocalRepositoryPackagesExpanded:string;
 | |
|     function GetLocalRepositoryUpdateExpanded:string;
 | |
|   public
 | |
|     constructor Create(const AFileName: String);
 | |
|     destructor Destroy; override;
 | |
|     procedure Load;
 | |
|     procedure Save;
 | |
|     procedure LoadDefault;
 | |
|     procedure CreateMissingPaths;
 | |
|     property LocalRepositoryPackagesExpanded:string read GetLocalRepositoryPackagesExpanded;
 | |
|     property LocalRepositoryArchiveExpanded:string read GetLocalRepositoryArchiveExpanded;
 | |
|     property LocalRepositoryUpdateExpanded:string read GetLocalRepositoryUpdateExpanded;
 | |
|   published
 | |
|     property Changed: Boolean read FChanged write FChanged;
 | |
|     property RemoteRepository: TStringList read FRemoteRepository write FRemoteRepository;
 | |
|     property RemoteRepositoryTmp: TStringList read FRemoteRepositoryTmp write FRemoteRepositoryTmp;
 | |
|     property ActiveRepositoryIndex: Integer read FActiveRepositoryIndex write FActiveRepositoryIndex;
 | |
|     property LoadJsonLocally: Boolean read FLoadJsonLocally write FLoadJsonLocally;
 | |
|     property LoadJsonLocallyCnt: Integer read FLoadJsonLocallyCnt write FLoadJsonLocallyCnt;
 | |
|     property ForceDownloadAndExtract: Boolean read FForceDownloadAndExtract write FForceDownloadAndExtract;
 | |
|     property DeleteZipAfterInstall: Boolean read FDeleteZipAfterInstall write FDeleteZipAfterInstall;
 | |
|     property IncompatiblePackages: Boolean read FIncompatiblePackages write FIncompatiblePackages;
 | |
|     property AlreadyInstalledPackages: Boolean read FAlreadyInstalledPackages write FAlreadyInstalledPackages;
 | |
|     property CheckForUpdates: Integer read FCheckForUpdates write FCheckForUpdates;
 | |
|     property LastUpdate: TDateTime read FLastUpdate write FLastUpdate;
 | |
|     property ConTimeOut: Integer read FConTimeOut write FConTimeOut;
 | |
|     property DaysToShowNewPackages: Integer read FDaysToShowNewPackages write FDaysToShowNewPackages;
 | |
|     property ShowRegularIcons: Boolean read FShowRegularIcons write FShowRegularIcons;
 | |
|     property UseDefaultTheme: Boolean read FUseDefaultTheme write FUseDefaultTheme;
 | |
|     property HintFormOption: Integer read FHintFormOption write FHintFormOption;
 | |
|     property HintFormOptionColors: TStringList read FHintFormOptionColors write FHintFormOptionColors;
 | |
|     property UserProfile: Integer read FUserProfile write FUserProfile;
 | |
|     property LastDownloadDir: String read FLastDownloadDir write FLastDownloadDir;
 | |
|     property LastPackagedirSrc: String read FLastPackageDirSrc write FLastPackageDirSrc;
 | |
|     property LastPackagedirDst: String read FLastPackageDirDst write FLastPackageDirDst;
 | |
|     property LastPrivateRepository: String read FLastPrivateRepository write FLastPrivateRepository;
 | |
|     property ProxyEnabled: Boolean read FProxySettings.FEnabled write FProxySettings.FEnabled;
 | |
|     property ProxyServer: String read FProxySettings.FServer write FProxySettings.FServer;
 | |
|     property ProxyPort: Word read FProxySettings.FPort write FProxySettings.FPort;
 | |
|     property ProxyUser: String read FProxySettings.FUser write FProxySettings.FUser;
 | |
|     property ProxyPassword: String read FProxySettings.FPassword write FProxySettings.FPassword;
 | |
|     property OpenSSLDownloadType: Integer read FOpenSSLDownloadType write FOpenSSLDownloadType;
 | |
|     property LocalRepositoryPackages: String read FLocalRepositoryPackages write FLocalRepositoryPackages;
 | |
|     property LocalRepositoryArchive: String read FLocalRepositoryArchive write FLocalRepositoryArchive;
 | |
|     property LocalRepositoryUpdate: String read FLocalRepositoryUpdate write FLocalRepositoryUpdate;
 | |
|     property ExcludedFiles: String read FExcludedFiles write FExcludedFiles;
 | |
|     property ExcludedFolders: String read FExcludedFolders write FExcludedFolders;
 | |
|   end;
 | |
| 
 | |
| var
 | |
|   Options: TOptions = nil;
 | |
| 
 | |
| implementation
 | |
| 
 | |
| { TOptions }
 | |
| 
 | |
| constructor TOptions.Create(const AFileName: String);
 | |
| var
 | |
|   LocalRepo: String;
 | |
| begin
 | |
|   FRemoteRepository := TStringList.Create;
 | |
|   FRemoteRepositoryTmp := TStringList.Create;
 | |
|   FHintFormOptionColors := TStringList.Create;
 | |
|   LocalRepo := AppendPathDelim(AppendPathDelim(LazarusIDE.GetPrimaryConfigPath) + cLocalRepository);
 | |
|   FLocalPackagesDefault := LocalRepo + AppendPathDelim(cLocalRepositoryPackages);
 | |
|   FLocalArchiveDefault := LocalRepo + AppendPathDelim(cLocalRepositoryArchive);
 | |
|   FLocalUpdateDefault := LocalRepo + AppendPathDelim(cLocalRepositoryUpdate);
 | |
| 
 | |
|   FXML := TXMLConfig.Create(AFileName);
 | |
|   if FileExists(AFileName) then
 | |
|   begin
 | |
|     Load;
 | |
|     CheckColors;
 | |
|     if FLocalRepositoryPackages = '' then
 | |
|       FLocalRepositoryPackages := FLocalPackagesDefault;
 | |
|     if FLocalRepositoryArchive = '' then
 | |
|       FLocalRepositoryArchive := FLocalArchiveDefault;
 | |
|     if FLocalRepositoryUpdate = '' then
 | |
|       FLocalRepositoryUpdate := FLocalUpdateDefault;
 | |
|     if FExcludedFiles = '' then
 | |
|       FExcludedFiles := cExcludedFilesDef;
 | |
|     if FExcludedFolders = '' then
 | |
|       FExcludedFolders := cExcludedFoldersDef;
 | |
|   end
 | |
|   else
 | |
|     LoadDefault;
 | |
|   CreateMissingPaths;
 | |
| end;
 | |
| 
 | |
| destructor TOptions.Destroy;
 | |
| begin
 | |
|   if FChanged then
 | |
|     Save;
 | |
|   FRemoteRepository.Free;
 | |
|   FRemoteRepositoryTmp.Free;
 | |
|   FHintFormOptionColors.Free;
 | |
|   FXML.Free;
 | |
|   inherited Destroy;
 | |
| end;
 | |
| 
 | |
| procedure TOptions.Load;
 | |
| begin
 | |
|   FVersion := FXML.GetValue('Version/Value', 0);
 | |
|   if FVersion = 0 then
 | |
|     FRemoteRepository.Text := FXML.GetValue('RemoteRepository/Value', '')
 | |
|   else
 | |
|     FRemoteRepository.Text := FXML.GetValue('General/RemoteRepository/Value', '');
 | |
|   if Trim(FRemoteRepository.Text) = '' then
 | |
|     FRemoteRepository.Add(cRemoteRepository);
 | |
|   FActiveRepositoryIndex := FXML.GetValue('General/ActiveRepositoryIndex/Value', 0);
 | |
|   FLoadJsonLocally := FXML.GetValue('General/LoadJsonLocally/Value', False);
 | |
|   FLoadJsonLocallyCnt := FXML.GetValue('General/LoadJsonLocallyCnt/Value', 0);
 | |
|   FForceDownloadAndExtract := FXML.GetValue('General/ForceDownloadAndExtract/Value', True);
 | |
|   FDeleteZipAfterInstall := FXML.GetValue('General/DeleteZipAfterInstall/Value', True);
 | |
|   FIncompatiblePackages := FXML.GetValue('General/IncompatiblePackages/Value', True);
 | |
|   FAlreadyInstalledPackages := FXML.GetValue('General/AlreadyInstalledPackages/Value', False);
 | |
|   FLastDownloadDir := FXML.GetValue('General/LastDownloadDir/Value', '');
 | |
|   FLastPackageDirSrc := FXML.GetValue('General/LastPackageDirSrc/Value', '');
 | |
|   FLastPackageDirDst := FXML.GetValue('General/LastPackageDirDst/Value', '');
 | |
|   FLastPrivateRepository := FXML.GetValue('General/LastPrivateRepository/Value', '');
 | |
|   FCheckForUpdates := FXML.GetValue('General/CheckForUpdates/Value', 0);
 | |
|   FLastUpdate := FXML.GetExtendedValue('General/LastUpdate/Value', 0.0);
 | |
|   FConTimeOut := FXML.GetValue('General/ConTimeOut/Value', 10);
 | |
|   FDaysToShowNewPackages := FXML.GetValue('General/DaysToShowNewPackages/Value', 31);
 | |
|   FShowRegularIcons := FXML.GetValue('General/ShowRegularIcons/Value', True);
 | |
|   FUseDefaultTheme := FXML.GetValue('General/UseDefaultTheme/Value', True);
 | |
|   FHintFormOption := FXML.GetValue('General/HintFormOption/Value', 0);
 | |
|   FHintFormOptionColors.Text := FXML.GetValue('General/HintFormOptionColors/Value', '');
 | |
| 
 | |
|   FProxySettings.FEnabled := FXML.GetValue('Proxy/Enabled/Value', False);
 | |
|   FProxySettings.FServer := FXML.GetValue('Proxy/Server/Value', '');
 | |
|   FProxySettings.FPort := FXML.GetValue('Proxy/Port/Value', 0);
 | |
|   FProxySettings.FUser := FXML.GetValue('Proxy/User/Value', '');
 | |
|   FProxySettings.FPassword := FXML.GetValue('Proxy/Password/Value', '');
 | |
| 
 | |
|   FOpenSSLDownloadType := FXML.GetValue('OpenSSL/DownloadType/Value', 1);
 | |
| 
 | |
|   FLocalRepositoryPackages := FXML.GetValue('Folders/LocalRepositoryPackages/Value', '');
 | |
|   FLocalRepositoryArchive := FXML.GetValue('Folders/LocalRepositoryArchive/Value', '');
 | |
|   FLocalRepositoryUpdate := FXML.GetValue('Folders/LocalRepositoryUpdate/Value', '');
 | |
| 
 | |
|   FUserProfile := FXML.GetValue('Profiles/UserProfile/Value', 0);
 | |
|   FExcludedFiles := FXML.GetValue('Profiles/ExcludedFiles/Value', '');
 | |
|   FExcludedFolders := FXML.GetValue('Profiles/ExcludedFolders/Value', '');
 | |
| end;
 | |
| 
 | |
| procedure TOptions.Save;
 | |
| begin
 | |
|   FXML.SetDeleteValue('Version/Value', OpkVersion, 0);
 | |
|   FXML.SetDeleteValue('General/RemoteRepository/Value', FRemoteRepository.Text, '');
 | |
|   FXML.SetDeleteValue('General/ActiveRepositoryIndex/Value', FActiveRepositoryIndex, 0);
 | |
|   FXML.SetDeleteValue('General/LoadJsonLocally/Value', FLoadJsonLocally, False);
 | |
|   FXML.SetDeleteValue('General/LoadJsonLocallyCnt/Value', FLoadJsonLocallyCnt, 0);
 | |
|   FXML.SetDeleteValue('General/ForceDownloadAndExtract/Value', FForceDownloadAndExtract, True);
 | |
|   FXML.SetDeleteValue('General/DeleteZipAfterInstall/Value', FDeleteZipAfterInstall, True);
 | |
|   FXML.SetDeleteValue('General/IncompatiblePackages/Value', FIncompatiblePackages, True);
 | |
|   FXML.SetDeleteValue('General/AlreadyInstalledPackages/Value', FAlreadyInstalledPackages, False);
 | |
|   FXML.SetDeleteValue('General/LastDownloadDir/Value', FLastDownloadDir, '');
 | |
|   FXML.SetDeleteValue('General/LastPackageDirSrc/Value', FLastPackageDirSrc, '');
 | |
|   FXML.SetDeleteValue('General/LastPackageDirDst/Value', FLastPackageDirDst, '');
 | |
|   FXML.SetDeleteValue('General/LastPrivateRepository/Value', FLastPrivateRepository, '');
 | |
|   FXML.SetDeleteValue('General/CheckForUpdates/Value', FCheckForUpdates, 0);
 | |
|   FXML.SetDeleteExtendedValue('General/LastUpdate/Value', FLastUpdate, 0.0);
 | |
|   FXML.SetDeleteValue('General/ConTimeOut/Value', FConTimeOut, 10);
 | |
|   FXML.SetDeleteValue('General/DaysToShowNewPackages/Value', FDaysToShowNewPackages, 31);
 | |
| 
 | |
|   FXML.SetDeleteValue('General/ShowRegularIcons/Value', FShowRegularIcons, True);
 | |
|   FXML.SetDeleteValue('General/UseDefaultTheme/Value', FUseDefaultTheme, True);
 | |
|   FXML.SetDeleteValue('General/HintFormOption/Value', FHintFormOption, 0);
 | |
|   FXML.SetDeleteValue('General/HintFormOptionColors/Value', FHintFormOptionColors.Text, '');
 | |
| 
 | |
|   FXML.SetDeleteValue('Proxy/Enabled/Value', FProxySettings.FEnabled, false);
 | |
|   FXML.SetDeleteValue('Proxy/Server/Value', FProxySettings.FServer, '');
 | |
|   FXML.SetDeleteValue('Proxy/Port/Value', FProxySettings.FPort, 0);
 | |
|   FXML.SetDeleteValue('Proxy/User/Value', FProxySettings.FUser, '');
 | |
|   FXML.SetDeleteValue('Proxy/Password/Value', FProxySettings.FPassword, '');
 | |
| 
 | |
|   FXML.SetDeleteValue('OpenSSL/DownloadType/Value', FOpenSSLDownloadType, 1);
 | |
| 
 | |
|   FXML.SetDeleteValue('Folders/LocalRepositoryPackages/Value', FLocalRepositoryPackages, '');
 | |
|   FXML.SetDeleteValue('Folders/LocalRepositoryArchive/Value', FLocalRepositoryArchive, '');
 | |
|   FXML.SetDeleteValue('Folders/LocalRepositoryUpdate/Value', FLocalRepositoryUpdate, '');
 | |
| 
 | |
|   FXML.SetDeleteValue('Profiles/UserProfile/Value', FUserProfile, 0);
 | |
|   FXML.SetDeleteValue('Profiles/ExcludedFiles/Value', FExcludedFiles, '');
 | |
|   FXML.SetDeleteValue('Profiles/ExcludedFolders/Value', FExcludedFolders, '');
 | |
| 
 | |
|   FXML.Flush;
 | |
|   FChanged := False;
 | |
| end;
 | |
| 
 | |
| procedure TOptions.LoadDefault;
 | |
| begin
 | |
|   FRemoteRepository.Clear;
 | |
|   FRemoteRepositoryTmp.Clear;
 | |
|   FRemoteRepository.Add(cRemoteRepository);
 | |
|   FHintFormOptionColors.Clear;
 | |
|   CheckColors;
 | |
|   FActiveRepositoryIndex := 0;
 | |
|   FLoadJsonLocally := False;
 | |
|   FLoadJsonLocallyCnt := 0;
 | |
|   FForceDownloadAndExtract := True;
 | |
|   FDeleteZipAfterInstall := True;
 | |
|   FIncompatiblePackages := True;
 | |
|   FAlreadyInstalledPackages := False;
 | |
|   FCheckForUpdates := 5;
 | |
|   FLastUpdate := 0.0;
 | |
|   FConTimeOut := 10;
 | |
|   FDaysToShowNewPackages := 31;
 | |
|   FShowRegularIcons := True;
 | |
|   FUseDefaultTheme := True;
 | |
|   FHintFormOption := 0;
 | |
| 
 | |
|   FProxySettings.FEnabled := False;
 | |
|   FProxySettings.FServer := '';
 | |
|   FProxySettings.FPort := 0;
 | |
|   FProxySettings.FUser := '';
 | |
|   FProxySettings.FPassword := '';
 | |
| 
 | |
|   FOpenSSLDownloadType := 1;
 | |
| 
 | |
|   FLocalRepositoryPackages := FLocalPackagesDefault;
 | |
|   FLocalRepositoryArchive := FLocalArchiveDefault;
 | |
|   FLocalRepositoryUpdate := FLocalUpdateDefault;
 | |
| 
 | |
|   FUserProfile := 0;
 | |
|   FExcludedFiles := cExcludedFilesDef;
 | |
|   FExcludedFolders := cExcludedFoldersDef;
 | |
|   Save;
 | |
| end;
 | |
| 
 | |
| procedure TOptions.CreateMissingPaths;
 | |
| begin
 | |
|   if not DirectoryExists(LocalRepositoryPackagesExpanded) then
 | |
|     CreateDir(LocalRepositoryPackagesExpanded);
 | |
|   if not DirectoryExists(LocalRepositoryArchiveExpanded) then
 | |
|     CreateDir(LocalRepositoryArchiveExpanded);
 | |
|   if not DirectoryExists(LocalRepositoryUpdateExpanded) then
 | |
|     CreateDir(LocalRepositoryUpdateExpanded);
 | |
| end;
 | |
| 
 | |
| procedure TOptions.CheckColors;
 | |
| begin
 | |
|   if FHintFormOptionColors.Count <> HintColCnt then
 | |
|   begin
 | |
|     FHintFormOptionColors.Clear;
 | |
|     FHintFormOptionColors.Add(ColorToString($00D9FFFF));
 | |
|     FHintFormOptionColors.Add(ColorToString($00E6FFE6));
 | |
|     FHintFormOptionColors.Add(ColorToString($00FEEBD3));
 | |
|   end
 | |
| end;
 | |
| 
 | |
| function TOptions.GetLocalRepositoryArchiveExpanded:string;
 | |
| begin
 | |
|   result:=FLocalRepositoryArchive;
 | |
|   IDEMacros.SubstituteMacros(result);
 | |
|   Result:=AppendPathDelim(result);
 | |
| end;
 | |
| 
 | |
| function TOptions.GetLocalRepositoryPackagesExpanded:string;
 | |
| begin
 | |
|   result:=FLocalRepositoryPackages;
 | |
|   IDEMacros.SubstituteMacros(result);
 | |
|   Result:=AppendPathDelim(result);
 | |
| end;
 | |
| 
 | |
| function TOptions.GetLocalRepositoryUpdateExpanded:string;
 | |
| begin
 | |
|   result:=FLocalRepositoryUpdate;
 | |
|   IDEMacros.SubstituteMacros(result);
 | |
|   Result:=AppendPathDelim(result);
 | |
| end;
 | |
| 
 | |
| end.
 | |
| 
 | 
