summary refs log tree commit diff
path: root/webclient/app.js
diff options
context:
space:
mode:
Diffstat (limited to 'webclient/app.js')
-rw-r--r--webclient/app.js62
1 files changed, 58 insertions, 4 deletions
diff --git a/webclient/app.js b/webclient/app.js
index 58d3942c65..8d64db92d3 100644
--- a/webclient/app.js
+++ b/webclient/app.js
@@ -63,9 +63,8 @@ matrixWebClient.config(['$routeProvider', '$provide', '$httpProvider',
     }]);
 
 matrixWebClient.run(['$location', 'matrixService', 'eventStreamService', function($location, matrixService, eventStreamService) {
-    // If we have no persistent login information, go to the login page
-    var config = matrixService.config();
-    if (!config || !config.access_token) {
+    // If user auth details are not in cache, go to the login page
+    if (!matrixService.isUserLoggedIn()) {
         eventStreamService.stop();
         $location.path("login");
     }
@@ -94,7 +93,62 @@ matrixWebClient
             }
         };
     }])
-    .filter('to_trusted', ['$sce', function($sce){
+    .filter('duration', function() {
+        return function(time) {
+            if (!time) return;
+            var t = parseInt(time / 1000);
+            var s = t % 60;
+            var m = parseInt(t / 60) % 60;
+            var h = parseInt(t / (60 * 60)) % 24;
+            var d = parseInt(t / (60 * 60 * 24));
+            if (t < 60) {
+                return s + "s"
+            }
+            if (t < 60 * 60) {
+                return m + "m "; //  + s + "s";
+            }
+            if (t < 24 * 60 * 60) {
+                return h + "h "; // + m + "m";
+            }
+            return d + "d "; // + h + "h";
+        }
+    })
+    .filter('orderMembersList', function($sce) {
+        return function(members) {
+            var filtered = [];
+            
+            var displayNames = {};
+            angular.forEach(members, function(value, key) {
+                value["id"] = key;
+                filtered.push( value );
+                if (value["displayname"]) {
+                    if (!displayNames[value["displayname"]]) {
+                        displayNames[value["displayname"]] = [];
+                    }
+                    displayNames[value["displayname"]].push(key);
+                }
+            });
+
+            // FIXME: we shouldn't disambiguate displayNames on every orderMembersList
+            // invocation but keep track of duplicates incrementally somewhere            
+            angular.forEach(displayNames, function(value, key) {
+                if (value.length > 1) {
+                    // console.log(key + ": " + value);
+                    for (i=0; i < value.length; i++) {
+                        var v = value[i];
+                        members[v].displayname += " (" + v + ")";
+                        // console.log(v + " " + members[v]);
+                    };
+                }
+            });
+            
+            filtered.sort(function (a, b) {
+                return ((a["mtime_age"] || 10e10) > (b["mtime_age"] || 10e10) ? 1 : -1);
+            });
+            return filtered;
+        };
+    })
+    .filter('unsafe', ['$sce', function($sce) {
         return function(text) {
             return $sce.trustAsHtml(text);
         };