Merge pull request #1824 from dpalou/MOBILE-2915

Mobile 2915
main
Juan Leyva 2019-03-28 16:48:49 +01:00 committed by GitHub
commit 5602e6eeb4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 38 additions and 26 deletions

View File

@ -141,8 +141,8 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
conversation.unreadcount = 0;
// Conversations changed, invalidate them and refresh unread counts.
this.messagesProvider.invalidateConversations();
this.messagesProvider.refreshUnreadConversationCounts();
this.messagesProvider.invalidateConversations(this.siteId);
this.messagesProvider.refreshUnreadConversationCounts(this.siteId);
}
}
}, this.siteId);
@ -251,7 +251,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
const promises = [];
promises.push(this.fetchConversationCounts());
promises.push(this.messagesProvider.getContactRequestsCount()); // View updated by the event observer.
promises.push(this.messagesProvider.getContactRequestsCount(this.siteId)); // View updated by the event observer.
return Promise.all(promises).then(() => {
if (typeof this.favourites.expanded == 'undefined') {
@ -323,7 +323,8 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
promises.push(this.fetchConversationCounts());
if (refreshUnreadCounts) {
promises.push(this.messagesProvider.refreshUnreadConversationCounts()); // View updated by the event observer.
// View updated by event observer.
promises.push(this.messagesProvider.refreshUnreadConversationCounts(this.siteId));
}
return Promise.all(promises);
@ -347,10 +348,10 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
offlineMessages;
// Get the conversations and, if needed, the offline messages. Always try to get the latest data.
promises.push(this.messagesProvider.invalidateConversations().catch(() => {
promises.push(this.messagesProvider.invalidateConversations(this.siteId).catch(() => {
// Shouldn't happen.
}).then(() => {
return this.messagesProvider.getConversations(option.type, option.favourites, limitFrom);
return this.messagesProvider.getConversations(option.type, option.favourites, limitFrom, this.siteId);
}).then((result) => {
data = result;
}));
@ -362,7 +363,8 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
promises.push(this.fetchConversationCounts());
if (refreshUnreadCounts) {
promises.push(this.messagesProvider.refreshUnreadConversationCounts()); // View updated by the event observer.
// View updated by the event observer.
promises.push(this.messagesProvider.refreshUnreadConversationCounts(this.siteId));
}
}
@ -392,10 +394,10 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
*/
protected fetchConversationCounts(): Promise<void> {
// Always try to get the latest data.
return this.messagesProvider.invalidateConversationCounts().catch(() => {
return this.messagesProvider.invalidateConversationCounts(this.siteId).catch(() => {
// Shouldn't happen.
}).then(() => {
return this.messagesProvider.getConversationCounts();
return this.messagesProvider.getConversationCounts(this.siteId);
}).then((counts) => {
this.favourites.count = counts.favourites;
this.individual.count = counts.individual;
@ -610,7 +612,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
refreshData(refresher?: any, refreshUnreadCounts: boolean = true): Promise<any> {
// Don't invalidate conversations and so, they always try to get latest data.
const promises = [
this.messagesProvider.invalidateContactRequestsCountCache()
this.messagesProvider.invalidateContactRequestsCountCache(this.siteId)
];
return this.utils.allPromises(promises).finally(() => {

View File

@ -245,7 +245,7 @@ export class AddonModLessonPlayerPage implements OnInit, OnDestroy {
if (info.preventaccessreasons && info.preventaccessreasons.length) {
// If it's a password protected lesson and we have the password, allow playing it.
const preventReason = this.lessonProvider.getPreventAccessReason(info, !!this.password);
const preventReason = this.lessonProvider.getPreventAccessReason(info, !!this.password, this.review);
if (preventReason) {
// Lesson cannot be played, show message and go back.
return Promise.reject(preventReason.message);

View File

@ -2367,9 +2367,10 @@ export class AddonModLessonProvider {
*
* @param {any} info Lesson access info.
* @param {boolean} [ignorePassword] Whether password protected reason should be ignored (user already entered the password).
* @param {boolean} [isReview] Whether user is reviewing a retake.
* @return {any} Prevent access reason.
*/
getPreventAccessReason(info: any, ignorePassword?: boolean): any {
getPreventAccessReason(info: any, ignorePassword?: boolean, isReview?: boolean): any {
let result;
if (info && info.preventaccessreasons) {
@ -2384,6 +2385,8 @@ export class AddonModLessonProvider {
// Treat password before all other reasons.
result = entry;
}
} else if (entry.reason == 'noretake' && isReview) {
// Ignore noretake error when reviewing.
} else if (!result) {
// Rest of cases, just return any of them.
result = entry;

View File

@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Injectable } from '@angular/core';
import { Injectable, NgZone } from '@angular/core';
import { NavController } from 'ionic-angular';
import { TranslateService } from '@ngx-translate/core';
import { CoreAppProvider } from '@providers/app';
@ -40,7 +40,7 @@ export class CoreContentLinksHelperProvider {
private contentLinksDelegate: CoreContentLinksDelegate, private appProvider: CoreAppProvider,
private domUtils: CoreDomUtilsProvider, private urlUtils: CoreUrlUtilsProvider, private translate: TranslateService,
private initDelegate: CoreInitDelegate, eventsProvider: CoreEventsProvider, private textUtils: CoreTextUtilsProvider,
private sitePluginsProvider: CoreSitePluginsProvider) {
private sitePluginsProvider: CoreSitePluginsProvider, private zone: NgZone) {
this.logger = logger.getInstance('CoreContentLinksHelperProvider');
// Listen for app launched URLs. If we receive one, check if it's a content link.
@ -91,11 +91,15 @@ export class CoreContentLinksHelperProvider {
*/
goInSite(navCtrl: NavController, pageName: string, pageParams: any, siteId?: string): void {
siteId = siteId || this.sitesProvider.getCurrentSiteId();
if (navCtrl && siteId == this.sitesProvider.getCurrentSiteId()) {
navCtrl.push(pageName, pageParams);
} else {
this.loginHelper.redirect(pageName, pageParams, siteId);
}
// Execute the code in the Angular zone, so change detection doesn't stop working.
this.zone.run(() => {
if (navCtrl && siteId == this.sitesProvider.getCurrentSiteId()) {
navCtrl.push(pageName, pageParams);
} else {
this.loginHelper.redirect(pageName, pageParams, siteId);
}
});
}
/**

View File

@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Injectable } from '@angular/core';
import { Injectable, NgZone } from '@angular/core';
import { Platform, Alert, AlertController } from 'ionic-angular';
import { LocalNotifications, ILocalNotification } from '@ionic-native/local-notifications';
import { Push } from '@ionic-native/push';
@ -105,7 +105,7 @@ export class CoreLocalNotificationsProvider {
constructor(logger: CoreLoggerProvider, private localNotifications: LocalNotifications, private platform: Platform,
private appProvider: CoreAppProvider, private utils: CoreUtilsProvider, private configProvider: CoreConfigProvider,
private textUtils: CoreTextUtilsProvider, private translate: TranslateService, private alertCtrl: AlertController,
eventsProvider: CoreEventsProvider, private push: Push) {
eventsProvider: CoreEventsProvider, private push: Push, private zone: NgZone) {
this.logger = logger.getInstance('CoreLocalNotificationsProvider');
this.appDB = appProvider.getDB();
@ -327,12 +327,15 @@ export class CoreLocalNotificationsProvider {
* @param {any} data Data received by the notification.
*/
notifyClick(data: any): void {
const component = data.component;
if (component) {
if (this.observables[component]) {
this.observables[component].next(data);
// Execute the code in the Angular zone, so change detection doesn't stop working.
this.zone.run(() => {
const component = data.component;
if (component) {
if (this.observables[component]) {
this.observables[component].next(data);
}
}
}
});
}
/**