mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-23 01:55:53 +03:00
Moved recents things into a separate (and reusable) controler
This commit is contained in:
parent
c67cac134f
commit
308c9273fa
6 changed files with 126 additions and 117 deletions
|
@ -20,6 +20,7 @@ var matrixWebClient = angular.module('matrixWebClient', [
|
||||||
'LoginController',
|
'LoginController',
|
||||||
'RoomController',
|
'RoomController',
|
||||||
'HomeController',
|
'HomeController',
|
||||||
|
'RecentsController',
|
||||||
'SettingsController',
|
'SettingsController',
|
||||||
'UserController',
|
'UserController',
|
||||||
'matrixService',
|
'matrixService',
|
||||||
|
|
|
@ -16,12 +16,11 @@ limitations under the License.
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('HomeController', ['matrixService', 'eventHandlerService'])
|
angular.module('HomeController', ['matrixService', 'eventHandlerService', 'RecentsController'])
|
||||||
.controller('HomeController', ['$scope', '$location', 'matrixService', 'eventHandlerService', 'eventStreamService',
|
.controller('HomeController', ['$scope', '$location', 'matrixService', 'eventHandlerService', 'eventStreamService',
|
||||||
function($scope, $location, matrixService, eventHandlerService, eventStreamService) {
|
function($scope, $location, matrixService, eventHandlerService, eventStreamService) {
|
||||||
|
|
||||||
$scope.config = matrixService.config();
|
$scope.config = matrixService.config();
|
||||||
$scope.rooms = {};
|
|
||||||
$scope.public_rooms = [];
|
$scope.public_rooms = [];
|
||||||
$scope.newRoomId = "";
|
$scope.newRoomId = "";
|
||||||
$scope.feedback = "";
|
$scope.feedback = "";
|
||||||
|
@ -32,77 +31,18 @@ angular.module('HomeController', ['matrixService', 'eventHandlerService'])
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.goToRoom = {
|
$scope.goToRoom = {
|
||||||
room_id: "",
|
room_id: ""
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.joinAlias = {
|
$scope.joinAlias = {
|
||||||
room_alias: "",
|
room_alias: ""
|
||||||
};
|
|
||||||
|
|
||||||
$scope.$on(eventHandlerService.MEMBER_EVENT, function(ngEvent, event, isLive) {
|
|
||||||
var config = matrixService.config();
|
|
||||||
if (event.state_key === config.user_id && event.content.membership === "invite") {
|
|
||||||
console.log("Invited to room " + event.room_id);
|
|
||||||
// FIXME push membership to top level key to match /im/sync
|
|
||||||
event.membership = event.content.membership;
|
|
||||||
// FIXME bodge a nicer name than the room ID for this invite.
|
|
||||||
event.room_display_name = event.user_id + "'s room";
|
|
||||||
$scope.rooms[event.room_id] = event;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var assignRoomAliases = function(data) {
|
|
||||||
for (var i=0; i<data.length; i++) {
|
|
||||||
var alias = matrixService.getRoomIdToAliasMapping(data[i].room_id);
|
|
||||||
if (alias) {
|
|
||||||
// use the existing alias from storage
|
|
||||||
data[i].room_alias = alias;
|
|
||||||
data[i].room_display_name = alias;
|
|
||||||
}
|
|
||||||
else if (data[i].aliases && data[i].aliases[0]) {
|
|
||||||
// save the mapping
|
|
||||||
// TODO: select the smarter alias from the array
|
|
||||||
matrixService.createRoomIdToAliasMapping(data[i].room_id, data[i].aliases[0]);
|
|
||||||
data[i].room_display_name = data[i].aliases[0];
|
|
||||||
}
|
|
||||||
else if (data[i].membership == "invite" && "inviter" in data[i]) {
|
|
||||||
data[i].room_display_name = data[i].inviter + "'s room"
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// last resort use the room id
|
|
||||||
data[i].room_display_name = data[i].room_id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var refresh = function() {
|
var refresh = function() {
|
||||||
// List all rooms joined or been invited to
|
|
||||||
matrixService.rooms(1, false).then(
|
|
||||||
function(response) {
|
|
||||||
var data = assignRoomAliases(response.data.rooms);
|
|
||||||
$scope.feedback = "Success";
|
|
||||||
for (var i=0; i<data.length; i++) {
|
|
||||||
$scope.rooms[data[i].room_id] = data[i];
|
|
||||||
|
|
||||||
// Create a shortcut for the last message of this room
|
|
||||||
if (data[i].messages && data[i].messages.chunk && data[i].messages.chunk[0]) {
|
|
||||||
$scope.rooms[data[i].room_id].lastMsg = data[i].messages.chunk[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var presence = response.data.presence;
|
|
||||||
for (var i = 0; i < presence.length; ++i) {
|
|
||||||
eventHandlerService.handleEvent(presence[i], false);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
function(error) {
|
|
||||||
$scope.feedback = "Failure: " + error.data;
|
|
||||||
});
|
|
||||||
|
|
||||||
matrixService.publicRooms().then(
|
matrixService.publicRooms().then(
|
||||||
function(response) {
|
function(response) {
|
||||||
$scope.public_rooms = assignRoomAliases(response.data.chunk);
|
$scope.public_rooms = matrixService.assignRoomAliases(response.data.chunk);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -24,59 +24,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h3>Recents</h3>
|
<h3>Recents</h3>
|
||||||
|
<div ng-include="'recents/recents.html'"></div>
|
||||||
<div class="recentsTableWrapper">
|
|
||||||
<table class="recentsTable">
|
|
||||||
<tbody ng-repeat="(rm_id, room) in rooms" ng-click="goToPage('room/' + (room.room_alias ? room.room_alias : rm_id) )" class ="recentsRoom" >
|
|
||||||
<tr>
|
|
||||||
<td class="recentsRoomName">
|
|
||||||
{{ room.room_display_name }}
|
|
||||||
</td>
|
|
||||||
<td class="recentsRoomSummaryTS">
|
|
||||||
{{ (room.lastMsg.ts) | date:'MMM d HH:mm' }}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td colspan="2" class="recentsRoomSummary">
|
|
||||||
|
|
||||||
<div ng-show="room.membership === 'invite'" >
|
|
||||||
{{ room.inviter }} invited you
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-hide="room.membership === 'invite'" ng-switch="room.lastMsg.type" >
|
|
||||||
<div ng-switch-when="m.room.member">
|
|
||||||
{{ room.lastMsg.user_id }}
|
|
||||||
{{ {"join": "joined", "leave": "left", "invite": "invited"}[room.lastMsg.content.membership] }}
|
|
||||||
{{ room.lastMsg.content.membership === "invite" ? (room.lastMsg.state_key || '') : '' }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-switch-when="m.room.message">
|
|
||||||
<div ng-switch="room.lastMsg.content.msgtype">
|
|
||||||
<div ng-switch-when="m.text">
|
|
||||||
{{ room.lastMsg.user_id }} :
|
|
||||||
<span ng-bind-html="(room.lastMsg.content.body) | linky:'_blank'">
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-switch-when="m.image">
|
|
||||||
{{ room.lastMsg.user_id }} sent an image
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-switch-default>
|
|
||||||
{{ room.lastMsg.content }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div ng-switch-default>
|
|
||||||
{{ room.lastMsg }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
<h3>Public rooms</h3>
|
<h3>Public rooms</h3>
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
<script src="app-filter.js"></script>
|
<script src="app-filter.js"></script>
|
||||||
<script src="home/home-controller.js"></script>
|
<script src="home/home-controller.js"></script>
|
||||||
<script src="login/login-controller.js"></script>
|
<script src="login/login-controller.js"></script>
|
||||||
|
<script src="recents/recents-controller.js"></script>
|
||||||
<script src="room/room-controller.js"></script>
|
<script src="room/room-controller.js"></script>
|
||||||
<script src="room/room-directive.js"></script>
|
<script src="room/room-directive.js"></script>
|
||||||
<script src="settings/settings-controller.js"></script>
|
<script src="settings/settings-controller.js"></script>
|
||||||
|
|
66
webclient/recents/recents-controller.js
Normal file
66
webclient/recents/recents-controller.js
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
/*
|
||||||
|
Copyright 2014 matrix.org
|
||||||
|
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular.module('RecentsController', ['matrixService', 'eventHandlerService'])
|
||||||
|
.controller('RecentsController', ['$scope', 'matrixService', 'eventHandlerService', 'eventStreamService',
|
||||||
|
function($scope, matrixService, eventHandlerService, eventStreamService) {
|
||||||
|
$scope.rooms = {};
|
||||||
|
|
||||||
|
$scope.$on(eventHandlerService.MEMBER_EVENT, function(ngEvent, event, isLive) {
|
||||||
|
var config = matrixService.config();
|
||||||
|
if (event.state_key === config.user_id && event.content.membership === "invite") {
|
||||||
|
console.log("Invited to room " + event.room_id);
|
||||||
|
// FIXME push membership to top level key to match /im/sync
|
||||||
|
event.membership = event.content.membership;
|
||||||
|
// FIXME bodge a nicer name than the room ID for this invite.
|
||||||
|
event.room_display_name = event.user_id + "'s room";
|
||||||
|
$scope.rooms[event.room_id] = event;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var refresh = function() {
|
||||||
|
// List all rooms joined or been invited to
|
||||||
|
matrixService.rooms(1, false).then(
|
||||||
|
function(response) {
|
||||||
|
var data = matrixService.assignRoomAliases(response.data.rooms);
|
||||||
|
for (var i=0; i<data.length; i++) {
|
||||||
|
$scope.rooms[data[i].room_id] = data[i];
|
||||||
|
|
||||||
|
// Create a shortcut for the last message of this room
|
||||||
|
if (data[i].messages && data[i].messages.chunk && data[i].messages.chunk[0]) {
|
||||||
|
$scope.rooms[data[i].room_id].lastMsg = data[i].messages.chunk[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var presence = response.data.presence;
|
||||||
|
for (var i = 0; i < presence.length; ++i) {
|
||||||
|
eventHandlerService.handleEvent(presence[i], false);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
function(error) {
|
||||||
|
$scope.feedback = "Failure: " + error.data;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.onInit = function() {
|
||||||
|
refresh();
|
||||||
|
};
|
||||||
|
|
||||||
|
}]);
|
||||||
|
|
53
webclient/recents/recents.html
Normal file
53
webclient/recents/recents.html
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
<div ng-controller="RecentsController" data-ng-init="onInit()">
|
||||||
|
<table class="recentsTable">
|
||||||
|
<tbody ng-repeat="(rm_id, room) in rooms" ng-click="goToPage('room/' + (room.room_alias ? room.room_alias : rm_id) )" class ="recentsRoom" >
|
||||||
|
<tr>
|
||||||
|
<td class="recentsRoomName">
|
||||||
|
{{ room.room_display_name }}
|
||||||
|
</td>
|
||||||
|
<td class="recentsRoomSummaryTS">
|
||||||
|
{{ (room.lastMsg.ts) | date:'MMM d HH:mm' }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="recentsRoomSummary">
|
||||||
|
|
||||||
|
<div ng-show="room.membership === 'invite'" >
|
||||||
|
{{ room.inviter }} invited you
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-hide="room.membership === 'invite'" ng-switch="room.lastMsg.type" >
|
||||||
|
<div ng-switch-when="m.room.member">
|
||||||
|
{{ room.lastMsg.user_id }}
|
||||||
|
{{ {"join": "joined", "leave": "left", "invite": "invited"}[room.lastMsg.content.membership] }}
|
||||||
|
{{ room.lastMsg.content.membership === "invite" ? (room.lastMsg.state_key || '') : '' }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-switch-when="m.room.message">
|
||||||
|
<div ng-switch="room.lastMsg.content.msgtype">
|
||||||
|
<div ng-switch-when="m.text">
|
||||||
|
{{ room.lastMsg.user_id }} :
|
||||||
|
<span ng-bind-html="(room.lastMsg.content.body) | linky:'_blank'">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-switch-when="m.image">
|
||||||
|
{{ room.lastMsg.user_id }} sent an image
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-switch-default>
|
||||||
|
{{ room.lastMsg.content }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div ng-switch-default>
|
||||||
|
{{ room.lastMsg }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
Loading…
Reference in a new issue