| 277 | } |
| 278 | |
| 279 | export function getShellVersion(str) { |
| 280 | let versionParts = str.split("."); |
| 281 | let versionNumber = 0; |
| 282 | |
| 283 | if (versionParts.length < 2) { |
| 284 | log("Invalid GNOME Shell version '" + str + "'"); |
| 285 | return 0; |
| 286 | } |
| 287 | |
| 288 | let major = Number(versionParts[0]); |
| 289 | |
| 290 | if (major >= 40) { |
| 291 | // GNOME 40 and newer versioning scheme |
| 292 | // https://discourse.gnome.org/t/new-gnome-versioning-scheme/4235 |
| 293 | // must be > 3.x.y with x <= 38 |
| 294 | // For 40.x, the 3rd digit is ignored |
| 295 | // 40.alpha -> 33997 |
| 296 | // 41.beta -> 34098 |
| 297 | // 41.rc -> 34099 |
| 298 | // 41.0 -> 34100 |
| 299 | // 40.1 -> 34001 |
| 300 | // 40.1.1 -> 34001 |
| 301 | let testReleases = new Map([["alpha", -3], ["beta", -2], ["rc", -1]]); |
| 302 | let minor = testReleases.get(versionParts[1]); |
| 303 | let major = Number(versionParts[0]); |
| 304 | |
| 305 | if (typeof minor === "undefined") |
| 306 | minor = Number(versionParts[1]); |
| 307 | |
| 308 | if (major >= 40) |
| 309 | versionNumber = 30000 + major * 100 + minor; |
| 310 | |
| 311 | } else if (versionParts.length === 3 && versionParts[0] === "3") { |
| 312 | versionNumber = versionParts.map(Number).reduce(function(previousValue, currentValue) { |
| 313 | return 100 * previousValue + currentValue; |
| 314 | }); |
| 315 | }; |
| 316 | |
| 317 | if (versionNumber === 0) { |
| 318 | log("Unsupported GNOME Shell version '" + str + "'"); |
| 319 | return 0; |
| 320 | } |
| 321 | |
| 322 | return versionNumber; |
| 323 | } |
| 324 | |
| 325 | export const SHELL_VERSION = getShellVersion(Config.PACKAGE_VERSION); |
| 326 | const SHELL_3_32 = getShellVersion("3.32.0"); |