diff --git a/lib/pages/webdav/webdav.dart b/lib/pages/webdav/webdav.dart index cefd038b..c9ab6447 100644 --- a/lib/pages/webdav/webdav.dart +++ b/lib/pages/webdav/webdav.dart @@ -1,8 +1,10 @@ +import 'dart:io'; import 'dart:convert'; import 'package:PiliPlus/common/widgets/pair.dart'; import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; +import 'package:device_info_plus/device_info_plus.dart'; import 'package:webdav_client/webdav_client.dart' as webdav; class WebDav { @@ -44,6 +46,34 @@ class WebDav { return Pair(first: false, second: e.toString()); } } + + Future _isPhone() async { + final deviceInfoPlugin = DeviceInfoPlugin(); + if (Platform.isAndroid) { + AndroidDeviceInfo androidInfo = await deviceInfoPlugin.androidInfo; + return androidInfo.systemFeatures.contains("android.hardware.telephony"); + } else if (Platform.isIOS) { + IosDeviceInfo iosInfo = await deviceInfoPlugin.iosInfo; + return _isIosPhone(iosInfo.utsname.machine); + } else { + return true; + } + } + bool _isIosPhone(String machine) { + if (machine.startsWith("iPhone")) { + return true; + } else if (machine.startsWith("iPad")) { + return false; + } + return true; + } + + Future _getFileName() async { + final isPhoneDevice = await _isPhone(); + return isPhoneDevice + ? 'piliplus_settings_phone.json' + : 'piliplus_settings_pad.json'; + } Future backup() async { if (_client == null) { @@ -55,7 +85,9 @@ class WebDav { } try { String data = await GStorage.exportAllSettings(); - final path = '$_webdavDirectory/piliplus_settings.json'; + final isPhoneDevice = await _isPhone(); + final fileName = await _getFileName(); + final path = '$_webdavDirectory/$fileName'; try { await _client!.remove(path); } catch (_) {} @@ -75,7 +107,9 @@ class WebDav { } } try { - final path = '$_webdavDirectory/piliplus_settings.json'; + final isPhoneDevice = await _isPhone(); + final fileName = await _getFileName(); + final path = '$_webdavDirectory/$fileName'; final data = await _client!.read(path); await GStorage.importAllSettings(utf8.decode(data)); SmartDialog.showToast('恢复成功');