mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-11 10:35:58 +02:00
Opkman: Private repositories(step3).
git-svn-id: trunk@55850 -
This commit is contained in:
parent
9857b48718
commit
093134726c
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -3450,6 +3450,8 @@ components/onlinepackagemanager/onlinepackagemanager.lpk svneol=native#text/plai
|
||||
components/onlinepackagemanager/onlinepackagemanager.lps svneol=native#text/plain
|
||||
components/onlinepackagemanager/onlinepackagemanager.pas svneol=native#text/pascal
|
||||
components/onlinepackagemanager/onlinepackagemanagerintf.pas svneol=native#text/pascal
|
||||
components/onlinepackagemanager/opkman_addrepositorypackagefrm.lfm svneol=native#text/plain
|
||||
components/onlinepackagemanager/opkman_addrepositorypackagefrm.pas svneol=native#text/pascal
|
||||
components/onlinepackagemanager/opkman_categoriesfrm.lfm svneol=native#text/plain
|
||||
components/onlinepackagemanager/opkman_categoriesfrm.pas svneol=native#text/pascal
|
||||
components/onlinepackagemanager/opkman_common.pas svneol=native#text/pascal
|
||||
|
@ -20,7 +20,7 @@
|
||||
<Description Value="Online package manger"/>
|
||||
<License Value="GPL"/>
|
||||
<Version Major="1"/>
|
||||
<Files Count="23">
|
||||
<Files Count="24">
|
||||
<Item1>
|
||||
<Filename Value="onlinepackagemanagerintf.pas"/>
|
||||
<HasRegisterProc Value="True"/>
|
||||
@ -119,6 +119,10 @@
|
||||
<Filename Value="opkman_repositorydetailsfrm.pas"/>
|
||||
<UnitName Value="opkman_repositorydetailsfrm"/>
|
||||
</Item23>
|
||||
<Item24>
|
||||
<Filename Value="opkman_addrepositorypackagefrm.pas"/>
|
||||
<UnitName Value="opkman_addrepositorypackagefrm"/>
|
||||
</Item24>
|
||||
</Files>
|
||||
<i18n>
|
||||
<EnableI18N Value="True"/>
|
||||
|
@ -15,7 +15,8 @@ uses
|
||||
opkman_createrepositorypackagefrm, opkman_categoriesfrm,
|
||||
opkman_packagedetailsfrm, opkman_updates, opkman_createjsonforupdatesfrm,
|
||||
opkman_uploader, opkman_repositories, opkman_createrepositoryfrm,
|
||||
opkman_repositorydetailsfrm, LazarusPackageIntf;
|
||||
opkman_repositorydetailsfrm, opkman_addrepositorypackagefrm,
|
||||
LazarusPackageIntf;
|
||||
|
||||
implementation
|
||||
|
||||
|
@ -0,0 +1,111 @@
|
||||
object AddRepositoryPackageFrm: TAddRepositoryPackageFrm
|
||||
Left = 561
|
||||
Height = 157
|
||||
Top = 287
|
||||
Width = 459
|
||||
BorderIcons = [biSystemMenu]
|
||||
BorderStyle = bsSingle
|
||||
Caption = 'AddRepositoryPackageFrm'
|
||||
ClientHeight = 157
|
||||
ClientWidth = 459
|
||||
Icon.Data = {
|
||||
7E04000000000100010010100000010020006804000016000000280000001000
|
||||
0000200000000100200000000000000400006400000064000000000000000000
|
||||
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BDD8E8005FA7
|
||||
D3FF56A2D0FFB5D3E500009600FF009600FF009600FFFFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D7E9F20078B7DBFF2D8EC8FF8FCD
|
||||
EBFF6FB7E2FF408EC8FF009600FF00C000FF009600FFFFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00ECF4F90093C9E3FF3F9CCEFF82C4E5FFCCF4FFFFC4EF
|
||||
FFFF8BD2F1FF8ACEF0FF009600FF00C000FF009600FFD1E9E100FFFFFF00FFFF
|
||||
FF00FAFDFE00AFD8EB0055ABD5FF7DC0E0FFC7EEFCFFCCF2FFFFA8E8FFFF0096
|
||||
00FF009600FF009600FF009600FF00C000FF009600FF009600FF009600FF0096
|
||||
00FF6FB8D80077BDDCFFBFE5F6FFDBF6FFFFC1EEFFFFA5E5FFFF9FE3FFFF0096
|
||||
00FF00C000FF00C000FF00C000FF00C000FF00C000FF00C000FF00C000FF0096
|
||||
00FF45A9D3FFE7FBFEFFDDF6FFFFC1EFFFFFB7EBFFFFABE8FFFFA4E4FFFF0096
|
||||
00FF009600FF009600FF009600FF00C000FF009600FF009600FF009600FF0096
|
||||
00FF4EAED6FFE2F6FCFFD4F3FFFFC9F0FFFFBEEDFFFFB3EAFFFFADE7FFFF7CD9
|
||||
FEFF48C7EFFF43C4EAFF009600FF00C000FF009600FF40A7E1FF83C5ECFF328D
|
||||
C7FF51B1D6FFE2F6FCFFD7F4FFFFCEF2FFFFC8EFFFFFBAEBFFFF92DBFBFF56C1
|
||||
F1FF48C2F9FF3BBDF0FF009600FF00C000FF009600FF47B1E6FF88CAEEFF3490
|
||||
C8FF53B4D7FFE2F6FDFFDAF4FFFFD5F3FFFFBDEBFFFF89D5F7FF69C9F5FF4CB4
|
||||
E9FF8DDAFBFF8CDCFFFF009600FF009600FF009600FF4FBBE8FF8CD0F0FF3693
|
||||
C9FF55B6D8FFE2F8FDFFD4F3FFFFB0E4FAFF86CFF1FF7FD0F5FF78D0F5FF4CB1
|
||||
E4FFB0E4FAFFB6E9FFFF9BE1FFFF78D6FEFF40BDF5FF3DB5E9FF90D5F1FF3895
|
||||
CAFF4FB4D8FFE1F8FEFFCDEBF9FF92D2EDFF84CCEBFF6FBFE5FF56B1DBFF3B94
|
||||
C8FFCEECFAFFD9F5FFFFB9EAFFFF95DFFEFF77D5FFFFA5E4FFFF84DCFBFF3193
|
||||
C9FF89CADE004EB5D9FFA5D9EDFFD2EBF5FFBEDEEDFF95C9DEFF89C3DBFF70B8
|
||||
D6FF69B9DDFF90D7F5FF7FCFF5FF9DDBF8FFAAE3FAFF84CAECFF51A6D5FF74B3
|
||||
D500FFFFFF00C7E4EE0076C4DEFF7EC6E0FFD1EEF7FFF6FFFFFFF0FEFFFFCBED
|
||||
FBFF50ADDAFF8BD7F7FFAAE1F9FF95D6F2FF62B2DBFF61AED4FFBAD9E800FFFF
|
||||
FF00FFFFFF00FFFFFF00FCFEFE00AFD8E60063BDDBFF92CFE5FFE6F8FCFFE3F6
|
||||
FEFFAFDDF2FFB2E4F7FF72C0E1FF55ADD5FFA3CFE100F8FCFD00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F0F9FC0099CEE00055B6D9FF9CD5
|
||||
EAFF88CCE7FF4DAFD6FF8FC7DD00ECF6FB00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E1F2F8007DC3
|
||||
DCFF76C0DCFFDCEFF700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000
|
||||
}
|
||||
OnCreate = FormCreate
|
||||
PopupMode = pmExplicit
|
||||
PopupParent = CreateRepositoryFrm.Owner
|
||||
Position = poOwnerFormCenter
|
||||
LCLVersion = '1.9.0.0'
|
||||
object rbCreateNew: TRadioButton
|
||||
Left = 31
|
||||
Height = 19
|
||||
Top = 24
|
||||
Width = 135
|
||||
Caption = 'Create a new package'
|
||||
Checked = True
|
||||
TabOrder = 0
|
||||
TabStop = True
|
||||
end
|
||||
object rbAddExisting: TRadioButton
|
||||
Left = 31
|
||||
Height = 19
|
||||
Top = 64
|
||||
Width = 180
|
||||
Caption = 'Add existing package from file'
|
||||
TabOrder = 1
|
||||
end
|
||||
object pnButtons: TPanel
|
||||
Left = 0
|
||||
Height = 41
|
||||
Top = 116
|
||||
Width = 459
|
||||
Align = alBottom
|
||||
BevelOuter = bvNone
|
||||
BorderStyle = bsSingle
|
||||
ClientHeight = 37
|
||||
ClientWidth = 455
|
||||
TabOrder = 2
|
||||
object bOk: TButton
|
||||
Left = 266
|
||||
Height = 27
|
||||
Top = 4
|
||||
Width = 85
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = 'OK'
|
||||
ModalResult = 1
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 0
|
||||
end
|
||||
object bCancel: TButton
|
||||
Left = 352
|
||||
Height = 27
|
||||
Top = 4
|
||||
Width = 85
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Around = 1
|
||||
Caption = 'Cancel'
|
||||
Constraints.MinWidth = 80
|
||||
ModalResult = 2
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 1
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,49 @@
|
||||
unit opkman_addrepositorypackagefrm;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
|
||||
StdCtrls, Buttons, Menus;
|
||||
|
||||
type
|
||||
|
||||
{ TAddRepositoryPackageFrm }
|
||||
|
||||
TAddRepositoryPackageFrm = class(TForm)
|
||||
bCancel: TButton;
|
||||
bOk: TButton;
|
||||
pnButtons: TPanel;
|
||||
rbCreateNew: TRadioButton;
|
||||
rbAddExisting: TRadioButton;
|
||||
procedure FormCreate(Sender: TObject);
|
||||
private
|
||||
|
||||
public
|
||||
|
||||
end;
|
||||
|
||||
var
|
||||
AddRepositoryPackageFrm: TAddRepositoryPackageFrm;
|
||||
|
||||
implementation
|
||||
uses opkman_const;
|
||||
{$R *.lfm}
|
||||
|
||||
{ TAddRepositoryPackageFrm }
|
||||
|
||||
procedure TAddRepositoryPackageFrm.FormCreate(Sender: TObject);
|
||||
begin
|
||||
Caption := rsAddRepositoryPackageFrm_Caption;
|
||||
rbCreateNew.Caption := rsAddRepositoryPackageFrm_rbCreateNew_Caption;
|
||||
rbAddExisting.Caption := rsAddRepositoryPackageFrm_rbAddExisting_Caption;
|
||||
bOk.Caption := rsAddRepositoryPackageFrm_bOk_Caption;
|
||||
bOk.Hint := rsAddRepositoryPackageFrm_bOk_Hint;
|
||||
bCancel.Caption := rsAddRepositoryPackageFrm_bCancel_Caption;
|
||||
bCancel.Hint := rsAddRepositoryPackageFrm_bCancel_Hint;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@ -446,7 +446,7 @@ var
|
||||
SearchRes: Longint;
|
||||
begin
|
||||
Result := true;
|
||||
SearchRes := FindFirst(IncludeTrailingPathDelimiter(ADirectory) + AllFilesMask, faAnyFile + faSymLink, SearchRec);
|
||||
SearchRes := FindFirst(IncludeTrailingPathDelimiter(ADirectory) + AllFilesMask, faAnyFile, SearchRec);
|
||||
try
|
||||
while SearchRes = 0 do
|
||||
begin
|
||||
|
@ -396,7 +396,7 @@ resourcestring
|
||||
rsRepositories_Info1 = 'The following repository: "%s" is already in the list.';
|
||||
|
||||
//create private repository
|
||||
rsCreateRepositoryFrm_Caption = 'Create private repository';
|
||||
rsCreateRepositoryFrm_Caption = 'Create/Edit private repository';
|
||||
rsCreateRepositoryFrm_bOpen_Caption = 'Open';
|
||||
rsCreateRepositoryFrm_bOpen_Hint = 'Open private respository';
|
||||
rsCreateRepositoryFrm_bCreate_Caption = 'Create';
|
||||
@ -432,27 +432,40 @@ resourcestring
|
||||
rsCreateRepositoryFrm_VSTText_PackageType1 = 'Designtime';
|
||||
rsCreateRepositoryFrm_VSTText_PackageType2 = 'Runtime';
|
||||
rsCreateRepositoryFrm_VSTText_PackageType3 = 'Runtime only, cannot be installed in IDE';
|
||||
rsCreateRepositoryFrm_Error1 = 'Cannot open private repository. Error message: ' + sLineBreak + '"%s"';
|
||||
rsCreateRepositoryFrm_Error1 = 'Cannot open private repository: "%s". Error message: ' + sLineBreak + '"%s"';
|
||||
rsCreateRepositoryFrm_Error2 = 'File ' + cRemoteJSONFile + ' not found.';
|
||||
rsCreateRepositoryFrm_Error3 = 'Cannot save private repository. Error message: ' + sLineBreak + '"%s"';
|
||||
rsCreateRepositoryFrm_Error3 = 'Cannot save private repository: "%s". Error message: ' + sLineBreak + '"%s"';
|
||||
rsCreateRepositoryFrm_Error4 = 'Cannot add package to repository!';
|
||||
rsCreateRepositoryFrm_Info1 = 'The following directory: "%s" is not empty.' + sLineBreak + 'It''s recommended to save the repository to an empty directory. Continue?';
|
||||
rsCreateRepositoryFrm_Info2 = 'The following directory: "%s" is read only.';
|
||||
rsCreateRepositoryFrm_Info3 = 'The following repository package: "%s" is already in the current repository.' + sLineBreak + 'Each repository and lazarus package must be unique!';
|
||||
rsCreateRepositoryFrm_Info4 = 'The following file: "%s" already exists in the current repository.';
|
||||
rsCreateRepositoryFrm_Info5 = 'The following lazarus package: "%s" is already in the current repository.' + sLineBreak + 'Each repository and lazarus package must be unique!';
|
||||
|
||||
//repository details
|
||||
rsRepositoryDetails_Caption = 'Repository details';
|
||||
rsRepositoryDetails_lbName_Caption = 'Name';
|
||||
rsRepositoryDetails_edName_Hint = 'Enter the repository name';
|
||||
rsRepositoryDetails_lbAddress_Caption = 'Address';
|
||||
rsRepositoryDetails_edAddress_Hint = 'Enter the repository address(Ex: "http://localhost/packages/")';
|
||||
rsRepositoryDetails_lbDescription_Caption = 'Description';
|
||||
rsRepositoryDetails_mDescription_Hint = 'Enter the repository description';
|
||||
rsRepositoryDetails_bOk_Caption = 'OK';
|
||||
rsRepositoryDetails_bOk_Hint = 'Save and close the dialog';
|
||||
rsRepositoryDetails_bCancel_Caption = 'Cancel';
|
||||
rsRepositoryDetails_bCancel_Hint = 'Close the dialog without saving';
|
||||
rsRepositoryDetails_Info1 = 'Please enter the repository name.';
|
||||
rsRepositoryDetails_Info2 = 'Please enter the repository address.';
|
||||
rsRepositoryDetails_Info3 = 'The following repository: "%s" is already in the repository list. Continue?';
|
||||
rsRepositoryDetailsFrm_Caption = 'Repository details';
|
||||
rsRepositoryDetailsFrm_lbName_Caption = 'Name';
|
||||
rsRepositoryDetailsFrm_edName_Hint = 'Enter the repository name';
|
||||
rsRepositoryDetailsFrm_lbAddress_Caption = 'Address';
|
||||
rsRepositoryDetailsFrm_edAddress_Hint = 'Enter the repository address(Ex: "http://localhost/packages/")';
|
||||
rsRepositoryDetailsFrm_lbDescription_Caption = 'Description';
|
||||
rsRepositoryDetailsFrm_mDescription_Hint = 'Enter the repository description';
|
||||
rsRepositoryDetailsFrm_bOk_Caption = 'OK';
|
||||
rsRepositoryDetailsFrm_bOk_Hint = 'Save and close the dialog';
|
||||
rsRepositoryDetailsFrm_bCancel_Caption = 'Cancel';
|
||||
rsRepositoryDetailsFrm_bCancel_Hint = 'Close the dialog without saving';
|
||||
rsRepositoryDetailsFrm_Info1 = 'Please enter the repository name.';
|
||||
rsRepositoryDetailsFrm_Info2 = 'Please enter the repository address.';
|
||||
rsRepositoryDetailsFrm_Info3 = 'The following repository: "%s" is already in the repository list. Continue?';
|
||||
|
||||
//add package to repository
|
||||
rsAddRepositoryPackageFrm_Caption = 'Add repository package';
|
||||
rsAddRepositoryPackageFrm_rbCreateNew_Caption = 'Create a new repository package';
|
||||
rsAddRepositoryPackageFrm_rbAddExisting_Caption = 'Add existing repository package from file';
|
||||
rsAddRepositoryPackageFrm_bOk_Caption = 'OK';
|
||||
rsAddRepositoryPackageFrm_bOk_Hint = 'Close the dialog and create the package';
|
||||
rsAddRepositoryPackageFrm_bCancel_Caption = 'Cancel';
|
||||
rsAddRepositoryPackageFrm_bCancel_Hint = 'Close the dialog';
|
||||
|
||||
|
||||
implementation
|
||||
|
@ -11,6 +11,7 @@ object CreateRepositoryFrm: TCreateRepositoryFrm
|
||||
Constraints.MinWidth = 650
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
OnShow = FormShow
|
||||
PopupMode = pmExplicit
|
||||
Position = poOwnerFormCenter
|
||||
LCLVersion = '1.9.0.0'
|
||||
@ -27,7 +28,7 @@ object CreateRepositoryFrm: TCreateRepositoryFrm
|
||||
TabOrder = 2
|
||||
OnResize = pnButtonsResize
|
||||
object bOpen: TButton
|
||||
Left = 101
|
||||
Left = 102
|
||||
Height = 27
|
||||
Top = 4
|
||||
Width = 85
|
||||
@ -60,7 +61,7 @@ object CreateRepositoryFrm: TCreateRepositoryFrm
|
||||
ModalResult = 2
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 2
|
||||
TabOrder = 4
|
||||
end
|
||||
object bAdd: TBitBtn
|
||||
Left = 311
|
||||
@ -69,45 +70,79 @@ object CreateRepositoryFrm: TCreateRepositoryFrm
|
||||
Width = 85
|
||||
Caption = 'Add'
|
||||
Glyph.Data = {
|
||||
36040000424D3604000000000000360000002800000010000000100000000100
|
||||
2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
|
||||
36080000424D3608000000000000360000002800000020000000100000000100
|
||||
2000000000000008000064000000640000000000000000000000FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BDD8E8005FA7D3FF56A2D0FFB5D3
|
||||
E500009600FF009600FF009600FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D9D9D900ABABABFFA7A7A7FFD4D4
|
||||
D400585858FF585858FF585858FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00D7E9F20078B7DBFF2D8EC8FF8FCDEBFF6FB7E2FF408E
|
||||
C8FF009600FF00C000FF009600FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00E9E9E900BABABAFF949494FFCECECEFFBBBBBBFF9696
|
||||
96FF585858FF707070FF585858FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00ECF4F90093C9E3FF3F9CCEFF82C4E5FFCCF4FFFFC4EFFFFF8BD2F1FF8ACE
|
||||
F0FF009600FF00C000FF009600FFD1E9E100FFFFFF00FFFFFF00FAFDFE00AFD8
|
||||
F0FF009600FF00C000FF009600FFD1E9E100FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00F4F4F400CACACAFFA0A0A0FFC6C6C6FFF2F2F2FFEEEEEEFFD3D3D3FFD0D0
|
||||
D0FF585858FF707070FF585858FFE3E3E300FFFFFF00FFFFFF00FAFDFE00AFD8
|
||||
EB0055ABD5FF7DC0E0FFC7EEFCFFCCF2FFFFA8E8FFFF009600FF009600FF0096
|
||||
00FF009600FF00C000FF009600FF009600FF009600FF009600FF6FB8D80077BD
|
||||
00FF009600FF00C000FF009600FF009600FF009600FF009600FFFCFCFC00D9D9
|
||||
D900ADADADFFC1C1C1FFEDEDEDFFF1F1F1FFE7E7E7FF585858FF585858FF5858
|
||||
58FF585858FF707070FF585858FF585858FF585858FF585858FF6FB8D80077BD
|
||||
DCFFBFE5F6FFDBF6FFFFC1EEFFFFA5E5FFFF9FE3FFFF009600FF00C000FF00C0
|
||||
00FF00C000FF00C000FF00C000FF00C000FF00C000FF009600FF45A9D3FFE7FB
|
||||
00FF00C000FF00C000FF00C000FF00C000FF00C000FF009600FFB9B9B900BEBE
|
||||
BEFFE5E5E5FFF5F5F5FFEDEDEDFFE5E5E5FFE3E3E3FF585858FF707070FF7070
|
||||
70FF707070FF707070FF707070FF707070FF707070FF585858FF45A9D3FFE7FB
|
||||
FEFFDDF6FFFFC1EFFFFFB7EBFFFFABE8FFFFA4E4FFFF009600FF009600FF0096
|
||||
00FF009600FF00C000FF009600FF009600FF009600FF009600FF4EAED6FFE2F6
|
||||
00FF009600FF00C000FF009600FF009600FF009600FF009600FFAAAAAAFFF9F9
|
||||
F9FFF5F5F5FFEEEEEEFFEBEBEBFFE7E7E7FFE4E4E4FF585858FF585858FF5858
|
||||
58FF585858FF707070FF585858FF585858FF585858FF585858FF4EAED6FFE2F6
|
||||
FCFFD4F3FFFFC9F0FFFFBEEDFFFFB3EAFFFFADE7FFFF7CD9FEFF48C7EFFF43C4
|
||||
EAFF009600FF00C000FF009600FF40A7E1FF83C5ECFF328DC7FF51B1D6FFE2F6
|
||||
EAFF009600FF00C000FF009600FF40A7E1FF83C5ECFF328DC7FFAFAFAFFFF5F5
|
||||
F5FFF3F3F3FFF0F0F0FFEDEDEDFFEAEAEAFFE7E7E7FFD9D9D9FFC4C4C4FFC0C0
|
||||
C0FF585858FF707070FF585858FFACACACFFC9C9C9FF939393FF51B1D6FFE2F6
|
||||
FCFFD7F4FFFFCEF2FFFFC8EFFFFFBAEBFFFF92DBFBFF56C1F1FF48C2F9FF3BBD
|
||||
F0FF009600FF00C000FF009600FF47B1E6FF88CAEEFF3490C8FF53B4D7FFE2F6
|
||||
F0FF009600FF00C000FF009600FF47B1E6FF88CAEEFF3490C8FFB1B1B1FFF5F5
|
||||
F5FFF3F3F3FFF1F1F1FFEFEFEFFFEBEBEBFFDCDCDCFFC3C3C3FFC4C4C4FFBDBD
|
||||
BDFF585858FF707070FF585858FFB4B4B4FFCDCDCDFF969696FF53B4D7FFE2F6
|
||||
FDFFDAF4FFFFD5F3FFFFBDEBFFFF89D5F7FF69C9F5FF4CB4E9FF8DDAFBFF8CDC
|
||||
FFFF009600FF009600FF009600FF4FBBE8FF8CD0F0FF3693C9FF55B6D8FFE2F8
|
||||
FFFF009600FF009600FF009600FF4FBBE8FF8CD0F0FF3693C9FFB3B3B3FFF5F5
|
||||
F5FFF4F4F4FFF3F3F3FFEBEBEBFFD6D6D6FFCBCBCBFFB7B7B7FFDBDBDBFFDDDD
|
||||
DDFF585858FF585858FF585858FFBCBCBCFFD1D1D1FF989898FF55B6D8FFE2F8
|
||||
FDFFD4F3FFFFB0E4FAFF86CFF1FF7FD0F5FF78D0F5FF4CB1E4FFB0E4FAFFB6E9
|
||||
FFFF9BE1FFFF78D6FEFF40BDF5FF3DB5E9FF90D5F1FF3895CAFF4FB4D8FFE1F8
|
||||
FFFF9BE1FFFF78D6FEFF40BDF5FF3DB5E9FF90D5F1FF3895CAFFB5B5B5FFF6F6
|
||||
F6FFF3F3F3FFE4E4E4FFD0D0D0FFD1D1D1FFD1D1D1FFB4B4B4FFE4E4E4FFE9E9
|
||||
E9FFE1E1E1FFD7D7D7FFBFBFBFFFB6B6B6FFD5D5D5FF9A9A9AFF4FB4D8FFE1F8
|
||||
FEFFCDEBF9FF92D2EDFF84CCEBFF6FBFE5FF56B1DBFF3B94C8FFCEECFAFFD9F5
|
||||
FFFFB9EAFFFF95DFFEFF77D5FFFFA5E4FFFF84DCFBFF3193C9FF89CADE004EB5
|
||||
FFFFB9EAFFFF95DFFEFF77D5FFFFA5E4FFFF84DCFBFF3193C9FFB3B3B3FFF7F7
|
||||
F7FFEBEBEBFFD2D2D2FFCDCDCDFFC1C1C1FFB3B3B3FF999999FFECECECFFF4F4
|
||||
F4FFEAEAEAFFDFDFDFFFD6D6D6FFE4E4E4FFDBDBDBFF979797FF89CADE004EB5
|
||||
D9FFA5D9EDFFD2EBF5FFBEDEEDFF95C9DEFF89C3DBFF70B8D6FF69B9DDFF90D7
|
||||
F5FF7FCFF5FF9DDBF8FFAAE3FAFF84CAECFF51A6D5FF74B3D500FFFFFF00C7E4
|
||||
F5FF7FCFF5FF9DDBF8FFAAE3FAFF84CAECFF51A6D5FF74B3D500C8C8C800B4B4
|
||||
B4FFD9D9D9FFEBEBEBFFDEDEDEFFC9C9C9FFC3C3C3FFB8B8B8FFBABABAFFD7D7
|
||||
D7FFD1D1D1FFDCDCDCFFE3E3E3FFCCCCCCFFAAAAAAFFB5B5B500FFFFFF00C7E4
|
||||
EE0076C4DEFF7EC6E0FFD1EEF7FFF6FFFFFFF0FEFFFFCBEDFBFF50ADDAFF8BD7
|
||||
F7FFAAE1F9FF95D6F2FF62B2DBFF61AED4FFBAD9E800FFFFFF00FFFFFF00FFFF
|
||||
F7FFAAE1F9FF95D6F2FF62B2DBFF61AED4FFBAD9E800FFFFFF00FFFFFF00E3E3
|
||||
E300C2C2C2FFC5C5C5FFEDEDEDFFFDFDFDFFFCFCFCFFEDEDEDFFAFAFAFFFD7D7
|
||||
D7FFE1E1E1FFD6D6D6FFB5B5B5FFB0B0B0FFD9D9D900FFFFFF00FFFFFF00FFFF
|
||||
FF00FCFEFE00AFD8E60063BDDBFF92CFE5FFE6F8FCFFE3F6FEFFAFDDF2FFB2E4
|
||||
F7FF72C0E1FF55ADD5FFA3CFE100F8FCFD00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FDFDFD00D7D7D700BBBBBBFFCECECEFFF7F7F7FFF6F6F6FFDEDEDEFFE3E3
|
||||
E3FFC0C0C0FFAEAEAEFFCFCFCF00FBFBFB00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00F0F9FC0099CEE00055B6D9FF9CD5EAFF88CCE7FF4DAF
|
||||
D6FF8FC7DD00ECF6FB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00F8F8F800CDCDCD00B5B5B5FFD4D4D4FFCCCCCCFFAFAF
|
||||
AFFFC7C7C700F6F6F600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E1F2F8007DC3DCFF76C0DCFFDCEF
|
||||
F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
|
||||
F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F1F1F100C2C2C2FFBFBFBFFFEFEF
|
||||
EF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
|
||||
}
|
||||
GlyphShowMode = gsmAlways
|
||||
NumGlyphs = 2
|
||||
OnClick = bAddClick
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 3
|
||||
TabOrder = 2
|
||||
end
|
||||
object bDelete: TBitBtn
|
||||
Left = 396
|
||||
@ -116,45 +151,78 @@ object CreateRepositoryFrm: TCreateRepositoryFrm
|
||||
Width = 85
|
||||
Caption = 'Delete'
|
||||
Glyph.Data = {
|
||||
36040000424D3604000000000000360000002800000010000000100000000100
|
||||
2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
|
||||
36080000424D3608000000000000360000002800000020000000100000000100
|
||||
2000000000000008000064000000640000000000000000000000FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BDD8E8005FA7D3FF56A2D0FFB5D3
|
||||
E500009600FF009600FF009600FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D9D9D900ABABABFFA7A7A7FFD4D4
|
||||
D400585858FF585858FF585858FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00D7E9F20078B7DBFF2D8EC8FF8FCDEBFF6FB7E2FF408E
|
||||
C8FF009600FF00C000FF009600FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00E9E9E900BABABAFF949494FFCECECEFFBBBBBBFF9696
|
||||
96FF585858FF707070FF585858FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00ECF4F90093C9E3FF3F9CCEFF82C4E5FFCCF4FFFFC4EFFFFF8BD2F1FF8ACE
|
||||
F0FF009600FF00C000FF009600FFD1E9E100FFFFFF00FFFFFF00FAFDFE00AFD8
|
||||
F0FF009600FF00C000FF009600FFD1E9E100FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00F4F4F400CACACAFFA0A0A0FFC6C6C6FFF2F2F2FFEEEEEEFFD3D3D3FFD0D0
|
||||
D0FF585858FF707070FF585858FFE3E3E300FFFFFF00FFFFFF00FAFDFE00AFD8
|
||||
EB0055ABD5FF7DC0E0FFC7EEFCFFCCF2FFFFA8E8FFFF009600FF009600FF0096
|
||||
00FF009600FF00C000FF009600FF009600FF009600FF009600FF6FB8D80077BD
|
||||
00FF009600FF00C000FF009600FF009600FF009600FF009600FFFCFCFC00D9D9
|
||||
D900ADADADFFC1C1C1FFEDEDEDFFF1F1F1FFE7E7E7FF585858FF585858FF5858
|
||||
58FF585858FF707070FF585858FF585858FF585858FF585858FF6FB8D80077BD
|
||||
DCFFBFE5F6FFDBF6FFFFC1EEFFFFA5E5FFFF9FE3FFFF009600FF00C000FF00C0
|
||||
00FF00C000FF00C000FF00C000FF00C000FF00C000FF009600FF45A9D3FFE7FB
|
||||
00FF00C000FF00C000FF00C000FF00C000FF00C000FF009600FFB9B9B900BEBE
|
||||
BEFFE5E5E5FFF5F5F5FFEDEDEDFFE5E5E5FFE3E3E3FF585858FF707070FF7070
|
||||
70FF707070FF707070FF707070FF707070FF707070FF585858FF45A9D3FFE7FB
|
||||
FEFFDDF6FFFFC1EFFFFFB7EBFFFFABE8FFFFA4E4FFFF009600FF009600FF0096
|
||||
00FF009600FF00C000FF009600FF009600FF009600FF009600FF4EAED6FFE2F6
|
||||
00FF009600FF00C000FF009600FF009600FF009600FF009600FFAAAAAAFFF9F9
|
||||
F9FFF5F5F5FFEEEEEEFFEBEBEBFFE7E7E7FFE4E4E4FF585858FF585858FF5858
|
||||
58FF585858FF707070FF585858FF585858FF585858FF585858FF4EAED6FFE2F6
|
||||
FCFFD4F3FFFFC9F0FFFFBEEDFFFFB3EAFFFFADE7FFFF7CD9FEFF48C7EFFF43C4
|
||||
EAFF009600FF00C000FF009600FF40A7E1FF83C5ECFF328DC7FF51B1D6FFE2F6
|
||||
EAFF009600FF00C000FF009600FF40A7E1FF83C5ECFF328DC7FFAFAFAFFFF5F5
|
||||
F5FFF3F3F3FFF0F0F0FFEDEDEDFFEAEAEAFFE7E7E7FFD9D9D9FFC4C4C4FFC0C0
|
||||
C0FF585858FF707070FF585858FFACACACFFC9C9C9FF939393FF51B1D6FFE2F6
|
||||
FCFFD7F4FFFFCEF2FFFFC8EFFFFFBAEBFFFF92DBFBFF56C1F1FF48C2F9FF3BBD
|
||||
F0FF009600FF00C000FF009600FF47B1E6FF88CAEEFF3490C8FF53B4D7FFE2F6
|
||||
F0FF009600FF00C000FF009600FF47B1E6FF88CAEEFF3490C8FFB1B1B1FFF5F5
|
||||
F5FFF3F3F3FFF1F1F1FFEFEFEFFFEBEBEBFFDCDCDCFFC3C3C3FFC4C4C4FFBDBD
|
||||
BDFF585858FF707070FF585858FFB4B4B4FFCDCDCDFF969696FF53B4D7FFE2F6
|
||||
FDFFDAF4FFFFD5F3FFFFBDEBFFFF89D5F7FF69C9F5FF4CB4E9FF8DDAFBFF8CDC
|
||||
FFFF009600FF009600FF009600FF4FBBE8FF8CD0F0FF3693C9FF55B6D8FFE2F8
|
||||
FFFF009600FF009600FF009600FF4FBBE8FF8CD0F0FF3693C9FFB3B3B3FFF5F5
|
||||
F5FFF4F4F4FFF3F3F3FFEBEBEBFFD6D6D6FFCBCBCBFFB7B7B7FFDBDBDBFFDDDD
|
||||
DDFF585858FF585858FF585858FFBCBCBCFFD1D1D1FF989898FF55B6D8FFE2F8
|
||||
FDFFD4F3FFFFB0E4FAFF86CFF1FF7FD0F5FF78D0F5FF4CB1E4FFB0E4FAFFB6E9
|
||||
FFFF9BE1FFFF78D6FEFF40BDF5FF3DB5E9FF90D5F1FF3895CAFF4FB4D8FFE1F8
|
||||
FFFF9BE1FFFF78D6FEFF40BDF5FF3DB5E9FF90D5F1FF3895CAFFB5B5B5FFF6F6
|
||||
F6FFF3F3F3FFE4E4E4FFD0D0D0FFD1D1D1FFD1D1D1FFB4B4B4FFE4E4E4FFE9E9
|
||||
E9FFE1E1E1FFD7D7D7FFBFBFBFFFB6B6B6FFD5D5D5FF9A9A9AFF4FB4D8FFE1F8
|
||||
FEFFCDEBF9FF92D2EDFF84CCEBFF6FBFE5FF56B1DBFF3B94C8FFCEECFAFFD9F5
|
||||
FFFFB9EAFFFF95DFFEFF77D5FFFFA5E4FFFF84DCFBFF3193C9FF89CADE004EB5
|
||||
FFFFB9EAFFFF95DFFEFF77D5FFFFA5E4FFFF84DCFBFF3193C9FFB3B3B3FFF7F7
|
||||
F7FFEBEBEBFFD2D2D2FFCDCDCDFFC1C1C1FFB3B3B3FF999999FFECECECFFF4F4
|
||||
F4FFEAEAEAFFDFDFDFFFD6D6D6FFE4E4E4FFDBDBDBFF979797FF89CADE004EB5
|
||||
D9FFA5D9EDFFD2EBF5FFBEDEEDFF95C9DEFF89C3DBFF70B8D6FF69B9DDFF90D7
|
||||
F5FF7FCFF5FF9DDBF8FFAAE3FAFF84CAECFF51A6D5FF74B3D500FFFFFF00C7E4
|
||||
F5FF7FCFF5FF9DDBF8FFAAE3FAFF84CAECFF51A6D5FF74B3D500C8C8C800B4B4
|
||||
B4FFD9D9D9FFEBEBEBFFDEDEDEFFC9C9C9FFC3C3C3FFB8B8B8FFBABABAFFD7D7
|
||||
D7FFD1D1D1FFDCDCDCFFE3E3E3FFCCCCCCFFAAAAAAFFB5B5B500FFFFFF00C7E4
|
||||
EE0076C4DEFF7EC6E0FFD1EEF7FFF6FFFFFFF0FEFFFFCBEDFBFF50ADDAFF8BD7
|
||||
F7FFAAE1F9FF95D6F2FF62B2DBFF61AED4FFBAD9E800FFFFFF00FFFFFF00FFFF
|
||||
F7FFAAE1F9FF95D6F2FF62B2DBFF61AED4FFBAD9E800FFFFFF00FFFFFF00E3E3
|
||||
E300C2C2C2FFC5C5C5FFEDEDEDFFFDFDFDFFFCFCFCFFEDEDEDFFAFAFAFFFD7D7
|
||||
D7FFE1E1E1FFD6D6D6FFB5B5B5FFB0B0B0FFD9D9D900FFFFFF00FFFFFF00FFFF
|
||||
FF00FCFEFE00AFD8E60063BDDBFF92CFE5FFE6F8FCFFE3F6FEFFAFDDF2FFB2E4
|
||||
F7FF72C0E1FF55ADD5FFA3CFE100F8FCFD00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FDFDFD00D7D7D700BBBBBBFFCECECEFFF7F7F7FFF6F6F6FFDEDEDEFFE3E3
|
||||
E3FFC0C0C0FFAEAEAEFFCFCFCF00FBFBFB00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00F0F9FC0099CEE00055B6D9FF9CD5EAFF88CCE7FF4DAF
|
||||
D6FF8FC7DD00ECF6FB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00F8F8F800CDCDCD00B5B5B5FFD4D4D4FFCCCCCCFFAFAF
|
||||
AFFFC7C7C700F6F6F600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E1F2F8007DC3DCFF76C0DCFFDCEF
|
||||
F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
|
||||
F700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F1F1F100C2C2C2FFBFBFBFFFEFEF
|
||||
EF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
|
||||
}
|
||||
GlyphShowMode = gsmAlways
|
||||
NumGlyphs = 2
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 4
|
||||
TabOrder = 3
|
||||
end
|
||||
end
|
||||
object pnPackages: TPanel
|
||||
@ -1056,4 +1124,11 @@ object CreateRepositoryFrm: TCreateRepositoryFrm
|
||||
0000AA690000AA690000FFFFFF00
|
||||
}
|
||||
end
|
||||
object tmWait: TTimer
|
||||
Enabled = False
|
||||
Interval = 100
|
||||
OnTimer = tmWaitTimer
|
||||
left = 85
|
||||
top = 32
|
||||
end
|
||||
end
|
||||
|
@ -64,11 +64,15 @@ type
|
||||
pnDetails: TPanel;
|
||||
SD: TSaveDialog;
|
||||
spMain: TSplitter;
|
||||
tmWait: TTimer;
|
||||
procedure bAddClick(Sender: TObject);
|
||||
procedure bCreateClick(Sender: TObject);
|
||||
procedure bOpenClick(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure FormShow(Sender: TObject);
|
||||
procedure pnButtonsResize(Sender: TObject);
|
||||
procedure tmWaitTimer(Sender: TObject);
|
||||
private
|
||||
FVSTPackages: TVirtualStringTree;
|
||||
FVSTDetails: TVirtualStringTree;
|
||||
@ -79,7 +83,12 @@ type
|
||||
function LoadRepository(const AFileName: String): Boolean;
|
||||
function SaveRepository(const AFileName: String): Boolean;
|
||||
procedure PopulatePackageTree;
|
||||
procedure AddNewPackage;
|
||||
procedure AddExistingPackage;
|
||||
function GetDisplayString(const AStr: String): String;
|
||||
function LoadJSONFromFile(const AFileName: String; out AJSON: TJSONStringType): Boolean;
|
||||
function SaveJSONToFile(const AFileName: String; const AJSON: TJSONStringType): Boolean;
|
||||
function IsDuplicatePackage(const AJSON: TJSONStringType; const APackageFile: String): Boolean;
|
||||
procedure VSTPackagesGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
||||
{%H-}Column: TColumnIndex; {%H-}TextType: TVSTTextType; var CellText: String);
|
||||
procedure VSTPackagesGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
||||
@ -108,7 +117,8 @@ var
|
||||
|
||||
implementation
|
||||
|
||||
uses opkman_common, opkman_const, opkman_options, opkman_repositorydetailsfrm;
|
||||
uses opkman_common, opkman_const, opkman_options, opkman_repositorydetailsfrm,
|
||||
opkman_addrepositorypackagefrm, opkman_createrepositorypackagefrm;
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
@ -271,6 +281,135 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TCreateRepositoryFrm.IsDuplicatePackage(const AJSON: TJSONStringType;
|
||||
const APackageFile: String): Boolean;
|
||||
var
|
||||
SP: TSerializablePackages;
|
||||
MetaPackage: TMetaPackage;
|
||||
LazarusPackage: TLazarusPackage;
|
||||
TargetPackageFile: String;
|
||||
I: Integer;
|
||||
begin
|
||||
Result := False;
|
||||
SP := TSerializablePackages.Create;
|
||||
try
|
||||
if SP.JSONToPackages(AJSON) then
|
||||
begin
|
||||
MetaPackage := FSerializablePackages.FindMetaPackage(SP.Items[0].Name, fpbPackageName);
|
||||
if MetaPackage <> nil then
|
||||
begin
|
||||
Result := True;
|
||||
MessageDlgEx(Format(rsCreateRepositoryFrm_Info3, [MetaPackage.DisplayName]), mtInformation, [mbOk], Self);
|
||||
end;
|
||||
|
||||
if not Result then
|
||||
begin
|
||||
for I := 0 to MetaPackage.LazarusPackages.Count - 1 do
|
||||
begin
|
||||
LazarusPackage := FSerializablePackages.FindLazarusPackage(TLazarusPackage(MetaPackage.LazarusPackages.Items[I]).Name);
|
||||
if LazarusPackage <> nil then
|
||||
begin
|
||||
Result := True;
|
||||
MessageDlgEx(Format(rsCreateRepositoryFrm_Info5, [TLazarusPackage(MetaPackage.LazarusPackages.Items[I]).Name]), mtInformation, [mbOk], Self);
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
|
||||
if not Result then
|
||||
begin
|
||||
TargetPackageFile := AppendPathDelim(ExtractFilePath(FRepository.FPath)) + ExtractFileName(APackageFile);
|
||||
if FileExists(TargetPackageFile) then
|
||||
begin
|
||||
Result := True;
|
||||
MessageDlgEx(Format(rsCreateRepositoryFrm_Info4, [TargetPackageFile]), mtInformation, [mbOk], Self);
|
||||
end;
|
||||
|
||||
if (not Result) and (not CopyFile(APackageFile, TargetPackageFile, True)) then
|
||||
Result := True;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
SP.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCreateRepositoryFrm.AddNewPackage;
|
||||
var
|
||||
CreateRepositoryPackagesFrm: TCreateRepositoryPackagesFrm;
|
||||
JSON: TJSONStringType;
|
||||
CanGo: Boolean;
|
||||
begin
|
||||
CreateRepositoryPackagesFrm := TCreateRepositoryPackagesFrm.Create(Self);
|
||||
try
|
||||
with CreateRepositoryPackagesFrm do
|
||||
begin
|
||||
SetType(1);
|
||||
DestDir := AppendPathDelim(AppendPathDelim(ExtractFilePath(FRepository.FPath)) + 'Temp');
|
||||
if not DirectoryExists(DestDir) then
|
||||
CreateDir(DestDir);
|
||||
ShowModal;
|
||||
if ModalResult = mrOk then
|
||||
begin
|
||||
CanGo := False;
|
||||
if FileExists(PackageFile) and FileExists(JSONFile) then
|
||||
begin
|
||||
if LoadJSONFromFile(JSONFile, JSON) then
|
||||
begin
|
||||
if not IsDuplicatePackage(JSON, PackageFile) then
|
||||
begin
|
||||
if FSerializablePackages.AddPackageFromJSON(JSON) then
|
||||
begin
|
||||
JSON := '';
|
||||
if FSerializablePackages.PackagesToJSON(JSON) then
|
||||
begin
|
||||
if SaveJSONToFile(ExtractFilePath(FRepository.FPath) + cRemoteJSONFile, JSON) then
|
||||
begin
|
||||
if LoadRepository(FRepository.FPath) then
|
||||
begin
|
||||
CanGo := True;
|
||||
PopulatePackageTree;
|
||||
ShowHideControls(2);
|
||||
EnableDisableButtons(True);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
//DeleteFile(JSONFile);
|
||||
end;
|
||||
if not CanGo then
|
||||
MessageDlgEx(rsCreateRepositoryFrm_Error4, mtError, [mbOk], Self);
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
CreateRepositoryPackagesFrm.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCreateRepositoryFrm.AddExistingPackage;
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
procedure TCreateRepositoryFrm.bAddClick(Sender: TObject);
|
||||
begin
|
||||
AddRepositoryPackageFrm := TAddRepositoryPackageFrm.Create(Self);
|
||||
try
|
||||
AddRepositoryPackageFrm.ShowModal;
|
||||
if AddRepositoryPackageFrm.ModalResult = mrOk then
|
||||
begin
|
||||
if AddRepositoryPackageFrm.rbCreateNew.Checked then
|
||||
AddNewPackage
|
||||
else
|
||||
AddExistingPackage;
|
||||
end;
|
||||
finally
|
||||
AddRepositoryPackageFrm.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCreateRepositoryFrm.bOpenClick(Sender: TObject);
|
||||
begin
|
||||
if OD.Execute then
|
||||
@ -291,6 +430,27 @@ begin
|
||||
FSerializablePackages.Free
|
||||
end;
|
||||
|
||||
procedure TCreateRepositoryFrm.FormShow(Sender: TObject);
|
||||
begin
|
||||
tmWait.Enabled := True;
|
||||
end;
|
||||
|
||||
procedure TCreateRepositoryFrm.tmWaitTimer(Sender: TObject);
|
||||
begin
|
||||
tmWait.Enabled := False;
|
||||
if (Options.LastPrivateRepository <> '') and
|
||||
(FileExists(Options.LastPrivateRepository)) and
|
||||
(FileExists(AppendPathDelim(ExtractFilePath(Options.LastPrivateRepository)) + cRemoteJSONFile)) then
|
||||
begin
|
||||
if LoadRepository(Options.LastPrivateRepository) then
|
||||
begin
|
||||
PopulatePackageTree;
|
||||
ShowHideControls(2);
|
||||
EnableDisableButtons(True);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCreateRepositoryFrm.pnButtonsResize(Sender: TObject);
|
||||
begin
|
||||
bAdd.Left := (pnButtons.Width - (bAdd.Width + bDelete.Width)) div 2;
|
||||
@ -342,30 +502,26 @@ end;
|
||||
function TCreateRepositoryFrm.LoadRepository(const AFileName: String): Boolean;
|
||||
var
|
||||
FS: TFileStream;
|
||||
procedure ReadString(out AString: String);
|
||||
var
|
||||
Len: Integer;
|
||||
begin
|
||||
Len := 0;
|
||||
FS.Read(Len, SizeOf(Integer));
|
||||
SetLength(AString, Len div SizeOf(Char));
|
||||
FS.Read(Pointer(AString)^, Len);
|
||||
end;
|
||||
begin
|
||||
Result := False;
|
||||
FS := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite);
|
||||
try
|
||||
try
|
||||
ReadString(FRepository.FName);
|
||||
ReadString(FRepository.FAddress);
|
||||
ReadString(FRepository.FDescription);
|
||||
FRepository.FName := FS.ReadAnsiString;
|
||||
FRepository.FAddress := FS.ReadAnsiString;
|
||||
FRepository.FDescription := FS.ReadAnsiString;
|
||||
FRepository.FPath := AFileName;
|
||||
Result := FileExists(AppendPathDelim(ExtractFilePath(AFileName)) + cRemoteJSONFile);
|
||||
if not Result then
|
||||
MessageDlgEx(Format(rsCreateRepositoryFrm_Error1, [rsCreateRepositoryFrm_Error2]), mtError, [mbOk], Self);
|
||||
Caption := rsCreateRepositoryFrm_Caption + '(' + AFileName + ')';
|
||||
Options.LastPrivateRepository := AFileName;
|
||||
Options.Changed := True;
|
||||
Result := True;
|
||||
except
|
||||
on E: Exception do
|
||||
MessageDlgEx(Format(rsCreateRepositoryFrm_Error1, [E.Message]), mtError, [mbOk], Self);
|
||||
begin
|
||||
MessageDlgEx(Format(rsCreateRepositoryFrm_Error1, [AFileName, E.Message]), mtError, [mbOk], Self);
|
||||
Options.LastPrivateRepository := '';
|
||||
Options.Changed := True;
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
FS.Free;
|
||||
@ -376,14 +532,6 @@ function TCreateRepositoryFrm.SaveRepository(const AFileName: String): Boolean;
|
||||
var
|
||||
FS: TFileStream;
|
||||
FHandle: THandle;
|
||||
procedure WriteString(const AString: String);
|
||||
var
|
||||
Len: Integer;
|
||||
begin
|
||||
Len := Length(AString)*SizeOf(Char);
|
||||
FS.Write(Len, SizeOf(Integer));
|
||||
FS.Write(Pointer(AString)^, Len);
|
||||
end;
|
||||
begin
|
||||
Result := False;
|
||||
if not IsDirectoryEmpty(ExtractFilePath(AFileName)) then
|
||||
@ -405,9 +553,9 @@ begin
|
||||
FS := TFileStream.Create(AFileName, fmCreate or fmOpenWrite or fmShareDenyWrite);
|
||||
try
|
||||
try
|
||||
WriteString(FRepository.FName);
|
||||
WriteString(FRepository.FAddress);
|
||||
WriteString(FRepository.FDescription);
|
||||
FS.WriteAnsiString(FRepository.FName);
|
||||
FS.WriteAnsiString(FRepository.FAddress);
|
||||
FS.WriteAnsiString(FRepository.FDescription);
|
||||
FHandle := FileCreate(ExtractFilePath(AFileName) + cRemoteJSONFile);
|
||||
if fHandle <> THandle(-1) then
|
||||
begin
|
||||
@ -416,7 +564,7 @@ begin
|
||||
end;
|
||||
except
|
||||
on E: Exception do
|
||||
MessageDlgEx(Format(rsCreateRepositoryFrm_Error3, [E.Message]), mtError, [mbOk], Self);
|
||||
MessageDlgEx(Format(rsCreateRepositoryFrm_Error3, [AFileName, E.Message]), mtError, [mbOk], Self);
|
||||
end;
|
||||
finally
|
||||
FS.Free;
|
||||
@ -428,7 +576,6 @@ var
|
||||
RootNode, Node, ChildNode: PVirtualNode;
|
||||
RootData, Data, ChildData: PData;
|
||||
JSON: TJSONStringType;
|
||||
Ms: TMemoryStream;
|
||||
i, j: Integer;
|
||||
MetaPackage: TMetaPackage;
|
||||
LazarusPackage: TLazarusPackage;
|
||||
@ -442,55 +589,43 @@ begin
|
||||
RootData^.FName := FRepository.FName;
|
||||
RootData^.FDataType := 0;
|
||||
|
||||
if FileExists(ExtractFilePath(FRepository.FPath) + cRemoteJSONFile) then
|
||||
if LoadJSONFromFile(ExtractFilePath(FRepository.FPath) + cRemoteJSONFile, JSON) then
|
||||
begin
|
||||
Ms := TMemoryStream.Create;
|
||||
try
|
||||
Ms.LoadFromFile(ExtractFilePath(FRepository.FPath) + cRemoteJSONFile);
|
||||
if Ms.Size > 0 then
|
||||
FSerializablePackages.JSONToPackages(JSON);
|
||||
for I := 0 to FSerializablePackages.Count - 1 do
|
||||
begin
|
||||
MetaPackage := TMetaPackage(FSerializablePackages.Items[I]);
|
||||
Node := FVSTPackages.AddChild(RootNode);
|
||||
Data := FVSTPackages.GetNodeData(Node);
|
||||
if Trim(MetaPackage.DisplayName) <> '' then
|
||||
Data^.FName := MetaPackage.DisplayName
|
||||
else
|
||||
Data^.FName := MetaPackage.Name;
|
||||
Data^.FCategory := MetaPackage.Category;
|
||||
Data^.FRepositoryFileName := MetaPackage.RepositoryFileName;
|
||||
Data^.FRepositoryFileSize := MetaPackage.RepositoryFileSize;
|
||||
Data^.FRepositoryFileHash := MetaPackage.RepositoryFileHash;
|
||||
Data^.FRepositoryDate := MetaPackage.RepositoryDate;
|
||||
Data^.FHomePageURL := MetaPackage.HomePageURL;
|
||||
Data^.FDownloadURL := MetaPackage.DownloadURL;
|
||||
Data^.FDataType := 1;
|
||||
for J := 0 to MetaPackage.LazarusPackages.Count - 1 do
|
||||
begin
|
||||
Ms.Position := 0;
|
||||
SetLength(JSON, MS.Size);
|
||||
MS.Read(Pointer(JSON)^, Length(JSON));
|
||||
FSerializablePackages.JSONToPackages(JSON);
|
||||
for I := 0 to FSerializablePackages.Count - 1 do
|
||||
begin
|
||||
MetaPackage := TMetaPackage(FSerializablePackages.Items[I]);
|
||||
Node := FVSTPackages.AddChild(RootNode);
|
||||
Data := FVSTPackages.GetNodeData(Node);
|
||||
if Trim(MetaPackage.DisplayName) <> '' then
|
||||
Data^.FName := MetaPackage.DisplayName
|
||||
else
|
||||
Data^.FName := MetaPackage.Name;
|
||||
Data^.FCategory := MetaPackage.Category;
|
||||
Data^.FRepositoryFileName := MetaPackage.RepositoryFileName;
|
||||
Data^.FRepositoryFileSize := MetaPackage.RepositoryFileSize;
|
||||
Data^.FRepositoryFileHash := MetaPackage.RepositoryFileHash;
|
||||
Data^.FRepositoryDate := MetaPackage.RepositoryDate;
|
||||
Data^.FHomePageURL := MetaPackage.HomePageURL;
|
||||
Data^.FDownloadURL := MetaPackage.DownloadURL;
|
||||
Data^.FDataType := 1;
|
||||
for J := 0 to MetaPackage.LazarusPackages.Count - 1 do
|
||||
begin
|
||||
LazarusPackage := TLazarusPackage(MetaPackage.LazarusPackages.Items[J]);
|
||||
ChildNode := FVSTPackages.AddChild(Node);
|
||||
ChildData := FVSTPackages.GetNodeData(ChildNode);
|
||||
ChildData^.FName := LazarusPackage.Name;
|
||||
ChildData^.FVersionAsString := LazarusPackage.VersionAsString;
|
||||
ChildData^.FDescription := LazarusPackage.Description;
|
||||
ChildData^.FAuthor := LazarusPackage.Author;
|
||||
ChildData^.FLazCompatibility := LazarusPackage.LazCompatibility;
|
||||
ChildData^.FFPCCompatibility := LazarusPackage.FPCCompatibility;
|
||||
ChildData^.FSupportedWidgetSet := LazarusPackage.SupportedWidgetSet;
|
||||
ChildData^.FPackageType := LazarusPackage.PackageType;
|
||||
ChildData^.FLicense := LazarusPackage.License;
|
||||
ChildData^.FDependenciesAsString := LazarusPackage.DependenciesAsString;
|
||||
ChildData^.FDataType := 2;
|
||||
end;
|
||||
end;
|
||||
LazarusPackage := TLazarusPackage(MetaPackage.LazarusPackages.Items[J]);
|
||||
ChildNode := FVSTPackages.AddChild(Node);
|
||||
ChildData := FVSTPackages.GetNodeData(ChildNode);
|
||||
ChildData^.FName := LazarusPackage.Name;
|
||||
ChildData^.FVersionAsString := LazarusPackage.VersionAsString;
|
||||
ChildData^.FDescription := LazarusPackage.Description;
|
||||
ChildData^.FAuthor := LazarusPackage.Author;
|
||||
ChildData^.FLazCompatibility := LazarusPackage.LazCompatibility;
|
||||
ChildData^.FFPCCompatibility := LazarusPackage.FPCCompatibility;
|
||||
ChildData^.FSupportedWidgetSet := LazarusPackage.SupportedWidgetSet;
|
||||
ChildData^.FPackageType := LazarusPackage.PackageType;
|
||||
ChildData^.FLicense := LazarusPackage.License;
|
||||
ChildData^.FDependenciesAsString := LazarusPackage.DependenciesAsString;
|
||||
ChildData^.FDataType := 2;
|
||||
end;
|
||||
finally
|
||||
Ms.Free;
|
||||
end;
|
||||
end;
|
||||
if RootNode <> nil then
|
||||
@ -520,6 +655,46 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TCreateRepositoryFrm.LoadJSONFromFile(const AFileName: String;
|
||||
out AJSON: TJSONStringType): Boolean;
|
||||
var
|
||||
MS: TMemoryStream;
|
||||
begin
|
||||
Result := False;
|
||||
if not FileExists(AFileName) then
|
||||
Exit;
|
||||
MS := TMemoryStream.Create;
|
||||
try
|
||||
Ms.LoadFromFile(AFileName);
|
||||
if Ms.Size > 0 then
|
||||
begin
|
||||
Ms.Position := 0;
|
||||
SetLength(AJSON, MS.Size);
|
||||
MS.Read(Pointer(AJSON)^, Length(AJSON));
|
||||
Result := True;
|
||||
end;
|
||||
finally
|
||||
MS.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TCreateRepositoryFrm.SaveJSONToFile(const AFileName: String;
|
||||
const AJSON: TJSONStringType): Boolean;
|
||||
var
|
||||
MS: TMemoryStream;
|
||||
begin
|
||||
Result := False;
|
||||
MS := TMemoryStream.Create;
|
||||
try
|
||||
Ms.Write(Pointer(AJSON)^, Length(AJSON));
|
||||
Ms.Position := 0;
|
||||
Ms.SaveToFile(AFileName);
|
||||
Result := True;
|
||||
finally
|
||||
MS.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCreateRepositoryFrm.VSTPackagesGetText(Sender: TBaseVirtualTree;
|
||||
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
|
||||
var CellText: String);
|
||||
@ -603,12 +778,12 @@ begin
|
||||
//address
|
||||
DetailNode := FVSTDetails.AddChild(nil);
|
||||
DetailData := FVSTDetails.GetNodeData(DetailNode);
|
||||
DetailData^.FDataType := 0;
|
||||
DetailData^.FDataType := 17;
|
||||
DetailData^.FRepository.FAddress := FRepository.FAddress;
|
||||
//description
|
||||
DetailNode := FVSTDetails.AddChild(nil);
|
||||
DetailData := FVSTDetails.GetNodeData(DetailNode);
|
||||
DetailData^.FDataType := 1;
|
||||
DetailData^.FDataType := 3;
|
||||
DetailData^.FRepository.FDescription := FRepository.FDescription;
|
||||
end;
|
||||
1: begin
|
||||
@ -728,11 +903,11 @@ begin
|
||||
0: begin
|
||||
DetailData := FVSTDetails.GetNodeData(Node);
|
||||
case DetailData^.FDataType of
|
||||
0: if Column = 0 then
|
||||
17: if Column = 0 then
|
||||
CellText := rsCreateRepositoryFrm_RepositoryAddress
|
||||
else
|
||||
CellText := DetailData^.FRepository.FAddress;
|
||||
1: if Column = 0 then
|
||||
3: if Column = 0 then
|
||||
CellText := rsCreateRepositoryFrm_RepositoryDescription
|
||||
else
|
||||
CellText := DetailData^.FRepository.FDescription;
|
||||
|
@ -12,7 +12,6 @@ object CreateRepositoryPackagesFrm: TCreateRepositoryPackagesFrm
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
PopupMode = pmExplicit
|
||||
PopupParent = MainFrm.Owner
|
||||
Position = poOwnerFormCenter
|
||||
LCLVersion = '1.9.0.0'
|
||||
object pnMessage: TPanel
|
||||
@ -298,6 +297,7 @@ object CreateRepositoryPackagesFrm: TCreateRepositoryPackagesFrm
|
||||
Top = 48
|
||||
Width = 350
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
OnKeyPress = edDisplayNameKeyPress
|
||||
TabOrder = 1
|
||||
end
|
||||
object pnCategories: TPanel
|
||||
|
@ -89,6 +89,7 @@ type
|
||||
procedure bHelpClick(Sender: TObject);
|
||||
procedure bOptionsClick(Sender: TObject);
|
||||
procedure bSubmitClick(Sender: TObject);
|
||||
procedure edDisplayNameKeyPress(Sender: TObject; var Key: char);
|
||||
procedure edPackageDirAcceptDirectory(Sender: TObject; Var Value: String);
|
||||
procedure edPackageDirButtonClick(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
@ -101,8 +102,10 @@ type
|
||||
FPackageDir: String;
|
||||
FPackageName: String;
|
||||
FPackageFile: String;
|
||||
FJSONFile: String;
|
||||
FDestDir: String;
|
||||
FPackageOperation: TPackageOperation;
|
||||
FTyp: Integer;
|
||||
procedure VSTPackagesGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
||||
Column: TColumnIndex; {%H-}TextType: TVSTTextType; var CellText: String);
|
||||
procedure VSTPackagesGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
||||
@ -134,8 +137,12 @@ type
|
||||
procedure DoOnUploadProgress(Sender: TObject; AFileName: String);
|
||||
procedure DoOnUploadError(Sender: TObject; AErrMsg: String);
|
||||
procedure DoOnUploadCompleted(Sender: TObject);
|
||||
procedure CreatePackage;
|
||||
public
|
||||
procedure SetType(const ATyp: Integer);
|
||||
property DestDir: String read FDestDir write FDestDir;
|
||||
property PackageFile: string read FPackageFile;
|
||||
property JSONFile: String read FJSONFile;
|
||||
end;
|
||||
|
||||
var
|
||||
@ -582,39 +589,55 @@ begin
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
procedure TCreateRepositoryPackagesFrm.bCreateClick(Sender: TObject);
|
||||
procedure TCreateRepositoryPackagesFrm.CreatePackage;
|
||||
var
|
||||
RootNode: PVirtualNode;
|
||||
RootData: PData;
|
||||
begin
|
||||
FPackageOperation := poCreate;
|
||||
Screen.Cursor := crHourGlass;
|
||||
ShowHideControls(1);
|
||||
FPackageZipper := TPackageZipper.Create;
|
||||
FPackageZipper.OnZipError := @DoOnZippError;
|
||||
FPackageZipper.OnZipCompleted := @DoOnZipCompleted;
|
||||
RootNode := FVSTPackages.GetFirst;
|
||||
RootData := FVSTPackages.GetNodeData(RootNode);
|
||||
if RootData^.FDisplayName <> '' then
|
||||
FPackageName := StringReplace(RootData^.FDisplayName, ' ', '', [rfReplaceAll])
|
||||
else
|
||||
FPackageName := StringReplace(RootData^.FName, ' ', '', [rfReplaceAll]);
|
||||
FPackageFile := FDestDir + FPackageName + '.zip';
|
||||
FJSONFile := FDestDir + FPackageName + '.json';
|
||||
pnMessage.Caption := rsCreateRepositoryPackageFrm_Message4;
|
||||
fPackageZipper.StartZip(FPackageDir, FPackageFile);
|
||||
end;
|
||||
|
||||
|
||||
procedure TCreateRepositoryPackagesFrm.bCreateClick(Sender: TObject);
|
||||
begin
|
||||
if not CanCreate then
|
||||
Exit;
|
||||
SDD.Title := rsCreateRepositoryPackageFrm_SDDTitleDst;
|
||||
SDD.InitialDir := Options.LastPackagedirDst;
|
||||
EnableDisableControls(False);
|
||||
if SDD.Execute then
|
||||
if FTyp = 0 then
|
||||
begin
|
||||
FPackageOperation := poCreate;
|
||||
Screen.Cursor := crHourGlass;
|
||||
ShowHideControls(1);
|
||||
FPackageZipper := TPackageZipper.Create;
|
||||
FPackageZipper.OnZipError := @DoOnZippError;
|
||||
FPackageZipper.OnZipCompleted := @DoOnZipCompleted;
|
||||
FDestDir := AppendPathDelim(SDD.FileName);
|
||||
Options.LastPackagedirDst := SDD.FileName;
|
||||
Options.Changed := True;
|
||||
RootNode := FVSTPackages.GetFirst;
|
||||
RootData := FVSTPackages.GetNodeData(RootNode);
|
||||
if RootData^.FDisplayName <> '' then
|
||||
FPackageName := StringReplace(RootData^.FDisplayName, ' ', '', [rfReplaceAll])
|
||||
SDD.Title := rsCreateRepositoryPackageFrm_SDDTitleDst;
|
||||
SDD.InitialDir := Options.LastPackagedirDst;
|
||||
EnableDisableControls(False);
|
||||
if SDD.Execute then
|
||||
begin
|
||||
FDestDir := AppendPathDelim(SDD.FileName);
|
||||
Options.LastPackagedirDst := FDestDir;
|
||||
Options.Changed := True;
|
||||
CreatePackage;
|
||||
end
|
||||
else
|
||||
FPackageName := StringReplace(RootData^.FName, ' ', '', [rfReplaceAll]);
|
||||
FPackageFile := FDestDir + FPackageName + '.zip';
|
||||
pnMessage.Caption := rsCreateRepositoryPackageFrm_Message4;
|
||||
fPackageZipper.StartZip(FPackageDir, FPackageFile);
|
||||
EnableDisableControls(True);
|
||||
end
|
||||
else
|
||||
EnableDisableControls(True);
|
||||
else if FTyp = 1 then
|
||||
begin
|
||||
Options.LastPackagedirDst := FDestDir;
|
||||
Options.Changed := True;
|
||||
CreatePackage;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCreateRepositoryPackagesFrm.bSubmitClick(Sender: TObject);
|
||||
@ -639,10 +662,18 @@ begin
|
||||
else
|
||||
FPackageName := StringReplace(RootData^.FName, ' ', '', [rfReplaceAll]);
|
||||
FPackageFile := FDestDir + FPackageName + '.zip';
|
||||
FJSONFile := FDestDir + FPackageName + '.json';
|
||||
pnMessage.Caption := rsCreateRepositoryPackageFrm_Message4;
|
||||
fPackageZipper.StartZip(FPackageDir, FPackageFile);
|
||||
end;
|
||||
|
||||
procedure TCreateRepositoryPackagesFrm.edDisplayNameKeyPress(Sender: TObject;
|
||||
var Key: char);
|
||||
begin
|
||||
if Key in ['\', '/', ':', '*', '?', '"', '<', '>', '|'] then
|
||||
Key := #0;
|
||||
end;
|
||||
|
||||
procedure TCreateRepositoryPackagesFrm.bHelpClick(Sender: TObject);
|
||||
begin
|
||||
OpenURL(cHelpPage_CreateRepositoryPackage);
|
||||
@ -658,7 +689,6 @@ begin
|
||||
if Assigned(FPackageZipper) then
|
||||
FPackageZipper.Terminate;
|
||||
ModalResult := mrCancel;
|
||||
Close;
|
||||
end;
|
||||
|
||||
procedure TCreateRepositoryPackagesFrm.VSTPackagesGetText(
|
||||
@ -1006,7 +1036,10 @@ begin
|
||||
MetaPkg.RepositoryFileHash := MD5Print(MD5File(FPackageFile));
|
||||
MetaPkg.RepositoryDate := Trunc(now);
|
||||
MetaPkg.PackageBaseDir := RootData^.FPackageBaseDir;
|
||||
MetaPkg.DisplayName := RootData^.FDisplayName;
|
||||
if Trim(RootData^.FDisplayName) <> '' then
|
||||
MetaPkg.DisplayName := RootData^.FDisplayName
|
||||
else
|
||||
MetaPkg.DisplayName := RootData^.FName;
|
||||
MetaPkg.HomePageURL := RootData^.FHomePageURL;
|
||||
MetaPkg.DownloadURL := RootData^.FDownloadURL;
|
||||
MetaPkg.SVNURL := RootData^.FSVNURL;
|
||||
@ -1043,7 +1076,7 @@ begin
|
||||
try
|
||||
MS.Write(Pointer(JSON)^, Length(JSON));
|
||||
MS.Position := 0;
|
||||
MS.SaveToFile(FDestDir + FPackageName + '.json');
|
||||
MS.SaveToFile(FJSONFile);
|
||||
Result := True;
|
||||
finally
|
||||
MS.Free;
|
||||
@ -1084,9 +1117,9 @@ begin
|
||||
Screen.Cursor := crDefault;
|
||||
ShowHideControls(2);
|
||||
EnableDisableControls(True);
|
||||
MessageDlgEx(rsCreateRepositoryPackageFrm_Message7, mtInformation, [mbOk], Self);
|
||||
if FTyp = 0 then
|
||||
MessageDlgEx(rsCreateRepositoryPackageFrm_Message7, mtInformation, [mbOk], Self);
|
||||
ModalResult := mrOk;
|
||||
Close;
|
||||
end;
|
||||
poSubmit:
|
||||
begin
|
||||
@ -1098,8 +1131,7 @@ begin
|
||||
JsonUpd := FDestDir + 'update_' + FPackageName + '.json'
|
||||
else
|
||||
JsonUpd := '';
|
||||
Uploader.StartUpload(cSubmitURL_Zip, cSubmitURL_JSON, FPackageFile,
|
||||
FDestDir + FPackageName + '.json', JsonUpd);
|
||||
Uploader.StartUpload(cSubmitURL_Zip, cSubmitURL_JSON, FPackageFile, FJSONFile, JsonUpd);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -1129,26 +1161,26 @@ begin
|
||||
Uploader := nil;
|
||||
if FileExists(FPackageFile) then
|
||||
DeleteFile(FPackageFile);
|
||||
if FileExists(FDestDir + FPackageName + '.json') then
|
||||
DeleteFile(FDestDir + FPackageName + '.json');
|
||||
if FileExists(FJSONFile) then
|
||||
DeleteFile(FJSONFile);
|
||||
if FileExists(FDestDir + 'update_' + FPackageName + '.json') then
|
||||
DeleteFile(FDestDir + 'update_' + FPackageName + '.json');
|
||||
MessageDlgEx(rsCreateRepositoryPackageFrm_Message9, mtInformation, [mbOk], Self);
|
||||
Self.ModalResult := mrOk;
|
||||
Self.Close;
|
||||
ModalResult := mrOk;
|
||||
end;
|
||||
|
||||
procedure TCreateRepositoryPackagesFrm.SetType(const ATyp: Integer);
|
||||
begin
|
||||
bSubmit.Visible := ATyp = 0;
|
||||
cbJSONForUpdates.Visible := ATyp = 0;
|
||||
FTyp := ATyp;
|
||||
bSubmit.Visible := FTyp = 0;
|
||||
cbJSONForUpdates.Visible := FTyp = 0;
|
||||
bCreate.Visible := True;
|
||||
if ATyp = 1 then
|
||||
if FTyp = 1 then
|
||||
begin
|
||||
bCreate.Caption := rsCreateRepositoryPackageFrm_bCreate_Caption1;
|
||||
bCreate.Hint := rsCreateRepositoryPackageFrm_bCreate_Hint1;
|
||||
pnB.AutoSize := True;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@ -67,6 +67,7 @@ type
|
||||
FLastDownloadDir: String;
|
||||
FLastPackageDirSrc: String;
|
||||
FLastPackageDirDst: String;
|
||||
FLastPrivateRepository: String;
|
||||
// Default values for local repositories.
|
||||
FLocalPackagesDefault: String;
|
||||
FLocalArchiveDefault: String;
|
||||
@ -101,6 +102,7 @@ type
|
||||
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;
|
||||
@ -176,6 +178,7 @@ begin
|
||||
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);
|
||||
FDaysToShowNewPackages := FXML.GetValue('General/DaysToShowNewPackages/Value', 31);
|
||||
@ -207,6 +210,7 @@ begin
|
||||
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/DaysToShowNewPackages/Value', FDaysToShowNewPackages, 31);
|
||||
|
@ -44,17 +44,17 @@ uses opkman_const, opkman_common, opkman_options;
|
||||
|
||||
procedure TRepositoryDetailsFrm.FormCreate(Sender: TObject);
|
||||
begin
|
||||
Caption := rsRepositoryDetails_Caption;
|
||||
lbName.Caption := rsRepositoryDetails_lbName_Caption;
|
||||
edName.Hint := rsRepositoryDetails_edName_Hint;
|
||||
lbAddress.Caption := rsRepositoryDetails_lbAddress_Caption;
|
||||
edAddress.Hint := rsRepositoryDetails_edAddress_Hint;
|
||||
lbDescription.Caption := rsRepositoryDetails_lbDescription_Caption;
|
||||
mDescription.Hint := rsRepositoryDetails_mDescription_Hint;
|
||||
bOk.Caption := rsRepositoryDetails_bOk_Caption;
|
||||
bOk.Hint := rsRepositoryDetails_bOk_Hint;
|
||||
bCancel.Caption := rsRepositoryDetails_bCancel_Caption;
|
||||
bCancel.Hint := rsRepositoryDetails_bCancel_Hint;
|
||||
Caption := rsRepositoryDetailsFrm_Caption;
|
||||
lbName.Caption := rsRepositoryDetailsFrm_lbName_Caption;
|
||||
edName.Hint := rsRepositoryDetailsFrm_edName_Hint;
|
||||
lbAddress.Caption := rsRepositoryDetailsFrm_lbAddress_Caption;
|
||||
edAddress.Hint := rsRepositoryDetailsFrm_edAddress_Hint;
|
||||
lbDescription.Caption := rsRepositoryDetailsFrm_lbDescription_Caption;
|
||||
mDescription.Hint := rsRepositoryDetailsFrm_mDescription_Hint;
|
||||
bOk.Caption := rsRepositoryDetailsFrm_bOk_Caption;
|
||||
bOk.Hint := rsRepositoryDetailsFrm_bOk_Hint;
|
||||
bCancel.Caption := rsRepositoryDetailsFrm_bCancel_Caption;
|
||||
bCancel.Hint := rsRepositoryDetailsFrm_bCancel_Hint;
|
||||
FAddress := '';
|
||||
end;
|
||||
|
||||
@ -77,7 +77,7 @@ procedure TRepositoryDetailsFrm.bOkClick(Sender: TObject);
|
||||
begin
|
||||
if Trim(edName.Text) = '' then
|
||||
begin
|
||||
MessageDlgEx(rsRepositoryDetails_Info1, mtInformation, [mbOk], Self);
|
||||
MessageDlgEx(rsRepositoryDetailsFrm_Info1, mtInformation, [mbOk], Self);
|
||||
edName.SetFocus;
|
||||
Exit;
|
||||
end;
|
||||
@ -88,7 +88,7 @@ begin
|
||||
FAddress := FAddress + '/';
|
||||
if IsDuplicateRepository(FAddress) then
|
||||
begin
|
||||
if MessageDlgEx(Format(rsRepositoryDetails_Info3, [FAddress]), mtInformation, [mbYes, mbNo], Self) = mrNo then
|
||||
if MessageDlgEx(Format(rsRepositoryDetailsFrm_Info3, [FAddress]), mtInformation, [mbYes, mbNo], Self) = mrNo then
|
||||
begin
|
||||
edAddress.SetFocus;
|
||||
Exit;
|
||||
|
@ -274,6 +274,7 @@ type
|
||||
procedure Clear;
|
||||
function AddMetaPackage(const AName: String): TMetaPackage;
|
||||
procedure DeletePackage(const AIndex: Integer);
|
||||
function AddPackageFromJSON(JSON: TJSONStringType): Boolean;
|
||||
function FindMetaPackage(const AValue: String; const AFindPackageBy: TFindPackageBy): TMetaPackage;
|
||||
function FindPackageIndex(const AValue: String; const AFindPackageBy: TFindPackageBy): Integer;
|
||||
function FindLazarusPackage(const APackageName: String): TLazarusPackage;
|
||||
@ -721,6 +722,49 @@ begin
|
||||
FMetaPackages.Delete(AIndex);
|
||||
end;
|
||||
|
||||
function TSerializablePackages.AddPackageFromJSON(JSON: TJSONStringType): Boolean;
|
||||
var
|
||||
Data: TJSONData;
|
||||
Parser: TJSONParser;
|
||||
I: Integer;
|
||||
MetaPackage: TMetaPackage;
|
||||
begin
|
||||
if Trim(JSON) = '' then
|
||||
Exit(False);
|
||||
Result := True;
|
||||
Parser := TJSONParser.Create(JSON);
|
||||
try
|
||||
Data := Parser.Parse;
|
||||
try
|
||||
MetaPackage := nil;
|
||||
try
|
||||
if Data.JSONType = jtObject then
|
||||
begin
|
||||
for I := 0 to Data.Count - 1 do
|
||||
begin
|
||||
if Data.Items[I].JSONType = jtObject then
|
||||
begin
|
||||
if not JSONToPackageData(Data.Items[I], MetaPackage) then
|
||||
Result := False;
|
||||
end
|
||||
else if Data.Items[I].JSONType = jtArray then
|
||||
begin
|
||||
if not JSONToLazarusPackages(Data.Items[I], MetaPackage) then
|
||||
Result := False;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
except
|
||||
Result := False;
|
||||
end;
|
||||
finally
|
||||
Data.Free;
|
||||
end;
|
||||
finally
|
||||
Parser.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TSerializablePackages.FindMetaPackage(const AValue: String;
|
||||
const AFindPackageBy: TFindPackageBy): TMetaPackage;
|
||||
var
|
||||
|
Loading…
Reference in New Issue
Block a user