Added help button, install status of repository packages are visible in tree.

git-svn-id: trunk@53589 -
This commit is contained in:
balazs 2016-12-07 17:06:22 +00:00
parent f1f10c72f9
commit a339b5b1a9
7 changed files with 459 additions and 102 deletions

View File

@ -43,6 +43,7 @@ const
cLocalRepositoryUpdatesFile = 'updates.xml';
cRestrictedExtensionDef = '*.a,*.o,*.ppu,*.compiled,*.bak,*.or,*.rsj,*.~ ';
cRestrictedDirectoryDef = 'lib,backup';
cHelpPage = 'http://wiki.freepascal.org/Online_Package_Manager';
resourcestring
//package manager
@ -77,6 +78,9 @@ resourcestring
rsMainFrm_VSTText_HomePageURL = 'Home page';
rsMainFrm_VSTText_DownloadURL = 'Update link';
rsMainFrm_VSTText_SVNURL = 'SVN';
rsMainFrm_VSTText_Install0 = 'No';
rsMainFrm_VSTText_Install1 = 'Yes';
rsMainFrm_VSTText_Install2 = 'Partially';
rsMainFrm_VSTText_PackageType0 = 'Designtime and runtime';
rsMainFrm_VSTText_PackageType1 = 'Designtime';
rsMainFrm_VSTText_PackageType2 = 'Runtime';
@ -137,6 +141,8 @@ resourcestring
rsMainFrm_TBRepository_Hint = 'Create package or repository';
rsMainFrm_TBOptions_Caption = 'Options';
rsMainFrm_TBOptions_Hint = 'Show options dialog';
rsMainFrm_TBHelp_Caption = 'Help';
rsMainFrm_TBHelp_Hint = 'Help(' + cHelpPage + ')';
rsMainFrm_miCreateRepositoryPackage = 'Create repository package';
rsMainFrm_miCreateRepository = 'Create repository';
rsMainFrm_miJSONShow = 'Show JSON';
@ -146,8 +152,8 @@ resourcestring
rsMainFrm_PackageAlreadyInstalled = 'The following packages are alrady installed. Continue with install?';
rsMainFrm_PackageAlreadyDownloaded = 'The following repository packages already exists in the target folder. Continue?';
rsMainFrm_PackageUpdateWarning = 'Updating packages from external link is not without a risk!' + sLineBreak + 'Only update if you trust the package maintainer. Continue?';
rsMainFrm_PackageUpdate0 = 'The following repository packages don''t have a valid external download link. The packages will be skipped. Continue?';
rsMainFrm_PackageUpdate1 = 'None of the checked repository package(s) has a valid external download link.';
rsMainFrm_PackageUpdate0 = 'The following repository packages are not installed or don''t have a valid external download link. The packages will be skipped. Continue?';
rsMainFrm_PackageUpdate1 = 'None of the checked repository packages are installed or has a valid external download link.';
rsMainFrm_rsMessageNoPackage = 'No packages to show.';
rsMainFrm_rsMessageParsingJSON = 'Parsing JSON. Please wait...';
rsMainFrm_rsMessageDownload = 'Downloading package list. Please wait...';

View File

@ -1,11 +1,11 @@
object MainFrm: TMainFrm
Left = 463
Height = 600
Height = 640
Top = 164
Width = 801
Width = 850
Caption = 'Online Package Manager'
ClientHeight = 600
ClientWidth = 801
ClientHeight = 640
ClientWidth = 850
Color = clBtnFace
Constraints.MinHeight = 400
Constraints.MinWidth = 600
@ -18,13 +18,13 @@ object MainFrm: TMainFrm
LCLVersion = '1.7'
object pnMain: TPanel
Left = 0
Height = 530
Height = 570
Top = 0
Width = 801
Width = 850
Align = alClient
BevelOuter = bvNone
ClientHeight = 530
ClientWidth = 801
ClientHeight = 570
ClientWidth = 850
TabOrder = 0
OnResize = pnMainResize
object pnMessage: TPanel
@ -49,18 +49,18 @@ object MainFrm: TMainFrm
Left = 0
Height = 60
Top = 0
Width = 801
Width = 850
Align = alTop
BevelOuter = bvNone
ClientHeight = 60
ClientWidth = 801
ClientWidth = 850
Color = clBtnFace
ParentColor = False
TabOrder = 0
OnResize = pnTopResize
object spExpand: TSpeedButton
Tag = 1
Left = 753
Left = 802
Height = 20
Top = 13
Width = 21
@ -125,7 +125,7 @@ object MainFrm: TMainFrm
end
object spCollapse: TSpeedButton
Tag = 2
Left = 775
Left = 824
Height = 20
Top = 13
Width = 21
@ -368,9 +368,9 @@ object MainFrm: TMainFrm
end
object mJSON: TMemo
Left = 0
Height = 470
Height = 510
Top = 60
Width = 801
Width = 850
Align = alClient
Color = clBtnFace
PopupMenu = pmMemo
@ -383,11 +383,11 @@ object MainFrm: TMainFrm
object pnToolBar: TPanel
Left = 0
Height = 70
Top = 530
Width = 801
Top = 570
Width = 850
Align = alBottom
ClientHeight = 70
ClientWidth = 801
ClientWidth = 850
TabOrder = 1
OnResize = pnToolBarResize
object tbButtons: TToolBar
@ -477,6 +477,16 @@ object MainFrm: TMainFrm
ParentShowHint = False
ShowHint = True
end
object tbHelp: TToolButton
Left = 503
Top = 0
AutoSize = True
Caption = 'Help'
ImageIndex = 7
OnClick = tbHelpClick
ParentShowHint = False
ShowHint = True
end
end
end
object tbCleanUp1: TToolButton
@ -1173,7 +1183,7 @@ object MainFrm: TMainFrm
left = 64
top = 224
Bitmap = {
4C69070000002000000020000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
4C69080000002000000020000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
@ -2069,7 +2079,135 @@ object MainFrm: TMainFrm
00010000000E000000240000002C000000210000000D00000002000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000020000000F000000330234
457A045C7BB4010D12910000005E
457A045C7BB4010D12910000005EFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF009E9E9E02A5A5A598ACACACCDADADADBAABABAB9EA9A9
A98DA7A7A78FA8A8A8A4D7CABFCAD7CABFC9ACACACC4ADADADC4ACACACC6ADAD
ADC6AAAAAAB29C9C9C42FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00A2A2A291AEAEAEB6A3A3A33AA0A0A0597C88A499516C
A2D77481A3F3BAACA6FCCDB09DFDD5B9A6FDCFC5C4FA7B88BCDF2954BC9A5E76
B45FA8A8A870AFAFAFD7A3A3A364FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00AFAFAFD29AA1A6241546C0681547C6E7154BD0FF1F5A
DBFF90ABE6FFF9F3EFFFFAF6F2FFFBF6F3FFFAF5F1FF94B0EBFF2866E3FF1F5A
DBFF164AC7E94D6CB9ACA9ABACB0FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF009A9DA3ED1547C3E21850D3FF2765E2FF3779EDFF4B8C
F2FFADCBF9FFFFF9F6FFFFF8F3FFFFF7F2FFFFF8F4FFB3D0F8FF5B9BF6FF4B8C
F2FF3779EDFF2765E2FF2454C6F51345C241FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF001846BB7381858FFF2360DEFF397BEEFF5696F4FF70AFFBFF7FBE
FFFFBCD4F0FFFFEADCFFFFE8D9FFFFE8D8FFFFE9DAFFB6D0EEFF78BAFFFF7FBE
FFFF70AFFBFF5696F4FF397BEEFF235FDCFD1846BB73FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF001846B79A144ACFFF9399A5FF4B8CF2FF6CACFAFF7DBDFFFF67B2FFFF409E
FFFF86B1E3FFFFDAC2FFFFD9BFFFFED7BDFFFFD9BFFF80ABDFFF0D84FFFF409E
FFFF67B2FFFF7DBDFFFF6CACFAFF4B8CF2FF2A69E5FF1846B79AFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001743
B3741349CFFF2D6DE8FFA0A7B1FF7AB9FDFF72B8FFFF3B9CFFFF0578F8FF1868
E0FF5D7DC5FFDBAE8FFEBF9C89F9BE9B87F9D9AA89FE5C7AC1FE1964DCFF0870
F0FF017AFCFF3B9CFFFF72B8FFFF7AB9FDFF5394F4FF2D6DE8FF1743B374FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001A46B33F1448
CDFD2A69E5FF5C90E0FFA2ABB6FF66B2FFFF1086FFFF1069E2FF2459C4FE2253
B0EB2F3D5FAD333333803232325D3232325D333333802E3C60AE2251B0EC2558
C3FE1361DBFF0373F5FF1086FFFF66B2FFFF7FBEFEFF5293F4FF2A69E3FD1A46
B33FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001746BCE1225E
DDFF498AF1FFA1ACBBFF7BA2CEFF027FFFFF1362D4FF1D55B4F72C3749913232
32293232320D32323202FFFFFF00FFFFFF00323232023232320D323232292C37
49911E52B2F9155BCDFF056FF1FF027FFFFF66B2FFFF79B8FDFF498AF1FF2459
C8E1FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001A43AB69164DD2FF3878
ECFF939FADFF92A4BAFF1587FEFF0C66DDFF1A4FA4EA3131315632323209FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003232
32095E5F61952251A7FA0F5BD2FF056FF2FF1588FFFF73B8FFFF6BAAF9FF3778
EDFF1C45AE69FFFFFF00FFFFFF00FFFFFF00FFFFFF001846BAE33168D9FF9299
A3FF8A9DB2FF3F9CFDFF0472F0FF1350AAF53131314132323201FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF009999993E888888D9154AA5F50961E1FF0374F5FF409EFFFF7EBDFFFF5394
F4FF3363C5FCABABABDC9F9F9F3EFFFFFF002346A61D395FC2FEA5ACB6FF7A9E
CBFF6AB4FEFF007CFDFF0A5AC5FC2A37518532323203FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00A3A3A3CD5D687FEF0E50BEFF0768EBFF007CFDFF6CB5FFFF6CAB
FAFF3476EBFE8B93A882ACACACB6FFFFFF005A6E9FAF96A0B3FF578DDFFF7FBD
FEFF4AA3FFFF0373F5FF104B9FE532323212FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF0032323212144395E30A5FE3FF0373F5FF4AA3FFFF7FBE
FFFF4788F1FF3254A49CACACACCB9E9E9E14A6A8AEFAA9B8DCFFC0D5F6FFCFD9
EAFFABBDDAFF979BB3FF364A709FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00334371A6908294FF9BA4BFFFABC1DFFFCFDD
EFFFBFD7FAFF8598C6DCACACACD0A6A6A691ADABB2F9FBF7F4FFFFF7F2FFFFE7
D8FFFED7BDFFE6AC80FF443D334BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF003C3E5659D79059FFEFBB95FFFFDDC6FFFFED
E0FFFFFCFAFFC0C8DEF3ABABABD1E5D5C8D0C0A597FBFCFAF7FFFFF5EFFFFFE5
D4FFFAD1B4FFD0A07EFD30303018FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF0030303018C0845BFEEBB48BFFFFDBC3FFFFEB
DDFFFFFAF7FFD0C1BDFCD6C7BBEBDBCDC281C3B2B1FDFDFBF9FFFFF4EDFFFFE5
D3FFF9CFB1FFD59F79FE32323208FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF002C2C4909C58354FFEAB288FFFFDAC1FFFFEA
DCFFFFFAF6FFCAC5C8FBB9B4AFE19D9D9D78B0B0C3FBFCFAF8FFFFF5EFFFFFE5
D4FFFAD1B4FFE3A676FF644E4332FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00464B7248D3894EFFEBB48BFFFFDBC3FFFFEB
DDFFFFFAF7FFB5BBCAF8A7A7A7B5A0A0A0B25B75B7E9789EEAFF9BC0F5FFA9CA
F0FF5F9FE5FF5B82C3FF324A8386FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF003244838B5A6AA8FF5E87CBFF60A1E9FFA9CC
F3FF9DBCE6FF9FA5B0FB9B9B9B33A0A0A0CC2850A4B42461DFFF5293F4FF7DBD
FFFF2892FFFF056EF0FF1452BED2FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF001845B5D50D59DDFF056EF0FF3A95F2FF9EB2
C7FF9BA4B3FF4C6AA5DAFFFFFF00A0A0A0D02E3A5340205BDAFE4384F0FF7BBA
FDFF53A8FFFF0375F7FF0B60E3FD1C459F39FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080
80029F9F9F959A9A9AC7838894C65974AFFF6B83A7FF8594A5FF97A1ACFF7F9C
BFFF3B79E2FD2D497F52FFFFFF00A2A2A2C78B8B8B382156C7F03070EAFF66A6
F8FF73B8FFFF027FFFFF066BEEFF1154CAEA1A4DB30AFFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A0A0
A0CC8F8F8FC793969C73697DACF6738CB6FF5C89C2FF1F80E7FF6CB2FAFF66A6
F8FF2D66D3F132323209FFFFFF00A0A0A08D9F9F9F932843829E2462DFFF4C8D
F2FF7FBEFFFF50A6FFFF0276F8FF0865E8FF1350C2CB1540D50CFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00AAAAAA039494
94EB0F4BD2111646C0D90E54D9FF0865E8FF0276F8FF50A6FFFF7FBEFFFF4181
EDFF2B509EB0FFFFFF00FFFFFF009B9B9B0FA6A6A6DE595A5A242053C3F02F70
EAFF63A3F8FF79BBFFFF2E95FFFF0373F5FF0963E6FF1151CCEA1943B53CFFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00999999278B8D
93EA1647C1E80E54D9FF0963E6FF0373F5FF2E95FFFF79BBFFFF5F9FF6FF2961
D1F332323219FFFFFF00FFFFFF00FFFFFF00A1A1A198A8A9A8B82B3B637A215B
D8FD3E80EEFF70AFFBFF72B8FFFF208EFFFF0373F5FF0865E8FF0C59DEFF134D
C7CF485491799669563DCC66330ACC66330A9669563D4953917B375CBADF7F87
98FF0C59DEFF0865E8FF0373F5FF208EFFFF72B8FFFF6FADFAFF2B68DFFD2B46
7D87FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A9A9A9CB969796D2344A
7EC8225DDBFE4788F0FF74B4FCFF73B8FFFF3096FFFF0277F9FF066CEFFF0962
E6FF72769CFFD2874BFFCF8141FFCE7F3FFFD08344FF716F95FF2868D4FF7E88
98FF066CEEFF0277F9FF3096FFFF73B8FFFF73B2FBFF2F6CE2FE294B95B93232
320AFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009F9F9F698687
87DF385291FA1F5ADAFF4181EDFF6FAFFBFF7BBCFFFF55A9FFFF0D84FFFF0276
F8FF7A95C4FFE9B287FFE6AB7EFFE5AA7CFFE7AD80FF798FBCFF1B75E6FF808D
9BFF0D83FEFF55A9FFFF7BBCFFFF69A8F8FF2964DEFE274EA6D232323215FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF0047474725394E7DD31E57D5FF306EE4FF5F9EF6FF7FBEFEFF75B9FFFF59AB
FFFF9ABBE2FFFFDAC1FFFDD6BCFFFDD5BAFFFED8BEFF88B0E0FF3E98F5FF939D
A8FF72B5FDFF7FBDFEFF4986ECFF225BD8FD28458BB93232321EFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00323232102A3858881E4EBDF01B55D7FF3673E5FF5C9BF4FF77B6
FCFFBFD5EFFFFFE9DBFFFFE7D8FFFFE7D7FFFFE8D8FFBDD2EDFF83BBF4FFA1AA
B5FF4885EAFF225CDAFF2055C7F32A3D669032323210FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF003232320531313139263A6CA81D4FBFF71851D2FF1E58
D8FF97B3EDFFFFF9F4FFFFF7F2FFFFF7F1FFFFF7F2FF9BB6ECFF5B7EC9FF8E9A
B6FF1D53C7F428417BAF3131313A32323205FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00323232093232323A525458A33D55
8CF75976BDF89BADDAFAB5B2C4FDB3AEBDFD9CABD1F8788AB7F4A0A3ACF76265
699B3232323A32323209FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00323232006666
661A8383838E888888CCBFB3A8ECCDC1B7EDA8A8A8D4A2A2A2BC8E8E8E4B3232
3200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00
}
end
object imTBDis: TImageList
@ -2078,7 +2216,7 @@ object MainFrm: TMainFrm
left = 64
top = 288
Bitmap = {
4C69070000002000000020000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
4C69080000002000000020000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
@ -2974,7 +3112,135 @@ object MainFrm: TMainFrm
00010000000E000000240000002C000000210000000D00000002000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000020000000F000000333333
337A5B5B5BB40D0D0D910000005E
337A5B5B5BB40D0D0D910000005EFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF009E9E9E02A5A5A598ACACACCDADADADBAABABAB9EA9A9
A98DA7A7A78FA8A8A8A4C8C8C8CAC8C8C8C9ACACACC4ADADADC4ACACACC6ADAD
ADC6AAAAAAB29C9C9C42FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00A2A2A291AEAEAEB6A3A3A33AA0A0A0598F8F8F997979
79D7898989F3ABABABFCADADADFDB6B6B6FDC5C5C5FA969696DF6E6E6E9A8585
855FA8A8A870AFAFAFD7A3A3A364FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00AFAFAFD2A1A1A12464646468676767E76C6C6CFF7979
79FFB9B9B9FFF2F2F2FFF5F5F5FFF5F5F5FFF4F4F4FFBEBEBEFF848484FF7979
79FF696969E97F7F7FACABABABB0FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF009E9E9EED666666E2707070FF838383FF949494FFA3A3
A3FFD5D5D5FFF8F8F8FFF7F7F7FFF6F6F6FFF7F7F7FFD8D8D8FFAEAEAEFFA3A3
A3FF949494FF838383FF707070F564646441FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF0063636373878787FF7E7E7EFF959595FFAAAAAAFFBEBEBEFFCACA
CAFFD9D9D9FFE8E8E8FFE6E6E6FFE5E5E5FFE7E7E7FFD6D6D6FFC7C7C7FFCACA
CAFFBEBEBEFFAAAAAAFF959595FF7D7D7DFD63636373FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF006262629A6B6B6BFF9B9B9BFFA3A3A3FFBCBCBCFFC9C9C9FFC0C0C0FFB0B0
B0FFBBBBBBFFD7D7D7FFD5D5D5FFD3D3D3FFD5D5D5FFB5B5B5FF9B9B9BFFB0B0
B0FFC0C0C0FFC9C9C9FFBCBCBCFFA3A3A3FF868686FF6262629AFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005F5F
5F746A6A6AFF8A8A8AFFA9A9A9FFC6C6C6FFC5C5C5FFAEAEAEFF919191FF8282
82FF8E8E8EFFA9A9A9FE9A9A9AF9999999F9A5A5A5FE8B8B8BFE7F7F7FFF8A8A
8AFF939393FFAEAEAEFFC5C5C5FFC6C6C6FFA9A9A9FF8A8A8AFF5F5F5F74FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006161613F6969
69FD868686FFA1A1A1FFADADADFFC0C0C0FF9C9C9CFF838383FF727272FE6969
69EB454545AD333333803232325D3232325D33333380454545AE686868EC7272
72FE7C7C7CFF8D8D8DFF9C9C9CFFC0C0C0FFC9C9C9FFA8A8A8FF868686FD6161
613FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00636363E17D7D
7DFFA1A1A1FFAFAFAFFFAAAAAAFF979797FF7B7B7BFF6B6B6BF73B3B3B913232
32293232320D32323202FFFFFF00FFFFFF00323232023232320D323232293B3B
3B91686868F9757575FF898989FF979797FFC0C0C0FFC5C5C5FFA1A1A1FF7474
74E1FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005D5D5D696E6E6EFF9393
93FFA1A1A1FFA8A8A8FF9D9D9DFF7F7F7FFF626262EA3131315632323209FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003232
32095F5F5F95656565FA757575FF8A8A8AFF9E9E9EFFC5C5C5FFBABABAFF9393
93FF5F5F5F69FFFFFF00FFFFFF00FFFFFF00FFFFFF00636363E3838383FF9B9B
9BFFA1A1A1FFAEAEAEFF8B8B8BFF636363F53131314132323201FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF009999993E888888D95F5F5FF57D7D7DFF8D8D8DFFB0B0B0FFC9C9C9FFA9A9
A9FF7A7A7AFCABABABDC9F9F9F3EFFFFFF005E5E5E1D787878FEAEAEAEFFA7A7
A7FFC1C1C1FF949494FF707070FC3D3D3D8532323203FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00A3A3A3CD6D6D6DEF696969FF848484FF949494FFC2C2C2FFBBBB
BBFF919191FE98989882ACACACB6FFFFFF007A7A7AAFA4A4A4FF9F9F9FFFC9C9
C9FFB4B4B4FF8D8D8DFF5D5D5DE532323212FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF0032323212565656E37C7C7CFF8D8D8DFFB4B4B4FFCACA
CAFF9F9F9FFF6868689CACACACCB9E9E9E14A9A9A9FAC1C1C1FFDCDCDCFFDCDC
DCFFC3C3C3FFA1A1A1FF5353539FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF004E4E4EA6888888FFABABABFFC7C7C7FFE0E0
E0FFDEDEDEFFA3A3A3DCACACACD0A6A6A691ADADADF9F6F6F6FFF6F6F6FFE5E5
E5FFD3D3D3FFA5A5A5FF3A3A3A4BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF0044444459878787FFB5B5B5FFD9D9D9FFEBEB
EBFFFBFBFBFFCDCDCDF3ABABABD1D2D2D2D0A3A3A3FBF9F9F9FFF4F4F4FFE2E2
E2FFCDCDCDFF9B9B9BFD30303018FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00303030187E7E7EFEAEAEAEFFD7D7D7FFE9E9
E9FFF9F9F9FFC1C1C1FCC5C5C5EBCBCBCB81B3B3B3FDFAFAFAFFF3F3F3FFE2E2
E2FFCACACAFF999999FE32323208FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00343434097C7C7CFFABABABFFD6D6D6FFE8E8
E8FFF9F9F9FFC6C6C6FBB3B3B3E19D9D9D78B5B5B5FBF9F9F9FFF4F4F4FFE2E2
E2FFCDCDCDFF9E9E9EFF4D4D4D32FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00565656487F7F7FFFAEAEAEFFD7D7D7FFE9E9
E9FFF9F9F9FFBEBEBEF8A7A7A7B5A0A0A0B2858585E9B0B0B0FFCBCBCBFFD1D1
D1FFACACACFF909090FF58585886FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF005454548B7A7A7AFF969696FFAFAFAFFFD3D3
D3FFC5C5C5FFA7A7A7FB9B9B9B33A0A0A0CC646464B47F7F7FFFA8A8A8FFC9C9
C9FFA6A6A6FF888888FF6B6B6BD2FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00616161D5777777FF888888FFA6A6A6FFB5B5
B5FFA7A7A7FF787878DAFFFFFF00A0A0A0D0404040407A7A7AFE9C9C9CFFC6C6
C6FFB8B8B8FF8E8E8EFF7D7D7DFD5B5B5B39FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080
80029F9F9F959A9A9AC78B8B8BC6828282FF8B8B8BFF979797FFA3A3A3FFA3A3
A3FF919191FD55555552FFFFFF00A2A2A2C78B8B8B38717171F08D8D8DFFB7B7
B7FFC5C5C5FF979797FF868686FF6F6F6FEA6565650AFFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A0A0
A0CC8F8F8FC797979773888888F6959595FF949494FF939393FFBFBFBFFFB7B7
B7FF808080F132323209FFFFFF00A0A0A08D9F9F9F935252529E808080FFA3A3
A3FFCACACAFFB6B6B6FF8F8F8FFF818181FF6B6B6BCB6767670CFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00AAAAAA039494
94EB6C6C6C11656565D9737373FF818181FF8F8F8FFFB6B6B6FFCACACAFF9999
99FF636363B0FFFFFF00FFFFFF009B9B9B0FA6A6A6DE595959246E6E6EF08D8D
8DFFB5B5B5FFC7C7C7FFA8A8A8FF8D8D8DFF7F7F7FFF6E6E6EEA6060603CFFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00999999278E8E
8EEA656565E8737373FF7F7F7FFF8D8D8DFFA8A8A8FFC7C7C7FFB1B1B1FF7C7C
7CF332323219FFFFFF00FFFFFF00FFFFFF00A1A1A198A8A8A8B84545457A7979
79FD999999FFBEBEBEFFC5C5C5FFA3A3A3FF8D8D8DFF818181FF777777FF6A6A
6ACF646464796868683D6262620A6262620A6868683D6464647B737373DF8B8B
8BFF777777FF818181FF8D8D8DFFA3A3A3FFC5C5C5FFBCBCBCFF848484FD5353
5387FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A9A9A9CB969696D25757
57C87B7B7BFE9F9F9FFFC2C2C2FFC5C5C5FFA9A9A9FF909090FF878787FF7F7F
7FFF808080FF7D7D7DFF767676FF747474FF787878FF7A7A7AFF808080FF8B8B
8BFF878787FF909090FFA9A9A9FFC5C5C5FFC0C0C0FF888888FE5D5D5DB93232
320AFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009F9F9F698686
86DF616161FA797979FF999999FFBEBEBEFFC8C8C8FFB9B9B9FF9B9B9BFF8F8F
8FFF9F9F9FFFABABABFFA4A4A4FFA2A2A2FFA6A6A6FF999999FF8C8C8CFF8F8F
8FFF9A9A9AFFB9B9B9FFC8C8C8FFB8B8B8FF818181FE636363D232323215FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF0047474725595959D3767676FF8A8A8AFFB1B1B1FFC9C9C9FFC6C6C6FFBABA
BAFFC2C2C2FFD6D6D6FFD2D2D2FFD1D1D1FFD4D4D4FFB9B9B9FFA9A9A9FF9F9F
9FFFC2C2C2FFC9C9C9FF9D9D9DFF797979FD565656B93232321EFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00323232103F3F3F88696969F0757575FF8E8E8EFFAEAEAEFFC3C3
C3FFDADADAFFE7E7E7FFE5E5E5FFE4E4E4FFE5E5E5FFD7D7D7FFC5C5C5FFACAC
ACFF9C9C9CFF7B7B7BFF717171F34747479032323210FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF003232320531313139464646A86A6A6AF7717171FF7777
77FFC1C1C1FFF8F8F8FFF6F6F6FFF6F6F6FFF6F6F6FFC3C3C3FF909090FFA1A1
A1FF6F6F6FF44F4F4FAF3131313A32323205FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00323232093232323A545454A36262
62F7878787F8B8B8B8FAB7B7B7FDB3B3B3FDB4B4B4F8959595F4A5A5A5F76565
659B3232323A32323209FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00323232006666
661A8383838E888888CCB1B1B1ECBFBFBFEDA8A8A8D4A2A2A2BC8E8E8E4B3232
3200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00
}
end
end

View File

@ -71,6 +71,7 @@ type
imTBNor: TImageList;
tbDownload: TToolButton;
tbInstall: TToolButton;
tbHelp: TToolButton;
tbRefresh: TToolButton;
tbCleanUp: TToolButton;
tbCreate: TToolButton;
@ -79,6 +80,7 @@ type
procedure pnToolBarResize(Sender: TObject);
procedure tbCleanUpClick(Sender: TObject);
procedure tbDownloadClick(Sender: TObject);
procedure tbHelpClick(Sender: TObject);
procedure tbInstallClick(Sender: TObject);
procedure tbOptionsClick(Sender: TObject);
procedure tbRefreshClick(Sender: TObject);
@ -296,8 +298,8 @@ begin
MessageDlgEx(rsMainFrm_rsMessageError1 + sLineBreak + SerializablePackages.LastError, mtInformation, [mbOk], Self);
Exit;
end;
Updates.StartUpdate;
VisualTree.PopulateTree;
Updates.StartUpdate;
EnableDisableControls(True);
SetupMessage;
mJSON.Text := AJSON;
@ -367,6 +369,7 @@ begin
tbCleanUp.Enabled := (AEnable) and (SerializablePackages.Count > 0);
tbCreate.Enabled := (AEnable);
tbOptions.Enabled := (AEnable);
tbHelp.Enabled := (AEnable);
end;
procedure TMainFrm.SetupMessage(const AMessage: String = '');
@ -516,8 +519,14 @@ begin
ShowOptions;
end;
procedure TMainFrm.tbHelpClick(Sender: TObject);
begin
OpenDocument('http://wiki.freepascal.org/Online_Package_Manager');
end;
procedure TMainFrm.tbRefreshClick(Sender: TObject);
begin
Updates.Paused := True;
VisualTree.VST.Clear;
VisualTree.VST.Invalidate;
GetPackageList;
@ -556,6 +565,7 @@ begin
if CanGo then
begin
Updates.Paused := True;
Options.LastDownloadDir := DstDir;
Options.Changed := True;
PackageAction := paDownloadTo;
@ -577,6 +587,7 @@ begin
end;
end;
SerializablePackages.RemoveErrorState;
Updates.Paused := False;
end;
procedure TMainFrm.tbUpdateClick(Sender: TObject);
@ -608,6 +619,7 @@ begin
if CanGo then
begin
Updates.Paused := True;
PackageAction := paUpdate;
VisualTree.UpdatePackageStates;
if SerializablePackages.DownloadCount > 0 then
@ -652,7 +664,10 @@ begin
end;
end;
if not NeedToRebuild then
begin
SerializablePackages.RemoveErrorState;
Updates.Paused := False;
end;
end;
procedure TMainFrm.tbInstallClick(Sender: TObject);
@ -682,6 +697,7 @@ begin
if CanGo then
begin
Updates.Paused := True;
PackageAction := paInstall;
VisualTree.UpdatePackageStates;
if SerializablePackages.DownloadCount > 0 then
@ -727,7 +743,10 @@ begin
end;
end;
if not NeedToRebuild then
begin
SerializablePackages.RemoveErrorState;
Updates.Paused := False;
end;
end;
procedure TMainFrm.tbCleanUpClick(Sender: TObject);
@ -844,6 +863,9 @@ begin
tbCreate.Hint := rsMainFrm_TBRepository_Hint;
tbOptions.Caption := rsMainFrm_TBOptions_Caption;
tbOptions.Hint := rsMainFrm_TBOptions_Hint;
tbHelp.Caption := rsMainFrm_TBHelp_Caption;
tbHelp.Hint := rsMainFrm_TBHelp_Hint;
miCreateRepositoryPackage.Caption := rsMainFrm_miCreateRepositoryPackage;
miCreateRepository.Caption := rsMainFrm_miCreateRepository;
miJSONShow.Caption := rsMainFrm_miJSONShow;

View File

@ -165,7 +165,8 @@ begin
if (SerializablePackages.Items[I].Checked) then
begin
Inc(ChkCnt);
if (Trim(SerializablePackages.Items[I].DownloadZipURL) = '') then
if (Trim(SerializablePackages.Items[I].DownloadZipURL) = '') or
(SerializablePackages.GetPackageInstallState(SerializablePackages.Items[I]) = 0) then
begin
Inc(InvCnt);
Node := FVST.AddChild(nil);

View File

@ -269,6 +269,7 @@ type
function Cleanup: Integer;
function IsDependencyOk(PackageDependency: TPackageDependency; DependencyPackage: TPackageFile): Boolean;
function IsInstalledVersionOk(PackageDependency: TPackageDependency; InstalledVersion: String): Boolean;
function GetPackageInstallState(const APackage: TPackage): Integer; overload;
procedure DeleteDownloadedZipFiles;
public
property Count: Integer read GetCount;
@ -1116,6 +1117,29 @@ begin
end;
end;
function TSerializablePackages.GetPackageInstallState(const APackage: TPackage): Integer;
var
I: Integer;
PackageFile: TPackageFile;
InstCnt: Integer;
begin
InstCnt := 0;
for I := 0 to APackage.PackageFiles.Count - 1 do
begin
PackageFile := TPackageFile(APackage.PackageFiles.Items[I]);
if IsPackageInstalled(PackageFile, APackage.PackageBaseDir) then
Inc(InstCnt);
end;
case InstCnt of
0: Result := 0;
1..High(Integer):
if InstCnt < APackage.PackageFiles.Count then
Result := 2
else
Result := 1;
end;
end;
function TSerializablePackages.PackageDataToJSON(APackage: TPackage;
var APackageData: TJSONObject): Boolean;
begin

View File

@ -6,7 +6,7 @@ interface
uses
Classes, SysUtils, LazIDEIntf, Laz2_XMLCfg, LazFileUtils, fpjson, fpjsonrtti,
opkman_httpclient, opkman_timer;
opkman_httpclient, opkman_timer, opkman_serializablepackages;
const
OpkVersion = 1;
@ -77,6 +77,9 @@ type
procedure DoOnUpdate;
procedure Load;
procedure Save;
procedure SetPaused(const AValue: Boolean);
procedure AssignPackageData(APackage: TPackage);
procedure ResetPackageData(APackage: TPackage);
protected
procedure Execute; override;
public
@ -85,7 +88,7 @@ type
procedure StartUpdate;
procedure StopUpdate;
published
property Paused: Boolean read FPaused write FPaused;
property Paused: Boolean read FPaused write SetPaused;
property OnUpdate: TNotifyEvent read FOnUpdate write FOnUpdate;
end;
@ -94,7 +97,7 @@ var
implementation
uses opkman_serializablepackages, opkman_options, opkman_common;
uses opkman_options, opkman_common;
{ TUpdatePackage }
@ -257,6 +260,47 @@ begin
FXML.Flush;
end;
procedure TUpdates.SetPaused(const AValue: Boolean);
begin
if FPaused <> AValue then
begin
FPaused := AValue;
if FPaused then
Save;
end;
end;
procedure TUpdates.AssignPackageData(APackage: TPackage);
var
I: Integer;
PackageFile: TPackageFile;
begin
APackage.DownloadZipURL := FUpdatePackage.FUpdatePackageData.DownloadZipURL;
APackage.ForceNotify := FUpdatePackage.FUpdatePackageData.ForceNotify;
for I := 0 to FUpdatePackage.FUpdatePackageFiles.Count - 1 do
begin
PackageFile := APackage.FindPackageFile(TUpdatePackageFiles(FUpdatePackage.FUpdatePackageFiles.Items[I]).Name);
if PackageFile <> nil then
PackageFile.UpdateVersion := TUpdatePackageFiles(FUpdatePackage.FUpdatePackageFiles.Items[I]).Version;
end;
end;
procedure TUpdates.ResetPackageData(APackage: TPackage);
var
I: Integer;
PackageFile: TPackageFile;
begin
APackage.DownloadZipURL := '';
APackage.ForceNotify := False;
for I := 0 to APackage.PackageFiles.Count - 1 do
begin
PackageFile := APackage.FindPackageFile(TPackageFile(APackage.PackageFiles.Items[I]).Name);
if PackageFile <> nil then
PackageFile.UpdateVersion := '';
end;
end;
procedure TUpdates.DoOnTimer(Sender: TObject);
begin
if (FTimer.Enabled) and (not FNeedToBreak) then
@ -302,17 +346,14 @@ end;
procedure TUpdates.Execute;
var
I, J: Integer;
I: Integer;
JSON: TJSONStringType;
PackageFile: TPackageFile;
NeedToUpdate: Boolean;
begin
Load;
while not Terminated do
begin
if (FNeedToUpdate) and (not FBusyUpdating) and (not FPaused) then
begin
NeedToUpdate := False;
FBusyUpdating := True;
try
for I := 0 to SerializablePackages.Count - 1 do
@ -325,29 +366,18 @@ begin
if GetUpdateInfo(SerializablePackages.Items[I].DownloadURL, JSON) then
begin
if FUpdatePackage.LoadFromJSON(JSON) then
begin
SerializablePackages.Items[I].DownloadZipURL := FUpdatePackage.FUpdatePackageData.DownloadZipURL;
SerializablePackages.Items[I].ForceNotify := FUpdatePackage.FUpdatePackageData.ForceNotify;
NeedToUpdate := FUpdatePackage.FUpdatePackageData.ForceNotify = True;
for J := 0 to FUpdatePackage.FUpdatePackageFiles.Count - 1 do
begin
PackageFile := SerializablePackages.Items[I].FindPackageFile(TUpdatePackageFiles(FUpdatePackage.FUpdatePackageFiles.Items[J]).Name);
if PackageFile <> nil then
begin
if not NeedToUpdate then
NeedToUpdate := TUpdatePackageFiles(FUpdatePackage.FUpdatePackageFiles.Items[J]).Version > PackageFile.UpdateVersion;
PackageFile.UpdateVersion := TUpdatePackageFiles(FUpdatePackage.FUpdatePackageFiles.Items[J]).Version;
end;
end;
end;
end;
AssignPackageData(SerializablePackages.Items[I])
else
ResetPackageData(SerializablePackages.Items[I]);
end
else
ResetPackageData(SerializablePackages.Items[I]);
end
else
FHTTPClient.NeedToBreak := True;
end;
if (NeedToUpdate) and (not FNeedToBreak) and (not FPaused) then
if Assigned(FOnUpdate) then
Synchronize(@DoOnUpdate);
if Assigned(FOnUpdate) and (not FNeedToBreak) and (not FPaused) then
Synchronize(@DoOnUpdate);
finally
FBusyUpdating := False;
FNeedToUpdate := False;
@ -358,11 +388,11 @@ end;
procedure TUpdates.StartUpdate;
begin
Load;
FPaused := False;
if FStarted then
Exit;
FStarted := True;
FPaused := False;
Load;
FTimer := TThreadTimer.Create;
FTimer.Interval := UpdateInterval;
FTimer.OnTimer := @DoOnTimer;

View File

@ -65,7 +65,7 @@ type
ForceUpadate: Boolean;
HasUpdate: Boolean;
SVNURL: String;
IsInstalled: Boolean;
InstallState: Integer;
ButtonID: Integer;
Button: TSpeedButton;
end;
@ -174,14 +174,14 @@ begin
with Header.Columns.Add do
begin
Position := 0;
Width := 250;
Width := 270;
Text := rsMainFrm_VSTHeaderColumn_PackageName;
end;
with Header.Columns.Add do
begin
Position := 1;
Alignment := taCenter;
Width := 80;
Width := 90;
Options := Options - [coResizable];
Text := rsMainFrm_VSTHeaderColumn_Installed;
end;
@ -189,7 +189,7 @@ begin
begin
Position := 2;
Alignment := taCenter;
Width := 85;
Width := 90;
Options := Options - [coResizable];
Text := rsMainFrm_VSTHeaderColumn_Repository;
end;
@ -197,7 +197,7 @@ begin
begin
Position := 3;
Alignment := taCenter;
Width := 80;
Width := 90;
Options := Options - [coResizable];
Text := rsMainFrm_VSTHeaderColumn_Update;
end;
@ -295,8 +295,8 @@ begin
Data^.PackageName := SerializablePackages.Items[I].Name;
Data^.PackageDisplayName := SerializablePackages.Items[I].DisplayName;
Data^.PackageState := SerializablePackages.Items[I].PackageState;
Data^.InstallState := SerializablePackages.GetPackageInstallState(SerializablePackages.Items[I]);
Data^.DataType := 1;
Data^.HasUpdate := False;
for J := 0 to SerializablePackages.Items[I].PackageFiles.Count - 1 do
begin
//add packagefiles(DataType = 2)
@ -949,6 +949,7 @@ begin
if Package <> nil then
begin
Data^.PackageState := Package.PackageState;
Data^.InstallState := SerializablePackages.GetPackageInstallState(Package);
FVST.ReinitNode(Node, False);
FVST.RepaintNode(Node);
end;
@ -988,7 +989,7 @@ begin
Data^.ForceUpadate := Package.ForceNotify;
FVST.ReinitNode(Node, False);
FVST.RepaintNode(Node);
if Package.ForceNotify then
if (Package.ForceNotify) and (SerializablePackages.GetPackageInstallState(Package) > 0) then
begin
Data^.HasUpdate := True;
FVST.ReinitNode(Node, False);
@ -1004,13 +1005,17 @@ begin
Data^.UpdateVersion := PackageFile.UpdateVersion;
FVST.ReinitNode(Node, False);
FVST.RepaintNode(Node);
if Data^.UpdateVersion > Data^.InstalledVersion then
if (Data^.InstalledVersion <> '') and (Trim(Data^.UpdateVersion) <> '') then
begin
ParentNode := Node^.Parent;
ParentData := FVST.GetNodeData(ParentNode);
ParentData^.HasUpdate := True;
FVST.ReinitNode(ParentNode, False);
FVST.RepaintNode(ParentNode);
Data^.HasUpdate := (Data^.UpdateVersion > Data^.InstalledVersion) or (ParentData^.ForceUpadate);
if Data^.HasUpdate then
begin
ParentData^.HasUpdate := True;
FVST.ReinitNode(ParentNode, False);
FVST.RepaintNode(ParentNode);
end;
end;
end;
end;
@ -1022,8 +1027,7 @@ procedure TVisualTree.VSTBeforeCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
var
Data, ParentData: PData;
ParentNode: PVirtualNode;
Data: PData;
begin
Data := Sender.GetNodeData(Node);
if (Data^.DataType = 0) or (Data^.DataType = 1) or (Data^.DataType = 2) then
@ -1049,27 +1053,10 @@ begin
end
else
begin
case Column of
0, 1, 2, 4, 5:
begin
if Data^.DataType = 0 then
TargetCanvas.Brush.Color := $00E5E5E5 //00D8D8D8
else
TargetCanvas.Brush.Color := $00E5E5E5;
end;
3:begin
TargetCanvas.Brush.Color := $00E5E5E5;
if (Data^.DataType = 2) then
begin
ParentNode := Node^.Parent;
ParentData := FVST.GetNodeData(ParentNode);
if (Data^.UpdateVersion > Data^.InstalledVersion) or (ParentData^.ForceUpadate) then
ParentData^.HasUpdate := True
else
ParentData^.HasUpdate := False;
end
end;
end;
if Data^.DataType = 0 then
TargetCanvas.Brush.Color := $00E5E5E5 //00D8D8D8
else if Data^.DataType = 1 then
TargetCanvas.Brush.Color := $00E5E5E5;
TargetCanvas.FillRect(CellRect);
end;
end
@ -1202,6 +1189,8 @@ begin
else if (Data1^.DataType = 2) and (Data1^.DataType = 2) then
Result := CompareText(Data1^.PackageFileName, Data2^.PackageFileName);
end;
1: if (Data1^.DataType = 1) and (Data1^.DataType = 1) then
Result := Data2^.InstallState - Data1^.InstallState;
3: if (Data1^.DataType = 1) and (Data1^.DataType = 1) then
Result := Ord(Data2^.HasUpdate) - Ord(Data1^.HasUpdate);
end;
@ -1273,12 +1262,21 @@ begin
end
else if Column = 1 then
begin
if Data^.InstalledVersion = '' then
Data^.InstalledVersion := '-';
if Data^.DataType = 2 then
CellText := Data^.InstalledVersion
else
CellText := '';
case Data^.DataType of
1: case Data^.InstallState of
//0: CellText := rsMainFrm_VSTText_Install0;
1: CellText := rsMainFrm_VSTText_Install1;
2: CellText := rsMainFrm_VSTText_Install2;
end;
2: begin
if Data^.InstalledVersion <> '' then
CellText := Data^.InstalledVersion
else
CellText := '-';
end
else
CellText := '';
end
end
else if Column = 2 then
begin
@ -1293,12 +1291,10 @@ begin
1: if Data^.HasUpdate then
CellText := 'NEW';
2: begin
if Data^.UpdateVersion = '' then
Data^.UpdateVersion := '-';
if Data^.DataType = 2 then
if (Data^.InstalledVersion <> '') and (Data^.UpdateVersion <> '') then
CellText := Data^.UpdateVersion
else
CellText := '';
CellText := '-';
end
else
CellText := '';
@ -1314,8 +1310,7 @@ begin
1: CellText := rsMainFrm_VSTText_PackageState1;
2: CellText := rsMainFrm_VSTText_PackageState2;
3: begin
Data^.IsInstalled := Data^.InstalledVersion >= Data^.UpdateVersion;
if Data^.IsInstalled then
if Data^.InstalledVersion >= Data^.UpdateVersion then
CellText := rsMainFrm_VSTText_PackageState4
else
CellText := rsMainFrm_VSTText_PackageState3
@ -1354,7 +1349,7 @@ end;
procedure TVisualTree.VSTHeaderClick(Sender: TVTHeader; Column: TColumnIndex;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if (Column <> 0) and (Column <> 3) then
if (Column <> 0) and (Column <> 1) and (Column <> 3) then
Exit;
if Button = mbLeft then
begin
@ -1387,8 +1382,21 @@ var
begin
Data := FVST.GetNodeData(Node);
case column of
1: begin
if Node <> Sender.FocusedNode then
begin
if Data^.DataType = 1 then
begin
case Data^.InstallState of
1: TargetCanvas.Font.Color := clBlack;
2: TargetCanvas.Font.Color := clBlack;
end;
end;
end
else
TargetCanvas.Font.Color := clWhite;
end;
3: begin
case Data^.DataType of
1: TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold];
2: begin
@ -1413,7 +1421,7 @@ begin
else
TargetCanvas.Font.Color := clWhite;
end
else if (Data^.DataType = 2) and (Data^.IsInstalled) then
else if (Data^.DataType = 2) and (Data^.InstalledVersion >= Data^.UpdateVersion) then
begin
TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold];
if Node <> Sender.FocusedNode then