]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-7994 - Verto Communicator - Using factory for group calls in history
authorStefan Yohansson <stefan@evolux.net.br>
Wed, 2 Sep 2015 21:40:50 +0000 (18:40 -0300)
committerroot <root@dev-vm1.evolux.net.br>
Thu, 3 Sep 2015 11:46:07 +0000 (08:46 -0300)
html5/verto/verto_communicator/src/css/verto.css
html5/verto/verto_communicator/src/index.html
html5/verto/verto_communicator/src/partials/dialpad.html
html5/verto/verto_communicator/src/storageService/services/call_history.js [new file with mode: 0644]
html5/verto/verto_communicator/src/storageService/services/storage.js
html5/verto/verto_communicator/src/vertoControllers/controllers/DialPadController.js
html5/verto/verto_communicator/src/vertoControllers/controllers/MainController.js
html5/verto/verto_communicator/src/vertoService/services/vertoService.js

index b2600ec8776e0c8581217bc3764545f4e720dcce..94976e7d484426c7cf1b46663123cfcab8da1785 100644 (file)
@@ -8,6 +8,22 @@ body {
   padding-top: 60px;
 }
 
+.inline-block {
+  display: inline-block;
+}
+
+.icon-tiny {
+  font-size: 14px;
+}
+
+.back-icon {
+  cursor: pointer;
+  margin-top: -2px;
+  float: left;
+  margin-left: -2px;
+  margin-right: 7px;
+}
+
 .container-fluid {
   height: 100%;
 }
@@ -237,6 +253,12 @@ body .modal-body .btn-group .btn.active {
   width: 100%;
 }
 
+#dialpad .list-icon {
+  margin-top: 8px;
+  float: right;
+  margin-left: 2px;
+}
+
 #dialpad .dialpad-display .btn-fab {
   font-size: 32px;
   position: relative;
@@ -319,6 +341,11 @@ body .modal-body .btn-group .btn.active {
   position: relative;
 }
 
+.call_direction {
+  position: absolute;
+  margin-top: 6px;
+}
+
 
 #dialpad #call_history.active {
   visibility: visible;
@@ -363,6 +390,8 @@ body .modal-body .btn-group .btn.active {
   text-overflow: clip;
   overflow: hidden;
   overflow-wrap: break-word;
+  margin-left: 26px !important;
+  position: absolute;
 }
 
 #dialpad .dialpad-number {
@@ -370,6 +399,13 @@ body .modal-body .btn-group .btn.active {
   color: rgb(38, 204, 218);
 }
 
+#dialpad .date {
+  margin-top: 15px; 
+  display: block;
+  font-size: 11px;
+  color: #CCC;
+}
+
 #dialpad .dialpad-alpha {
   font-size: 11px;
   color: #CCC;
index 19b244f03b381301e1069fd1ea816d494ba27d98..0719ad4e9c0e05d59ce2fe442f4bf1507e75429b 100644 (file)
 
     <script type="text/javascript" src="src/storageService/storageService.module.js"></script>
     <script type="text/javascript" src="src/storageService/services/storage.js"></script>
+    <script type="text/javascript" src="src/storageService/services/call_history.js"></script>
 
     <!-- endbuild -->
 
index 1bc895b391b51574e13840554184ab678d27eaf7..f24e28331d41be2feaf5a5054eeff370dae4ad00 100644 (file)
@@ -3,7 +3,9 @@
     <div id="call_history" class="shadow-z-2 panel">
       <div class="panel-heading">
         <div class="panel-title">
-            Call History
+            <i class="mdi-navigation-arrow-back back-icon" ng-click="viewCallsList()" ng-if="call_list"></i>
+            <span ng-if="!call_list">Call History</span>
+            <span ng-if="call_list">{{ call_list[0].number }}</span>
 
             <span class="pull-right pull-right-margin dropdown">
               <a href="" class="dropdown-toggle" data-target="#" data-toggle="dropdown" aria-expanded="true">
         </div>
       </div>
       <ul class="call-history">
-        <div ng-show="!storage.data.call_history.length">
+        <div ng-if="!has_history">
           <p class="text-center text-muted">No history calls.</p>
         </div>
 
-        <li ng-repeat="call in storage.data.call_history">
-          <a ng-show="call.number" href="" ng-dblclick="$parent.call(call.number)" ng-click="$parent.fillDialpadNumber(call.number)">
-            <i ng-show="call.direction == 'inbound'" ng-class="{'mdi-communication-call-missed': !call.status,'mdi-communication-call-received': call.status}"></i>
-            <i ng-show="call.direction == 'outbound'" class="mdi-communication-call-made"></i>
-            <h2 class="dialpad-number dialpad-number-limited">{{ call.number }}</h2>
+        <li ng-repeat="number in history_control track by number" ng-if="!call_list">
+          <a ng-init="call = call_history[number][0]" class="inline-block" ng-show="call.number" href="" ng-dblclick="$parent.call(call.number)" ng-click="$parent.fillDialpadNumber(call.number)">
+            <div class="call-history-info">
+            <i ng-if="call.direction == 'inbound'" ng-class="{'mdi-communication-call-missed': !call.status,'mdi-communication-call-received': call.status}"></i>
+            <i ng-if="call.direction == 'outbound'" class="mdi-communication-call-made call_direction"></i>
+            <h2 class="dialpad-number dialpad-number-limited">{{ call.number }} ({{ call_history[number].length }})</h2>
             <br/>
+            <span class="date">{{ call.call_start }}</span>
+            </div>
+          </a>
+          <a href="" ng-click="$parent.viewCallsList(call_history[number])" class="list-icon">
+            <i class="mdi-action-view-list"></i>
+          </a>
+        </li>
+
+        <li ng-repeat="call in call_list">
+          <a ng-show="call.number" href="" ng-dblclick="$parent.call(call.number)" ng-click="$parent.fillDialpadNumber(call.number)">
+            <i ng-if="call.direction == 'inbound'" class="icon-tiny" ng-class="{'mdi-communication-call-missed': !call.status,'mdi-communication-call-received': call.status}"></i>
+            <i ng-if="call.direction == 'outbound'" class="icon-tiny mdi-communication-call-made"></i>
             <span class="dialpad-alpha">{{ call.call_start }}</span>
           </a>
+
         </li>
       </ul>
     </div>
diff --git a/html5/verto/verto_communicator/src/storageService/services/call_history.js b/html5/verto/verto_communicator/src/storageService/services/call_history.js
new file mode 100644 (file)
index 0000000..fb00c72
--- /dev/null
@@ -0,0 +1,57 @@
+'use strict';
+
+  angular
+  .module('storageService')
+  .factory('CallHistory', function(storage) {
+
+    var history = storage.data.call_history;
+    var history_control = storage.data.history_control;
+
+    var addCallToHistory = function(number, direction, status) {
+      if(history[number] == undefined) {
+        history[number] = [];
+      }
+
+      history[number].unshift({
+        'number': number,
+        'direction': direction,
+        'status': status,
+        'call_start': Date()
+      });
+
+      var index = history_control.indexOf(number);
+      console.log(index);
+      if(index > -1) {
+        history_control.splice(index, 1);
+      }
+
+      history_control.unshift(number);
+
+    };
+
+    var getCallsFromHistory = function(number) {
+      return history[number];
+    };
+
+    return {
+      all: function() {
+        return history;
+      },
+      all_control: function() {
+        return history_control;
+      },
+      get: function(number) {
+        return getCallsFromHistory(number);
+      },
+      add: function(number, direction, status) {
+        return addCallToHistory(number, direction, status);
+      },
+      clear: function() {
+        storage.data.call_history = {};
+        storage.data.history_control = [];
+        history = storage.data.call_history;
+        history_control = storage.data.history_control;
+        return history_control;
+      }
+    }
+});
index 9e23aef2ec11085acf27951fc3a9e351db3fc4a0..b457678b356cfd7e2efa8ecfb7695ed276aed2dc 100644 (file)
@@ -12,7 +12,8 @@
       cur_call: 0,
       called_number: '',
       useVideo: true,
-      call_history: [],
+      call_history: {},
+      history_control: [],
       call_start: false,
       name: '',
       email: '',
index 064d24e0d8213d30677850f6a193b6f3d51d367c..dde658af16496c74b9470d5064fafcf452fb215c 100644 (file)
@@ -4,15 +4,29 @@
   angular
     .module('vertoControllers')
     .controller('DialPadController', ['$rootScope', '$scope',
-      '$http', '$location', 'toastr', 'verto', 'storage',
-      function($rootScope, $scope, $http, $location, toastr, verto, storage) {
+      '$http', '$location', 'toastr', 'verto', 'storage', 'CallHistory',
+      function($rootScope, $scope, $http, $location, toastr, verto, storage, CallHistory) {
         console.debug('Executing DialPadController.');
-
         $scope.checkBrowser();
+        $scope.call_history = CallHistory.all();
+        $scope.history_control = CallHistory.all_control();
+        $scope.has_history = Object.keys($scope.call_history).length;
         storage.data.videoCall = false;
         storage.data.userStatus = 'connecting';
         storage.data.calling = false;
 
+        $scope.clearCallHistory = function() {
+          CallHistory.clear();
+          $scope.call_history = CallHistory.all();
+          $scope.history_control = CallHistory.all_control();
+          $scope.has_history = Object.keys($scope.call_history).length;
+          return $scope.history_control;
+        };
+
+        $scope.viewCallsList = function(calls) {
+          return $scope.call_list = calls;
+        };
+
         /**
          * fill dialpad via querystring [?autocall=\d+]
          */
           verto.call($rootScope.dialpadNumber);
 
           storage.data.called_number = $rootScope.dialpadNumber;
-          storage.data.call_history.unshift({
-            'number': $rootScope.dialpadNumber,
-            'direction': 'outbound',
-            'call_start': Date()
-          });
+          CallHistory.add($rootScope.dialpadNumber, 'outbound');
           $location.path('/incall');
         }
       }
     ]);
 
-})();
\ No newline at end of file
+})();
index 7834be906f09de64cbd0bba4058949f8d5c3db14..f7e3d5bb91791463e2f0566320bf5111eaaa7b65 100644 (file)
@@ -4,8 +4,8 @@
   angular
     .module('vertoControllers')
     .controller('MainController',
-      function($scope, $rootScope, $location, $modal, $timeout, verto, storage, toastr, Fullscreen, prompt) {
-      
+      function($scope, $rootScope, $location, $modal, $timeout, verto, storage, CallHistory, toastr, Fullscreen, prompt) {
+
       console.debug('Executing MainController.');
 
       var myVideo = document.getElementById("webcam");
         );
       };
 
-      $scope.openModal = function(templateUrl, controller) {
+      $rootScope.openModal = function(templateUrl, controller) {
         var modalInstance = $modal.open({
           animation: $scope.animationsEnabled,
           templateUrl: templateUrl,
         $scope.call_history = angular.element("#call_history").hasClass('active');
       };
 
-      $scope.clearCallHistory = function() {
-        storage.data.call_history = [];
-      };
-
       $scope.toggleChat = function() {
         if ($scope.chatStatus && $rootScope.activePane === 'chat') {
           $rootScope.chat_counter = 0;
 
           $scope.answerCall();
           storage.data.called_number = data;
-
-          storage.data.call_history.unshift({
-            'number': data,
-            'direction': 'inbound',
-            'status': true,
-            'call_start': Date()
-          });
+          CallHistory.add(number, 'inbound', true);
           $location.path('/incall');
         }, function() {
           $scope.declineCall();
-          storage.data.call_history.unshift({
-            'number': data,
-            'direction': 'inbound',
-            'status': false,
-            'call_start': Date()
-          });
+          CallHistory.add(number, 'inbound', false);
         });
       });
 
     }
   );
 
-})();
\ No newline at end of file
+})();
index 555627abb64bed1d49fedf21692f0e81af106a0d..822b95bed5e4843629ea248d1725b598f58dfb18 100644 (file)
@@ -258,8 +258,8 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora
             label: device.label || device.id
           });
         }
-        console.debug('Devices were refreshed, checking that we have cameras.');          
-        
+        console.debug('Devices were refreshed, checking that we have cameras.');
+
         // This means that we cannot use video!
         if (data.videoDevices.length === 0) {
           console.log('No camera, disabling video.');
@@ -274,7 +274,7 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora
       },
 
       refreshDevices: function(callback) {
-        console.debug('Attempting to refresh the devices.');        
+        console.debug('Attempting to refresh the devices.');
         jQuery.verto.refreshDevices(this.refreshDevicesCallback);
       },
 
@@ -416,7 +416,7 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora
             console.log('Has data.liveArray.');
             $rootScope.$emit('members.clear');
             data.liveArray = null;
-            
+
           } else {
             console.log('Doesn\'t found data.liveArray.');
           }