CEF4Delphi/tools/Copy.CEF.DLLs/Unit1.pas

254 lines
5.8 KiB
ObjectPascal
Raw Normal View History

unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.ComCtrls;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Panel1: TPanel;
Label1: TLabel;
edtRootFolder: TEdit;
Panel2: TPanel;
MemoPanel: TPanel;
Label2: TLabel;
Memo1: TMemo;
btnCopy: TButton;
Panel3: TPanel;
btnBack: TButton;
Panel4: TPanel;
Memo2: TMemo;
procedure btnBackClick(Sender: TObject);
procedure btnCopyClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
procedure AddLog(const Msg: string);
procedure CopyFilesToFolder(const SrcSubFolder, DestFolder, DestSubFolder:
string; var CopyCount, ErrorCount: Integer);
procedure CopyToFolder(DestDir: string);
function GetRootDir: string;
function GetSettingsFileName: string;
procedure LoadSettings;
procedure SaveSettings;
function ValidateRootDir: Boolean;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
// This tool was created by Rael Bauer (raelb)
// CopyCEFDlls is used to copy cef dll files to multiple destination folders.
{
Copies DLLs according to default distribution, i.e.:
\Release -> \DestDir
\Release\swiftshader -> \DestDir\swiftshader
\Resources -> \DestDir
\Resources\locales -> \DestDir\locales
}
implementation
uses
Utils;
{$R *.dfm}
procedure TForm1.AddLog(const Msg: string);
begin
Memo2.Lines.Add(Msg);
end;
procedure TForm1.btnBackClick(Sender: TObject);
begin
PageControl1.ActivePageIndex := 0;
end;
procedure TForm1.btnCopyClick(Sender: TObject);
var
I: Integer;
begin
PageControl1.ActivePageIndex := 1;
Application.ProcessMessages;
Screen.Cursor := crHourGlass;
try
for I := 0 to Memo1.Lines.Count - 1 do
CopyToFolder(RemoveTrailingBackSlash(Memo1.Lines[I]));
AddLog('Done.');
finally
Screen.Cursor := crDefault;
end;
end;
procedure TForm1.CopyFilesToFolder(const SrcSubFolder, DestFolder,
DestSubFolder: string; var CopyCount, ErrorCount: Integer);
var
DestFile: string;
I: Integer;
SourceFiles: TStringList;
SrcFile: string;
begin
SourceFiles := TStringList.Create;
try
GetFolderContents(GetRootDir + SrcSubFolder, SourceFiles, False, False,
True, False);
if not DirectoryExists(DestFolder + DestSubFolder) then
CreateDir(DestFolder + DestSubFolder);
for I := 0 to SourceFiles.Count - 1 do
begin
SrcFile := GetRootDir + SrcSubFolder + SourceFiles[I];
DestFile := DestFolder + DestSubFolder + SourceFiles[I];
try
CopyFile(PChar(SrcFile), PChar(DestFile), False);
Inc(CopyCount);
except
On E: Exception do
begin
AddLog('Error copying file: ' + SourceFiles[I]);
AddLog('To: ' + DestFolder + SrcSubFolder);
AddLog(E.ClassName +', ' + E.Message);
AddLog('');
Inc(ErrorCount);
end;
end;
end;
finally
SourceFiles.Free;
end;
end;
procedure TForm1.CopyToFolder(DestDir: string);
var
CopyCount: Integer;
ErrorCount: Integer;
begin
if not ValidateRootDir then
exit;
AddLog('Processing "' + DestDir + '"');
if not DirectoryExists(DestDir) then
begin
AddLog('Folder not found.');
AddLog('');
exit;
end;
CopyCount := 0;
ErrorCount := 0;
CopyFilesToFolder('\Release', DestDir, '', CopyCount, ErrorCount);
CopyFilesToFolder('\Release\swiftshader', DestDir, '\swiftshader', CopyCount, ErrorCount);
CopyFilesToFolder('\Resources', DestDir, '', CopyCount, ErrorCount);
CopyFilesToFolder('\Resources\locales', DestDir, '\locales', CopyCount, ErrorCount);
AddLog(CopyCount.ToString +' files copied. ' + ErrorCount.ToString +' errors.');
AddLog('');
end;
function TForm1.ValidateRootDir: Boolean;
begin
Result := False;
if not DirectoryExists(GetRootDir) then
begin
AddLog('Root directory does not exist');
exit;
end;
if not DirectoryExists(GetRootDir + '\Release') then
begin
AddLog('\Release directory does not exist');
exit;
end;
if not DirectoryExists(GetRootDir + '\Release\swiftshader') then
begin
AddLog('\Release\swiftshader directory does not exist');
exit;
end;
if not DirectoryExists(GetRootDir + '\Resources') then
begin
AddLog('\Resources directory does not exist');
exit;
end;
if not DirectoryExists(GetRootDir + '\Resources\locales') then
begin
AddLog('\Resources\locales directory does not exist');
exit;
end;
Result := True;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
SaveSettings;
end;
function TForm1.GetSettingsFileName: string;
begin
Result := ExtractFilePath(Application.ExeName) + 'settings.txt';
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
LoadSettings;
PageControl1.ActivePageIndex := 0;
end;
function TForm1.GetRootDir: string;
begin
Result := RemoveTrailingBackSlash(edtRootFolder.Text);
end;
procedure TForm1.LoadSettings;
var
StrList: TStringList;
begin
if FileExists(GetSettingsFileName) then
begin
StrList := TStringList.Create;
try
StrList.LoadFromFile(GetSettingsFileName);
edtRootFolder.Text := StrList.Values['root_dir'];
StringToList(StrList.Values['paths'], '|', Memo1.Lines);
finally
StrList.Free;
end;
end;
end;
procedure TForm1.SaveSettings;
var
S: string;
StrList: TStringList;
I: Integer;
begin
StrList := TStringList.Create;
try
StrList.Values['root_dir'] := edtRootFolder.Text;
S := '';
for I := 0 to Memo1.Lines.Count - 1 do
S := S + Memo1.Lines[I] + '|';
StrList.Values['paths'] := S;
StrList.SaveToFile(GetSettingsFileName);
finally
StrList.Free;
end;
end;
end.