forked from fossasia/pslab-app
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathabout_us_version_resolver.dart
More file actions
80 lines (68 loc) · 2.04 KB
/
Copy pathabout_us_version_resolver.dart
File metadata and controls
80 lines (68 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import 'dart:convert';
import 'dart:io';
import 'package:package_info_plus/package_info_plus.dart';
typedef PackageInfoLoader = Future<PackageInfo> Function();
Future<String> resolveAboutUsVersion({
PackageInfoLoader? packageInfoLoader,
bool? isLinux,
String? resolvedExecutable,
}) async {
var version = "";
try {
final packageInfo = await (packageInfoLoader ?? PackageInfo.fromPlatform)();
if (packageInfo.version.isNotEmpty) {
version = packageInfo.version;
} else {
version = await _loadLinuxBundleVersion(
isLinux: isLinux,
resolvedExecutable: resolvedExecutable,
);
}
version = version.trim();
final buildNumber = packageInfo.buildNumber.trim();
if (version.isEmpty) {
return '';
}
if (buildNumber.isEmpty) {
return version;
}
return '$version+$buildNumber';
} catch (_) {
final versionFromBundle = await _loadLinuxBundleVersion(
isLinux: isLinux,
resolvedExecutable: resolvedExecutable,
);
version = versionFromBundle.isNotEmpty ? versionFromBundle : '';
}
return version;
}
Future<String> _loadLinuxBundleVersion({
bool? isLinux,
String? resolvedExecutable,
}) async {
if (!(isLinux ?? Platform.isLinux)) {
return '';
}
final executablePath = resolvedExecutable ?? Platform.resolvedExecutable;
final executableParent = Directory(executablePath).parent;
final candidatePaths = <String>[
'${executableParent.path}/data/flutter_assets/version.json',
'${executableParent.parent.path}/share/pslab/flutter_assets/version.json',
'/usr/share/pslab/flutter_assets/version.json',
];
for (final candidatePath in candidatePaths) {
final versionFile = File(candidatePath);
if (!await versionFile.exists()) {
continue;
}
try {
final jsonContent =
jsonDecode(await versionFile.readAsString()) as Map<String, dynamic>;
final version = jsonContent['version'];
if (version is String && version.isNotEmpty) {
return version;
}
} catch (_) {}
}
return '';
}