From d9e57775e5bb10e722d0043186308df05eea3296 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Thu, 2 Jun 2016 12:45:22 +0500 Subject: Show events in toast --- web/app/Application.js | 6 ++++-- web/app/controller/Root.js | 31 ++++++++++++++++++++++++++++++- web/app/model/Event.js | 40 ++++++++++++++++++++++++++++++++++++++++ web/app/store/Events.js | 25 +++++++++++++++++++++++++ web/l10n/en.json | 10 +++++++++- 5 files changed, 108 insertions(+), 4 deletions(-) create mode 100644 web/app/model/Event.js create mode 100644 web/app/store/Events.js diff --git a/web/app/Application.js b/web/app/Application.js index 69ce8f891..e798a73e2 100644 --- a/web/app/Application.js +++ b/web/app/Application.js @@ -30,7 +30,8 @@ Ext.define('Traccar.Application', { 'Device', 'Position', 'Attribute', - 'Command' + 'Command', + 'Event' ], stores: [ @@ -47,7 +48,8 @@ Ext.define('Traccar.Application', { 'SpeedUnits', 'CommandTypes', 'TimeUnits', - 'Languages' + 'Languages', + 'Events' ], controllers: [ diff --git a/web/app/controller/Root.js b/web/app/controller/Root.js index bb65e0048..3e2358c8d 100644 --- a/web/app/controller/Root.js +++ b/web/app/controller/Root.js @@ -114,7 +114,7 @@ Ext.define('Traccar.controller.Root', { } } - if (data.positions) { + if (data.positions && !data.events) { array = data.positions; store = Ext.getStore('LatestPositions'); for (i = 0; i < array.length; i++) { @@ -126,6 +126,35 @@ Ext.define('Traccar.controller.Root', { } } } + + if (data.events) { + array = data.events; + store = Ext.getStore('Events'); + for (i = 0; i < array.length; i++) { + store.add(array[i]); + var text; + if (array[i].type === 'commandResult' && data.positions) { + var j; + for (j = 0; j < data.positions.length; j++) { + if (data.positions[j].id == array[i].positionId) { + text = data.positions[j].attributes.result; + break; + } + } + text = Strings.eventCommandResult + text; + } else { + var typeKey = 'event' + array[i].type.charAt(0).toUpperCase() + array[i].type.slice(1); + var text = Strings[typeKey]; + if (typeof text == "undefined") { + text = typeKey; + } + } + var device = Ext.getStore('Devices').getById(array[i].deviceId); + if (typeof device != "undefined") { + Ext.toast(text, device.getData().name); + } + } + } }; } }); diff --git a/web/app/model/Event.js b/web/app/model/Event.js new file mode 100644 index 000000000..4dd3ea7ff --- /dev/null +++ b/web/app/model/Event.js @@ -0,0 +1,40 @@ +/* + * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +Ext.define('Traccar.model.Event', { + extend: 'Ext.data.Model', + identifier: 'negative', + + fields: [{ + name: 'id', + type: 'int' + }, { + name: 'type', + type: 'string' + }, { + name: 'serverTime', + type: 'date', + dateFormat: 'c' + }, { + name: 'deviceId', + type: 'int' + }, { + name: 'positionId', + type: 'int' + }, { + name: 'attributes' + }] +}); diff --git a/web/app/store/Events.js b/web/app/store/Events.js new file mode 100644 index 000000000..f98764456 --- /dev/null +++ b/web/app/store/Events.js @@ -0,0 +1,25 @@ +/* + * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +Ext.define('Traccar.store.Events', { + extend: 'Ext.data.Store', + model: 'Traccar.model.Event', + + proxy: { + type: 'rest', + url: '/api/events' + } +}); \ No newline at end of file diff --git a/web/l10n/en.json b/web/l10n/en.json index 932cbfa78..f4bd253ea 100644 --- a/web/l10n/en.json +++ b/web/l10n/en.json @@ -97,5 +97,13 @@ "commandSosNumber": "Set SOS Number", "commandSilenceTime": "Set Silence Time", "commandSetPhonebook": "Set Phonebook", - "commandVoiceMessage": "Voice Message" + "commandVoiceMessage": "Voice Message", + "eventDeviceOnline": "Device is online", + "eventDeviceOffline": "Device is offline", + "eventDeviceMoving": "Device is moving", + "eventDeviceStopped": "Device is stopped", + "eventDeviceOverspeed": "Device exceeds the speed", + "eventCommandResult": "Command result: ", + "eventGeofenceEnter": "Device has entered geofence", + "eventGeofenceEnter": "Device has exited geofence" } \ No newline at end of file -- cgit v1.2.3