From 0f37947be1b51624a9619b5215a19756baa25ca5 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 31 May 2025 21:58:52 -0700 Subject: [PATCH] Fix iOS URL issue --- lib/preferences.dart | 59 ++++++++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/lib/preferences.dart b/lib/preferences.dart index d86e05d..9b1d763 100644 --- a/lib/preferences.dart +++ b/lib/preferences.dart @@ -39,7 +39,7 @@ class Preferences { 'low' => bg.Config.DESIRED_ACCURACY_LOW, _ => bg.Config.DESIRED_ACCURACY_MEDIUM, }, - url: instance.getString(url), + url: _formatUrl(instance.getString(url)), params: { "device_id": instance.getString(id), }, @@ -48,32 +48,43 @@ class Preferences { maxRecordsToPersist: instance.getBool(buffer) != false ? -1 : 0, logLevel: bg.Config.LOG_LEVEL_INFO, logMaxDays: 1, - locationTemplate: '''{ - "timestamp": "<%= timestamp %>", - "coords": { - "latitude": <%= latitude %>, - "longitude": <%= longitude %>, - "accuracy": <%= accuracy %>, - "speed": <%= speed %>, - "heading": <%= heading %>, - "altitude": <%= altitude %> - }, - "is_moving": <%= is_moving %>, - "odometer": <%= odometer %>, - "event": "<%= event %>", - "battery": { - "level": <%= battery.level %>, - "is_charging": <%= battery.is_charging %> - }, - "activity": { - "type": "<%= activity.type %>" - }, - "extras": {}, - "_": "&id=${instance.getString(id)}&lat=<%= latitude %>&lon=<%= longitude %>×tamp=<%= timestamp %>&" - }'''.split('\n').map((line) => line.trimLeft()).join(), + locationTemplate: _locationTemplate(), ); } + static String? _formatUrl(String? url) { + if (url == null) return null; + final uri = Uri.parse(url); + if ((uri.path.isEmpty || uri.path == '') && !url.endsWith('/')) return '$url/'; + return url; + } + + static String _locationTemplate() { + return '''{ + "timestamp": "<%= timestamp %>", + "coords": { + "latitude": <%= latitude %>, + "longitude": <%= longitude %>, + "accuracy": <%= accuracy %>, + "speed": <%= speed %>, + "heading": <%= heading %>, + "altitude": <%= altitude %> + }, + "is_moving": <%= is_moving %>, + "odometer": <%= odometer %>, + "event": "<%= event %>", + "battery": { + "level": <%= battery.level %>, + "is_charging": <%= battery.is_charging %> + }, + "activity": { + "type": "<%= activity.type %>" + }, + "extras": {}, + "_": "&id=${instance.getString(id)}&lat=<%= latitude %>&lon=<%= longitude %>×tamp=<%= timestamp %>&" + }'''.split('\n').map((line) => line.trimLeft()).join(); + } + static Future _migrate() async { final oldId = instance.getString('device_id_preference'); if (oldId != null) {