1{ lib }:
2let
3 # extractLatestVersionFromHtml :: String -> String
4 extractLatestVersionFromHtml =
5 htmlString:
6 let
7 majorMinorPatchGroup = "([0-9]+\\.[0-9]+\\.[0-9]+)";
8 splittedVersions = builtins.split "href=\"${majorMinorPatchGroup}" htmlString;
9 stableVersions = builtins.concatLists (builtins.filter (e: builtins.isList e) splittedVersions);
10 in
11 if stableVersions == [ ] then
12 abort "Failed to extract versions from html."
13 else
14 lib.last (builtins.sort builtins.lessThan stableVersions);
15
16 # getHtml :: String -> String
17 getHtml = url: builtins.readFile (builtins.fetchurl url);
18
19 # getLatestStableVersion :: String
20 getLatestStableVersion = extractLatestVersionFromHtml (
21 getHtml "https://download.documentfoundation.org/libreoffice/stable/"
22 );
23
24 # extractSha256FromHtml :: String -> String
25 extractSha256FromHtml =
26 htmlString:
27 let
28 sha256 = (builtins.match ".*([0-9a-fA-F]{64}).*" htmlString);
29 in
30 if sha256 == [ ] then abort "Failed to extract sha256 from html." else builtins.head sha256;
31
32 # getSha256 :: String -> String
33 getSha256 =
34 dmgUrl: oldVersion: newVersion:
35 extractSha256FromHtml (getHtml (getSha256Url dmgUrl oldVersion newVersion));
36
37 # getSha256Url :: String -> String -> String -> String
38 getSha256Url =
39 dmgUrl: oldVersion: newVersion:
40 (builtins.replaceStrings [ oldVersion ] [ newVersion ] dmgUrl) + ".sha256";
41
42in
43{
44 inherit
45 extractLatestVersionFromHtml
46 getHtml
47 getLatestStableVersion
48 extractSha256FromHtml
49 getSha256
50 getSha256Url
51 ;
52}