mirror of
https://github.com/keymanapp/keyman.git
synced 2026-10-19 04:17:39 +00:00
This change check the correct member of the data structure for the keyman bundle install file. It also uses a more simple string match for the file extension.
82 lines
2.1 KiB
ObjectPascal
82 lines
2.1 KiB
ObjectPascal
unit Keyman.System.UpdateCheckStorage;
|
|
|
|
interface
|
|
|
|
uses
|
|
Keyman.System.UpdateCheckResponse;
|
|
|
|
type
|
|
TUpdateCheckStorage = class sealed
|
|
private
|
|
class function MetadataFilename: string; static;
|
|
public
|
|
class function HasUpdates: Boolean; static;
|
|
class function LoadUpdateCacheData(var data: TUpdateCheckResponse): Boolean; static;
|
|
class procedure SaveUpdateCacheData(const data: TUpdateCheckResponse); static;
|
|
class function HasKeyboardPackages(const data: TUpdateCheckResponse): Boolean; static;
|
|
class function HasKeymanInstallFile(const data: TUpdateCheckResponse): Boolean; static;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
System.SysUtils,
|
|
System.RegularExpressions,
|
|
|
|
KeymanPaths,
|
|
KeymanVersion;
|
|
|
|
{ TUpdateCheckStorage }
|
|
|
|
class function TUpdateCheckStorage.MetadataFilename: string;
|
|
begin
|
|
Result := TKeymanPaths.KeymanUpdateCachePath(TKeymanPaths.S_UpdateCache_Metadata);
|
|
end;
|
|
|
|
class procedure TUpdateCheckStorage.SaveUpdateCacheData(
|
|
const data: TUpdateCheckResponse);
|
|
begin
|
|
ForceDirectories(TKeymanPaths.KeymanUpdateCachePath);
|
|
data.SaveToFile(MetadataFilename);
|
|
end;
|
|
|
|
class function TUpdateCheckStorage.HasUpdates: Boolean;
|
|
begin
|
|
Result := FileExists(MetadataFilename);
|
|
end;
|
|
|
|
class function TUpdateCheckStorage.LoadUpdateCacheData(var data: TUpdateCheckResponse): Boolean;
|
|
begin
|
|
Result :=
|
|
HasUpdates and
|
|
data.LoadFromFile(MetadataFilename, 'bundle', CKeymanVersionInfo.Version);
|
|
end;
|
|
|
|
class function TUpdateCheckStorage.HasKeyboardPackages(const data: TUpdateCheckResponse): Boolean;
|
|
var
|
|
i : Integer;
|
|
fileName : string;
|
|
KeyboardRegex: TRegEx;
|
|
begin
|
|
Result := False;
|
|
KeyboardRegex := TRegEx.Create('\.k..$');
|
|
for i := 0 to High(data.Packages) do
|
|
begin
|
|
fileName := data.Packages[i].FileName;
|
|
if KeyboardRegex.IsMatch(fileName) then
|
|
Result := True;
|
|
end;
|
|
end;
|
|
|
|
class function TUpdateCheckStorage.HasKeymanInstallFile(const data: TUpdateCheckResponse): Boolean;
|
|
var
|
|
fileExtension: string;
|
|
begin
|
|
fileExtension := LowerCase(ExtractFileExt(data.FileName));
|
|
if fileExtension = '.exe' then
|
|
Result := True
|
|
else
|
|
Result := False
|
|
end;
|
|
|
|
end.
|