Added model-service.js to store model data.
This commit is contained in:
parent
71ef8f0636
commit
2aa79f4fbe
|
@ -31,6 +31,7 @@ var matrixWebClient = angular.module('matrixWebClient', [
|
||||||
'eventStreamService',
|
'eventStreamService',
|
||||||
'eventHandlerService',
|
'eventHandlerService',
|
||||||
'notificationService',
|
'notificationService',
|
||||||
|
'modelService',
|
||||||
'infinite-scroll',
|
'infinite-scroll',
|
||||||
'ui.bootstrap',
|
'ui.bootstrap',
|
||||||
'monospaced.elastic'
|
'monospaced.elastic'
|
||||||
|
|
|
@ -27,8 +27,8 @@ Typically, this service will store events or broadcast them to any listeners
|
||||||
if typically all the $on method would do is update its own $scope.
|
if typically all the $on method would do is update its own $scope.
|
||||||
*/
|
*/
|
||||||
angular.module('eventHandlerService', [])
|
angular.module('eventHandlerService', [])
|
||||||
.factory('eventHandlerService', ['matrixService', '$rootScope', '$q', '$timeout', 'mPresence', 'notificationService',
|
.factory('eventHandlerService', ['matrixService', '$rootScope', '$q', '$timeout', 'mPresence', 'notificationService', 'modelService',
|
||||||
function(matrixService, $rootScope, $q, $timeout, mPresence, notificationService) {
|
function(matrixService, $rootScope, $q, $timeout, mPresence, notificationService, modelService) {
|
||||||
var ROOM_CREATE_EVENT = "ROOM_CREATE_EVENT";
|
var ROOM_CREATE_EVENT = "ROOM_CREATE_EVENT";
|
||||||
var MSG_EVENT = "MSG_EVENT";
|
var MSG_EVENT = "MSG_EVENT";
|
||||||
var MEMBER_EVENT = "MEMBER_EVENT";
|
var MEMBER_EVENT = "MEMBER_EVENT";
|
||||||
|
|
|
@ -0,0 +1,98 @@
|
||||||
|
/*
|
||||||
|
Copyright 2014 OpenMarket Ltd
|
||||||
|
|
||||||
|
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';
|
||||||
|
|
||||||
|
/*
|
||||||
|
This service serves as the entry point for all models in the app. If access to
|
||||||
|
underlying data in a room is required, then this service should be used as the
|
||||||
|
dependency.
|
||||||
|
*/
|
||||||
|
// NB: This is more explicit than linking top-level models to $rootScope
|
||||||
|
// in that by adding this service as a dep you are clearly saying "this X
|
||||||
|
// needs access to the underlying data store", rather than polluting the
|
||||||
|
// $rootScope.
|
||||||
|
angular.module('modelService', [])
|
||||||
|
.factory('modelService', ['matrixService', function(matrixService) {
|
||||||
|
|
||||||
|
/***** Room Object *****/
|
||||||
|
var Room = function Room(room_id) {
|
||||||
|
this.room_id = room_id;
|
||||||
|
this.old_room_state = RoomState();
|
||||||
|
this.current_room_state = RoomState();
|
||||||
|
};
|
||||||
|
Room.prototype = {
|
||||||
|
leave: function leave() {
|
||||||
|
return matrixService.leave(this.room_id);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/***** Room State Object *****/
|
||||||
|
var RoomState = function RoomState() {
|
||||||
|
// list of RoomMember
|
||||||
|
this.members = [];
|
||||||
|
// state events, the key is a compound of event type + state_key
|
||||||
|
this.state_events = {};
|
||||||
|
// earliest token
|
||||||
|
this.pagination_token = "";
|
||||||
|
};
|
||||||
|
RoomState.prototype = {
|
||||||
|
// get a state event for this room from this.state_events. State events
|
||||||
|
// are unique per type+state_key tuple, with a lot of events using 0-len
|
||||||
|
// state keys. To make it not Really Annoying to access, this method is
|
||||||
|
// provided which can just be given the type and it will return the
|
||||||
|
// 0-len event by default.
|
||||||
|
state: function state(type, state_key) {
|
||||||
|
if (!state_key) {
|
||||||
|
return this.state_events[type];
|
||||||
|
}
|
||||||
|
return this.state_events[type + state_key];
|
||||||
|
},
|
||||||
|
|
||||||
|
storeState: function storeState(event) {
|
||||||
|
this.state_events[event.type + event.state_key] = event;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/***** Room Member Object *****/
|
||||||
|
var RoomMember = function RoomMember() {
|
||||||
|
this.event = {}; // the m.room.member event representing the RoomMember.
|
||||||
|
this.user = undefined; // the User
|
||||||
|
};
|
||||||
|
|
||||||
|
/***** User Object *****/
|
||||||
|
var User = function User() {
|
||||||
|
this.event = {}; // the m.presence event representing the User.
|
||||||
|
};
|
||||||
|
|
||||||
|
// rooms are stored here when they come in.
|
||||||
|
var rooms = {
|
||||||
|
// roomid: <Room>
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log("Models inited.");
|
||||||
|
|
||||||
|
return {
|
||||||
|
|
||||||
|
getRoom: function(roomId) {
|
||||||
|
if(!rooms[roomId]) {
|
||||||
|
rooms[roomId] = new Room(roomId);
|
||||||
|
}
|
||||||
|
return rooms[roomId];
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
}]);
|
|
@ -42,6 +42,7 @@
|
||||||
<script src="components/matrix/event-stream-service.js"></script>
|
<script src="components/matrix/event-stream-service.js"></script>
|
||||||
<script src="components/matrix/event-handler-service.js"></script>
|
<script src="components/matrix/event-handler-service.js"></script>
|
||||||
<script src="components/matrix/notification-service.js"></script>
|
<script src="components/matrix/notification-service.js"></script>
|
||||||
|
<script src="components/matrix/model-service.js"></script>
|
||||||
<script src="components/matrix/presence-service.js"></script>
|
<script src="components/matrix/presence-service.js"></script>
|
||||||
<script src="components/fileInput/file-input-directive.js"></script>
|
<script src="components/fileInput/file-input-directive.js"></script>
|
||||||
<script src="components/fileUpload/file-upload-service.js"></script>
|
<script src="components/fileUpload/file-upload-service.js"></script>
|
||||||
|
|
Loading…
Reference in New Issue