📄 jvprogramversioncheck.pas
字号:
if Result = nil then
Result := CurrentProgramVersion[I]
else
if Assigned(CurrentProgramVersion[I]) and
(CompareVersionNumbers(Result.ProgramVersion, CurrentProgramVersion[I].ProgramVersion) > 0) then
Result := CurrentProgramVersion[I];
Inc(I);
end;
end;
function TJvProgramVersionHistory.GetProgramVersion(Index: Integer): TJvProgramVersionInfo;
begin
if Assigned(Objects[Index]) and (Objects[Index] is TJvProgramVersionInfo) then
Result := TJvProgramVersionInfo(Objects[Index])
else
Result := nil;
end;
function TJvProgramVersionHistory.SearchCurrentProgramVersion(
AProgramReleaseType: TJvProgramReleaseType): TJvProgramVersionInfo;
var
I: Integer;
begin
Result := nil;
for I := 0 to Count - 1 do
if Assigned(ProgramVersion[I]) then
if ProgramVersion[I].ProgramReleaseType = AProgramReleaseType then
if Result = nil then
Result := ProgramVersion[I]
else
if CompareVersionNumbers(Result.ProgramVersion, ProgramVersion[I].ProgramVersion) = 1 then
Result := ProgramVersion[I];
end;
function TJvProgramVersionHistory.GetCurrentProgramVersion(Index: TJvProgramReleaseType): TJvProgramVersionInfo;
begin
Result := FCurrentProgramVersion[Index];
end;
function TJvProgramVersionHistory.CreateObject: TObject;
begin
Result := TJvProgramVersionInfo.Create(Self);
end;
function TJvProgramVersionHistory.CreateItemList: TStringList;
begin
Result := TJvProgramVersionsStringList.Create;
end;
function TJvProgramVersionHistory.GetCurrentProductionProgramVersion: string;
begin
if Assigned(CurrentProgramVersion[prtProduction]) then
Result := CurrentProgramVersion[prtProduction].ProgramVersion
else
Result := '';
end;
function TJvProgramVersionHistory.GetCurrentBetaProgramVersion: string;
begin
if Assigned(CurrentProgramVersion[prtBeta]) then
Result := CurrentProgramVersion[prtBeta].ProgramVersion
else
Result := '';
end;
function TJvProgramVersionHistory.GetCurrentAlphaProgramVersion: string;
begin
if Assigned(CurrentProgramVersion[prtAlpha]) then
Result := CurrentProgramVersion[prtAlpha].ProgramVersion
else
Result := '';
end;
function TJvProgramVersionHistory.GetVersionsDescription(const AFromVersion, AToVersion: string): string;
var
I: Integer;
begin
Result := '';
for I := 0 to Count - 1 do
if (CompareVersionNumbers(AFromVersion, ProgramVersion[I].ProgramVersion) >= 0) and
(CompareVersionNumbers(AToVersion, ProgramVersion[I].ProgramVersion) <= 0) then
begin
Result := Result + ProgramVersion[I].ProgramVersionReleaseType;
if ProgramVersion[I].ProgramReleaseDate > 0 then
Result := Result + ' - ' + DateTimeToStr(ProgramVersion[I].ProgramReleaseDate);
if ProgramVersion[I].VersionDescription.Count > 0 then
Result := Result + AnsiLineBreak + ProgramVersion[I].VersionDescription.Text;
Result := Result + AnsiLineBreak+AnsiLineBreak;
end;
end;
//=== { TJvProgramVersionCustomLocation } ====================================
constructor TJvCustomProgramVersionLocation.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FDownloadThreaded := False;
FDownloadStatus := '';
IgnoreLastLoadTime := True;
IgnoreProperties.Add('DownloadThreaded');
end;
function TJvCustomProgramVersionLocation.LoadFileFromRemoteInt(
const ARemotePath, ARemoteFileName, ALocalPath, ALocalFileName: string;
ABaseThread: TJvBaseThread): string;
begin
end;
function TJvCustomProgramVersionLocation.LoadFileFromRemote(
const ARemotePath, ARemoteFileName, ALocalPath, ALocalFileName: string;
ABaseThread: TJvBaseThread): string;
var
TemporaryLocalFileName: string;
LocalFileName: string;
begin
DownloadStatus := RsPVCDownloading;
DownloadError := '';
if ALocalFileName = '' then
LocalFileName := ARemoteFileName
else
LocalFileName := ALocalFileName;
TemporaryLocalFileName := LocalFileName + RsPVTempFileNameExtension;
if FileExists(PathAppend(ALocalPath, TemporaryLocalFileName)) then
DeleteFile(PathAppend(ALocalPath, TemporaryLocalFileName));
Result := LoadFileFromRemoteInt(ARemotePath, ARemoteFileName,
ALocalPath, TemporaryLocalFileName, ABaseThread);
if FileExists(Result) then
begin
if FileExists(PathAppend(ALocalPath, LocalFileName)) then
DeleteFile(PathAppend(ALocalPath, LocalFileName));
if RenameFile(Result, PathAppend(ALocalPath, LocalFileName)) then
Result := PathAppend(ALocalPath, LocalFileName)
else
Result := '';
end;
end;
function TJvCustomProgramVersionLocation.LoadInstallerFileFromRemote(
const ARemotePath, ARemoteFileName, ALocalPath, ALocalFileName: string;
ABaseThread: TJvBaseThread): string;
begin
Result := LoadFileFromRemote(ARemotePath, ARemoteFileName,
ALocalPath, ALocalFileName, ABaseThread);
end;
function TJvCustomProgramVersionLocation.LoadVersionInfoFromRemote(
const ALocalDirectory, ALocalVersionInfoFileName: string;
ABaseThread: TJvBaseThread): string;
begin
end;
procedure TJvCustomProgramVersionLocation.SetDownloadStatus(Value: string);
begin
FDownloadStatus := Value;
// if Assigned(Owner.Owner) and
// (Owner.Owner is TJvProgramVersionCheck) then
// TJvProgramVersionCheck(Owner.Owner).SetThreadInfo(Value);
end;
//=== { TJvProgramVersionCustomFileBasedLocation } ===========================
constructor TJvCustomProgramVersionFileBasedLocation.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FVersionInfoLocationPathList := TStringList.Create;
end;
destructor TJvCustomProgramVersionFileBasedLocation.Destroy;
begin
FreeAndNil(FVersionInfoLocationPathList);
inherited Destroy;
end;
function TJvCustomProgramVersionFileBasedLocation.GetVersionInfoLocationPathList: TStrings;
begin
Result := FVersionInfoLocationPathList;
end;
procedure TJvCustomProgramVersionFileBasedLocation.SetVersionInfoLocationPathList(Value: TStrings);
begin
FVersionInfoLocationPathList.Assign(Value);
end;
function TJvCustomProgramVersionFileBasedLocation.LoadVersionInfoFromRemote(
const ALocalDirectory, ALocalVersionInfoFileName: string;
ABaseThread: TJvBaseThread): string;
var
I: Integer;
begin
for I := 0 to VersionInfoLocationPathList.Count - 1 do
begin
Result := LoadFileFromRemote(VersionInfoLocationPathList[I], VersionInfoFileName,
ALocalDirectory, ALocalVersionInfoFileName, ABaseThread);
if Result <> '' then
begin
FValidLocationPath := VersionInfoLocationPathList[I];
Exit;
end;
end;
if Result = '' then
begin
Result := LoadFileFromRemote('', VersionInfoFileName,
ALocalDirectory, ALocalVersionInfoFileName, ABaseThread);
if Result <> '' then
FValidLocationPath := '';
end;
end;
function TJvCustomProgramVersionFileBasedLocation.LoadInstallerFileFromRemote(
const ARemotePath, ARemoteFileName, ALocalPath, ALocalFileName: string;
ABaseThread: TJvBaseThread): string;
begin
Result := LoadFileFromRemote(ARemotePath, ARemoteFileName,
ALocalPath, ALocalFileName, ABaseThread);
if Result = '' then
Result := LoadFileFromRemote(ValidLocationPath + ARemotePath, ARemoteFileName,
ALocalPath, ALocalFileName, ABaseThread);
end;
//=== { TJvProgramVersionNetworkLocation } ===================================
function TJvProgramVersionNetworkLocation.LoadFileFromRemoteInt(
const ARemotePath, ARemoteFileName, ALocalPath, ALocalFileName: string;
ABaseThread: TJvBaseThread): string;
function FileExistsNoDir(AFileName: string): Boolean;
begin
Result := FileExists(AFileName) and not DirectoryExists(AFileName);
end;
begin
Result := '';
if (DirectoryExists(ALocalPath) or (ALocalPath = '')) and
(DirectoryExists(ARemotePath) or (ARemotePath = '')) then
if FileExistsNoDir(PathAppend(ARemotePath, ARemoteFileName)) then
if (ARemotePath = ALocalPath) and (ARemoteFileName = ALocalFileName) then
Result := PathAppend(ARemotePath, ARemoteFileName)
else
if FileCopy(PathAppend(ARemotePath, ARemoteFileName), PathAppend(ALocalPath, ALocalFileName), True) then
if FileExistsNoDir(PathAppend(ALocalPath, ALocalFileName)) then
Result := PathAppend(ALocalPath, ALocalFileName)
else
if FileExistsNoDir(PathAppend(ALocalPath, ARemoteFileName)) then
Result := PathAppend(ALocalPath, ARemoteFileName)
else
if FileExistsNoDir(PathAppend(ALocalPath, ExtractFileName(ARemotePath))) then
Result := PathAppend(ALocalPath, ExtractFileName(ARemotePath));
end;
//=== { TJvProgramVersionInternetLocation } ==================================
constructor TJvCustomProgramVersionInternetLocation.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FProxySettings := TJvProgramVersionProxySettings.Create;
FPasswordRequired := False;
FPort := 80;
end;
destructor TJvCustomProgramVersionInternetLocation.Destroy;
begin
FreeAndNil(FProxySettings);
inherited Destroy;
end;
//=== { TJvProgramVersionHTTPLocation } ======================================
function TJvProgramVersionHTTPLocation.LoadFileFromRemoteInt(
const ARemotePath, ARemoteFileName, ALocalPath, ALocalFileName: string;
ABaseThread: TJvBaseThread): string;
begin
Result := '';
if Assigned(FOnLoadFileFromRemote) then
Result := FOnLoadFileFromRemote(Self, ARemotePath, ARemoteFileName,
ALocalPath, ALocalFileName);
end;
//=== { TJvProgramVersionFTPLocation } =======================================
function TJvProgramVersionFTPLocation.LoadFileFromRemoteInt(
const ARemotePath, ARemoteFileName, ALocalPath, ALocalFileName: string;
ABaseThread: TJvBaseThread): string;
begin
Result := '';
if Assigned(FOnLoadFileFromRemote) then
Result := FOnLoadFileFromRemote(Self, ARemotePath, ARemoteFileName,
ALocalPath, ALocalFileName);
end;
//=== { TJvProgramVersionDatabaseLocation } ==================================
function TJvProgramVersionDatabaseLocation.LoadFileFromRemoteInt(
const ARemotePath, ARemoteFileName, ALocalPath, ALocalFileName: string;
ABaseThread: TJvBaseThread): string;
begin
Result := '';
if Assigned(FOnLoadFileFromRemote) then
Result := FOnLoadFileFromRemote(Self, ARemotePath, ARemoteFileName,
ALocalPath, ALocalFileName);
end;
function TJvProgramVersionDatabaseLocation.LoadVersionInfoFromRemote(
const ALocalDirectory, ALocalVersionInfoFileName: string;
ABaseThread: TJvBaseThread): string;
begin
Result := LoadFileFromRemote(SelectStatementVersion, '', ALocalDirectory,
ALocalVersionInfoFileName, ABaseThread);
end;
//=== { TJvProgramVersionCheck } =============================================
constructor TJvProgramVersionCheck.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FRemoteProgramVersionHistory := TJvProgramVersionHistory.Create(Self);
FRemoteProgramVersionHistory.IgnoreLastLoadTime := True;
FRemoteAppStorage := TJvAppIniFileStorage.Create(Self);
FRemoteAppStorage.Location := flCustom;
FRemoteAppStorage.ReadOnly := True;
FRemoteAppStorage.AutoReload := True;
FRemoteAppStorage.DefaultSection := SAppStorageDefaultSection;
with FRemoteAppStorage.StorageOptions do
begin
SetAsString := True;
FloatAsString := True;
DefaultIfReadConvertError := True;
DateTimeAsString := True;
end;
FRemoteProgramVersionHistory.AppStorage := FRemoteAppStorage;
FThread := TJvThread.Create(Self);
FThread.Exclusive := True;
FThread.RunOnCreate := True;
FThread.FreeOnTerminate := True;
FThreadDialog := TJvThreadAnimateDialog.Create(Self);
FThreadDialog.DialogOptions.ShowDialog := True;
FThreadDialog.DialogOptions.ShowCancelButton := True;
FThreadDialog.DialogOptions.ShowElapsedTime := True;
TJvThreadAnimateDialogOptions(FThreadDialog.DialogOptions).CommonAvi := aviCopyFile;
FThread.ThreadDialog := FThreadDialog;
DeleteBeforeStore := True;
IgnoreLastLoadTime := True;
IgnoreProperties.Add('LocalInstallerFileName');
IgnoreProperties.Add('LocalVersionInfoFileName');
IgnoreProperties.Add('RemoteAppStorage');
IgnoreProperties.Add('UserOptions');
FUserOptions := [uoCheckFrequency, uoLocalDirectory,
uoAllowedReleaseType, uoLocationType, uoLocationNetwork,
uoLocationHTTP, uoLocationFTP, uoLocationDatabase];
// FLocations:= TJvProgramVersionLocations.Create(Self);
FAllowedReleaseType := prtProduction;
FLocalInstallerFileName := '';
FLocalVersionInfoFileName := RsPVDefaultVersioninfoFileName;
FLocationType := pvltNetWork;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -