mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-27 18:53:48 +02: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.
|
|
|