diff --git a/webclient/app-filter.js b/webclient/app-filter.js
index b8d3d2a0d8..e0e8130e45 100644
--- a/webclient/app-filter.js
+++ b/webclient/app-filter.js
@@ -103,7 +103,44 @@ angular.module('matrixWebClient')
for (var i in room.members) {
var member = room.members[i];
if (member.user_id !== matrixService.config().user_id) {
- roomName = member.content.displayname ? member.content.displayname : member.user_id;
+
+ if (member.user_id in $rootScope.presence) {
+ // If the user is available in presence, use the displayname there
+ // as it is the most uptodate
+ roomName = $rootScope.presence[member.user_id].content.displayname;
+ }
+ else if (member.content.displayname) {
+ roomName = member.content.displayname;
+ }
+ else {
+ roomName = member.user_id;
+ }
+ }
+ }
+ }
+ else if (1 === Object.keys(room.members).length) {
+ // The other member may be in the invite list, get all invited users
+ var invitedUserIDs = [];
+ for (var i in room.messages) {
+ var message = room.messages[i];
+ if ("m.room.member" === message.type && "invite" === message.membership) {
+ // Make sure there is no duplicate user
+ if (-1 === invitedUserIDs.indexOf(message.state_key)) {
+ invitedUserIDs.push(message.state_key);
+ }
+ }
+ }
+
+ // For now, only 1:1 room needs to be renamed. It means only 1 invited user
+ if (1 === invitedUserIDs.length) {
+ var userID = invitedUserIDs[0];
+
+ // Try to resolve his displayname in presence global data
+ if (userID in $rootScope.presence) {
+ roomName = $rootScope.presence[userID].content.displayname;
+ }
+ else {
+ roomName = member.user_id;
}
}
}
diff --git a/webclient/app.css b/webclient/app.css
index c27ec797a4..425d5bb11a 100755
--- a/webclient/app.css
+++ b/webclient/app.css
@@ -270,9 +270,9 @@ a:active { color: #000; }
.userAvatar .userPowerLevel {
position: absolute;
- bottom: 20px;
- height: 1px;
- background-color: red;
+ bottom: 0px;
+ height: 2px;
+ background-color: #f00;
}
.userPresence {
@@ -525,3 +525,13 @@ a:active { color: #000; }
font-size: 24px;
}
+#user-displayname-input {
+ width: 160px;
+ max-width: 155px;
+}
+
+#user-save-button {
+ width: 160px;
+ font-size: 14px;
+}
+
diff --git a/webclient/room/room-controller.js b/webclient/room/room-controller.js
index 1f90472c67..72c290ad73 100644
--- a/webclient/room/room-controller.js
+++ b/webclient/room/room-controller.js
@@ -163,8 +163,6 @@ angular.module('RoomController', ['ngSanitize', 'mFileInput'])
// set target_user_id to keep things clear
var target_user_id = chunk.state_key;
-
- var now = new Date().getTime();
var isNewMember = !(target_user_id in $scope.members);
if (isNewMember) {
@@ -174,6 +172,8 @@ angular.module('RoomController', ['ngSanitize', 'mFileInput'])
}
if ("last_active_ago" in chunk.content) {
chunk.last_active_ago = chunk.content.last_active_ago;
+ $scope.now = new Date().getTime();
+ chunk.last_updated = $scope.now;
}
if ("displayname" in chunk.content) {
chunk.displayname = chunk.content.displayname;
@@ -181,7 +181,6 @@ angular.module('RoomController', ['ngSanitize', 'mFileInput'])
if ("avatar_url" in chunk.content) {
chunk.avatar_url = chunk.content.avatar_url;
}
- chunk.last_updated = now;
$scope.members[target_user_id] = chunk;
if (target_user_id in $rootScope.presence) {
@@ -197,6 +196,8 @@ angular.module('RoomController', ['ngSanitize', 'mFileInput'])
}
if ("last_active_ago" in chunk.content) {
member.last_active_ago = chunk.content.last_active_ago;
+ $scope.now = new Date().getTime();
+ member.last_updated = $scope.now;
}
}
};
@@ -221,6 +222,8 @@ angular.module('RoomController', ['ngSanitize', 'mFileInput'])
if ("last_active_ago" in chunk.content) {
member.last_active_ago = chunk.content.last_active_ago;
+ $scope.now = new Date().getTime();
+ member.last_updated = $scope.now;
}
// this may also contain a new display name or avatar url, so check.
@@ -332,10 +335,6 @@ angular.module('RoomController', ['ngSanitize', 'mFileInput'])
eventHandlerService.waitForInitialSyncCompletion().then(
function() {
- // Some data has been retrieved from the iniialSync request
- // So, the relative time starts here
- $scope.now = new Date().getTime();
-
var needsToJoin = true;
// The room members is available in the data fetched by initialSync
diff --git a/webclient/settings/settings.html b/webclient/settings/settings.html
index a69a8de300..03927838d2 100644
--- a/webclient/settings/settings.html
+++ b/webclient/settings/settings.html
@@ -12,11 +12,12 @@
<div class="profile-avatar">
<img ng-src="{{ (null !== profile.avatarUrl) ? profile.avatarUrl : 'img/default-profile.png' }}" m-file-input="profile.avatarFile"/>
</div>
- <div id="user-ids">
- <input size="40" ng-model="profile.displayName" placeholder="Your display name"/>
+ <div>
+ <input id="user-displayname-input" size="40" ng-model="profile.displayName" placeholder="Your display name"/>
<br/>
- <button ng-disabled="(profile.displayName == profileOnServer.displayName) && (profile.avatarUrl == profileOnServer.avatarUrl)"
- ng-click="saveProfile()">Save</button>
+ <button id="user-save-button"
+ ng-disabled="(profile.displayName === profileOnServer.displayName) && (profile.avatarUrl === profileOnServer.avatarUrl)"
+ ng-click="saveProfile()">Save changes</button>
</div>
</form>
</div>
|