@josuelmm/cordova-background-geolocation 3.0.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/README.md +114 -8
- package/RELEASE.MD +1 -1
- package/android/CDVBackgroundGeolocation/src/main/java/com/marianhello/bgloc/cordova/ConfigMapper.java +20 -0
- package/android/CDVBackgroundGeolocation/src/main/java/com/tenforwardconsulting/bgloc/cordova/BackgroundGeolocationPlugin.java +32 -2
- package/android/CDVBackgroundGeolocation/src/test/java/com/marianhello/ConfigMapperTest.java +12 -0
- package/android/common/src/main/java/com/marianhello/bgloc/BackgroundGeolocationFacade.java +24 -1
- package/android/common/src/main/java/com/marianhello/bgloc/Config.java +87 -0
- package/android/common/src/main/java/com/marianhello/bgloc/HttpPostService.java +34 -1
- package/android/common/src/main/java/com/marianhello/bgloc/data/LocationDAO.java +5 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/provider/ContentProviderLocationDAO.java +11 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationContract.java +10 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationDAO.java +24 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationDAO.java +13 -0
- package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteOpenHelper.java +13 -1
- package/android/common/src/main/java/com/marianhello/bgloc/sync/SyncAdapter.java +14 -9
- package/angular/background-geolocation.service.ts +14 -0
- package/angular/dist/background-geolocation.service.d.ts +2 -0
- package/angular/dist/esm2022/background-geolocation.service.mjs +7 -1
- package/angular/dist/fesm2022/josuelmm-cordova-background-geolocation.mjs +6 -0
- package/angular/dist/fesm2022/josuelmm-cordova-background-geolocation.mjs.map +1 -1
- package/ios/CDVBackgroundGeolocation/CDVBackgroundGeolocation.h +2 -0
- package/ios/CDVBackgroundGeolocation/CDVBackgroundGeolocation.m +16 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.h +2 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.m +22 -0
- package/ios/common/BackgroundGeolocation/MAURConfig.h +3 -0
- package/ios/common/BackgroundGeolocation/MAURConfig.m +20 -1
- package/ios/common/BackgroundGeolocation/MAURConfigurationContract.h +1 -0
- package/ios/common/BackgroundGeolocation/MAURConfigurationContract.m +1 -0
- package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.m +5 -1
- package/ios/common/BackgroundGeolocation/MAURPostLocationTask.m +4 -3
- package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.m +16 -9
- package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.h +2 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.m +20 -0
- package/package.json +3 -2
- package/plugin.xml +1 -1
- package/www/BackgroundGeolocation.d.ts +65 -0
- package/www/BackgroundGeolocation.js +12 -0
|
@@ -22,6 +22,10 @@ public final class SQLiteConfigurationContract {
|
|
|
22
22
|
public static final String COLUMN_NAME_DEBUG = "debugging";
|
|
23
23
|
public static final String COLUMN_NAME_NOTIF_TITLE = "notification_title";
|
|
24
24
|
public static final String COLUMN_NAME_NOTIF_TEXT = "notification_text";
|
|
25
|
+
public static final String COLUMN_NAME_NOTIF_SYNC_TITLE = "notification_sync_title";
|
|
26
|
+
public static final String COLUMN_NAME_NOTIF_SYNC_TEXT = "notification_sync_text";
|
|
27
|
+
public static final String COLUMN_NAME_NOTIF_SYNC_COMPLETED = "notification_sync_completed_text";
|
|
28
|
+
public static final String COLUMN_NAME_NOTIF_SYNC_FAILED = "notification_sync_failed_text";
|
|
25
29
|
public static final String COLUMN_NAME_NOTIF_ICON_LARGE = "notification_icon_large";
|
|
26
30
|
public static final String COLUMN_NAME_NOTIF_ICON_SMALL = "notification_icon_small";
|
|
27
31
|
public static final String COLUMN_NAME_NOTIF_COLOR = "notification_icon_color";
|
|
@@ -37,6 +41,7 @@ public final class SQLiteConfigurationContract {
|
|
|
37
41
|
public static final String COLUMN_NAME_URL = "url";
|
|
38
42
|
public static final String COLUMN_NAME_SYNC_URL = "sync_url";
|
|
39
43
|
public static final String COLUMN_NAME_SYNC_THRESHOLD = "sync_threshold";
|
|
44
|
+
public static final String COLUMN_NAME_SYNC_ENABLED = "sync_enabled";
|
|
40
45
|
public static final String COLUMN_NAME_HEADERS = "http_headers";
|
|
41
46
|
public static final String COLUMN_NAME_MAX_LOCATIONS = "max_locations";
|
|
42
47
|
public static final String COLUMN_NAME_TEMPLATE = "template";
|
|
@@ -50,6 +55,10 @@ public final class SQLiteConfigurationContract {
|
|
|
50
55
|
ConfigurationEntry.COLUMN_NAME_DEBUG + INTEGER_TYPE + COMMA_SEP +
|
|
51
56
|
ConfigurationEntry.COLUMN_NAME_NOTIF_TITLE + TEXT_TYPE + COMMA_SEP +
|
|
52
57
|
ConfigurationEntry.COLUMN_NAME_NOTIF_TEXT + TEXT_TYPE + COMMA_SEP +
|
|
58
|
+
ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TITLE + TEXT_TYPE + COMMA_SEP +
|
|
59
|
+
ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TEXT + TEXT_TYPE + COMMA_SEP +
|
|
60
|
+
ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_COMPLETED + TEXT_TYPE + COMMA_SEP +
|
|
61
|
+
ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_FAILED + TEXT_TYPE + COMMA_SEP +
|
|
53
62
|
ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_SMALL + TEXT_TYPE + COMMA_SEP +
|
|
54
63
|
ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_LARGE + TEXT_TYPE + COMMA_SEP +
|
|
55
64
|
ConfigurationEntry.COLUMN_NAME_NOTIF_COLOR + TEXT_TYPE + COMMA_SEP +
|
|
@@ -65,6 +74,7 @@ public final class SQLiteConfigurationContract {
|
|
|
65
74
|
ConfigurationEntry.COLUMN_NAME_URL + TEXT_TYPE + COMMA_SEP +
|
|
66
75
|
ConfigurationEntry.COLUMN_NAME_SYNC_URL + TEXT_TYPE + COMMA_SEP +
|
|
67
76
|
ConfigurationEntry.COLUMN_NAME_SYNC_THRESHOLD + INTEGER_TYPE + COMMA_SEP +
|
|
77
|
+
ConfigurationEntry.COLUMN_NAME_SYNC_ENABLED + INTEGER_TYPE + COMMA_SEP +
|
|
68
78
|
ConfigurationEntry.COLUMN_NAME_HEADERS + TEXT_TYPE + COMMA_SEP +
|
|
69
79
|
ConfigurationEntry.COLUMN_NAME_MAX_LOCATIONS + INTEGER_TYPE + COMMA_SEP +
|
|
70
80
|
ConfigurationEntry.COLUMN_NAME_TEMPLATE + TEXT_TYPE +
|
package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationDAO.java
CHANGED
|
@@ -39,6 +39,10 @@ public class SQLiteConfigurationDAO implements ConfigurationDAO {
|
|
|
39
39
|
ConfigurationEntry.COLUMN_NAME_DEBUG,
|
|
40
40
|
ConfigurationEntry.COLUMN_NAME_NOTIF_TITLE,
|
|
41
41
|
ConfigurationEntry.COLUMN_NAME_NOTIF_TEXT,
|
|
42
|
+
ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TITLE,
|
|
43
|
+
ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TEXT,
|
|
44
|
+
ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_COMPLETED,
|
|
45
|
+
ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_FAILED,
|
|
42
46
|
ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_LARGE,
|
|
43
47
|
ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_SMALL,
|
|
44
48
|
ConfigurationEntry.COLUMN_NAME_NOTIF_COLOR,
|
|
@@ -54,6 +58,7 @@ public class SQLiteConfigurationDAO implements ConfigurationDAO {
|
|
|
54
58
|
ConfigurationEntry.COLUMN_NAME_URL,
|
|
55
59
|
ConfigurationEntry.COLUMN_NAME_SYNC_URL,
|
|
56
60
|
ConfigurationEntry.COLUMN_NAME_SYNC_THRESHOLD,
|
|
61
|
+
ConfigurationEntry.COLUMN_NAME_SYNC_ENABLED,
|
|
57
62
|
ConfigurationEntry.COLUMN_NAME_HEADERS,
|
|
58
63
|
ConfigurationEntry.COLUMN_NAME_MAX_LOCATIONS,
|
|
59
64
|
ConfigurationEntry.COLUMN_NAME_TEMPLATE
|
|
@@ -105,6 +110,16 @@ public class SQLiteConfigurationDAO implements ConfigurationDAO {
|
|
|
105
110
|
config.setDebugging( (c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_DEBUG)) == 1) ? true : false );
|
|
106
111
|
config.setNotificationTitle(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_TITLE)));
|
|
107
112
|
config.setNotificationText(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_TEXT)));
|
|
113
|
+
int idxSyncTitle = c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TITLE);
|
|
114
|
+
if (idxSyncTitle >= 0) {
|
|
115
|
+
if (!c.isNull(idxSyncTitle)) config.setNotificationSyncTitle(c.getString(idxSyncTitle));
|
|
116
|
+
int idxSyncText = c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TEXT);
|
|
117
|
+
if (idxSyncText >= 0 && !c.isNull(idxSyncText)) config.setNotificationSyncText(c.getString(idxSyncText));
|
|
118
|
+
int idxSyncCompleted = c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_COMPLETED);
|
|
119
|
+
if (idxSyncCompleted >= 0 && !c.isNull(idxSyncCompleted)) config.setNotificationSyncCompletedText(c.getString(idxSyncCompleted));
|
|
120
|
+
int idxSyncFailed = c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_FAILED);
|
|
121
|
+
if (idxSyncFailed >= 0 && !c.isNull(idxSyncFailed)) config.setNotificationSyncFailedText(c.getString(idxSyncFailed));
|
|
122
|
+
}
|
|
108
123
|
config.setSmallNotificationIcon(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_SMALL)));
|
|
109
124
|
config.setLargeNotificationIcon(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_LARGE)));
|
|
110
125
|
config.setNotificationIconColor(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_NOTIF_COLOR)));
|
|
@@ -120,6 +135,10 @@ public class SQLiteConfigurationDAO implements ConfigurationDAO {
|
|
|
120
135
|
config.setUrl(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_URL)));
|
|
121
136
|
config.setSyncUrl(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_SYNC_URL)));
|
|
122
137
|
config.setSyncThreshold(c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_SYNC_THRESHOLD)));
|
|
138
|
+
int idxSyncEnabled = c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_SYNC_ENABLED);
|
|
139
|
+
if (idxSyncEnabled >= 0 && !c.isNull(idxSyncEnabled)) {
|
|
140
|
+
config.setSyncEnabled(c.getInt(idxSyncEnabled) == 1);
|
|
141
|
+
}
|
|
123
142
|
config.setHttpHeaders(new JSONObject(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_HEADERS))));
|
|
124
143
|
config.setMaxLocations(c.getInt(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_MAX_LOCATIONS)));
|
|
125
144
|
config.setTemplate(LocationTemplateFactory.fromJSONString(c.getString(c.getColumnIndex(ConfigurationEntry.COLUMN_NAME_TEMPLATE))));
|
|
@@ -136,6 +155,10 @@ public class SQLiteConfigurationDAO implements ConfigurationDAO {
|
|
|
136
155
|
values.put(ConfigurationEntry.COLUMN_NAME_DEBUG, (config.isDebugging() == true) ? 1 : 0);
|
|
137
156
|
values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_TITLE, config.getNotificationTitle());
|
|
138
157
|
values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_TEXT, config.getNotificationText());
|
|
158
|
+
values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TITLE, config.getNotificationSyncTitle());
|
|
159
|
+
values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TEXT, config.getNotificationSyncText());
|
|
160
|
+
values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_COMPLETED, config.getNotificationSyncCompletedText());
|
|
161
|
+
values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_FAILED, config.getNotificationSyncFailedText());
|
|
139
162
|
values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_SMALL, config.getSmallNotificationIcon());
|
|
140
163
|
values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_ICON_LARGE, config.getLargeNotificationIcon());
|
|
141
164
|
values.put(ConfigurationEntry.COLUMN_NAME_NOTIF_COLOR, config.getNotificationIconColor());
|
|
@@ -151,6 +174,7 @@ public class SQLiteConfigurationDAO implements ConfigurationDAO {
|
|
|
151
174
|
values.put(ConfigurationEntry.COLUMN_NAME_URL, config.getUrl());
|
|
152
175
|
values.put(ConfigurationEntry.COLUMN_NAME_SYNC_URL, config.getSyncUrl());
|
|
153
176
|
values.put(ConfigurationEntry.COLUMN_NAME_SYNC_THRESHOLD, config.getSyncThreshold());
|
|
177
|
+
values.put(ConfigurationEntry.COLUMN_NAME_SYNC_ENABLED, Boolean.TRUE.equals(config.getSyncEnabled()) ? 1 : 0);
|
|
154
178
|
values.put(ConfigurationEntry.COLUMN_NAME_HEADERS, new JSONObject(config.getHttpHeaders()).toString());
|
|
155
179
|
values.put(ConfigurationEntry.COLUMN_NAME_MAX_LOCATIONS, config.getMaxLocations());
|
|
156
180
|
values.put(ConfigurationEntry.COLUMN_NAME_TEMPLATE, config.hasTemplate() ? config.getTemplate().toString() : null);
|
package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationDAO.java
CHANGED
|
@@ -418,6 +418,19 @@ public class SQLiteLocationDAO implements LocationDAO {
|
|
|
418
418
|
return db.update(LocationEntry.TABLE_NAME, values, whereClause, whereArgs);
|
|
419
419
|
}
|
|
420
420
|
|
|
421
|
+
/**
|
|
422
|
+
* Mark all locations pending sync (SYNC_PENDING) as deleted. Clears the sync queue without sending.
|
|
423
|
+
*/
|
|
424
|
+
public int deletePendingSyncLocations() {
|
|
425
|
+
ContentValues values = new ContentValues();
|
|
426
|
+
values.put(LocationEntry.COLUMN_NAME_STATUS, BackgroundLocation.DELETED);
|
|
427
|
+
|
|
428
|
+
String whereClause = LocationEntry.COLUMN_NAME_STATUS + " = ?";
|
|
429
|
+
String[] whereArgs = { String.valueOf(BackgroundLocation.SYNC_PENDING) };
|
|
430
|
+
|
|
431
|
+
return db.update(LocationEntry.TABLE_NAME, values, whereClause, whereArgs);
|
|
432
|
+
}
|
|
433
|
+
|
|
421
434
|
private BackgroundLocation hydrate(Cursor c) {
|
|
422
435
|
BackgroundLocation l = new BackgroundLocation(c.getString(c.getColumnIndex(LocationEntry.COLUMN_NAME_PROVIDER)));
|
|
423
436
|
l.setTime(c.getLong(c.getColumnIndex(LocationEntry.COLUMN_NAME_TIME)));
|
package/android/common/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteOpenHelper.java
CHANGED
|
@@ -21,7 +21,7 @@ import static com.marianhello.bgloc.data.sqlite.SQLiteLocationContract.LocationE
|
|
|
21
21
|
public class SQLiteOpenHelper extends android.database.sqlite.SQLiteOpenHelper {
|
|
22
22
|
private static final String TAG = SQLiteOpenHelper.class.getName();
|
|
23
23
|
public static final String SQLITE_DATABASE_NAME = "cordova_bg_geolocation.db";
|
|
24
|
-
public static final int DATABASE_VERSION =
|
|
24
|
+
public static final int DATABASE_VERSION = 18;
|
|
25
25
|
|
|
26
26
|
public static final String TEXT_TYPE = " TEXT";
|
|
27
27
|
public static final String INTEGER_TYPE = " INTEGER";
|
|
@@ -120,6 +120,18 @@ public class SQLiteOpenHelper extends android.database.sqlite.SQLiteOpenHelper {
|
|
|
120
120
|
alterSql.add("UPDATE " + LocationEntry.TABLE_NAME +
|
|
121
121
|
" SET " + LocationEntry.COLUMN_NAME_VERTICAL_ACCURACY + "= -1," +
|
|
122
122
|
LocationEntry.COLUMN_NAME_HAS_VERTICAL_ACCURACY + "= 0");
|
|
123
|
+
case 16:
|
|
124
|
+
alterSql.add("ALTER TABLE " + ConfigurationEntry.TABLE_NAME +
|
|
125
|
+
" ADD COLUMN " + ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TITLE + TEXT_TYPE);
|
|
126
|
+
alterSql.add("ALTER TABLE " + ConfigurationEntry.TABLE_NAME +
|
|
127
|
+
" ADD COLUMN " + ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_TEXT + TEXT_TYPE);
|
|
128
|
+
alterSql.add("ALTER TABLE " + ConfigurationEntry.TABLE_NAME +
|
|
129
|
+
" ADD COLUMN " + ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_COMPLETED + TEXT_TYPE);
|
|
130
|
+
alterSql.add("ALTER TABLE " + ConfigurationEntry.TABLE_NAME +
|
|
131
|
+
" ADD COLUMN " + ConfigurationEntry.COLUMN_NAME_NOTIF_SYNC_FAILED + TEXT_TYPE);
|
|
132
|
+
case 17:
|
|
133
|
+
alterSql.add("ALTER TABLE " + ConfigurationEntry.TABLE_NAME +
|
|
134
|
+
" ADD COLUMN " + ConfigurationEntry.COLUMN_NAME_SYNC_ENABLED + INTEGER_TYPE);
|
|
123
135
|
|
|
124
136
|
break; // DO NOT FORGET TO MOVE DOWN BREAK ON DB UPGRADE!!!
|
|
125
137
|
default:
|
|
@@ -40,6 +40,7 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter implements HttpPost
|
|
|
40
40
|
private NotificationManager notificationManager;
|
|
41
41
|
private BatchManager batchManager;
|
|
42
42
|
private boolean notificationsEnabled = true;
|
|
43
|
+
private volatile Config currentSyncConfig;
|
|
43
44
|
|
|
44
45
|
private org.slf4j.Logger logger;
|
|
45
46
|
|
|
@@ -98,15 +99,18 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter implements HttpPost
|
|
|
98
99
|
return;
|
|
99
100
|
}
|
|
100
101
|
|
|
101
|
-
if (config == null || !config.hasValidSyncUrl()) {
|
|
102
|
+
if (config == null || !config.hasValidSyncUrl() || !Boolean.TRUE.equals(config.getSyncEnabled())) {
|
|
102
103
|
if (config == null) {
|
|
103
104
|
logger.warn("Sync skipped: no config");
|
|
105
|
+
} else if (!Boolean.TRUE.equals(config.getSyncEnabled())) {
|
|
106
|
+
logger.info("Sync skipped: sync disabled in config");
|
|
104
107
|
}
|
|
105
108
|
return;
|
|
106
109
|
}
|
|
107
110
|
|
|
108
111
|
//noinspection ConstantConditions
|
|
109
112
|
notificationsEnabled = !config.hasNotificationsEnabled() || config.getNotificationsEnabled();
|
|
113
|
+
currentSyncConfig = config;
|
|
110
114
|
|
|
111
115
|
Long batchStartMillis = System.currentTimeMillis();
|
|
112
116
|
boolean isForced = (extras != null) && extras.getBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, false);
|
|
@@ -156,8 +160,8 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter implements HttpPost
|
|
|
156
160
|
if (notificationsEnabled) {
|
|
157
161
|
builder = new NotificationCompat.Builder(getContext(), NotificationHelper.SYNC_CHANNEL_ID);
|
|
158
162
|
builder.setOngoing(true);
|
|
159
|
-
builder.setContentTitle(
|
|
160
|
-
builder.setContentText(
|
|
163
|
+
builder.setContentTitle(currentSyncConfig.getNotificationSyncTitle());
|
|
164
|
+
builder.setContentText(currentSyncConfig.getNotificationSyncText());
|
|
161
165
|
builder.setSmallIcon(android.R.drawable.ic_dialog_info);
|
|
162
166
|
notificationManager.notify(NOTIFICATION_ID, builder.build());
|
|
163
167
|
}
|
|
@@ -186,9 +190,9 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter implements HttpPost
|
|
|
186
190
|
|
|
187
191
|
if (builder != null) {
|
|
188
192
|
if (isStatusOkay) {
|
|
189
|
-
builder.setContentText(
|
|
193
|
+
builder.setContentText(currentSyncConfig.getNotificationSyncCompletedText());
|
|
190
194
|
} else {
|
|
191
|
-
builder.setContentText("
|
|
195
|
+
builder.setContentText(currentSyncConfig.getNotificationSyncFailedText() + " (HTTP " + responseCode + ")");
|
|
192
196
|
}
|
|
193
197
|
}
|
|
194
198
|
|
|
@@ -202,7 +206,7 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter implements HttpPost
|
|
|
202
206
|
logger.warn("Error uploading locations (network/IO): {}", errMsg);
|
|
203
207
|
|
|
204
208
|
if (builder != null) {
|
|
205
|
-
builder.setContentText("
|
|
209
|
+
builder.setContentText(currentSyncConfig.getNotificationSyncFailedText() + ": " + errMsg);
|
|
206
210
|
}
|
|
207
211
|
} finally {
|
|
208
212
|
logger.info("Syncing endAt: {}", System.currentTimeMillis());
|
|
@@ -230,11 +234,12 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter implements HttpPost
|
|
|
230
234
|
public void onProgress(int progress) {
|
|
231
235
|
logger.debug("Syncing progress: {} updatedAt: {}", progress, System.currentTimeMillis());
|
|
232
236
|
|
|
233
|
-
|
|
237
|
+
Config c = currentSyncConfig;
|
|
238
|
+
if (notificationsEnabled && c != null) {
|
|
234
239
|
NotificationCompat.Builder builder = new NotificationCompat.Builder(getContext(), NotificationHelper.SYNC_CHANNEL_ID);
|
|
235
240
|
builder.setOngoing(true);
|
|
236
|
-
builder.setContentTitle(
|
|
237
|
-
builder.setContentText(
|
|
241
|
+
builder.setContentTitle(c.getNotificationSyncTitle());
|
|
242
|
+
builder.setContentText(c.getNotificationSyncText());
|
|
238
243
|
builder.setSmallIcon(android.R.drawable.ic_dialog_info);
|
|
239
244
|
builder.setProgress(100, progress, false);
|
|
240
245
|
notificationManager.notify(NOTIFICATION_ID, builder.build());
|
|
@@ -154,6 +154,20 @@ export class BackgroundGeolocationService {
|
|
|
154
154
|
return this.ensurePlugin().forceSync(success, fail);
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
+
clearSync(
|
|
158
|
+
success?: () => void,
|
|
159
|
+
fail?: (error: any) => void
|
|
160
|
+
): Promise<void> {
|
|
161
|
+
return this.ensurePlugin().clearSync(success, fail);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
getPendingSyncCount(
|
|
165
|
+
success?: (count: number) => void,
|
|
166
|
+
fail?: (error: any) => void
|
|
167
|
+
): Promise<number> {
|
|
168
|
+
return this.ensurePlugin().getPendingSyncCount(success, fail);
|
|
169
|
+
}
|
|
170
|
+
|
|
157
171
|
getConfig(
|
|
158
172
|
success?: (config: any) => void,
|
|
159
173
|
fail?: (error: any) => void
|
|
@@ -43,6 +43,8 @@ export declare class BackgroundGeolocationService {
|
|
|
43
43
|
deleteAllLocations(success?: () => void, fail?: (error: any) => void): Promise<void>;
|
|
44
44
|
switchMode(modeId: number, success?: () => void, fail?: (error: any) => void): Promise<void>;
|
|
45
45
|
forceSync(success?: () => void, fail?: (error: any) => void): Promise<void>;
|
|
46
|
+
clearSync(success?: () => void, fail?: (error: any) => void): Promise<void>;
|
|
47
|
+
getPendingSyncCount(success?: (count: number) => void, fail?: (error: any) => void): Promise<number>;
|
|
46
48
|
getConfig(success?: (config: any) => void, fail?: (error: any) => void): Promise<any>;
|
|
47
49
|
getLogEntries(limit: number, fromId: number, minLevel: string, success?: (entries: any[]) => void, fail?: (error: any) => void): Promise<any[]>;
|
|
48
50
|
removeAllListeners(event?: string): void;
|
|
@@ -91,6 +91,12 @@ export class BackgroundGeolocationService {
|
|
|
91
91
|
forceSync(success, fail) {
|
|
92
92
|
return this.ensurePlugin().forceSync(success, fail);
|
|
93
93
|
}
|
|
94
|
+
clearSync(success, fail) {
|
|
95
|
+
return this.ensurePlugin().clearSync(success, fail);
|
|
96
|
+
}
|
|
97
|
+
getPendingSyncCount(success, fail) {
|
|
98
|
+
return this.ensurePlugin().getPendingSyncCount(success, fail);
|
|
99
|
+
}
|
|
94
100
|
getConfig(success, fail) {
|
|
95
101
|
return this.ensurePlugin().getConfig(success, fail);
|
|
96
102
|
}
|
|
@@ -145,4 +151,4 @@ export class BackgroundGeolocationService {
|
|
|
145
151
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BackgroundGeolocationService, decorators: [{
|
|
146
152
|
type: Injectable
|
|
147
153
|
}] });
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC1nZW9sb2NhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vYmFja2dyb3VuZC1nZW9sb2NhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBQzlELDhCQUE4QixDQUMvQixDQUFDO0FBRUY7Ozs7Ozs7Ozs7R0FVRztBQUVILE1BQU0sT0FBTyw0QkFBNEI7SUFFdkMsOERBQThEO0lBQzlELElBQVksTUFBTTtRQUNoQixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMvQyxPQUFRLE1BQWMsQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUM7SUFDdkQsQ0FBQztJQUVPLFlBQVk7UUFDbEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxNQUFNLElBQUksS0FBSyxDQUNiLHdJQUF3SSxDQUN6SSxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFZLEVBQUUsT0FBb0IsRUFBRSxJQUF5QjtRQUNyRSxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVE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QUNMLFNBQVMsQ0FBQyxFQUF3QjtvQkFDaEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBRSxNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQTZCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDNUUsT0FBTyxFQUFFLFdBQVcsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxDQUFDO2dCQUNELFdBQVcsS0FBSyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbEMsQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBK0YsQ0FBQztRQUNuSSxPQUFPO1lBQ0wsU0FBUyxDQUFDLEVBQXdCO2dCQUNoQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN0QixPQUFPLEVBQUUsV0FBVyxLQUFLLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxDQUFDO1lBQ0QsV0FBVyxLQUFrQyxDQUFDO1NBQy9DLENBQUM7SUFDSixDQUFDO0lBRUQsb0ZBQW9GO0lBQ3BGLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO3dHQTNNVSw0QkFBNEI7NEdBQTVCLDRCQUE0Qjs7NEZBQTVCLDRCQUE0QjtrQkFEeEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogVG9rZW4gdXNlZCB0byBwcm92aWRlIEJhY2tncm91bmRHZW9sb2NhdGlvblNlcnZpY2Ugd2l0aG91dCB0cmlnZ2VyaW5nIEpJVC5cbiAqIFRoZSBtb2R1bGUgcHJvdmlkZXMgdGhpcyB0b2tlbiB3aXRoIHVzZUZhY3Rvcnk7IHRoZSBjbGFzcyBpcyBhbGlhc2VkIHZpYSB1c2VFeGlzdGluZ1xuICogc28geW91IHN0aWxsIGluamVjdCBjb25zdHJ1Y3Rvcihwcml2YXRlIGJnOiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25TZXJ2aWNlKSB7fS5cbiAqL1xuZXhwb3J0IGNvbnN0IEJBQ0tHUk9VTkRfR0VPTE9DQVRJT05fU0VSVklDRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxCYWNrZ3JvdW5kR2VvbG9jYXRpb25TZXJ2aWNlPihcbiAgJ0JhY2tncm91bmRHZW9sb2NhdGlvblNlcnZpY2UnXG4pO1xuXG4vKipcbiAqIEFuZ3VsYXIgc2VydmljZSB0aGF0IHdyYXBzIHRoZSBDb3Jkb3ZhL0NhcGFjaXRvciBCYWNrZ3JvdW5kR2VvbG9jYXRpb24gcGx1Z2luLlxuICogVXNlIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGluc3RlYWQgb2YgdGhlIGdsb2JhbCBCYWNrZ3JvdW5kR2VvbG9jYXRpb24gb2JqZWN0LlxuICpcbiAqIFRoZSBuYXRpdmUgcGx1Z2luIG11c3QgYmUgaW5zdGFsbGVkIGFuZCBhdmFpbGFibGUgKGUuZy4gYWZ0ZXIgZGV2aWNlcmVhZHkpLlxuICogVHlwZXMgKENvbmZpZ3VyZU9wdGlvbnMsIExvY2F0aW9uLCBldGMuKSBjYW4gYmUgaW1wb3J0ZWQgZnJvbVxuICogJ0Bqb3N1ZWxtbS9jb3Jkb3ZhLWJhY2tncm91bmQtZ2VvbG9jYXRpb24nLlxuICpcbiAqIFByb3ZpZGVkIHZpYSBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Nb2R1bGUgdXNpbmcgYW4gSW5qZWN0aW9uVG9rZW4gKyB1c2VGYWN0b3J5XG4gKiBzbyBBT1QgYnVpbGRzIG5ldmVyIG5lZWQgdGhlIEpJVCBjb21waWxlciBmb3IgdGhpcyBjbGFzcy5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEJhY2tncm91bmRHZW9sb2NhdGlvblNlcnZpY2Uge1xuXG4gIC8qKiBSZXR1cm5zIHRoZSBnbG9iYWwgcGx1Z2luIGluc3RhbmNlIChDb3Jkb3ZhL0NhcGFjaXRvcikuICovXG4gIHByaXZhdGUgZ2V0IHBsdWdpbigpOiBhbnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuICh3aW5kb3cgYXMgYW55KS5CYWNrZ3JvdW5kR2VvbG9jYXRpb24gfHwgbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlUGx1Z2luKCk6IGFueSB7XG4gICAgY29uc3QgcCA9IHRoaXMucGx1Z2luO1xuICAgIGlmICghcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQmFja2dyb3VuZEdlb2xvY2F0aW9uIGlzIG5vdCBhdmFpbGFibGUuIEVuc3VyZSB0aGUgcGx1Z2luIGlzIGluc3RhbGxlZCBhbmQgdGhlIGFwcCBpcyBydW5uaW5nIGluIGEgbmF0aXZlIGNvbnRleHQgKENvcmRvdmEvQ2FwYWNpdG9yKS4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfVxuXG4gIGNvbmZpZ3VyZShvcHRpb25zOiBhbnksIHN1Y2Nlc3M/OiAoKSA9PiB2b2lkLCBmYWlsPzogKGVycjogYW55KSA9PiB2b2lkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuY29uZmlndXJlKG9wdGlvbnMsIHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuc3RhcnQoKTtcbiAgfVxuXG4gIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuc3RvcCgpO1xuICB9XG5cbiAgLyoqIEluZm9ybSB0aGUgbmF0aXZlIHBsdWdpbiB0aGF0IHRoZSBiYWNrZ3JvdW5kIHRhc2sgbWF5IGNvbXBsZXRlIChpT1MpLiBDYWxsIGFmdGVyIGhhbmRsaW5nIGxvY2F0aW9uL3N0YXRpb25hcnkgaW4gdGhlIGNhbGxiYWNrLiAqL1xuICBmaW5pc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZmluaXNoKCk7XG4gIH1cblxuICAvKiogRm9yY2UgdGhlIHBsdWdpbiB0byBlbnRlciBcIm1vdmluZ1wiIG9yIFwic3RhdGlvbmFyeVwiIHN0YXRlIChpT1MpLiAqL1xuICBjaGFuZ2VQYWNlKGlzTW92aW5nOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuY2hhbmdlUGFjZShpc01vdmluZyk7XG4gIH1cblxuICBnZXRDdXJyZW50TG9jYXRpb24oXG4gICAgc3VjY2Vzcz86IChsb2NhdGlvbjogYW55KSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZCxcbiAgICBvcHRpb25zPzogYW55XG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZ2V0Q3VycmVudExvY2F0aW9uKHN1Y2Nlc3MsIGZhaWwsIG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0U3RhdGlvbmFyeUxvY2F0aW9uKFxuICAgIHN1Y2Nlc3M/OiAobG9jYXRpb246IGFueSkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5nZXRTdGF0aW9uYXJ5TG9jYXRpb24oc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBjaGVja1N0YXR1cyhcbiAgICBzdWNjZXNzPzogKHN0YXR1czogYW55KSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmNoZWNrU3RhdHVzKHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgc2hvd0FwcFNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLnNob3dBcHBTZXR0aW5ncygpO1xuICB9XG5cbiAgLyoqIE9wZW4gYXBwIHNldHRpbmdzIChhbGlhcyBmb3Igc2hvd0FwcFNldHRpbmdzKS4gKi9cbiAgb3BlblNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLm9wZW5TZXR0aW5ncygpO1xuICB9XG5cbiAgc2hvd0xvY2F0aW9uU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuc2hvd0xvY2F0aW9uU2V0dGluZ3MoKTtcbiAgfVxuXG4gIGdldFBsdWdpblZlcnNpb24oXG4gICAgc3VjY2Vzcz86ICh2ZXJzaW9uOiBzdHJpbmcpID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZ2V0UGx1Z2luVmVyc2lvbihzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIGdldExvY2F0aW9ucyhcbiAgICBzdWNjZXNzPzogKGxvY2F0aW9uczogYW55W10pID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8YW55W10+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5nZXRMb2NhdGlvbnMoc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBnZXRWYWxpZExvY2F0aW9ucyhcbiAgICBzdWNjZXNzPzogKGxvY2F0aW9uczogYW55W10pID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8YW55W10+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5nZXRWYWxpZExvY2F0aW9ucyhzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIGdldFZhbGlkTG9jYXRpb25zQW5kRGVsZXRlKFxuICAgIHN1Y2Nlc3M/OiAobG9jYXRpb25zOiBhbnlbXSkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmdldFZhbGlkTG9jYXRpb25zQW5kRGVsZXRlKHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgZGVsZXRlTG9jYXRpb24oXG4gICAgbG9jYXRpb25JZDogbnVtYmVyLFxuICAgIHN1Y2Nlc3M/OiAoKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5kZWxldGVMb2NhdGlvbihsb2NhdGlvbklkLCBzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIGRlbGV0ZUFsbExvY2F0aW9ucyhcbiAgICBzdWNjZXNzPzogKCkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZGVsZXRlQWxsTG9jYXRpb25zKHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgc3dpdGNoTW9kZShcbiAgICBtb2RlSWQ6IG51bWJlcixcbiAgICBzdWNjZXNzPzogKCkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuc3dpdGNoTW9kZShtb2RlSWQsIHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgZm9yY2VTeW5jKFxuICAgIHN1Y2Nlc3M/OiAoKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5mb3JjZVN5bmMoc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBnZXRDb25maWcoXG4gICAgc3VjY2Vzcz86IChjb25maWc6IGFueSkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5nZXRDb25maWcoc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBnZXRMb2dFbnRyaWVzKFxuICAgIGxpbWl0OiBudW1iZXIsXG4gICAgZnJvbUlkOiBudW1iZXIsXG4gICAgbWluTGV2ZWw6IHN0cmluZyxcbiAgICBzdWNjZXNzPzogKGVudHJpZXM6IGFueVtdKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZ2V0TG9nRW50cmllcyhsaW1pdCwgZnJvbUlkLCBtaW5MZXZlbCwgc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICByZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZVBsdWdpbigpLnJlbW92ZUFsbExpc3RlbmVycyhldmVudCk7XG4gIH1cblxuICBzdGFydFRhc2soXG4gICAgc3VjY2Vzcz86ICh0YXNrS2V5OiBudW1iZXIpID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuc3RhcnRUYXNrKHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgZW5kVGFzayhcbiAgICB0YXNrS2V5OiBudW1iZXIsXG4gICAgc3VjY2Vzcz86ICgpID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmVuZFRhc2sodGFza0tleSwgc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBoZWFkbGVzc1Rhc2sodGFzazogKGV2ZW50OiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZVBsdWdpbigpLmhlYWRsZXNzVGFzayh0YXNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbiBldmVudCBsaXN0ZW5lci4gQ29tcGF0aWJsZSB3aXRoIEF3ZXNvbWUtc3R5bGUgdXNhZ2U6XG4gICAqIC5vbihCYWNrZ3JvdW5kR2VvbG9jYXRpb25FdmVudHMuZXJyb3IpLnN1YnNjcmliZSgoZXJyKSA9PiAuLi4pIOKAlCByZXR1cm5zIHN1YnNjcmlwdGlvbiB3aXRoIC51bnN1YnNjcmliZSgpLlxuICAgKiAub24oJ2xvY2F0aW9uJywgKGxvYykgPT4gLi4uKSDigJQgYWxzbyBzdXBwb3J0ZWQ7IHJldHVybmVkIG9iamVjdCBoYXMgLnVuc3Vic2NyaWJlKCkuXG4gICAqL1xuICBvbihldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s/OiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHsgc3Vic2NyaWJlKGNiOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHsgdW5zdWJzY3JpYmUoKTogdm9pZCB9OyB1bnN1YnNjcmliZSgpOiB2b2lkIH0ge1xuICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuZW5zdXJlUGx1Z2luKCk7XG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHN1YiA9IHBsdWdpbi5vbihldmVudE5hbWUsIGNhbGxiYWNrKSBhcyB7IHJlbW92ZT86ICgpID0+IHZvaWQgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1YnNjcmliZShjYjogKHZhbHVlOiBhbnkpID0+IHZvaWQpIHtcbiAgICAgICAgICBjb25zdCBzID0gY2IgPyAocGx1Z2luLm9uKGV2ZW50TmFtZSwgY2IpIGFzIHsgcmVtb3ZlPzogKCkgPT4gdm9pZCB9KSA6IG51bGw7XG4gICAgICAgICAgcmV0dXJuIHsgdW5zdWJzY3JpYmUoKSB7IHM/LnJlbW92ZT8uKCk7IH0gfTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5zdWJzY3JpYmUoKSB7IHN1Yi5yZW1vdmU/LigpOyB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBjaGFubmVsID0gcGx1Z2luLm9uKGV2ZW50TmFtZSkgYXMgeyBzdWJzY3JpYmU6IChjYjogKHY6IGFueSkgPT4gdm9pZCkgPT4gdm9pZDsgdW5zdWJzY3JpYmU6IChjYjogKHY6IGFueSkgPT4gdm9pZCkgPT4gdm9pZCB9O1xuICAgIHJldHVybiB7XG4gICAgICBzdWJzY3JpYmUoY2I6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG4gICAgICAgIGNoYW5uZWwuc3Vic2NyaWJlKGNiKTtcbiAgICAgICAgcmV0dXJuIHsgdW5zdWJzY3JpYmUoKSB7IGNoYW5uZWwudW5zdWJzY3JpYmUoY2IpOyB9IH07XG4gICAgICB9LFxuICAgICAgdW5zdWJzY3JpYmUoKSB7IC8qIG5vLW9wIHdoZW4gbm8gY2FsbGJhY2sgKi8gfVxuICAgIH07XG4gIH1cblxuICAvKiogQ29udmVuaWVuY2U6IGFjY2VzcyBwbHVnaW4gY29uc3RhbnRzIChlLmcuIEFDVElWSVRZX1BST1ZJREVSLCBISUdIX0FDQ1VSQUNZKS4gKi9cbiAgZ2V0IG5hdGl2ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnBsdWdpbjtcbiAgfVxufVxuIl19
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC1nZW9sb2NhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vYmFja2dyb3VuZC1nZW9sb2NhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBQzlELDhCQUE4QixDQUMvQixDQUFDO0FBRUY7Ozs7Ozs7Ozs7R0FVRztBQUVILE1BQU0sT0FBTyw0QkFBNEI7SUFFdkMsOERBQThEO0lBQzlELElBQVksTUFBTTtRQUNoQixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMvQyxPQUFRLE1BQWMsQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUM7SUFDdkQsQ0FBQztJQUVPLFlBQVk7UUFDbEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxNQUFNLElBQUksS0FBSyxDQUNiLHdJQUF3SSxDQUN6SSxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFZLEVBQUUsT0FBb0IsRUFBRSxJQUF5QjtRQUNyRSxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVE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QkFBNEI7a0JBRHhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFRva2VuIHVzZWQgdG8gcHJvdmlkZSBCYWNrZ3JvdW5kR2VvbG9jYXRpb25TZXJ2aWNlIHdpdGhvdXQgdHJpZ2dlcmluZyBKSVQuXG4gKiBUaGUgbW9kdWxlIHByb3ZpZGVzIHRoaXMgdG9rZW4gd2l0aCB1c2VGYWN0b3J5OyB0aGUgY2xhc3MgaXMgYWxpYXNlZCB2aWEgdXNlRXhpc3RpbmdcbiAqIHNvIHlvdSBzdGlsbCBpbmplY3QgY29uc3RydWN0b3IocHJpdmF0ZSBiZzogQmFja2dyb3VuZEdlb2xvY2F0aW9uU2VydmljZSkge30uXG4gKi9cbmV4cG9ydCBjb25zdCBCQUNLR1JPVU5EX0dFT0xPQ0FUSU9OX1NFUlZJQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48QmFja2dyb3VuZEdlb2xvY2F0aW9uU2VydmljZT4oXG4gICdCYWNrZ3JvdW5kR2VvbG9jYXRpb25TZXJ2aWNlJ1xuKTtcblxuLyoqXG4gKiBBbmd1bGFyIHNlcnZpY2UgdGhhdCB3cmFwcyB0aGUgQ29yZG92YS9DYXBhY2l0b3IgQmFja2dyb3VuZEdlb2xvY2F0aW9uIHBsdWdpbi5cbiAqIFVzZSBkZXBlbmRlbmN5IGluamVjdGlvbiBpbnN0ZWFkIG9mIHRoZSBnbG9iYWwgQmFja2dyb3VuZEdlb2xvY2F0aW9uIG9iamVjdC5cbiAqXG4gKiBUaGUgbmF0aXZlIHBsdWdpbiBtdXN0IGJlIGluc3RhbGxlZCBhbmQgYXZhaWxhYmxlIChlLmcuIGFmdGVyIGRldmljZXJlYWR5KS5cbiAqIFR5cGVzIChDb25maWd1cmVPcHRpb25zLCBMb2NhdGlvbiwgZXRjLikgY2FuIGJlIGltcG9ydGVkIGZyb21cbiAqICdAam9zdWVsbW0vY29yZG92YS1iYWNrZ3JvdW5kLWdlb2xvY2F0aW9uJy5cbiAqXG4gKiBQcm92aWRlZCB2aWEgQmFja2dyb3VuZEdlb2xvY2F0aW9uTW9kdWxlIHVzaW5nIGFuIEluamVjdGlvblRva2VuICsgdXNlRmFjdG9yeVxuICogc28gQU9UIGJ1aWxkcyBuZXZlciBuZWVkIHRoZSBKSVQgY29tcGlsZXIgZm9yIHRoaXMgY2xhc3MuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCYWNrZ3JvdW5kR2VvbG9jYXRpb25TZXJ2aWNlIHtcblxuICAvKiogUmV0dXJucyB0aGUgZ2xvYmFsIHBsdWdpbiBpbnN0YW5jZSAoQ29yZG92YS9DYXBhY2l0b3IpLiAqL1xuICBwcml2YXRlIGdldCBwbHVnaW4oKTogYW55IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAod2luZG93IGFzIGFueSkuQmFja2dyb3VuZEdlb2xvY2F0aW9uIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVBsdWdpbigpOiBhbnkge1xuICAgIGNvbnN0IHAgPSB0aGlzLnBsdWdpbjtcbiAgICBpZiAoIXApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0JhY2tncm91bmRHZW9sb2NhdGlvbiBpcyBub3QgYXZhaWxhYmxlLiBFbnN1cmUgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQgYW5kIHRoZSBhcHAgaXMgcnVubmluZyBpbiBhIG5hdGl2ZSBjb250ZXh0IChDb3Jkb3ZhL0NhcGFjaXRvcikuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBjb25maWd1cmUob3B0aW9uczogYW55LCBzdWNjZXNzPzogKCkgPT4gdm9pZCwgZmFpbD86IChlcnI6IGFueSkgPT4gdm9pZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmNvbmZpZ3VyZShvcHRpb25zLCBzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLnN0YXJ0KCk7XG4gIH1cblxuICBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLnN0b3AoKTtcbiAgfVxuXG4gIC8qKiBJbmZvcm0gdGhlIG5hdGl2ZSBwbHVnaW4gdGhhdCB0aGUgYmFja2dyb3VuZCB0YXNrIG1heSBjb21wbGV0ZSAoaU9TKS4gQ2FsbCBhZnRlciBoYW5kbGluZyBsb2NhdGlvbi9zdGF0aW9uYXJ5IGluIHRoZSBjYWxsYmFjay4gKi9cbiAgZmluaXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmZpbmlzaCgpO1xuICB9XG5cbiAgLyoqIEZvcmNlIHRoZSBwbHVnaW4gdG8gZW50ZXIgXCJtb3ZpbmdcIiBvciBcInN0YXRpb25hcnlcIiBzdGF0ZSAoaU9TKS4gKi9cbiAgY2hhbmdlUGFjZShpc01vdmluZzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmNoYW5nZVBhY2UoaXNNb3ZpbmcpO1xuICB9XG5cbiAgZ2V0Q3VycmVudExvY2F0aW9uKFxuICAgIHN1Y2Nlc3M/OiAobG9jYXRpb246IGFueSkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWQsXG4gICAgb3B0aW9ucz86IGFueVxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmdldEN1cnJlbnRMb2NhdGlvbihzdWNjZXNzLCBmYWlsLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldFN0YXRpb25hcnlMb2NhdGlvbihcbiAgICBzdWNjZXNzPzogKGxvY2F0aW9uOiBhbnkpID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZ2V0U3RhdGlvbmFyeUxvY2F0aW9uKHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgY2hlY2tTdGF0dXMoXG4gICAgc3VjY2Vzcz86IChzdGF0dXM6IGFueSkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5jaGVja1N0YXR1cyhzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIHNob3dBcHBTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5zaG93QXBwU2V0dGluZ3MoKTtcbiAgfVxuXG4gIC8qKiBPcGVuIGFwcCBzZXR0aW5ncyAoYWxpYXMgZm9yIHNob3dBcHBTZXR0aW5ncykuICovXG4gIG9wZW5TZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5vcGVuU2V0dGluZ3MoKTtcbiAgfVxuXG4gIHNob3dMb2NhdGlvblNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLnNob3dMb2NhdGlvblNldHRpbmdzKCk7XG4gIH1cblxuICBnZXRQbHVnaW5WZXJzaW9uKFxuICAgIHN1Y2Nlc3M/OiAodmVyc2lvbjogc3RyaW5nKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmdldFBsdWdpblZlcnNpb24oc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBnZXRMb2NhdGlvbnMoXG4gICAgc3VjY2Vzcz86IChsb2NhdGlvbnM6IGFueVtdKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZ2V0TG9jYXRpb25zKHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgZ2V0VmFsaWRMb2NhdGlvbnMoXG4gICAgc3VjY2Vzcz86IChsb2NhdGlvbnM6IGFueVtdKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZ2V0VmFsaWRMb2NhdGlvbnMoc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBnZXRWYWxpZExvY2F0aW9uc0FuZERlbGV0ZShcbiAgICBzdWNjZXNzPzogKGxvY2F0aW9uczogYW55W10pID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8YW55W10+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5nZXRWYWxpZExvY2F0aW9uc0FuZERlbGV0ZShzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIGRlbGV0ZUxvY2F0aW9uKFxuICAgIGxvY2F0aW9uSWQ6IG51bWJlcixcbiAgICBzdWNjZXNzPzogKCkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZGVsZXRlTG9jYXRpb24obG9jYXRpb25JZCwgc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBkZWxldGVBbGxMb2NhdGlvbnMoXG4gICAgc3VjY2Vzcz86ICgpID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmRlbGV0ZUFsbExvY2F0aW9ucyhzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIHN3aXRjaE1vZGUoXG4gICAgbW9kZUlkOiBudW1iZXIsXG4gICAgc3VjY2Vzcz86ICgpID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLnN3aXRjaE1vZGUobW9kZUlkLCBzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIGZvcmNlU3luYyhcbiAgICBzdWNjZXNzPzogKCkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZm9yY2VTeW5jKHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgY2xlYXJTeW5jKFxuICAgIHN1Y2Nlc3M/OiAoKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5jbGVhclN5bmMoc3VjY2VzcywgZmFpbCk7XG4gIH1cblxuICBnZXRQZW5kaW5nU3luY0NvdW50KFxuICAgIHN1Y2Nlc3M/OiAoY291bnQ6IG51bWJlcikgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5nZXRQZW5kaW5nU3luY0NvdW50KHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgZ2V0Q29uZmlnKFxuICAgIHN1Y2Nlc3M/OiAoY29uZmlnOiBhbnkpID0+IHZvaWQsXG4gICAgZmFpbD86IChlcnJvcjogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlUGx1Z2luKCkuZ2V0Q29uZmlnKHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgZ2V0TG9nRW50cmllcyhcbiAgICBsaW1pdDogbnVtYmVyLFxuICAgIGZyb21JZDogbnVtYmVyLFxuICAgIG1pbkxldmVsOiBzdHJpbmcsXG4gICAgc3VjY2Vzcz86IChlbnRyaWVzOiBhbnlbXSkgPT4gdm9pZCxcbiAgICBmYWlsPzogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLmdldExvZ0VudHJpZXMobGltaXQsIGZyb21JZCwgbWluTGV2ZWwsIHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVQbHVnaW4oKS5yZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQpO1xuICB9XG5cbiAgc3RhcnRUYXNrKFxuICAgIHN1Y2Nlc3M/OiAodGFza0tleTogbnVtYmVyKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVBsdWdpbigpLnN0YXJ0VGFzayhzdWNjZXNzLCBmYWlsKTtcbiAgfVxuXG4gIGVuZFRhc2soXG4gICAgdGFza0tleTogbnVtYmVyLFxuICAgIHN1Y2Nlc3M/OiAoKSA9PiB2b2lkLFxuICAgIGZhaWw/OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnN1cmVQbHVnaW4oKS5lbmRUYXNrKHRhc2tLZXksIHN1Y2Nlc3MsIGZhaWwpO1xuICB9XG5cbiAgaGVhZGxlc3NUYXNrKHRhc2s6IChldmVudDogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVQbHVnaW4oKS5oZWFkbGVzc1Rhc2sodGFzayk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYW4gZXZlbnQgbGlzdGVuZXIuIENvbXBhdGlibGUgd2l0aCBBd2Vzb21lLXN0eWxlIHVzYWdlOlxuICAgKiAub24oQmFja2dyb3VuZEdlb2xvY2F0aW9uRXZlbnRzLmVycm9yKS5zdWJzY3JpYmUoKGVycikgPT4gLi4uKSDigJQgcmV0dXJucyBzdWJzY3JpcHRpb24gd2l0aCAudW5zdWJzY3JpYmUoKS5cbiAgICogLm9uKCdsb2NhdGlvbicsIChsb2MpID0+IC4uLikg4oCUIGFsc28gc3VwcG9ydGVkOyByZXR1cm5lZCBvYmplY3QgaGFzIC51bnN1YnNjcmliZSgpLlxuICAgKi9cbiAgb24oZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrPzogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB7IHN1YnNjcmliZShjYjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB7IHVuc3Vic2NyaWJlKCk6IHZvaWQgfTsgdW5zdWJzY3JpYmUoKTogdm9pZCB9IHtcbiAgICBjb25zdCBwbHVnaW4gPSB0aGlzLmVuc3VyZVBsdWdpbigpO1xuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzdWIgPSBwbHVnaW4ub24oZXZlbnROYW1lLCBjYWxsYmFjaykgYXMgeyByZW1vdmU/OiAoKSA9PiB2b2lkIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWJzY3JpYmUoY2I6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG4gICAgICAgICAgY29uc3QgcyA9IGNiID8gKHBsdWdpbi5vbihldmVudE5hbWUsIGNiKSBhcyB7IHJlbW92ZT86ICgpID0+IHZvaWQgfSkgOiBudWxsO1xuICAgICAgICAgIHJldHVybiB7IHVuc3Vic2NyaWJlKCkgeyBzPy5yZW1vdmU/LigpOyB9IH07XG4gICAgICAgIH0sXG4gICAgICAgIHVuc3Vic2NyaWJlKCkgeyBzdWIucmVtb3ZlPy4oKTsgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgY2hhbm5lbCA9IHBsdWdpbi5vbihldmVudE5hbWUpIGFzIHsgc3Vic2NyaWJlOiAoY2I6ICh2OiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7IHVuc3Vic2NyaWJlOiAoY2I6ICh2OiBhbnkpID0+IHZvaWQpID0+IHZvaWQgfTtcbiAgICByZXR1cm4ge1xuICAgICAgc3Vic2NyaWJlKGNiOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuICAgICAgICBjaGFubmVsLnN1YnNjcmliZShjYik7XG4gICAgICAgIHJldHVybiB7IHVuc3Vic2NyaWJlKCkgeyBjaGFubmVsLnVuc3Vic2NyaWJlKGNiKTsgfSB9O1xuICAgICAgfSxcbiAgICAgIHVuc3Vic2NyaWJlKCkgeyAvKiBuby1vcCB3aGVuIG5vIGNhbGxiYWNrICovIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqIENvbnZlbmllbmNlOiBhY2Nlc3MgcGx1Z2luIGNvbnN0YW50cyAoZS5nLiBBQ1RJVklUWV9QUk9WSURFUiwgSElHSF9BQ0NVUkFDWSkuICovXG4gIGdldCBuYXRpdmUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW47XG4gIH1cbn1cbiJdfQ==
|
|
@@ -92,6 +92,12 @@ class BackgroundGeolocationService {
|
|
|
92
92
|
forceSync(success, fail) {
|
|
93
93
|
return this.ensurePlugin().forceSync(success, fail);
|
|
94
94
|
}
|
|
95
|
+
clearSync(success, fail) {
|
|
96
|
+
return this.ensurePlugin().clearSync(success, fail);
|
|
97
|
+
}
|
|
98
|
+
getPendingSyncCount(success, fail) {
|
|
99
|
+
return this.ensurePlugin().getPendingSyncCount(success, fail);
|
|
100
|
+
}
|
|
95
101
|
getConfig(success, fail) {
|
|
96
102
|
return this.ensurePlugin().getConfig(success, fail);
|
|
97
103
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"josuelmm-cordova-background-geolocation.mjs","sources":["../../background-geolocation.service.ts","../../background-geolocation.module.ts","../../background-geolocation-events.ts","../../background-geolocation-enums.ts","../../public-api.ts","../../josuelmm-cordova-background-geolocation.ts"],"sourcesContent":["import { Injectable, InjectionToken } from '@angular/core';\n\n/**\n * Token used to provide BackgroundGeolocationService without triggering JIT.\n * The module provides this token with useFactory; the class is aliased via useExisting\n * so you still inject constructor(private bg: BackgroundGeolocationService) {}.\n */\nexport const BACKGROUND_GEOLOCATION_SERVICE = new InjectionToken<BackgroundGeolocationService>(\n 'BackgroundGeolocationService'\n);\n\n/**\n * Angular service that wraps the Cordova/Capacitor BackgroundGeolocation plugin.\n * Use dependency injection instead of the global BackgroundGeolocation object.\n *\n * The native plugin must be installed and available (e.g. after deviceready).\n * Types (ConfigureOptions, Location, etc.) can be imported from\n * '@josuelmm/cordova-background-geolocation'.\n *\n * Provided via BackgroundGeolocationModule using an InjectionToken + useFactory\n * so AOT builds never need the JIT compiler for this class.\n */\n@Injectable()\nexport class BackgroundGeolocationService {\n\n /** Returns the global plugin instance (Cordova/Capacitor). */\n private get plugin(): any {\n if (typeof window === 'undefined') return null;\n return (window as any).BackgroundGeolocation || null;\n }\n\n private ensurePlugin(): any {\n const p = this.plugin;\n if (!p) {\n throw new Error(\n 'BackgroundGeolocation is not available. Ensure the plugin is installed and the app is running in a native context (Cordova/Capacitor).'\n );\n }\n return p;\n }\n\n configure(options: any, success?: () => void, fail?: (err: any) => void): Promise<void> {\n return this.ensurePlugin().configure(options, success, fail);\n }\n\n start(): Promise<void> {\n return this.ensurePlugin().start();\n }\n\n stop(): Promise<void> {\n return this.ensurePlugin().stop();\n }\n\n /** Inform the native plugin that the background task may complete (iOS). Call after handling location/stationary in the callback. */\n finish(): Promise<void> {\n return this.ensurePlugin().finish();\n }\n\n /** Force the plugin to enter \"moving\" or \"stationary\" state (iOS). */\n changePace(isMoving: boolean): Promise<void> {\n return this.ensurePlugin().changePace(isMoving);\n }\n\n getCurrentLocation(\n success?: (location: any) => void,\n fail?: (error: any) => void,\n options?: any\n ): Promise<any> {\n return this.ensurePlugin().getCurrentLocation(success, fail, options);\n }\n\n getStationaryLocation(\n success?: (location: any) => void,\n fail?: (error: any) => void\n ): Promise<any> {\n return this.ensurePlugin().getStationaryLocation(success, fail);\n }\n\n checkStatus(\n success?: (status: any) => void,\n fail?: (error: any) => void\n ): Promise<any> {\n return this.ensurePlugin().checkStatus(success, fail);\n }\n\n showAppSettings(): Promise<void> {\n return this.ensurePlugin().showAppSettings();\n }\n\n /** Open app settings (alias for showAppSettings). */\n openSettings(): Promise<void> {\n return this.ensurePlugin().openSettings();\n }\n\n showLocationSettings(): Promise<void> {\n return this.ensurePlugin().showLocationSettings();\n }\n\n getPluginVersion(\n success?: (version: string) => void,\n fail?: (error: any) => void\n ): Promise<string> {\n return this.ensurePlugin().getPluginVersion(success, fail);\n }\n\n getLocations(\n success?: (locations: any[]) => void,\n fail?: (error: any) => void\n ): Promise<any[]> {\n return this.ensurePlugin().getLocations(success, fail);\n }\n\n getValidLocations(\n success?: (locations: any[]) => void,\n fail?: (error: any) => void\n ): Promise<any[]> {\n return this.ensurePlugin().getValidLocations(success, fail);\n }\n\n getValidLocationsAndDelete(\n success?: (locations: any[]) => void,\n fail?: (error: any) => void\n ): Promise<any[]> {\n return this.ensurePlugin().getValidLocationsAndDelete(success, fail);\n }\n\n deleteLocation(\n locationId: number,\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().deleteLocation(locationId, success, fail);\n }\n\n deleteAllLocations(\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().deleteAllLocations(success, fail);\n }\n\n switchMode(\n modeId: number,\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().switchMode(modeId, success, fail);\n }\n\n forceSync(\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().forceSync(success, fail);\n }\n\n getConfig(\n success?: (config: any) => void,\n fail?: (error: any) => void\n ): Promise<any> {\n return this.ensurePlugin().getConfig(success, fail);\n }\n\n getLogEntries(\n limit: number,\n fromId: number,\n minLevel: string,\n success?: (entries: any[]) => void,\n fail?: (error: any) => void\n ): Promise<any[]> {\n return this.ensurePlugin().getLogEntries(limit, fromId, minLevel, success, fail);\n }\n\n removeAllListeners(event?: string): void {\n this.ensurePlugin().removeAllListeners(event);\n }\n\n startTask(\n success?: (taskKey: number) => void,\n fail?: (error: any) => void\n ): Promise<number> {\n return this.ensurePlugin().startTask(success, fail);\n }\n\n endTask(\n taskKey: number,\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().endTask(taskKey, success, fail);\n }\n\n headlessTask(task: (event: any) => void): void {\n this.ensurePlugin().headlessTask(task);\n }\n\n /**\n * Register an event listener. Compatible with Awesome-style usage:\n * .on(BackgroundGeolocationEvents.error).subscribe((err) => ...) — returns subscription with .unsubscribe().\n * .on('location', (loc) => ...) — also supported; returned object has .unsubscribe().\n */\n on(eventName: string, callback?: (value: any) => void): { subscribe(cb: (value: any) => void): { unsubscribe(): void }; unsubscribe(): void } {\n const plugin = this.ensurePlugin();\n if (callback !== undefined) {\n const sub = plugin.on(eventName, callback) as { remove?: () => void };\n return {\n subscribe(cb: (value: any) => void) {\n const s = cb ? (plugin.on(eventName, cb) as { remove?: () => void }) : null;\n return { unsubscribe() { s?.remove?.(); } };\n },\n unsubscribe() { sub.remove?.(); }\n };\n }\n const channel = plugin.on(eventName) as { subscribe: (cb: (v: any) => void) => void; unsubscribe: (cb: (v: any) => void) => void };\n return {\n subscribe(cb: (value: any) => void) {\n channel.subscribe(cb);\n return { unsubscribe() { channel.unsubscribe(cb); } };\n },\n unsubscribe() { /* no-op when no callback */ }\n };\n }\n\n /** Convenience: access plugin constants (e.g. ACTIVITY_PROVIDER, HIGH_ACCURACY). */\n get native(): any {\n return this.plugin;\n }\n}\n","import { NgModule } from '@angular/core';\nimport {\n BackgroundGeolocationService,\n BACKGROUND_GEOLOCATION_SERVICE,\n} from './background-geolocation.service';\n\n/**\n * NgModule that provides BackgroundGeolocationService.\n * Uses InjectionToken + useFactory so Angular never calls getFactoryDef on the class\n * (avoids JIT requirement in AOT/production). useExisting lets you still inject\n * constructor(private bg: BackgroundGeolocationService) {}.\n *\n * Import in your AppModule or feature module:\n * imports: [BackgroundGeolocationModule]\n * Then inject: constructor(private bg: BackgroundGeolocationService) {}\n */\n@NgModule({\n providers: [\n {\n provide: BACKGROUND_GEOLOCATION_SERVICE,\n useFactory: () => new BackgroundGeolocationService(),\n },\n {\n provide: BackgroundGeolocationService,\n useExisting: BACKGROUND_GEOLOCATION_SERVICE,\n },\n ],\n})\nexport class BackgroundGeolocationModule {}\n","/**\n * Event names for BackgroundGeolocation.on(event).subscribe(...).\n * Mirrors the enum in the main package so it is available at runtime from /angular.\n */\nexport enum BackgroundGeolocationEvents {\n http_authorization = 'http_authorization',\n abort_requested = 'abort_requested',\n background = 'background',\n foreground = 'foreground',\n authorization = 'authorization',\n error = 'error',\n stop = 'stop',\n start = 'start',\n activity = 'activity',\n stationary = 'stationary',\n location = 'location',\n}\n","/**\n * Enums as runtime values for use with @josuelmm/cordova-background-geolocation/angular.\n * Matches @awesome-cordova-plugins/background-geolocation names; numeric values match this plugin (e.g. accuracy 0, 100, 1000, 10000).\n */\n\nexport enum BackgroundGeolocationLocationCode {\n PERMISSION_DENIED = 1,\n LOCATION_UNAVAILABLE = 2,\n TIMEOUT = 3,\n}\n\nexport enum BackgroundGeolocationNativeProvider {\n gps = 'gps',\n network = 'network',\n passive = 'passive',\n fused = 'fused',\n}\n\nexport enum BackgroundGeolocationLocationProvider {\n DISTANCE_FILTER_PROVIDER = 0,\n ACTIVITY_PROVIDER = 1,\n RAW_PROVIDER = 2,\n}\n\nexport enum BackgroundGeolocationAuthorizationStatus {\n NOT_AUTHORIZED = 0,\n AUTHORIZED = 1,\n AUTHORIZED_FOREGROUND = 2,\n}\n\nexport enum BackgroundGeolocationLogLevel {\n TRACE = 'TRACE',\n DEBUG = 'DEBUG',\n INFO = 'INFO',\n WARN = 'WARN',\n ERROR = 'ERROR',\n}\n\nexport enum BackgroundGeolocationProvider {\n ANDROID_DISTANCE_FILTER_PROVIDER = 0,\n ANDROID_ACTIVITY_PROVIDER = 1,\n RAW_PROVIDER = 2,\n}\n\n/** Values match this plugin: 0, 100, 1000, 10000 (not Awesome's 10, 100, 1000). */\nexport enum BackgroundGeolocationAccuracy {\n HIGH = 0,\n MEDIUM = 100,\n LOW = 1000,\n PASSIVE = 10000,\n}\n\nexport enum BackgroundGeolocationMode {\n BACKGROUND = 0,\n FOREGROUND = 1,\n}\n\nexport enum BackgroundGeolocationIOSActivity {\n AutomotiveNavigation = 'AutomotiveNavigation',\n OtherNavigation = 'OtherNavigation',\n Fitness = 'Fitness',\n Other = 'Other',\n}\n","/**\n * Public API for @josuelmm/cordova-background-geolocation/angular.\n * Entry point for ng-packagr (Ivy/AOT build).\n */\nexport {\n BackgroundGeolocationService,\n BACKGROUND_GEOLOCATION_SERVICE,\n} from './background-geolocation.service';\nexport { BackgroundGeolocationModule } from './background-geolocation.module';\nexport { BackgroundGeolocationEvents } from './background-geolocation-events';\nexport {\n BackgroundGeolocationLocationCode,\n BackgroundGeolocationNativeProvider,\n BackgroundGeolocationLocationProvider,\n BackgroundGeolocationAuthorizationStatus,\n BackgroundGeolocationLogLevel,\n BackgroundGeolocationProvider,\n BackgroundGeolocationAccuracy,\n BackgroundGeolocationMode,\n BackgroundGeolocationIOSActivity,\n} from './background-geolocation-enums';\nexport type {\n BackgroundGeolocationConfig,\n BackgroundGeolocationResponse,\n ServiceStatus,\n BackgroundGeolocationLogEntry,\n} from '../www/BackgroundGeolocation';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"josuelmm-cordova-background-geolocation.mjs","sources":["../../background-geolocation.service.ts","../../background-geolocation.module.ts","../../background-geolocation-events.ts","../../background-geolocation-enums.ts","../../public-api.ts","../../josuelmm-cordova-background-geolocation.ts"],"sourcesContent":["import { Injectable, InjectionToken } from '@angular/core';\n\n/**\n * Token used to provide BackgroundGeolocationService without triggering JIT.\n * The module provides this token with useFactory; the class is aliased via useExisting\n * so you still inject constructor(private bg: BackgroundGeolocationService) {}.\n */\nexport const BACKGROUND_GEOLOCATION_SERVICE = new InjectionToken<BackgroundGeolocationService>(\n 'BackgroundGeolocationService'\n);\n\n/**\n * Angular service that wraps the Cordova/Capacitor BackgroundGeolocation plugin.\n * Use dependency injection instead of the global BackgroundGeolocation object.\n *\n * The native plugin must be installed and available (e.g. after deviceready).\n * Types (ConfigureOptions, Location, etc.) can be imported from\n * '@josuelmm/cordova-background-geolocation'.\n *\n * Provided via BackgroundGeolocationModule using an InjectionToken + useFactory\n * so AOT builds never need the JIT compiler for this class.\n */\n@Injectable()\nexport class BackgroundGeolocationService {\n\n /** Returns the global plugin instance (Cordova/Capacitor). */\n private get plugin(): any {\n if (typeof window === 'undefined') return null;\n return (window as any).BackgroundGeolocation || null;\n }\n\n private ensurePlugin(): any {\n const p = this.plugin;\n if (!p) {\n throw new Error(\n 'BackgroundGeolocation is not available. Ensure the plugin is installed and the app is running in a native context (Cordova/Capacitor).'\n );\n }\n return p;\n }\n\n configure(options: any, success?: () => void, fail?: (err: any) => void): Promise<void> {\n return this.ensurePlugin().configure(options, success, fail);\n }\n\n start(): Promise<void> {\n return this.ensurePlugin().start();\n }\n\n stop(): Promise<void> {\n return this.ensurePlugin().stop();\n }\n\n /** Inform the native plugin that the background task may complete (iOS). Call after handling location/stationary in the callback. */\n finish(): Promise<void> {\n return this.ensurePlugin().finish();\n }\n\n /** Force the plugin to enter \"moving\" or \"stationary\" state (iOS). */\n changePace(isMoving: boolean): Promise<void> {\n return this.ensurePlugin().changePace(isMoving);\n }\n\n getCurrentLocation(\n success?: (location: any) => void,\n fail?: (error: any) => void,\n options?: any\n ): Promise<any> {\n return this.ensurePlugin().getCurrentLocation(success, fail, options);\n }\n\n getStationaryLocation(\n success?: (location: any) => void,\n fail?: (error: any) => void\n ): Promise<any> {\n return this.ensurePlugin().getStationaryLocation(success, fail);\n }\n\n checkStatus(\n success?: (status: any) => void,\n fail?: (error: any) => void\n ): Promise<any> {\n return this.ensurePlugin().checkStatus(success, fail);\n }\n\n showAppSettings(): Promise<void> {\n return this.ensurePlugin().showAppSettings();\n }\n\n /** Open app settings (alias for showAppSettings). */\n openSettings(): Promise<void> {\n return this.ensurePlugin().openSettings();\n }\n\n showLocationSettings(): Promise<void> {\n return this.ensurePlugin().showLocationSettings();\n }\n\n getPluginVersion(\n success?: (version: string) => void,\n fail?: (error: any) => void\n ): Promise<string> {\n return this.ensurePlugin().getPluginVersion(success, fail);\n }\n\n getLocations(\n success?: (locations: any[]) => void,\n fail?: (error: any) => void\n ): Promise<any[]> {\n return this.ensurePlugin().getLocations(success, fail);\n }\n\n getValidLocations(\n success?: (locations: any[]) => void,\n fail?: (error: any) => void\n ): Promise<any[]> {\n return this.ensurePlugin().getValidLocations(success, fail);\n }\n\n getValidLocationsAndDelete(\n success?: (locations: any[]) => void,\n fail?: (error: any) => void\n ): Promise<any[]> {\n return this.ensurePlugin().getValidLocationsAndDelete(success, fail);\n }\n\n deleteLocation(\n locationId: number,\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().deleteLocation(locationId, success, fail);\n }\n\n deleteAllLocations(\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().deleteAllLocations(success, fail);\n }\n\n switchMode(\n modeId: number,\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().switchMode(modeId, success, fail);\n }\n\n forceSync(\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().forceSync(success, fail);\n }\n\n clearSync(\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().clearSync(success, fail);\n }\n\n getPendingSyncCount(\n success?: (count: number) => void,\n fail?: (error: any) => void\n ): Promise<number> {\n return this.ensurePlugin().getPendingSyncCount(success, fail);\n }\n\n getConfig(\n success?: (config: any) => void,\n fail?: (error: any) => void\n ): Promise<any> {\n return this.ensurePlugin().getConfig(success, fail);\n }\n\n getLogEntries(\n limit: number,\n fromId: number,\n minLevel: string,\n success?: (entries: any[]) => void,\n fail?: (error: any) => void\n ): Promise<any[]> {\n return this.ensurePlugin().getLogEntries(limit, fromId, minLevel, success, fail);\n }\n\n removeAllListeners(event?: string): void {\n this.ensurePlugin().removeAllListeners(event);\n }\n\n startTask(\n success?: (taskKey: number) => void,\n fail?: (error: any) => void\n ): Promise<number> {\n return this.ensurePlugin().startTask(success, fail);\n }\n\n endTask(\n taskKey: number,\n success?: () => void,\n fail?: (error: any) => void\n ): Promise<void> {\n return this.ensurePlugin().endTask(taskKey, success, fail);\n }\n\n headlessTask(task: (event: any) => void): void {\n this.ensurePlugin().headlessTask(task);\n }\n\n /**\n * Register an event listener. Compatible with Awesome-style usage:\n * .on(BackgroundGeolocationEvents.error).subscribe((err) => ...) — returns subscription with .unsubscribe().\n * .on('location', (loc) => ...) — also supported; returned object has .unsubscribe().\n */\n on(eventName: string, callback?: (value: any) => void): { subscribe(cb: (value: any) => void): { unsubscribe(): void }; unsubscribe(): void } {\n const plugin = this.ensurePlugin();\n if (callback !== undefined) {\n const sub = plugin.on(eventName, callback) as { remove?: () => void };\n return {\n subscribe(cb: (value: any) => void) {\n const s = cb ? (plugin.on(eventName, cb) as { remove?: () => void }) : null;\n return { unsubscribe() { s?.remove?.(); } };\n },\n unsubscribe() { sub.remove?.(); }\n };\n }\n const channel = plugin.on(eventName) as { subscribe: (cb: (v: any) => void) => void; unsubscribe: (cb: (v: any) => void) => void };\n return {\n subscribe(cb: (value: any) => void) {\n channel.subscribe(cb);\n return { unsubscribe() { channel.unsubscribe(cb); } };\n },\n unsubscribe() { /* no-op when no callback */ }\n };\n }\n\n /** Convenience: access plugin constants (e.g. ACTIVITY_PROVIDER, HIGH_ACCURACY). */\n get native(): any {\n return this.plugin;\n }\n}\n","import { NgModule } from '@angular/core';\nimport {\n BackgroundGeolocationService,\n BACKGROUND_GEOLOCATION_SERVICE,\n} from './background-geolocation.service';\n\n/**\n * NgModule that provides BackgroundGeolocationService.\n * Uses InjectionToken + useFactory so Angular never calls getFactoryDef on the class\n * (avoids JIT requirement in AOT/production). useExisting lets you still inject\n * constructor(private bg: BackgroundGeolocationService) {}.\n *\n * Import in your AppModule or feature module:\n * imports: [BackgroundGeolocationModule]\n * Then inject: constructor(private bg: BackgroundGeolocationService) {}\n */\n@NgModule({\n providers: [\n {\n provide: BACKGROUND_GEOLOCATION_SERVICE,\n useFactory: () => new BackgroundGeolocationService(),\n },\n {\n provide: BackgroundGeolocationService,\n useExisting: BACKGROUND_GEOLOCATION_SERVICE,\n },\n ],\n})\nexport class BackgroundGeolocationModule {}\n","/**\n * Event names for BackgroundGeolocation.on(event).subscribe(...).\n * Mirrors the enum in the main package so it is available at runtime from /angular.\n */\nexport enum BackgroundGeolocationEvents {\n http_authorization = 'http_authorization',\n abort_requested = 'abort_requested',\n background = 'background',\n foreground = 'foreground',\n authorization = 'authorization',\n error = 'error',\n stop = 'stop',\n start = 'start',\n activity = 'activity',\n stationary = 'stationary',\n location = 'location',\n}\n","/**\n * Enums as runtime values for use with @josuelmm/cordova-background-geolocation/angular.\n * Matches @awesome-cordova-plugins/background-geolocation names; numeric values match this plugin (e.g. accuracy 0, 100, 1000, 10000).\n */\n\nexport enum BackgroundGeolocationLocationCode {\n PERMISSION_DENIED = 1,\n LOCATION_UNAVAILABLE = 2,\n TIMEOUT = 3,\n}\n\nexport enum BackgroundGeolocationNativeProvider {\n gps = 'gps',\n network = 'network',\n passive = 'passive',\n fused = 'fused',\n}\n\nexport enum BackgroundGeolocationLocationProvider {\n DISTANCE_FILTER_PROVIDER = 0,\n ACTIVITY_PROVIDER = 1,\n RAW_PROVIDER = 2,\n}\n\nexport enum BackgroundGeolocationAuthorizationStatus {\n NOT_AUTHORIZED = 0,\n AUTHORIZED = 1,\n AUTHORIZED_FOREGROUND = 2,\n}\n\nexport enum BackgroundGeolocationLogLevel {\n TRACE = 'TRACE',\n DEBUG = 'DEBUG',\n INFO = 'INFO',\n WARN = 'WARN',\n ERROR = 'ERROR',\n}\n\nexport enum BackgroundGeolocationProvider {\n ANDROID_DISTANCE_FILTER_PROVIDER = 0,\n ANDROID_ACTIVITY_PROVIDER = 1,\n RAW_PROVIDER = 2,\n}\n\n/** Values match this plugin: 0, 100, 1000, 10000 (not Awesome's 10, 100, 1000). */\nexport enum BackgroundGeolocationAccuracy {\n HIGH = 0,\n MEDIUM = 100,\n LOW = 1000,\n PASSIVE = 10000,\n}\n\nexport enum BackgroundGeolocationMode {\n BACKGROUND = 0,\n FOREGROUND = 1,\n}\n\nexport enum BackgroundGeolocationIOSActivity {\n AutomotiveNavigation = 'AutomotiveNavigation',\n OtherNavigation = 'OtherNavigation',\n Fitness = 'Fitness',\n Other = 'Other',\n}\n","/**\n * Public API for @josuelmm/cordova-background-geolocation/angular.\n * Entry point for ng-packagr (Ivy/AOT build).\n */\nexport {\n BackgroundGeolocationService,\n BACKGROUND_GEOLOCATION_SERVICE,\n} from './background-geolocation.service';\nexport { BackgroundGeolocationModule } from './background-geolocation.module';\nexport { BackgroundGeolocationEvents } from './background-geolocation-events';\nexport {\n BackgroundGeolocationLocationCode,\n BackgroundGeolocationNativeProvider,\n BackgroundGeolocationLocationProvider,\n BackgroundGeolocationAuthorizationStatus,\n BackgroundGeolocationLogLevel,\n BackgroundGeolocationProvider,\n BackgroundGeolocationAccuracy,\n BackgroundGeolocationMode,\n BackgroundGeolocationIOSActivity,\n} from './background-geolocation-enums';\nexport type {\n BackgroundGeolocationConfig,\n BackgroundGeolocationResponse,\n ServiceStatus,\n BackgroundGeolocationLogEntry,\n} from '../www/BackgroundGeolocation';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,8 @@
|
|
|
35
35
|
- (void) startTask:(CDVInvokedUrlCommand*)command;
|
|
36
36
|
- (void) endTask:(CDVInvokedUrlCommand*)command;
|
|
37
37
|
- (void) forceSync:(CDVInvokedUrlCommand*)command;
|
|
38
|
+
- (void) clearSync:(CDVInvokedUrlCommand*)command;
|
|
39
|
+
- (void) getPendingSyncCount:(CDVInvokedUrlCommand*)command;
|
|
38
40
|
- (void) addEventListener:(CDVInvokedUrlCommand*)command;
|
|
39
41
|
- (void) removeEventListener:(CDVInvokedUrlCommand*)command;
|
|
40
42
|
|
|
@@ -341,6 +341,22 @@ static NSString * const TAG = @"CDVBackgroundGeolocation";
|
|
|
341
341
|
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
342
342
|
}
|
|
343
343
|
|
|
344
|
+
- (void) clearSync:(CDVInvokedUrlCommand*)command
|
|
345
|
+
{
|
|
346
|
+
[facade clearSync];
|
|
347
|
+
CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
|
|
348
|
+
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
- (void) getPendingSyncCount:(CDVInvokedUrlCommand*)command
|
|
352
|
+
{
|
|
353
|
+
[self.commandDelegate runInBackground:^{
|
|
354
|
+
NSInteger count = [facade getPendingSyncCount];
|
|
355
|
+
CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsNSInteger:count];
|
|
356
|
+
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
357
|
+
}];
|
|
358
|
+
}
|
|
359
|
+
|
|
344
360
|
- (void) addEventListener:(CDVInvokedUrlCommand*)command
|
|
345
361
|
{
|
|
346
362
|
callbackId = command.callbackId;
|
|
@@ -42,6 +42,8 @@
|
|
|
42
42
|
- (NSArray*) getLogEntries:(NSInteger)limit;
|
|
43
43
|
- (NSArray*) getLogEntries:(NSInteger)limit fromLogEntryId:(NSInteger)entryId minLogLevelFromString:(NSString *)minLogLevel;
|
|
44
44
|
- (void) forceSync;
|
|
45
|
+
- (void) clearSync;
|
|
46
|
+
- (NSInteger) getPendingSyncCount;
|
|
45
47
|
- (void) onAppTerminate;
|
|
46
48
|
|
|
47
49
|
|
|
@@ -460,9 +460,31 @@ FMDBLogger *sqliteLogger;
|
|
|
460
460
|
|
|
461
461
|
- (void) forceSync
|
|
462
462
|
{
|
|
463
|
+
if (![_config syncEnabled]) {
|
|
464
|
+
DDLogDebug(@"Sync disabled in config, skipping forceSync");
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
463
467
|
[postLocationTask sync];
|
|
464
468
|
}
|
|
465
469
|
|
|
470
|
+
- (void) clearSync
|
|
471
|
+
{
|
|
472
|
+
MAURSQLiteLocationDAO *locationDAO = [MAURSQLiteLocationDAO sharedInstance];
|
|
473
|
+
NSError *error = nil;
|
|
474
|
+
if ([locationDAO deletePendingSyncLocations:&error]) {
|
|
475
|
+
DDLogDebug(@"Cleared pending sync locations");
|
|
476
|
+
} else {
|
|
477
|
+
DDLogError(@"clearSync failed: %@", error.localizedDescription);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
- (NSInteger) getPendingSyncCount
|
|
482
|
+
{
|
|
483
|
+
MAURSQLiteLocationDAO *locationDAO = [MAURSQLiteLocationDAO sharedInstance];
|
|
484
|
+
NSNumber *count = [locationDAO getLocationsForSyncCount];
|
|
485
|
+
return count != nil ? [count integerValue] : 0;
|
|
486
|
+
}
|
|
487
|
+
|
|
466
488
|
- (void) notify:(NSString*)message
|
|
467
489
|
{
|
|
468
490
|
localNotification.fireDate = [NSDate date];
|
|
@@ -29,6 +29,7 @@ enum {
|
|
|
29
29
|
@property NSString *url;
|
|
30
30
|
@property NSString *syncUrl;
|
|
31
31
|
@property NSNumber *syncThreshold;
|
|
32
|
+
@property NSNumber *syncEnabled;
|
|
32
33
|
@property NSMutableDictionary* httpHeaders;
|
|
33
34
|
@property NSNumber *_saveBatteryOnBackground;
|
|
34
35
|
@property NSNumber *maxLocations;
|
|
@@ -52,6 +53,8 @@ enum {
|
|
|
52
53
|
- (BOOL) hasSyncUrl;
|
|
53
54
|
- (BOOL) hasValidSyncUrl;
|
|
54
55
|
- (BOOL) hasSyncThreshold;
|
|
56
|
+
- (BOOL) hasSyncEnabled;
|
|
57
|
+
- (BOOL) syncEnabled;
|
|
55
58
|
- (BOOL) hasHttpHeaders;
|
|
56
59
|
- (BOOL) hasSaveBatteryOnBackground;
|
|
57
60
|
- (BOOL) hasMaxLocations;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
@implementation MAURConfig
|
|
14
14
|
|
|
15
|
-
@synthesize stationaryRadius, distanceFilter, desiredAccuracy, _debug, activityType, activitiesInterval, _stopOnTerminate, url, syncUrl, syncThreshold, httpHeaders, _saveBatteryOnBackground, maxLocations, _pauseLocationUpdates, locationProvider, _template;
|
|
15
|
+
@synthesize stationaryRadius, distanceFilter, desiredAccuracy, _debug, activityType, activitiesInterval, _stopOnTerminate, url, syncUrl, syncThreshold, syncEnabled, httpHeaders, _saveBatteryOnBackground, maxLocations, _pauseLocationUpdates, locationProvider, _template;
|
|
16
16
|
|
|
17
17
|
-(instancetype) initWithDefaults {
|
|
18
18
|
self = [super init];
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
_saveBatteryOnBackground = [NSNumber numberWithBool:NO];
|
|
32
32
|
maxLocations = [NSNumber numberWithInt:10000];
|
|
33
33
|
syncThreshold = [NSNumber numberWithInt:100];
|
|
34
|
+
syncEnabled = [NSNumber numberWithBool:YES];
|
|
34
35
|
_pauseLocationUpdates = [NSNumber numberWithBool:NO];
|
|
35
36
|
locationProvider = [NSNumber numberWithInt:DISTANCE_FILTER_PROVIDER];
|
|
36
37
|
// template =
|
|
@@ -72,6 +73,9 @@
|
|
|
72
73
|
if (isNotNull(config[@"syncThreshold"])) {
|
|
73
74
|
instance.syncThreshold = config[@"syncThreshold"];
|
|
74
75
|
}
|
|
76
|
+
if (isNotNull(config[@"sync"])) {
|
|
77
|
+
instance.syncEnabled = config[@"sync"];
|
|
78
|
+
}
|
|
75
79
|
if (config[@"httpHeaders"] != nil) {
|
|
76
80
|
instance.httpHeaders = config[@"httpHeaders"];
|
|
77
81
|
}
|
|
@@ -136,6 +140,9 @@
|
|
|
136
140
|
if ([newConfig hasSyncThreshold]) {
|
|
137
141
|
merger.syncThreshold = newConfig.syncThreshold;
|
|
138
142
|
}
|
|
143
|
+
if ([newConfig hasSyncEnabled]) {
|
|
144
|
+
merger.syncEnabled = [NSNumber numberWithBool:[newConfig syncEnabled]];
|
|
145
|
+
}
|
|
139
146
|
if ([newConfig hasHttpHeaders]) {
|
|
140
147
|
merger.httpHeaders = newConfig.httpHeaders;
|
|
141
148
|
}
|
|
@@ -172,6 +179,7 @@
|
|
|
172
179
|
copy.url = url;
|
|
173
180
|
copy.syncUrl = syncUrl;
|
|
174
181
|
copy.syncThreshold = syncThreshold;
|
|
182
|
+
copy.syncEnabled = syncEnabled;
|
|
175
183
|
copy.httpHeaders = httpHeaders;
|
|
176
184
|
copy._saveBatteryOnBackground = _saveBatteryOnBackground;
|
|
177
185
|
copy.maxLocations = maxLocations;
|
|
@@ -277,6 +285,16 @@
|
|
|
277
285
|
return syncThreshold != nil;
|
|
278
286
|
}
|
|
279
287
|
|
|
288
|
+
- (BOOL) hasSyncEnabled
|
|
289
|
+
{
|
|
290
|
+
return syncEnabled != nil;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
- (BOOL) syncEnabled
|
|
294
|
+
{
|
|
295
|
+
return syncEnabled == nil ? YES : [syncEnabled boolValue];
|
|
296
|
+
}
|
|
297
|
+
|
|
280
298
|
- (BOOL) hasHttpHeaders
|
|
281
299
|
{
|
|
282
300
|
return httpHeaders != nil;
|
|
@@ -467,6 +485,7 @@
|
|
|
467
485
|
if ([self hasDebug]) [dict setObject:self._debug forKey:@"debug"];
|
|
468
486
|
if ([self hasStopOnTerminate]) [dict setObject:self._stopOnTerminate forKey:@"stopOnTerminate"];
|
|
469
487
|
if ([self hasSyncThreshold]) [dict setObject:self.syncThreshold forKey:@"syncThreshold"];
|
|
488
|
+
if ([self hasSyncEnabled]) [dict setObject:syncEnabled forKey:@"sync"];
|
|
470
489
|
if ([self hasSaveBatteryOnBackground]) [dict setObject:self._saveBatteryOnBackground forKey:@"saveBatteryOnBackground"];
|
|
471
490
|
if ([self hasMaxLocations]) [dict setObject:self.maxLocations forKey:@"maxLocations"];
|
|
472
491
|
if ([self hasPauseLocationUpdates]) [dict setObject:self._pauseLocationUpdates forKey:@"pauseLocationUpdates"];
|