spiegel-keyman/windows/src/desktop/kmshell/main/Keyman.System.UpdateCheckStorage.pas
rc-swag dbaa7198a6 feat(windows): check correct member of data structure
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.
2025-01-13 21:59:04 +10:00

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.