diff --git a/CHANGELOG.md b/CHANGELOG.md index 8674f19f5..065587673 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## v3.0.33 - July XX, 2021 +New features: + +- CE-1109 User can open Explorer from Arbimon Visualizer (only recordings uploaded with Uploader App) +- CE-1110 User can scale spectrogram in Visualizer to standard frequencies + Performance improvements: - CE-988 The datime_local column is removed @@ -10,10 +15,6 @@ Performance improvements: ## v3.0.32 - June 26, 2021 -New feature: - -- CE-1110 User can scale spectrogram in Visualizer to standard frequencies - Performance improvements: - CE-1065 Patten Matching list loads quicker diff --git a/DEPLOYMENT_NOTES.md b/DEPLOYMENT_NOTES.md index 328ebf0eb..eee6987e3 100644 --- a/DEPLOYMENT_NOTES.md +++ b/DEPLOYMENT_NOTES.md @@ -1,7 +1,8 @@ # Arbimon Deployment Notes -## v.3.0.32 +## v3.0.33 +- Add `explorerBaseUrl` in `config/rfcx.local.json` file - Update the "upload" lambda to not save datetime_local - Run sql migration 018-remove-datetime-local-column-from-recordings-table.sql diff --git a/app/model/recordings.js b/app/model/recordings.js index 390fbf88f..c55bc0db0 100644 --- a/app/model/recordings.js +++ b/app/model/recordings.js @@ -24,7 +24,7 @@ var audioTools = require('../utils/audiotool'); var sqlutil = require('../utils/sqlutil'); var dbpool = require('../utils/dbpool'); var tyler = require('../utils/tyler.js'); - +const rfcxConfig = config('rfcx'); const moment = require('moment'); const Projects = require('./projects'); @@ -296,6 +296,7 @@ var Recordings = { "SUBSTRING_INDEX(R.uri,'/',-1) as file, R.meta, \n"+ "S.name as site, \n"+ "S.timezone, \n"+ + "S.external_id, \n"+ "R.uri, \n"+ "R.datetime, \n"+ "R.datetime_utc, \n"+ @@ -381,6 +382,7 @@ var Recordings = { d.legacy = Recordings.isLegacy(d); d.meta = d.meta ? Recordings.__parse_meta_data(d.meta) : null; d.file = d.meta && d.meta.filename? d.meta.filename : d.file; + d.explorerUrl = d.legacy ? null : `${rfcxConfig.explorerBaseUrl}/explorer/${d.external_id}?t=${moment(d.datetime_utc).format('YYYYMMDDTHHmmssSSS')}Z`; }) return data; } diff --git a/assets/app/app/visualizer/layer-item/recording-layer.html b/assets/app/app/visualizer/layer-item/recording-layer.html index 508bfdf8a..4cb69fb89 100644 --- a/assets/app/app/visualizer/layer-item/recording-layer.html +++ b/assets/app/app/visualizer/layer-item/recording-layer.html @@ -1,6 +1,6 @@
-
+
@@ -70,6 +70,13 @@
+
+ + + +
-
+
{{ audio_player.getCurrentTime() | number:2 }} s diff --git a/assets/app/app/visualizer/layers/recordings/recordings.js b/assets/app/app/visualizer/layers/recordings/recordings.js index 534b91972..248bc4413 100644 --- a/assets/app/app/visualizer/layers/recordings/recordings.js +++ b/assets/app/app/visualizer/layers/recordings/recordings.js @@ -6,7 +6,7 @@ angular.module('a2.visualizer.layers.recordings', [ /** * @ngdoc object * @name a2.visualizer.layers.recordings.object:recordings-layer - * @description Recordings layer. + * @description Recordings layer. * adds the recordings-layer layer_type to layer_types. This layer uses * a2.visualizer.layers.recordings.controller:a2VisualizerRecordingLayerController as controller, * and requires a visobject of type recording to be selected. @@ -24,7 +24,7 @@ angular.module('a2.visualizer.layers.recordings', [ hide_visibility: true }); }) -.controller('a2VisualizerRecordingLayerController', function($scope, $modal, $location){ +.controller('a2VisualizerRecordingLayerController', function($scope, $modal, $location, $window){ this.setGain = function(gain){ $scope.audio_player.setGain(gain).then(function(){ var gain=$scope.audio_player.gain; @@ -33,6 +33,10 @@ angular.module('a2.visualizer.layers.recordings', [ }); }); }; + this.explorerUrl = function() { + if (!$scope.visobject) return null; + return $scope.visobject.explorerUrl; + }; this.openFreqFilterModal = function(){ if(!$scope.visobject){ return; @@ -60,10 +64,10 @@ angular.module('a2.visualizer.layers.recordings', [ .controller('a2VisualizerFrequencyFilterModalController', function($scope, $modalInstance, data){ $scope.recording = data.recording; $scope.max_freq = data.recording.sample_rate / 2; - + $scope.has_previous_filter = true; //!!data.filter; $scope.filter = data.filter ? angular.copy(data.filter) : {min:0, max:$scope.max_freq}; - + $scope.remove_filter = function(){ $modalInstance.close(); }; @@ -71,4 +75,4 @@ angular.module('a2.visualizer.layers.recordings', [ $modalInstance.close($scope.filter); }; }) -; \ No newline at end of file +; diff --git a/config/rfcx.json b/config/rfcx.json index 6f625b41d..eaec5ab5d 100644 --- a/config/rfcx.json +++ b/config/rfcx.json @@ -2,5 +2,6 @@ "coreAPIEnabled": true, "apiBaseUrl": "https://staging-api.rfcx.org", "mediaBaseUrl": "https://staging-media-api.rfcx.org", - "deviceBaseUrl": "https://staging-device-api.rfcx.org" + "deviceBaseUrl": "https://staging-device-api.rfcx.org", + "explorerBaseUrl": "https://staging-explorer.rfcx.org" }