mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-26 20:00:16 +08:00
Add feature 1769207 "Automatic Software Update":
Implements a simple dialog which tells the user if there is some new release or nightly build available. Parses http://www.heidisql.com/updatecheck.php as a .ini file. Download buttons just start the webbrowser currently. Todo: Automatic invocation of this dialog at regular intervals (for example once a week) Todo: Automatic download + update + restart
This commit is contained in:
@ -34,7 +34,8 @@ uses
|
|||||||
column_selection in '..\..\source\column_selection.pas' {ColumnSelectionForm},
|
column_selection in '..\..\source\column_selection.pas' {ColumnSelectionForm},
|
||||||
data_sorting in '..\..\source\data_sorting.pas' {DataSortingForm},
|
data_sorting in '..\..\source\data_sorting.pas' {DataSortingForm},
|
||||||
runsqlfile in '..\..\source\runsqlfile.pas' {RunSQLFileForm},
|
runsqlfile in '..\..\source\runsqlfile.pas' {RunSQLFileForm},
|
||||||
createdatabase in '..\..\source\createdatabase.pas' {CreateDatabaseForm};
|
createdatabase in '..\..\source\createdatabase.pas' {CreateDatabaseForm},
|
||||||
|
updatecheck in '..\..\source\updatecheck.pas' {frmUpdateCheck};
|
||||||
|
|
||||||
{$R *.RES}
|
{$R *.RES}
|
||||||
|
|
||||||
|
@ -34,7 +34,8 @@ uses
|
|||||||
column_selection in '..\..\source\column_selection.pas' {ColumnSelectionForm},
|
column_selection in '..\..\source\column_selection.pas' {ColumnSelectionForm},
|
||||||
data_sorting in '..\..\source\data_sorting.pas' {DataSortingForm},
|
data_sorting in '..\..\source\data_sorting.pas' {DataSortingForm},
|
||||||
runsqlfile in '..\..\source\runsqlfile.pas' {RunSQLFileForm},
|
runsqlfile in '..\..\source\runsqlfile.pas' {RunSQLFileForm},
|
||||||
createdatabase in '..\..\source\createdatabase.pas' {CreateDatabaseForm};
|
createdatabase in '..\..\source\createdatabase.pas' {CreateDatabaseForm},
|
||||||
|
updatecheck in '..\..\source\updatecheck.pas' {frmUpdateCheck};
|
||||||
|
|
||||||
{$R *.RES}
|
{$R *.RES}
|
||||||
|
|
||||||
|
@ -134,6 +134,9 @@
|
|||||||
<Form>tbl_properties_form</Form>
|
<Form>tbl_properties_form</Form>
|
||||||
</DCCReference>
|
</DCCReference>
|
||||||
<DCCReference Include="..\..\source\threading.pas" />
|
<DCCReference Include="..\..\source\threading.pas" />
|
||||||
|
<DCCReference Include="..\..\source\updatecheck.pas">
|
||||||
|
<Form>frmUpdateCheck</Form>
|
||||||
|
</DCCReference>
|
||||||
<DCCReference Include="..\..\source\usermanager.pas">
|
<DCCReference Include="..\..\source\usermanager.pas">
|
||||||
<Form>UserManagerForm</Form>
|
<Form>UserManagerForm</Form>
|
||||||
</DCCReference>
|
</DCCReference>
|
||||||
|
BIN
res/arrow_refresh.gif
Normal file
BIN
res/arrow_refresh.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 976 B |
@ -98,7 +98,7 @@ begin
|
|||||||
Screen.Cursor := crHourGlass;
|
Screen.Cursor := crHourGlass;
|
||||||
|
|
||||||
// App-Version
|
// App-Version
|
||||||
LabelVersion.Caption := 'Version ' + appversion;
|
LabelVersion.Caption := FullAppVersion;
|
||||||
|
|
||||||
// Compile-date
|
// Compile-date
|
||||||
FileAge(ParamStr(0), Compiled);
|
FileAge(ParamStr(0), Compiled);
|
||||||
|
@ -562,6 +562,10 @@ object MainForm: TMainForm
|
|||||||
object N8: TMenuItem
|
object N8: TMenuItem
|
||||||
Caption = '-'
|
Caption = '-'
|
||||||
end
|
end
|
||||||
|
object menuUpdateCheck: TMenuItem
|
||||||
|
Caption = 'Check for updates ...'
|
||||||
|
OnClick = menuUpdateCheckClick
|
||||||
|
end
|
||||||
object menuWebsite: TMenuItem
|
object menuWebsite: TMenuItem
|
||||||
Tag = 56
|
Tag = 56
|
||||||
Caption = 'HeidiSQL Website'
|
Caption = 'HeidiSQL Website'
|
||||||
|
@ -141,6 +141,7 @@ type
|
|||||||
N8: TMenuItem;
|
N8: TMenuItem;
|
||||||
Import1: TMenuItem;
|
Import1: TMenuItem;
|
||||||
ToolButton1: TToolButton;
|
ToolButton1: TToolButton;
|
||||||
|
menuUpdateCheck: TMenuItem;
|
||||||
procedure btnSQLHelpClick(Sender: TObject);
|
procedure btnSQLHelpClick(Sender: TObject);
|
||||||
procedure menuWindowClick(Sender: TObject);
|
procedure menuWindowClick(Sender: TObject);
|
||||||
procedure focusWindow(Sender: TObject);
|
procedure focusWindow(Sender: TObject);
|
||||||
@ -198,6 +199,7 @@ type
|
|||||||
procedure HandleWMCopyData(var msg: TWMCopyData); message WM_COPYDATA;
|
procedure HandleWMCopyData(var msg: TWMCopyData); message WM_COPYDATA;
|
||||||
procedure HandleWMProcessLog(var msg: TMessage); message WM_PROCESSLOG;
|
procedure HandleWMProcessLog(var msg: TMessage); message WM_PROCESSLOG;
|
||||||
procedure HandleWMClearRightClickPointer(var msg: TMessage); message WM_CLEAR_RIGHTCLICK_POINTER;
|
procedure HandleWMClearRightClickPointer(var msg: TMessage); message WM_CLEAR_RIGHTCLICK_POINTER;
|
||||||
|
procedure menuUpdateCheckClick(Sender: TObject);
|
||||||
private
|
private
|
||||||
regMain : TRegistry;
|
regMain : TRegistry;
|
||||||
function GetChildwin: TMDIChild;
|
function GetChildwin: TMDIChild;
|
||||||
@ -221,7 +223,9 @@ var
|
|||||||
StatusText : String = 'Initializing...';
|
StatusText : String = 'Initializing...';
|
||||||
StatusIconIndex : Integer = 43;
|
StatusIconIndex : Integer = 43;
|
||||||
loadsqlfile : boolean = true; // load sql-file into query-memo at startup?
|
loadsqlfile : boolean = true; // load sql-file into query-memo at startup?
|
||||||
appversion : String = 'x.y $Rev$';
|
AppVersion : String = 'x.y';
|
||||||
|
AppRevision : String = '$Rev$';
|
||||||
|
FullAppVersion : String;
|
||||||
DirnameCommonAppData,
|
DirnameCommonAppData,
|
||||||
DirnameUserAppData,
|
DirnameUserAppData,
|
||||||
DIRNAME_SNIPPETS,
|
DIRNAME_SNIPPETS,
|
||||||
@ -260,7 +264,8 @@ uses
|
|||||||
Helpers,
|
Helpers,
|
||||||
Threading,
|
Threading,
|
||||||
mysql_structures,
|
mysql_structures,
|
||||||
MysqlConn;
|
MysqlConn,
|
||||||
|
UpdateCheck;
|
||||||
|
|
||||||
{$R *.DFM}
|
{$R *.DFM}
|
||||||
|
|
||||||
@ -448,14 +453,16 @@ begin
|
|||||||
ToolBarStandard.Top := GetRegValue(REGNAME_TOOLBAR2TOP, ToolBarStandard.Top);
|
ToolBarStandard.Top := GetRegValue(REGNAME_TOOLBAR2TOP, ToolBarStandard.Top);
|
||||||
ToolBarData.Top := GetRegValue(REGNAME_TOOLBARDATATOP, ToolBarData.Top);
|
ToolBarData.Top := GetRegValue(REGNAME_TOOLBARDATATOP, ToolBarData.Top);
|
||||||
|
|
||||||
// Beautify appversion
|
// Beautify AppRevision
|
||||||
if Pos('$Rev: WC', appversion) < 1 then begin
|
if Pos('$Rev: WC', AppRevision) < 1 then
|
||||||
appversion := Copy(appversion, 1, Pos('$Rev', appversion) + 4);
|
AppRevision := 'unknown'
|
||||||
appversion := appversion + ' unknown';
|
else begin
|
||||||
end else appversion := StringReplace(appversion, 'WC ', '', []);
|
AppRevision := StringReplace( AppRevision, '$Rev: WC', '', [rfIgnoreCase] );
|
||||||
appversion := StringReplace( appversion, '$Rev', 'Revision', [rfIgnoreCase] );
|
AppRevision := StringReplace( AppRevision, '$', '', [] );
|
||||||
appversion := StringReplace( appversion, '$', '', [] );
|
AppRevision := Trim( AppRevision );
|
||||||
appversion := Trim( appversion );
|
end;
|
||||||
|
// Compose full version string
|
||||||
|
FullAppVersion := 'Version ' + AppVersion + ', Revision ' + AppRevision;
|
||||||
|
|
||||||
// "All users" folder for HeidiSQL's data (All Users\Application Data)
|
// "All users" folder for HeidiSQL's data (All Users\Application Data)
|
||||||
DirnameCommonAppData := GetShellFolder(CSIDL_COMMON_APPDATA) + '\' + APPNAME + '\';
|
DirnameCommonAppData := GetShellFolder(CSIDL_COMMON_APPDATA) + '\' + APPNAME + '\';
|
||||||
@ -718,9 +725,9 @@ procedure TMainForm.CopyHTMLtableExecute(Sender: TObject);
|
|||||||
begin
|
begin
|
||||||
// Copy data in actual dataset as HTML
|
// Copy data in actual dataset as HTML
|
||||||
if ChildWin.PageControlMain.ActivePage = ChildWin.tabData then
|
if ChildWin.PageControlMain.ActivePage = ChildWin.tabData then
|
||||||
dataset2html(ChildWin.GetVisualDataset(), TZQuery(ChildWin.GetVisualDataset()).Sql.Text, '', ChildWin.prefConvertHTMLEntities, APPNAME + ' ' + appversion )
|
dataset2html(ChildWin.GetVisualDataset(), TZQuery(ChildWin.GetVisualDataset()).Sql.Text, '', ChildWin.prefConvertHTMLEntities, APPNAME + ' ' + FullAppVersion )
|
||||||
else if ChildWin.PageControlMain.ActivePage = ChildWin.tabQuery then
|
else if ChildWin.PageControlMain.ActivePage = ChildWin.tabQuery then
|
||||||
dataset2html(ChildWin.GetVisualDataset(), TZReadOnlyQuery(ChildWin.GetVisualDataset()).Sql.Text, '', ChildWin.prefConvertHTMLEntities, APPNAME + ' ' + appversion);
|
dataset2html(ChildWin.GetVisualDataset(), TZReadOnlyQuery(ChildWin.GetVisualDataset()).Sql.Text, '', ChildWin.prefConvertHTMLEntities, APPNAME + ' ' + FullAppVersion);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -941,7 +948,7 @@ begin
|
|||||||
Screen.Cursor := crHourGlass;
|
Screen.Cursor := crHourGlass;
|
||||||
case FilterIndex of
|
case FilterIndex of
|
||||||
1 : dataset2csv(query, FieldSep, FieldEncl, LineSep, Filename);
|
1 : dataset2csv(query, FieldSep, FieldEncl, LineSep, Filename);
|
||||||
2 : dataset2html(query, FileName, FileName, ConvertHTMLSpecialChars, APPNAME+' '+appversion);
|
2 : dataset2html(query, FileName, FileName, ConvertHTMLSpecialChars, APPNAME+' '+FullAppVersion);
|
||||||
3 : dataset2xml(query, FileName, FileName);
|
3 : dataset2xml(query, FileName, FileName);
|
||||||
end;
|
end;
|
||||||
ChildWin.prefCSVSeparator := FieldSep;
|
ChildWin.prefCSVSeparator := FieldSep;
|
||||||
@ -1266,5 +1273,13 @@ begin
|
|||||||
ShowStatus( STATUS_MSG_READY, 2 );
|
ShowStatus( STATUS_MSG_READY, 2 );
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TMainForm.menuUpdateCheckClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
frm : TfrmUpdateCheck;
|
||||||
|
begin
|
||||||
|
frm := TfrmUpdateCheck.Create(Self);
|
||||||
|
frm.ShowModal;
|
||||||
|
FreeAndNil(frm);
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
218
source/updatecheck.dfm
Normal file
218
source/updatecheck.dfm
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
object frmUpdateCheck: TfrmUpdateCheck
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
BorderStyle = bsDialog
|
||||||
|
Caption = 'Check for updates ...'
|
||||||
|
ClientHeight = 176
|
||||||
|
ClientWidth = 294
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -11
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = []
|
||||||
|
OldCreateOrder = False
|
||||||
|
Position = poMainFormCenter
|
||||||
|
OnShow = FormShow
|
||||||
|
DesignSize = (
|
||||||
|
294
|
||||||
|
176)
|
||||||
|
PixelsPerInch = 96
|
||||||
|
TextHeight = 13
|
||||||
|
object lblStatus: TLabel
|
||||||
|
Left = 40
|
||||||
|
Top = 16
|
||||||
|
Width = 236
|
||||||
|
Height = 51
|
||||||
|
Anchors = [akLeft, akTop, akRight, akBottom]
|
||||||
|
AutoSize = False
|
||||||
|
Caption = 'lblStatus'
|
||||||
|
end
|
||||||
|
object Image1: TImage
|
||||||
|
Left = 16
|
||||||
|
Top = 16
|
||||||
|
Width = 18
|
||||||
|
Height = 17
|
||||||
|
Picture.Data = {
|
||||||
|
0954474946496D61676547494638396110001000F70000296B21296B29297329
|
||||||
|
317B29397331398431398439427342428439428C394294394A8C424A94424A9C
|
||||||
|
42528C4A52944A529C4A529C5252A54A5A94525A9C525AA552638C5A638C6363
|
||||||
|
946363A55A63AD5A6BAD6373946B73B56373B56B73BD6B7B9C7B7BBD6B7BBD73
|
||||||
|
7BBD7B7BC66B7BC67384A58484BD7B84C67B84C6848CAD848CAD8C8CB5848CB5
|
||||||
|
8C8CC6848CCE8494AD8C94BD9494CE8494CE8C9CB59C9CBD9C9CC6949CCE949C
|
||||||
|
D694A5CE9CA5D69CADC6ADADCEA5ADCEADADD6A5B5CEADB5CEB5B5D6B5B5DEAD
|
||||||
|
B5DEB5BDD6B5BDDEB5BDDEBDCEDECEDEEFDEE7EFE7EFF7EFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F9040100004B002C
|
||||||
|
000000001000100087296B21296B29297329317B293973313984313984394273
|
||||||
|
42428439428C394294394A8C424A94424A9C42528C4A52944A529C4A529C5252
|
||||||
|
A54A5A94525A9C525AA552638C5A638C6363946363A55A63AD5A6BAD6373946B
|
||||||
|
73B56373B56B73BD6B7B9C7B7BBD6B7BBD737BBD7B7BC66B7BC67384A58484BD
|
||||||
|
7B84C67B84C6848CAD848CAD8C8CB5848CB58C8CC6848CCE8494AD8C94BD9494
|
||||||
|
CE8494CE8C9CB59C9CBD9C9CC6949CCE949CD694A5CE9CA5D69CADC6ADADCEA5
|
||||||
|
ADCEADADD6A5B5CEADB5CEB5B5D6B5B5DEADB5DEB5BDD6B5BDDEB5BDDEBDCEDE
|
||||||
|
CEDEEFDEE7EFE7EFF7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFF08AD0097081C389007C1830833B040B844C990141A1A30
|
||||||
|
484021828A83485C84403163860B1728442C58315009C81B1F419E10F1018189
|
||||||
|
81413E7444416180000008108020B8D2C508072D061EE07090C244043108922C
|
||||||
|
322408901F4F7FECD8B14408C11C0F121440701087888136289C40B10103411D
|
||||||
|
213E48902836E4021A037D84C071C323C80F2228604812B7434790283C644070
|
||||||
|
E1C8411B19281418108080051A7C11B298C0B032DCCA01010021F9040100004B
|
||||||
|
002C000000001000100087296B21296B29297329317B29397331398431398439
|
||||||
|
427342428439428C394294394A8C424A94424A9C42528C4A52944A529C4A529C
|
||||||
|
5252A54A5A94525A9C525AA552638C5A638C6363946363A55A63AD5A6BAD6373
|
||||||
|
946B73B56373B56B73BD6B7B9C7B7BBD6B7BBD737BBD7B7BC66B7BC67384A584
|
||||||
|
84BD7B84C67B84C6848CAD848CAD8C8CB5848CB58C8CC6848CCE8494AD8C94BD
|
||||||
|
9494CE8494CE8C9CB59C9CBD9C9CC6949CCE949CD694A5CE9CA5D69CADC6ADAD
|
||||||
|
CEA5ADCEADADD6A5B5CEADB5CEB5B5D6B5B5DEADB5DEB5BDD6B5BDDEB5BDDEBD
|
||||||
|
CEDECEDEEFDEE7EFE7EFF7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFF08AD0097081C389007C1830833B040B844C990141A
|
||||||
|
1A30484021828A83485C84403163860B1728442C58315009C81B1F419E10F101
|
||||||
|
818981413E7444416180000008108020B8D2C508072D061EE07090C244043108
|
||||||
|
922C322408901F4F7FECD8B14408C11C0F121440701087888136289C40B10103
|
||||||
|
411D213E48902836E4021A037D84C071C323C80F2228604812B7434790283C64
|
||||||
|
4070E1C8411B19281418108080051A7C11B298C0B032DCCA01010021F9040100
|
||||||
|
004B002C000000001000100087296B21296B29297329317B2939733139843139
|
||||||
|
8439427342428439428C394294394A8C424A94424A9C42528C4A52944A529C4A
|
||||||
|
529C5252A54A5A94525A9C525AA552638C5A638C6363946363A55A63AD5A6BAD
|
||||||
|
6373946B73B56373B56B73BD6B7B9C7B7BBD6B7BBD737BBD7B7BC66B7BC67384
|
||||||
|
A58484BD7B84C67B84C6848CAD848CAD8C8CB5848CB58C8CC6848CCE8494AD8C
|
||||||
|
94BD9494CE8494CE8C9CB59C9CBD9C9CC6949CCE949CD694A5CE9CA5D69CADC6
|
||||||
|
ADADCEA5ADCEADADD6A5B5CEADB5CEB5B5D6B5B5DEADB5DEB5BDD6B5BDDEB5BD
|
||||||
|
DEBDCEDECEDEEFDEE7EFE7EFF7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFF08AD0097081C389007C1830833B040B844C990
|
||||||
|
141A1A30484021828A83485C84403163860B1728442C58315009C81B1F419E10
|
||||||
|
F101818981413E7444416180000008108020B8D2C508072D061EE07090C24404
|
||||||
|
3108922C322408901F4F7FECD8B14408C11C0F121440701087888136289C40B1
|
||||||
|
0103411D213E48902836E4021A037D84C071C323C80F2228604812B743479028
|
||||||
|
3C644070E1C8411B19281418108080051A7C11B298C0B032DCCA01010021F904
|
||||||
|
0100004B002C000000001000100087296B21296B29297329317B293973313984
|
||||||
|
31398439427342428439428C394294394A8C424A94424A9C42528C4A52944A52
|
||||||
|
9C4A529C5252A54A5A94525A9C525AA552638C5A638C6363946363A55A63AD5A
|
||||||
|
6BAD6373946B73B56373B56B73BD6B7B9C7B7BBD6B7BBD737BBD7B7BC66B7BC6
|
||||||
|
7384A58484BD7B84C67B84C6848CAD848CAD8C8CB5848CB58C8CC6848CCE8494
|
||||||
|
AD8C94BD9494CE8494CE8C9CB59C9CBD9C9CC6949CCE949CD694A5CE9CA5D69C
|
||||||
|
ADC6ADADCEA5ADCEADADD6A5B5CEADB5CEB5B5D6B5B5DEADB5DEB5BDD6B5BDDE
|
||||||
|
B5BDDEBDCEDECEDEEFDEE7EFE7EFF7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08AD0097081C389007C1830833B040B844
|
||||||
|
C990141A1A30484021828A83485C84403163860B1728442C58315009C81B1F41
|
||||||
|
9E10F101818981413E7444416180000008108020B8D2C508072D061EE07090C2
|
||||||
|
44043108922C322408901F4F7FECD8B14408C11C0F121440701087888136289C
|
||||||
|
40B10103411D213E48902836E4021A037D84C071C323C80F2228604812B74347
|
||||||
|
90283C644070E1C8411B19281418108080051A7C11B298C0B032DCCA0101003B}
|
||||||
|
Transparent = True
|
||||||
|
end
|
||||||
|
object btnRelease: TButton
|
||||||
|
Left = 16
|
||||||
|
Top = 73
|
||||||
|
Width = 260
|
||||||
|
Height = 25
|
||||||
|
Anchors = [akLeft, akRight, akBottom]
|
||||||
|
Caption = 'Download new release'
|
||||||
|
ModalResult = 1
|
||||||
|
TabOrder = 0
|
||||||
|
OnClick = btnReleaseClick
|
||||||
|
end
|
||||||
|
object btnBuild: TButton
|
||||||
|
Left = 16
|
||||||
|
Top = 104
|
||||||
|
Width = 260
|
||||||
|
Height = 25
|
||||||
|
Anchors = [akLeft, akRight, akBottom]
|
||||||
|
Caption = 'Download nightly build'
|
||||||
|
ModalResult = 1
|
||||||
|
TabOrder = 1
|
||||||
|
OnClick = btnBuildClick
|
||||||
|
end
|
||||||
|
object btnCancel: TButton
|
||||||
|
Left = 16
|
||||||
|
Top = 135
|
||||||
|
Width = 260
|
||||||
|
Height = 25
|
||||||
|
Anchors = [akLeft, akRight, akBottom]
|
||||||
|
Cancel = True
|
||||||
|
Caption = 'Cancel'
|
||||||
|
Default = True
|
||||||
|
ModalResult = 2
|
||||||
|
TabOrder = 2
|
||||||
|
end
|
||||||
|
end
|
150
source/updatecheck.pas
Normal file
150
source/updatecheck.pas
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
unit updatecheck;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Windows, Messages, SysUtils, Classes, Forms,
|
||||||
|
Dialogs, StdCtrls, ExtActns, IniFiles, Controls, ExtCtrls, GIFImg;
|
||||||
|
|
||||||
|
type
|
||||||
|
TfrmUpdateCheck = class(TForm)
|
||||||
|
btnRelease: TButton;
|
||||||
|
btnBuild: TButton;
|
||||||
|
lblStatus: TLabel;
|
||||||
|
btnCancel: TButton;
|
||||||
|
Image1: TImage;
|
||||||
|
procedure btnBuildClick(Sender: TObject);
|
||||||
|
procedure btnReleaseClick(Sender: TObject);
|
||||||
|
procedure FormShow(Sender: TObject);
|
||||||
|
private
|
||||||
|
{ Private declarations }
|
||||||
|
d : TDownLoadURL;
|
||||||
|
ReleaseURL, BuildURL : String;
|
||||||
|
procedure Status(txt: String);
|
||||||
|
procedure ReadCheckFile;
|
||||||
|
public
|
||||||
|
{ Public declarations }
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses helpers, main;
|
||||||
|
|
||||||
|
{$R *.dfm}
|
||||||
|
|
||||||
|
{$I const.inc}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
Update status text
|
||||||
|
}
|
||||||
|
procedure TfrmUpdateCheck.Status(txt: String);
|
||||||
|
begin
|
||||||
|
lblStatus.Caption := txt;
|
||||||
|
Repaint;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
Download check file
|
||||||
|
}
|
||||||
|
procedure TfrmUpdateCheck.FormShow(Sender: TObject);
|
||||||
|
var
|
||||||
|
TempPath: array[0..MAX_PATH] of Char;
|
||||||
|
begin
|
||||||
|
Status('Initiating ... ');
|
||||||
|
Caption := 'Check for '+APPNAME+' updates ...';
|
||||||
|
|
||||||
|
// Detect temp directory
|
||||||
|
GetTempPath(MAX_PATH, @TempPath);
|
||||||
|
|
||||||
|
// Initially hide download buttons
|
||||||
|
btnRelease.Enabled := False;
|
||||||
|
btnBuild.Enabled := False;
|
||||||
|
btnCancel.Enabled := False;
|
||||||
|
|
||||||
|
d := TDownLoadURL.Create(Self);
|
||||||
|
d.URL := APPDOMAIN + 'updatecheck.php';
|
||||||
|
// Todo: find a better temp directory
|
||||||
|
d.Filename := StrPas(TempPath) + APPNAME + '_updatecheck.ini';
|
||||||
|
Screen.Cursor := crHourglass;
|
||||||
|
Status('Downloading check file '+d.URL+' ... ');
|
||||||
|
try
|
||||||
|
// Download the check file
|
||||||
|
d.ExecuteTarget(nil);
|
||||||
|
ReadCheckFile;
|
||||||
|
DeleteFile(d.Filename);
|
||||||
|
finally
|
||||||
|
FreeAndNil(d);
|
||||||
|
Screen.Cursor := crDefault;
|
||||||
|
btnCancel.Enabled := True;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
Parse check file for updated version + release
|
||||||
|
}
|
||||||
|
procedure TfrmUpdateCheck.ReadCheckFile;
|
||||||
|
var
|
||||||
|
Ini : TIniFile;
|
||||||
|
ReleaseVersion, BuildRevision, statustxt : String;
|
||||||
|
const
|
||||||
|
INISECT_RELEASE = 'Release';
|
||||||
|
INISECT_BUILD = 'Build';
|
||||||
|
begin
|
||||||
|
Status('Reading check file ...');
|
||||||
|
statustxt := 'No update available.';
|
||||||
|
|
||||||
|
// Read [Release] section of check file
|
||||||
|
Ini := TIniFile.Create(d.Filename);
|
||||||
|
if Ini.SectionExists(INISECT_RELEASE) then begin
|
||||||
|
ReleaseVersion := Ini.ReadString(INISECT_RELEASE, 'Version', 'unknown');
|
||||||
|
ReleaseURL := Ini.ReadString(INISECT_RELEASE, 'URL', '');
|
||||||
|
statustxt := 'Release available: Version ' + ReleaseVersion + ' (yours: '+AppVersion+')' + CRLF;
|
||||||
|
btnRelease.Caption := 'Download version ' + ReleaseVersion;
|
||||||
|
// Enable the download button if the current version is outdated
|
||||||
|
btnRelease.Enabled := ReleaseVersion <> AppVersion;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Read [Build] section of check file
|
||||||
|
if Ini.SectionExists(INISECT_BUILD) then begin
|
||||||
|
BuildRevision := Ini.ReadString(INISECT_BUILD, 'Revision', 'unknown');
|
||||||
|
BuildURL := Ini.ReadString(INISECT_BUILD, 'URL', '');
|
||||||
|
statustxt := statustxt + 'Build available: Revision ' + BuildRevision + ' (yours: '+AppRevision+')' + CRLF;
|
||||||
|
btnBuild.Caption := 'Download build ' + BuildRevision;
|
||||||
|
// A new release should have priority over a new nightly build.
|
||||||
|
// So the user should not be able to download a newer build here
|
||||||
|
// before having installed the new release.
|
||||||
|
btnBuild.Enabled := (BuildRevision <> AppRevision) and (not btnRelease.Enabled);
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Display summary
|
||||||
|
Status(statustxt);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
Download release installer via web browser
|
||||||
|
}
|
||||||
|
procedure TfrmUpdateCheck.btnReleaseClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ShellExec(ReleaseURL);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
Download latest build via web browser
|
||||||
|
TODO: internally replace heidisql.exe:
|
||||||
|
1. create a batch file which replaces heidisql.exe
|
||||||
|
2. quit Heidi
|
||||||
|
3. start the batch
|
||||||
|
4. start Heidi
|
||||||
|
}
|
||||||
|
procedure TfrmUpdateCheck.btnBuildClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ShellExec(ReleaseURL);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
Reference in New Issue
Block a user