selfprivacy.org.app/lib/utils/platform_adapter.dart
NaiJi 68ed776785 feat(platform): Implement custom platform-dependent storage path definition
- Create new PlatformAdapter util and hide i/o there
- Move other usages of Platform class in PlatformAdapter
2023-07-20 17:06:17 -03:00

60 lines
1.9 KiB
Dart

import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/foundation.dart';
/// SelfPrivacy wrapper for Platform information provider.
class PlatformAdapter {
/// Persistent storage directory for data files.
static String get storagePath {
String path = '.';
if (Platform.isLinux) {
// https://wiki.archlinux.org/title/XDG_Base_Directory
path = Platform.environment['XDG_DATA_HOME'] ?? '.';
if (path == '.') {
final String home = Platform.environment['HOME'] ?? '.';
path += '$home/.local/share';
}
path += '/selfprivacy';
}
return path;
}
/// Running operation environment.
static Future<String> get deviceName async {
final DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
if (kIsWeb) {
return deviceInfo.webBrowserInfo.then(
(final WebBrowserInfo value) =>
'${value.browserName} ${value.platform}',
);
} else {
if (Platform.isAndroid) {
return deviceInfo.androidInfo.then(
(final AndroidDeviceInfo value) =>
'${value.model} ${value.version.release}',
);
} else if (Platform.isIOS) {
return deviceInfo.iosInfo.then(
(final IosDeviceInfo value) =>
'${value.utsname.machine} ${value.systemName} ${value.systemVersion}',
);
} else if (Platform.isLinux) {
return deviceInfo.linuxInfo
.then((final LinuxDeviceInfo value) => value.prettyName);
} else if (Platform.isMacOS) {
return deviceInfo.macOsInfo.then(
(final MacOsDeviceInfo value) =>
'${value.hostName} ${value.computerName}',
);
} else if (Platform.isWindows) {
return deviceInfo.windowsInfo
.then((final WindowsDeviceInfo value) => value.computerName);
}
}
return 'Unidentified';
}
}