Added model-service.js to store model data.
							parent
							
								
									71ef8f0636
								
							
						
					
					
						commit
						2aa79f4fbe
					
				|  | @ -31,6 +31,7 @@ var matrixWebClient = angular.module('matrixWebClient', [ | |||
|     'eventStreamService', | ||||
|     'eventHandlerService', | ||||
|     'notificationService', | ||||
|     'modelService', | ||||
|     'infinite-scroll', | ||||
|     'ui.bootstrap', | ||||
|     '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. | ||||
| */ | ||||
| angular.module('eventHandlerService', []) | ||||
| .factory('eventHandlerService', ['matrixService', '$rootScope', '$q', '$timeout', 'mPresence', 'notificationService', | ||||
| function(matrixService, $rootScope, $q, $timeout, mPresence, notificationService) { | ||||
| .factory('eventHandlerService', ['matrixService', '$rootScope', '$q', '$timeout', 'mPresence', 'notificationService', 'modelService', | ||||
| function(matrixService, $rootScope, $q, $timeout, mPresence, notificationService, modelService) { | ||||
|     var ROOM_CREATE_EVENT = "ROOM_CREATE_EVENT"; | ||||
|     var MSG_EVENT = "MSG_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-handler-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/fileInput/file-input-directive.js"></script> | ||||
|     <script src="components/fileUpload/file-upload-service.js"></script> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Kegan Dougal
						Kegan Dougal