Skip to content

Commit 4a2e417

Browse files
committed
MOBILE-1502 messages: Update recent discussions when starting new disc
1 parent 56d5cc1 commit 4a2e417

File tree

4 files changed

+47
-37
lines changed

4 files changed

+47
-37
lines changed

upgrade.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
This files describes API changes in the Moodle Mobile app,
22
information provided here is intended especially for developers.
33

4-
=== 2.10 ===
4+
=== 3.0 ===
55

66
* The function $mmaModBook#getChapterContent now requires to receive the result of $mmaModBook#getContentsMap instead of module.contents.
7+
* The events obtained using $mmaMessages#getDiscussionEventName are deprecated. Now you should just use the event mmaMessagesNewMessageEvent and you will receive the site ID and user ID as parameters.
78

89
=== 2.9 ===
910

www/addons/messages/controllers/discussion.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ angular.module('mm.addons.messages')
2424
.controller('mmaMessagesDiscussionCtrl', function($scope, $stateParams, $mmApp, $mmaMessages, $mmSite, $timeout, $mmEvents, $window,
2525
$ionicScrollDelegate, mmUserProfileState, $mmUtil, mmaMessagesPollInterval, $interval, $log, $ionicHistory, $ionicPlatform,
2626
mmCoreEventKeyboardShow, mmCoreEventKeyboardHide, mmaMessagesDiscussionLoadedEvent, mmaMessagesDiscussionLeftEvent,
27-
$mmUser, $translate) {
27+
$mmUser, $translate, mmaMessagesNewMessageEvent) {
2828

2929
$log = $log.getInstance('mmaMessagesDiscussionCtrl');
3030

@@ -224,7 +224,9 @@ angular.module('mm.addons.messages')
224224
var last = $scope.messages[$scope.messages.length - 1];
225225
if (last && last.smallmessage !== lastMessage) {
226226
lastMessage = last.smallmessage;
227-
$mmEvents.trigger($mmaMessages.getDiscussionEventName(userId), {
227+
$mmEvents.trigger(mmaMessagesNewMessageEvent, {
228+
siteid: $mmSite.getId(),
229+
userid: userId,
228230
message: lastMessage,
229231
timecreated: last.timecreated
230232
});

www/addons/messages/controllers/discussions.js

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -21,45 +21,24 @@ angular.module('mm.addons.messages')
2121
* @ngdoc controller
2222
* @name mmaMessagesDiscussionsCtrl
2323
*/
24-
.controller('mmaMessagesDiscussionsCtrl', function($q, $state, $scope, $mmUtil, $mmaMessages, $rootScope, $mmEvents,
25-
mmCoreSplitViewLoad) {
26-
var observers = [];
24+
.controller('mmaMessagesDiscussionsCtrl', function($scope, $mmUtil, $mmaMessages, $rootScope, $mmEvents, $mmSite,
25+
mmCoreSplitViewLoad, mmaMessagesNewMessageEvent) {
26+
var newMessagesObserver,
27+
siteId = $mmSite.getId(),
28+
discussions;
2729

2830
$scope.loaded = false;
2931

30-
// Set observers to watch for new messages on discussions. If a user sees a new message in a discussion, we'll update
31-
// the discussion's last message in discussions list.
32-
function setObservers(discussions) {
33-
clearObservers();
34-
35-
angular.forEach(discussions, function(discussion) {
36-
observers.push($mmEvents.on($mmaMessages.getDiscussionEventName(discussion.message.user), function(data) {
37-
if (data && data.timecreated > discussion.message.timecreated) {
38-
discussion.message.message = data.message;
39-
discussion.message.timecreated = data.timecreated;
40-
}
41-
}));
42-
});
43-
}
44-
45-
// Clear observers.
46-
function clearObservers() {
47-
angular.forEach(observers, function(observer) {
48-
if (observer && observer.off) {
49-
observer.off();
50-
}
51-
});
52-
}
53-
5432
function fetchDiscussions() {
55-
return $mmaMessages.getDiscussions().then(function(discussions) {
33+
return $mmaMessages.getDiscussions().then(function(discs) {
34+
discussions = discs;
35+
5636
// Convert to an array for sorting.
5737
var array = [];
5838
angular.forEach(discussions, function(v) {
5939
array.push(v);
6040
});
6141
$scope.discussions = array;
62-
setObservers(array);
6342
}, function(error) {
6443
if (typeof error === 'string') {
6544
$mmUtil.showErrorModal(error);
@@ -69,10 +48,14 @@ angular.module('mm.addons.messages')
6948
});
7049
}
7150

72-
$scope.refresh = function() {
73-
$mmaMessages.invalidateDiscussionsCache().then(function() {
51+
function refreshData() {
52+
return $mmaMessages.invalidateDiscussionsCache().then(function() {
7453
return fetchDiscussions();
75-
}).finally(function() {
54+
});
55+
}
56+
57+
$scope.refresh = function() {
58+
refreshData().finally(function() {
7659
$scope.$broadcast('scroll.refreshComplete');
7760
});
7861
};
@@ -84,8 +67,30 @@ angular.module('mm.addons.messages')
8467
$rootScope.$broadcast(mmCoreSplitViewLoad);
8568
});
8669

70+
newMessagesObserver = $mmEvents.on(mmaMessagesNewMessageEvent, function(data) {
71+
var discussion;
72+
73+
if (data && data.siteid == siteId && data.userid) {
74+
discussion = discussions[data.userid];
75+
76+
if (typeof discussion == 'undefined') {
77+
// It's a new discussion. Refresh list.
78+
$scope.loaded = false;
79+
refreshData().finally(function() {
80+
$scope.loaded = true;
81+
});
82+
} else if (data.timecreated > discussion.message.timecreated) {
83+
// An existing discussion has a new message, update the last message.
84+
discussion.message.message = data.message;
85+
discussion.message.timecreated = data.timecreated;
86+
}
87+
}
88+
});
89+
8790
$scope.$on('$destroy', function() {
88-
clearObservers();
91+
if (newMessagesObserver && newMessagesObserver.off) {
92+
newMessagesObserver.off();
93+
}
8994
});
9095
});
9196

www/addons/messages/services/messages.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,13 +232,15 @@ angular.module('mm.addons.messages')
232232

233233
/**
234234
* Get the name of the events of a discussion.
235+
* These events aren't used anymore, please just listen to mmaMessagesNewMessageEvent.
235236
*
236237
* @param {Number} userid User ID of the discussion.
237238
* @return {String} Name of the event.
239+
* @deprecated since version 2.10
238240
*/
239241
self.getDiscussionEventName = function(userid) {
240242
return mmaMessagesNewMessageEvent + '_' + $mmSite.getUserId() + '_' + userid;
241-
}
243+
};
242244

243245
/**
244246
* Return the current user's discussion with another user.

0 commit comments

Comments
 (0)