Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion upgrade.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
This files describes API changes in the Moodle Mobile app,
information provided here is intended especially for developers.

=== 2.10 ===
=== 3.0 ===

* The function $mmaModBook#getChapterContent now requires to receive the result of $mmaModBook#getContentsMap instead of module.contents.
* 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.

=== 2.9 ===

Expand Down
6 changes: 4 additions & 2 deletions www/addons/messages/controllers/discussion.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ angular.module('mm.addons.messages')
.controller('mmaMessagesDiscussionCtrl', function($scope, $stateParams, $mmApp, $mmaMessages, $mmSite, $timeout, $mmEvents, $window,
$ionicScrollDelegate, mmUserProfileState, $mmUtil, mmaMessagesPollInterval, $interval, $log, $ionicHistory, $ionicPlatform,
mmCoreEventKeyboardShow, mmCoreEventKeyboardHide, mmaMessagesDiscussionLoadedEvent, mmaMessagesDiscussionLeftEvent,
$mmUser, $translate) {
$mmUser, $translate, mmaMessagesNewMessageEvent) {

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

Expand Down Expand Up @@ -224,7 +224,9 @@ angular.module('mm.addons.messages')
var last = $scope.messages[$scope.messages.length - 1];
if (last && last.smallmessage !== lastMessage) {
lastMessage = last.smallmessage;
$mmEvents.trigger($mmaMessages.getDiscussionEventName(userId), {
$mmEvents.trigger(mmaMessagesNewMessageEvent, {
siteid: $mmSite.getId(),
userid: userId,
message: lastMessage,
timecreated: last.timecreated
});
Expand Down
71 changes: 38 additions & 33 deletions www/addons/messages/controllers/discussions.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,45 +21,24 @@ angular.module('mm.addons.messages')
* @ngdoc controller
* @name mmaMessagesDiscussionsCtrl
*/
.controller('mmaMessagesDiscussionsCtrl', function($q, $state, $scope, $mmUtil, $mmaMessages, $rootScope, $mmEvents,
mmCoreSplitViewLoad) {
var observers = [];
.controller('mmaMessagesDiscussionsCtrl', function($scope, $mmUtil, $mmaMessages, $rootScope, $mmEvents, $mmSite,
mmCoreSplitViewLoad, mmaMessagesNewMessageEvent) {
var newMessagesObserver,
siteId = $mmSite.getId(),
discussions;

$scope.loaded = false;

// Set observers to watch for new messages on discussions. If a user sees a new message in a discussion, we'll update
// the discussion's last message in discussions list.
function setObservers(discussions) {
clearObservers();

angular.forEach(discussions, function(discussion) {
observers.push($mmEvents.on($mmaMessages.getDiscussionEventName(discussion.message.user), function(data) {
if (data && data.timecreated > discussion.message.timecreated) {
discussion.message.message = data.message;
discussion.message.timecreated = data.timecreated;
}
}));
});
}

// Clear observers.
function clearObservers() {
angular.forEach(observers, function(observer) {
if (observer && observer.off) {
observer.off();
}
});
}

function fetchDiscussions() {
return $mmaMessages.getDiscussions().then(function(discussions) {
return $mmaMessages.getDiscussions().then(function(discs) {
discussions = discs;

// Convert to an array for sorting.
var array = [];
angular.forEach(discussions, function(v) {
array.push(v);
});
$scope.discussions = array;
setObservers(array);
}, function(error) {
if (typeof error === 'string') {
$mmUtil.showErrorModal(error);
Expand All @@ -69,10 +48,14 @@ angular.module('mm.addons.messages')
});
}

$scope.refresh = function() {
$mmaMessages.invalidateDiscussionsCache().then(function() {
function refreshData() {
return $mmaMessages.invalidateDiscussionsCache().then(function() {
return fetchDiscussions();
}).finally(function() {
});
}

$scope.refresh = function() {
refreshData().finally(function() {
$scope.$broadcast('scroll.refreshComplete');
});
};
Expand All @@ -84,8 +67,30 @@ angular.module('mm.addons.messages')
$rootScope.$broadcast(mmCoreSplitViewLoad);
});

newMessagesObserver = $mmEvents.on(mmaMessagesNewMessageEvent, function(data) {
var discussion;

if (data && data.siteid == siteId && data.userid) {
discussion = discussions[data.userid];

if (typeof discussion == 'undefined') {
// It's a new discussion. Refresh list.
$scope.loaded = false;
refreshData().finally(function() {
$scope.loaded = true;
});
} else if (data.timecreated > discussion.message.timecreated) {
// An existing discussion has a new message, update the last message.
discussion.message.message = data.message;
discussion.message.timecreated = data.timecreated;
}
}
});

$scope.$on('$destroy', function() {
clearObservers();
if (newMessagesObserver && newMessagesObserver.off) {
newMessagesObserver.off();
}
});
});

4 changes: 3 additions & 1 deletion www/addons/messages/services/messages.js
Original file line number Diff line number Diff line change
Expand Up @@ -232,13 +232,15 @@ angular.module('mm.addons.messages')

/**
* Get the name of the events of a discussion.
* These events aren't used anymore, please just listen to mmaMessagesNewMessageEvent.
*
* @param {Number} userid User ID of the discussion.
* @return {String} Name of the event.
* @deprecated since version 2.10
*/
self.getDiscussionEventName = function(userid) {
return mmaMessagesNewMessageEvent + '_' + $mmSite.getUserId() + '_' + userid;
}
};

/**
* Return the current user's discussion with another user.
Expand Down