From 235297ca280d4a5ebc88953093b3f268b901e088 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Fri, 17 May 2019 10:04:23 +0200 Subject: [PATCH 1/3] MOBILE-3036 core: Define different cache expiration times --- src/classes/site.ts | 53 +++++++++++++++++++++++++++++++++++++++------ src/config.json | 5 ++++- upgrade.txt | 1 + 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/src/classes/site.ts b/src/classes/site.ts index 8812cb7a1..6db77a1f8 100644 --- a/src/classes/site.ts +++ b/src/classes/site.ts @@ -117,11 +117,13 @@ export interface CoreSiteWSPreSets { /** * Wehther a pending request in the queue matching the same function and arguments can be reused instead of adding * a new request to the queue. Defaults to true for read requests. + * @type {boolean} */ reusePending?: boolean; /** * Whether the request will be be sent immediately as a single request. Defaults to false. + * @type {boolean} */ skipQueue?: boolean; @@ -129,6 +131,14 @@ export interface CoreSiteWSPreSets { * Cache the response if it returns an errorcode present in this list. */ cacheErrors?: string[]; + + /** + * Update frequency. This value determines how often the cached data will be updated. Possible values: + * CoreSite.FREQUENCY_USUALLY, CoreSite.FREQUENCY_OFTEN, CoreSite.FREQUENCY_SOMETIMES, CoreSite.FREQUENCY_RARELY. + * Defaults to CoreSite.FREQUENCY_USUALLY. + * @type {number} + */ + updateFrequency?: number; } /** @@ -184,6 +194,12 @@ export class CoreSite { // @todo Set REQUEST_QUEUE_FORCE_WS to false before the release. static REQUEST_QUEUE_FORCE_WS = true; // Use "tool_mobile_call_external_functions" even for calling a single function. + // Constants for cache update frequency. + static FREQUENCY_USUALLY = 0; + static FREQUENCY_OFTEN = 1; + static FREQUENCY_SOMETIMES = 2; + static FREQUENCY_RARELY = 3; + // List of injected services. This class isn't injectable, so it cannot use DI. protected appProvider: CoreAppProvider; protected dbProvider: CoreDbProvider; @@ -213,6 +229,14 @@ export class CoreSite { 3.7: 2019052000 }; + // Possible cache update frequencies. + protected UPDATE_FREQUENCIES = [ + CoreConfigConstants.cache_update_frequency_usually || 420000, + CoreConfigConstants.cache_update_frequency_often || 1200000, + CoreConfigConstants.cache_update_frequency_sometimes || 3600000, + CoreConfigConstants.cache_update_frequency_rarely || 43200000 + ]; + // Rest of variables. protected logger; protected db: SQLiteDB; @@ -1016,11 +1040,22 @@ export class CoreSite { return promise.then((entry) => { const now = Date.now(); + let expirationTime; preSets.omitExpires = preSets.omitExpires || !this.appProvider.isOnline(); if (!preSets.omitExpires) { - if (now > entry.expirationTime) { + let expirationDelay = this.UPDATE_FREQUENCIES[preSets.updateFrequency] || + this.UPDATE_FREQUENCIES[CoreSite.FREQUENCY_USUALLY]; + + if (this.appProvider.isNetworkAccessLimited()) { + // Not WiFi, increase the expiration delay a 50% to decrease the data usage in this case. + expirationDelay *= 1.5; + } + + expirationTime = entry.expirationTime + expirationDelay; + + if (now > expirationTime) { this.logger.debug('Cached element found, but it is expired'); return Promise.reject(null); @@ -1028,8 +1063,12 @@ export class CoreSite { } if (typeof entry != 'undefined' && typeof entry.data != 'undefined') { - const expires = (entry.expirationTime - now) / 1000; - this.logger.info(`Cached element found, id: ${id} expires in ${expires} seconds`); + if (!expirationTime) { + this.logger.info(`Cached element found, id: ${id}. Expiration time ignored.`); + } else { + const expires = (expirationTime - now) / 1000; + this.logger.info(`Cached element found, id: ${id}. Expires in expires in ${expires} seconds`); + } return this.textUtils.parseJSON(entry.data, {}); } @@ -1064,15 +1103,15 @@ export class CoreSite { } return promise.then(() => { + // Since 3.7, the expiration time contains the time the entry is modified instead of the expiration time. + // We decided to reuse this field to prevent modifying the database table. const id = this.getCacheId(method, data), entry: any = { id: id, - data: JSON.stringify(response) + data: JSON.stringify(response), + expirationTime: Date.now() }; - let cacheExpirationTime = CoreConfigConstants.cache_expiration_time; - cacheExpirationTime = isNaN(cacheExpirationTime) ? 300000 : cacheExpirationTime; - entry.expirationTime = new Date().getTime() + cacheExpirationTime; if (preSets.cacheKey) { entry.key = preSets.cacheKey; } diff --git a/src/config.json b/src/config.json index 7ad4f4a2b..8ddd8d8e4 100644 --- a/src/config.json +++ b/src/config.json @@ -4,7 +4,10 @@ "desktopappname": "Moodle Desktop", "versioncode": 3700, "versionname": "3.7.0-dev", - "cache_expiration_time": 300000, + "cache_update_frequency_usually": 420000, + "cache_update_frequency_often": 1200000, + "cache_update_frequency_sometimes": 3600000, + "cache_update_frequency_rarely": 43200000, "default_lang": "en", "languages": { "ar": "عربي", diff --git a/upgrade.txt b/upgrade.txt index 3a771557b..56a1634dd 100644 --- a/upgrade.txt +++ b/upgrade.txt @@ -4,6 +4,7 @@ information provided here is intended especially for developers. === 3.7.0 === - The pushnotifications addon has been moved to core. All imports of that addon need to be fixed to use the right path and name. +- Now the expirationTime of cache entries contains the time the entry was modified, not the expiration time. This is to allow calculating dynamic expiration times. We decided to reuse the same field to prevent modifying the database table. === 3.6.1 === From 75ce4633629bbbe993bf596fc63e8db504e2e9db Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 20 May 2019 12:20:46 +0200 Subject: [PATCH 2/3] MOBILE-3036 core: Apply update frequency to all WS calls --- src/addon/badges/providers/badges.ts | 8 +++-- src/addon/blog/providers/blog.ts | 4 ++- src/addon/calendar/providers/calendar.ts | 9 ++++-- src/addon/competency/providers/competency.ts | 19 ++++++++---- .../providers/coursecompletion.ts | 2 ++ src/addon/files/providers/files.ts | 6 ++-- .../airnotifier/providers/airnotifier.ts | 4 ++- src/addon/messages/providers/messages.ts | 21 ++++++++----- src/addon/mod/assign/providers/assign.ts | 14 +++++---- src/addon/mod/book/providers/book.ts | 4 ++- src/addon/mod/chat/providers/chat.ts | 9 ++++-- src/addon/mod/choice/providers/choice.ts | 8 +++-- src/addon/mod/data/providers/data.ts | 13 +++++--- src/addon/mod/feedback/providers/feedback.ts | 8 +++-- src/addon/mod/folder/providers/folder.ts | 4 ++- src/addon/mod/forum/providers/forum.ts | 3 +- src/addon/mod/glossary/providers/glossary.ts | 22 +++++++++----- src/addon/mod/imscp/providers/imscp.ts | 4 ++- src/addon/mod/label/providers/label.ts | 3 +- src/addon/mod/lesson/providers/lesson.ts | 14 +++++---- src/addon/mod/lti/providers/lti.ts | 4 ++- src/addon/mod/page/providers/page.ts | 4 ++- src/addon/mod/quiz/providers/quiz.ts | 14 +++++---- src/addon/mod/resource/providers/resource.ts | 4 ++- src/addon/mod/scorm/providers/scorm.ts | 11 ++++--- src/addon/mod/survey/providers/survey.ts | 8 +++-- src/addon/mod/url/providers/url.ts | 4 ++- src/addon/mod/wiki/providers/wiki.ts | 17 +++++++---- src/addon/mod/workshop/providers/workshop.ts | 16 ++++++---- src/addon/notes/providers/notes.ts | 30 +++++++++++-------- .../notifications/providers/notifications.ts | 4 ++- src/core/comments/providers/comments.ts | 3 +- src/core/course/providers/course.ts | 13 +++++--- src/core/courses/providers/courses.ts | 24 ++++++++++----- src/core/courses/providers/dashboard.ts | 3 +- src/core/rating/providers/rating.ts | 3 +- src/core/siteplugins/providers/siteplugins.ts | 2 ++ src/core/user/providers/user.ts | 9 ++++-- src/providers/groups.ts | 11 ++++--- 39 files changed, 242 insertions(+), 121 deletions(-) diff --git a/src/addon/badges/providers/badges.ts b/src/addon/badges/providers/badges.ts index 2245ad1fb..019341e39 100644 --- a/src/addon/badges/providers/badges.ts +++ b/src/addon/badges/providers/badges.ts @@ -15,6 +15,7 @@ import { Injectable } from '@angular/core'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; +import { CoreSite } from '@classes/site'; /** * Service to handle badges. @@ -79,11 +80,12 @@ export class AddonBadgesProvider { courseid : courseId, userid : userId }, - presets = { - cacheKey: this.getBadgesCacheKey(courseId, userId) + preSets = { + cacheKey: this.getBadgesCacheKey(courseId, userId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; - return site.read('core_badges_get_user_badges', data, presets).then((response) => { + return site.read('core_badges_get_user_badges', data, preSets).then((response) => { if (response && response.badges) { return response.badges; } else { diff --git a/src/addon/blog/providers/blog.ts b/src/addon/blog/providers/blog.ts index e5387cb65..90b875283 100644 --- a/src/addon/blog/providers/blog.ts +++ b/src/addon/blog/providers/blog.ts @@ -17,6 +17,7 @@ import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; +import { CoreSite } from '@classes/site'; /** * Service to handle blog entries. @@ -76,7 +77,8 @@ export class AddonBlogProvider { }; const preSets = { - cacheKey: this.getEntriesCacheKey(filter) + cacheKey: this.getEntriesCacheKey(filter), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('core_blog_get_entries', data, preSets); diff --git a/src/addon/calendar/providers/calendar.ts b/src/addon/calendar/providers/calendar.ts index 73bf0217f..bfcb87110 100644 --- a/src/addon/calendar/providers/calendar.ts +++ b/src/addon/calendar/providers/calendar.ts @@ -292,7 +292,8 @@ export class AddonCalendarProvider { getEvent(id: number, siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { const preSets = { - cacheKey: this.getEventCacheKey(id) + cacheKey: this.getEventCacheKey(id), + updateFrequency: CoreSite.FREQUENCY_RARELY }, data = { options: { @@ -332,7 +333,8 @@ export class AddonCalendarProvider { cacheKey: this.getEventCacheKey(id) }, data = { - eventid: id + eventid: id, + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_calendar_get_calendar_event_by_id', data, preSets).then((response) => { @@ -469,7 +471,8 @@ export class AddonCalendarProvider { // We need to retrieve cached data using cache key because we have timestamp in the params. const preSets = { cacheKey: this.getEventsListCacheKey(daysToStart, daysInterval), - getCacheUsingCacheKey: true + getCacheUsingCacheKey: true, + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('core_calendar_get_calendar_events', data, preSets).then((response) => { diff --git a/src/addon/competency/providers/competency.ts b/src/addon/competency/providers/competency.ts index 7786b75a6..f2ba8f2a6 100644 --- a/src/addon/competency/providers/competency.ts +++ b/src/addon/competency/providers/competency.ts @@ -16,6 +16,7 @@ import { Injectable } from '@angular/core'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; import { CorePushNotificationsProvider } from '@core/pushnotifications/providers/pushnotifications'; +import { CoreSite } from '@classes/site'; /** * Service to handle caompetency learning plans. @@ -156,7 +157,8 @@ export class AddonCompetencyProvider { userid: userId }, preSets = { - cacheKey: this.getLearningPlansCacheKey(userId) + cacheKey: this.getLearningPlansCacheKey(userId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('tool_lp_data_for_plans_page', params, preSets).then((response) => { @@ -185,7 +187,8 @@ export class AddonCompetencyProvider { planid: planId }, preSets = { - cacheKey: this.getLearningPlanCacheKey(planId) + cacheKey: this.getLearningPlanCacheKey(planId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('tool_lp_data_for_plan_page', params, preSets).then((response) => { @@ -216,7 +219,8 @@ export class AddonCompetencyProvider { competencyid: competencyId }, preSets = { - cacheKey: this.getCompetencyInPlanCacheKey(planId, competencyId) + cacheKey: this.getCompetencyInPlanCacheKey(planId, competencyId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('tool_lp_data_for_user_competency_summary_in_plan', params, preSets).then((response) => { @@ -253,7 +257,8 @@ export class AddonCompetencyProvider { userid: userId }, preSets: any = { - cacheKey: this.getCompetencyInCourseCacheKey(courseId, competencyId, userId) + cacheKey: this.getCompetencyInCourseCacheKey(courseId, competencyId, userId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { @@ -291,7 +296,8 @@ export class AddonCompetencyProvider { userid: userId }, preSets: any = { - cacheKey: this.getCompetencySummaryCacheKey(competencyId, userId) + cacheKey: this.getCompetencySummaryCacheKey(competencyId, userId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { @@ -327,7 +333,8 @@ export class AddonCompetencyProvider { courseid: courseId }, preSets: any = { - cacheKey: this.getCourseCompetenciesCacheKey(courseId) + cacheKey: this.getCourseCompetenciesCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { diff --git a/src/addon/coursecompletion/providers/coursecompletion.ts b/src/addon/coursecompletion/providers/coursecompletion.ts index fba2e064d..262bb8e3b 100644 --- a/src/addon/coursecompletion/providers/coursecompletion.ts +++ b/src/addon/coursecompletion/providers/coursecompletion.ts @@ -17,6 +17,7 @@ import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCoursesProvider } from '@core/courses/providers/courses'; +import { CoreSite } from '@classes/site'; /** * Service to handle course completion. @@ -108,6 +109,7 @@ export class AddonCourseCompletionProvider { }; preSets.cacheKey = this.getCompletionCacheKey(courseId, userId); + preSets.updateFrequency = preSets.updateFrequency || CoreSite.FREQUENCY_SOMETIMES; return site.read('core_completion_get_course_completion_status', data, preSets).then((data) => { if (data.completionstatus) { diff --git a/src/addon/files/providers/files.ts b/src/addon/files/providers/files.ts index 8cad3e251..1db49f1da 100644 --- a/src/addon/files/providers/files.ts +++ b/src/addon/files/providers/files.ts @@ -77,7 +77,8 @@ export class AddonFilesProvider { return this.sitesProvider.getSite(siteId).then((site) => { const preSets = { - cacheKey: this.getFilesListCacheKey(params) + cacheKey: this.getFilesListCacheKey(params), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('core_files_get_files', params, preSets); @@ -171,7 +172,8 @@ export class AddonFilesProvider { userid: userId }, preSets = { - cacheKey: this.getPrivateFilesInfoCacheKey(userId) + cacheKey: this.getPrivateFilesInfoCacheKey(userId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('core_user_get_private_files_info', params, preSets); diff --git a/src/addon/messageoutput/airnotifier/providers/airnotifier.ts b/src/addon/messageoutput/airnotifier/providers/airnotifier.ts index f8ca5be71..129c1ebf0 100644 --- a/src/addon/messageoutput/airnotifier/providers/airnotifier.ts +++ b/src/addon/messageoutput/airnotifier/providers/airnotifier.ts @@ -16,6 +16,7 @@ import { Injectable } from '@angular/core'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreSitesProvider } from '@providers/sites'; import { CoreConfigConstants } from '../../../../configconstants'; +import { CoreSite } from '@classes/site'; /** * Service to handle Airnotifier message output. @@ -81,7 +82,8 @@ export class AddonMessageOutputAirnotifierProvider { appid: CoreConfigConstants.app_id }; const preSets = { - cacheKey: this.getUserDevicesCacheKey() + cacheKey: this.getUserDevicesCacheKey(), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('message_airnotifier_get_user_devices', data, preSets).then((data) => { diff --git a/src/addon/messages/providers/messages.ts b/src/addon/messages/providers/messages.ts index fbaccdd11..b4181773a 100644 --- a/src/addon/messages/providers/messages.ts +++ b/src/addon/messages/providers/messages.ts @@ -571,7 +571,8 @@ export class AddonMessagesProvider { userid: userId }, preSets = { - cacheKey: this.getCacheKeyForBlockedContacts(userId) + cacheKey: this.getCacheKeyForBlockedContacts(userId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; return site.read('core_message_get_blocked_users', params, preSets); @@ -590,7 +591,8 @@ export class AddonMessagesProvider { getContacts(siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { const preSets = { - cacheKey: this.getCacheKeyForContacts() + cacheKey: this.getCacheKeyForContacts(), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; return site.read('core_message_get_contacts', undefined, preSets).then((contacts) => { @@ -632,7 +634,8 @@ export class AddonMessagesProvider { limitnum: limitNum <= 0 ? 0 : limitNum + 1 }; const preSets = { - cacheKey: this.getCacheKeyForUserContacts() + cacheKey: this.getCacheKeyForUserContacts(), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; return site.read('core_message_get_user_contacts', params, preSets).then((contacts) => { @@ -673,7 +676,8 @@ export class AddonMessagesProvider { limitnum: limitNum <= 0 ? 0 : limitNum + 1 }; const preSets = { - cacheKey: this.getCacheKeyForContactRequests() + cacheKey: this.getCacheKeyForContactRequests(), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; return site.read('core_message_get_contact_requests', data, preSets).then((requests) => { @@ -837,7 +841,8 @@ export class AddonMessagesProvider { } const preSets = { - cacheKey: this.getCacheKeyForConversationMembers(userId, conversationId) + cacheKey: this.getCacheKeyForConversationMembers(userId, conversationId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }, params: any = { userid: userId, @@ -1272,7 +1277,8 @@ export class AddonMessagesProvider { userId = userId || site.getUserId(); const preSets = { - cacheKey: this.getCacheKeyForMemberInfo(userId, otherUserId) + cacheKey: this.getCacheKeyForMemberInfo(userId, otherUserId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }, params: any = { referenceuserid: userId, @@ -1312,7 +1318,8 @@ export class AddonMessagesProvider { return this.sitesProvider.getSite(siteId).then((site) => { const preSets = { - cacheKey: this.getMessagePreferencesCacheKey() + cacheKey: this.getMessagePreferencesCacheKey(), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('core_message_get_user_message_preferences', {}, preSets).then((data) => { diff --git a/src/addon/mod/assign/providers/assign.ts b/src/addon/mod/assign/providers/assign.ts index 1b785e8b5..26c6ecf41 100644 --- a/src/addon/mod/assign/providers/assign.ts +++ b/src/addon/mod/assign/providers/assign.ts @@ -25,7 +25,7 @@ import { CoreGradesProvider } from '@core/grades/providers/grades'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { AddonModAssignSubmissionDelegate } from './submission-delegate'; import { AddonModAssignOfflineProvider } from './assign-offline'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; import { CoreInterceptor } from '@classes/interceptor'; /** @@ -146,7 +146,8 @@ export class AddonModAssignProvider { includenotenrolledcourses: 1 }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getAssignmentCacheKey(courseId) + cacheKey: this.getAssignmentCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { @@ -215,7 +216,8 @@ export class AddonModAssignProvider { assignmentids: [assignId] }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getAssignmentUserMappingsCacheKey(assignId) + cacheKey: this.getAssignmentUserMappingsCacheKey(assignId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; if (ignoreCache) { @@ -437,7 +439,8 @@ export class AddonModAssignProvider { assignmentids: [assignId] }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getSubmissionsCacheKey(assignId) + cacheKey: this.getSubmissionsCacheKey(assignId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; if (ignoreCache) { @@ -642,7 +645,8 @@ export class AddonModAssignProvider { filter: '' }, preSets: CoreSiteWSPreSets = { - cacheKey: this.listParticipantsCacheKey(assignId, groupId) + cacheKey: this.listParticipantsCacheKey(assignId, groupId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; if (ignoreCache) { diff --git a/src/addon/mod/book/providers/book.ts b/src/addon/mod/book/providers/book.ts index 4cb37834b..1655ed164 100644 --- a/src/addon/mod/book/providers/book.ts +++ b/src/addon/mod/book/providers/book.ts @@ -23,6 +23,7 @@ import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; +import { CoreSite } from '@classes/site'; /** * A book chapter inside the toc list. @@ -97,7 +98,8 @@ export class AddonModBookProvider { courseids: [courseId] }, preSets = { - cacheKey: this.getBookDataCacheKey(courseId) + cacheKey: this.getBookDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_book_get_books_by_courses', params, preSets).then((response) => { diff --git a/src/addon/mod/chat/providers/chat.ts b/src/addon/mod/chat/providers/chat.ts index ed86a56d5..4e6b6df9b 100644 --- a/src/addon/mod/chat/providers/chat.ts +++ b/src/addon/mod/chat/providers/chat.ts @@ -18,7 +18,7 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreUserProvider } from '@core/user/providers/user'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { CoreUtilsProvider } from '@providers/utils/utils'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; /** * Service that provides some features for chats. @@ -47,7 +47,8 @@ export class AddonModChatProvider { courseids: [courseId] }; const preSets: CoreSiteWSPreSets = { - cacheKey: this.getChatsCacheKey(courseId) + cacheKey: this.getChatsCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_chat_get_chats_by_courses', params, preSets).then((response) => { @@ -214,6 +215,7 @@ export class AddonModChatProvider { }; const preSets: CoreSiteWSPreSets = { cacheKey: this.getSessionsCacheKey(chatId, groupId, showAll), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { preSets.getFromCache = false; @@ -252,7 +254,8 @@ export class AddonModChatProvider { groupid: groupId }; const preSets: CoreSiteWSPreSets = { - cacheKey: this.getSessionMessagesCacheKey(chatId, sessionStart, groupId) + cacheKey: this.getSessionMessagesCacheKey(chatId, sessionStart, groupId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { preSets.getFromCache = false; diff --git a/src/addon/mod/choice/providers/choice.ts b/src/addon/mod/choice/providers/choice.ts index 7d1dd0e00..770afa6c0 100644 --- a/src/addon/mod/choice/providers/choice.ts +++ b/src/addon/mod/choice/providers/choice.ts @@ -19,7 +19,7 @@ import { CoreAppProvider } from '@providers/app'; import { CoreFilepoolProvider } from '@providers/filepool'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { AddonModChoiceOfflineProvider } from './offline'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; /** * Service that provides some features for choices. @@ -187,7 +187,8 @@ export class AddonModChoiceProvider { }; const preSets: CoreSiteWSPreSets = { cacheKey: this.getChoiceDataCacheKey(courseId), - omitExpires: forceCache + omitExpires: forceCache, + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { @@ -252,7 +253,8 @@ export class AddonModChoiceProvider { choiceid: choiceId }; const preSets: CoreSiteWSPreSets = { - cacheKey: this.getChoiceOptionsCacheKey(choiceId) + cacheKey: this.getChoiceOptionsCacheKey(choiceId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { diff --git a/src/addon/mod/data/providers/data.ts b/src/addon/mod/data/providers/data.ts index 47f8fc64d..63e53e364 100644 --- a/src/addon/mod/data/providers/data.ts +++ b/src/addon/mod/data/providers/data.ts @@ -22,6 +22,7 @@ import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { AddonModDataOfflineProvider } from './offline'; import { AddonModDataFieldsDelegate } from './fields-delegate'; import { CoreRatingInfo } from '@core/rating/providers/rating'; +import { CoreSite } from '@classes/site'; /** * Database entry (online or offline). @@ -538,7 +539,8 @@ export class AddonModDataProvider { courseids: [courseId] }, preSets = { - cacheKey: this.getDatabaseDataCacheKey(courseId) + cacheKey: this.getDatabaseDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { preSets['omitExpires'] = true; @@ -675,7 +677,8 @@ export class AddonModDataProvider { order: order }, preSets = { - cacheKey: this.getEntriesCacheKey(dataId, groupId) + cacheKey: this.getEntriesCacheKey(dataId, groupId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (forceCache) { @@ -733,7 +736,8 @@ export class AddonModDataProvider { returncontents: 1 }, preSets = { - cacheKey: this.getEntryCacheKey(dataId, entryId) + cacheKey: this.getEntryCacheKey(dataId, entryId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { @@ -775,7 +779,8 @@ export class AddonModDataProvider { databaseid: dataId }, preSets = { - cacheKey: this.getFieldsCacheKey(dataId) + cacheKey: this.getFieldsCacheKey(dataId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { diff --git a/src/addon/mod/feedback/providers/feedback.ts b/src/addon/mod/feedback/providers/feedback.ts index 23327ca75..a9aed0880 100644 --- a/src/addon/mod/feedback/providers/feedback.ts +++ b/src/addon/mod/feedback/providers/feedback.ts @@ -20,7 +20,7 @@ import { CoreFilepoolProvider } from '@providers/filepool'; import { CoreAppProvider } from '@providers/app'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { AddonModFeedbackOfflineProvider } from './offline'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; /** * Service that provides some features for feedbacks. @@ -583,7 +583,8 @@ export class AddonModFeedbackProvider { courseids: [courseId] }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getFeedbackCacheKey(courseId) + cacheKey: this.getFeedbackCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { @@ -650,7 +651,8 @@ export class AddonModFeedbackProvider { feedbackid: feedbackId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getItemsDataCacheKey(feedbackId) + cacheKey: this.getItemsDataCacheKey(feedbackId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { diff --git a/src/addon/mod/folder/providers/folder.ts b/src/addon/mod/folder/providers/folder.ts index eff8af19c..ce3336634 100644 --- a/src/addon/mod/folder/providers/folder.ts +++ b/src/addon/mod/folder/providers/folder.ts @@ -18,6 +18,7 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; +import { CoreSite } from '@classes/site'; /** * Service that provides some features for folder. @@ -61,7 +62,8 @@ export class AddonModFolderProvider { courseids: [courseId] }, preSets = { - cacheKey: this.getFolderCacheKey(courseId) + cacheKey: this.getFolderCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_folder_get_folders_by_courses', params, preSets).then((response) => { diff --git a/src/addon/mod/forum/providers/forum.ts b/src/addon/mod/forum/providers/forum.ts index 72f90fc3d..3659e11ef 100644 --- a/src/addon/mod/forum/providers/forum.ts +++ b/src/addon/mod/forum/providers/forum.ts @@ -298,7 +298,8 @@ export class AddonModForumProvider { courseids: [courseId] }; const preSets = { - cacheKey: this.getForumDataCacheKey(courseId) + cacheKey: this.getForumDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_forum_get_forums_by_courses', params, preSets); diff --git a/src/addon/mod/glossary/providers/glossary.ts b/src/addon/mod/glossary/providers/glossary.ts index 1e7ba968b..bd6862d68 100644 --- a/src/addon/mod/glossary/providers/glossary.ts +++ b/src/addon/mod/glossary/providers/glossary.ts @@ -71,7 +71,8 @@ export class AddonModGlossaryProvider { courseids: [courseId] }; const preSets = { - cacheKey: this.getCourseGlossariesCacheKey(courseId) + cacheKey: this.getCourseGlossariesCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_glossary_get_glossaries_by_courses', params, preSets).then((result) => { @@ -134,7 +135,8 @@ export class AddonModGlossaryProvider { }; const preSets = { cacheKey: this.getEntriesByAuthorCacheKey(glossaryId, letter, field, sort), - omitExpires: forceCache + omitExpires: forceCache, + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('mod_glossary_get_entries_by_author', params, preSets); @@ -182,7 +184,8 @@ export class AddonModGlossaryProvider { }; const preSets = { cacheKey: this.getEntriesByCategoryCacheKey(glossaryId, categoryId), - omitExpires: forceCache + omitExpires: forceCache, + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('mod_glossary_get_entries_by_category', params, preSets); @@ -254,7 +257,8 @@ export class AddonModGlossaryProvider { }; const preSets = { cacheKey: this.getEntriesByDateCacheKey(glossaryId, order, sort), - omitExpires: forceCache + omitExpires: forceCache, + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('mod_glossary_get_entries_by_date', params, preSets); @@ -311,7 +315,8 @@ export class AddonModGlossaryProvider { }; const preSets = { cacheKey: this.getEntriesByLetterCacheKey(glossaryId, letter), - omitExpires: forceCache + omitExpires: forceCache, + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('mod_glossary_get_entries_by_letter', params, preSets); @@ -378,6 +383,7 @@ export class AddonModGlossaryProvider { const preSets = { cacheKey: this.getEntriesBySearchCacheKey(glossaryId, query, fullSearch, order, sort), omitExpires: forceCache, + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('mod_glossary_get_entries_by_search', params, preSets); @@ -444,7 +450,8 @@ export class AddonModGlossaryProvider { limit: limit }; const preSets = { - cacheKey: this.getCategoriesCacheKey(glossaryId) + cacheKey: this.getCategoriesCacheKey(glossaryId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('mod_glossary_get_categories', params, preSets).then((response) => { @@ -496,7 +503,8 @@ export class AddonModGlossaryProvider { id: entryId }; const preSets = { - cacheKey: this.getEntryCacheKey(entryId) + cacheKey: this.getEntryCacheKey(entryId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_glossary_get_entry_by_id', params, preSets).then((response) => { diff --git a/src/addon/mod/imscp/providers/imscp.ts b/src/addon/mod/imscp/providers/imscp.ts index df58e9b46..86166f3c2 100644 --- a/src/addon/mod/imscp/providers/imscp.ts +++ b/src/addon/mod/imscp/providers/imscp.ts @@ -20,6 +20,7 @@ import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; +import { CoreSite } from '@classes/site'; /** * Service that provides some features for IMSCP. @@ -162,7 +163,8 @@ export class AddonModImscpProvider { courseids: [courseId] }; const preSets = { - cacheKey: this.getImscpDataCacheKey(courseId) + cacheKey: this.getImscpDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_imscp_get_imscps_by_courses', params, preSets).then((response) => { diff --git a/src/addon/mod/label/providers/label.ts b/src/addon/mod/label/providers/label.ts index b40b11ac9..2b4e79534 100644 --- a/src/addon/mod/label/providers/label.ts +++ b/src/addon/mod/label/providers/label.ts @@ -59,7 +59,8 @@ export class AddonModLabelProvider { courseids: [courseId] }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getLabelDataCacheKey(courseId) + cacheKey: this.getLabelDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { diff --git a/src/addon/mod/lesson/providers/lesson.ts b/src/addon/mod/lesson/providers/lesson.ts index 55c4763e1..f84ce3eb6 100644 --- a/src/addon/mod/lesson/providers/lesson.ts +++ b/src/addon/mod/lesson/providers/lesson.ts @@ -22,7 +22,7 @@ import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreGradesProvider } from '@core/grades/providers/grades'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; import { AddonModLessonOfflineProvider } from './lesson-offline'; /** @@ -1436,7 +1436,8 @@ export class AddonModLessonProvider { courseids: [courseId] }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getLessonDataCacheKey(courseId) + cacheKey: this.getLessonDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { @@ -1761,7 +1762,8 @@ export class AddonModLessonProvider { lessonid: lessonId, }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getPagesCacheKey(lessonId) + cacheKey: this.getPagesCacheKey(lessonId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (typeof password == 'string') { @@ -2118,7 +2120,8 @@ export class AddonModLessonProvider { groupid: groupId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getRetakesOverviewCacheKey(lessonId, groupId) + cacheKey: this.getRetakesOverviewCacheKey(lessonId, groupId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; if (forceCache) { @@ -2348,7 +2351,8 @@ export class AddonModLessonProvider { lessonattempt: retake }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getUserRetakeCacheKey(lessonId, userId, retake) + cacheKey: this.getUserRetakeCacheKey(lessonId, userId, retake), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (forceCache) { diff --git a/src/addon/mod/lti/providers/lti.ts b/src/addon/mod/lti/providers/lti.ts index fa88da045..b9c1eea85 100644 --- a/src/addon/mod/lti/providers/lti.ts +++ b/src/addon/mod/lti/providers/lti.ts @@ -21,6 +21,7 @@ import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreUrlUtilsProvider } from '@providers/utils/url'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; +import { CoreSite } from '@classes/site'; export interface AddonModLtiParam { name: string; @@ -108,7 +109,8 @@ export class AddonModLtiProvider { courseids: [courseId] }; const preSets: any = { - cacheKey: this.getLtiCacheKey(courseId) + cacheKey: this.getLtiCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return this.sitesProvider.getCurrentSite().read('mod_lti_get_ltis_by_courses', params, preSets).then((response) => { diff --git a/src/addon/mod/page/providers/page.ts b/src/addon/mod/page/providers/page.ts index a196d9efc..95ac2f311 100644 --- a/src/addon/mod/page/providers/page.ts +++ b/src/addon/mod/page/providers/page.ts @@ -19,6 +19,7 @@ import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { CoreFilepoolProvider } from '@providers/filepool'; +import { CoreSite } from '@classes/site'; /** * Service that provides some features for page. @@ -63,7 +64,8 @@ export class AddonModPageProvider { courseids: [courseId] }, preSets = { - cacheKey: this.getPageCacheKey(courseId) + cacheKey: this.getPageCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_page_get_pages_by_courses', params, preSets).then((response) => { diff --git a/src/addon/mod/quiz/providers/quiz.ts b/src/addon/mod/quiz/providers/quiz.ts index 00ba2a92e..cb36b5928 100644 --- a/src/addon/mod/quiz/providers/quiz.ts +++ b/src/addon/mod/quiz/providers/quiz.ts @@ -21,7 +21,7 @@ import { CoreDomUtilsProvider } from '@providers/utils/dom'; import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreTimeUtilsProvider } from '@providers/utils/time'; import { CoreUtilsProvider } from '@providers/utils/utils'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; import { CoreGradesHelperProvider } from '@core/grades/providers/helper'; import { CoreQuestionDelegate } from '@core/question/providers/delegate'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; @@ -570,7 +570,8 @@ export class AddonModQuizProvider { grade: grade }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getFeedbackForGradeCacheKey(quizId, grade) + cacheKey: this.getFeedbackForGradeCacheKey(quizId, grade), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { @@ -687,7 +688,8 @@ export class AddonModQuizProvider { courseids: [courseId] }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getQuizDataCacheKey(courseId) + cacheKey: this.getQuizDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { @@ -829,7 +831,8 @@ export class AddonModQuizProvider { quizid: quizId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getQuizRequiredQtypesCacheKey(quizId) + cacheKey: this.getQuizRequiredQtypesCacheKey(quizId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { @@ -991,7 +994,8 @@ export class AddonModQuizProvider { includepreviews: includePreviews ? 1 : 0 }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getUserAttemptsCacheKey(quizId, userId) + cacheKey: this.getUserAttemptsCacheKey(quizId, userId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (offline) { diff --git a/src/addon/mod/resource/providers/resource.ts b/src/addon/mod/resource/providers/resource.ts index 995092907..3de250b9b 100644 --- a/src/addon/mod/resource/providers/resource.ts +++ b/src/addon/mod/resource/providers/resource.ts @@ -19,6 +19,7 @@ import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { CoreFilepoolProvider } from '@providers/filepool'; +import { CoreSite } from '@classes/site'; /** * Service that provides some features for resources. @@ -61,7 +62,8 @@ export class AddonModResourceProvider { courseids: [courseId] }, preSets = { - cacheKey: this.getResourceCacheKey(courseId) + cacheKey: this.getResourceCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_resource_get_resources_by_courses', params, preSets).then((response) => { diff --git a/src/addon/mod/scorm/providers/scorm.ts b/src/addon/mod/scorm/providers/scorm.ts index 712020716..9d4c041c4 100644 --- a/src/addon/mod/scorm/providers/scorm.ts +++ b/src/addon/mod/scorm/providers/scorm.ts @@ -24,7 +24,7 @@ import { CoreTextUtilsProvider } from '@providers/utils/text'; import { CoreTimeUtilsProvider } from '@providers/utils/time'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { AddonModScormOfflineProvider } from './scorm-offline'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; import { CoreConstants } from '@core/constants'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; @@ -547,7 +547,8 @@ export class AddonModScormProvider { ignoremissingcompletion: ignoreMissing ? 1 : 0 }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getAttemptCountCacheKey(scormId, userId) + cacheKey: this.getAttemptCountCacheKey(scormId, userId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { @@ -835,7 +836,8 @@ export class AddonModScormProvider { scormid: scormId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getScosCacheKey(scormId) + cacheKey: this.getScosCacheKey(scormId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { @@ -1070,7 +1072,8 @@ export class AddonModScormProvider { courseids: [courseId] }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getScormDataCacheKey(courseId) + cacheKey: this.getScormDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { diff --git a/src/addon/mod/survey/providers/survey.ts b/src/addon/mod/survey/providers/survey.ts index 1a1d2547f..824b7bd33 100644 --- a/src/addon/mod/survey/providers/survey.ts +++ b/src/addon/mod/survey/providers/survey.ts @@ -20,7 +20,7 @@ import { CoreAppProvider } from '@providers/app'; import { CoreFilepoolProvider } from '@providers/filepool'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { AddonModSurveyOfflineProvider } from './offline'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; /** * Service that provides some features for surveys. @@ -52,7 +52,8 @@ export class AddonModSurveyProvider { surveyid: surveyId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getQuestionsCacheKey(surveyId) + cacheKey: this.getQuestionsCacheKey(surveyId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { @@ -106,7 +107,8 @@ export class AddonModSurveyProvider { courseids: [courseId] }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getSurveyCacheKey(courseId) + cacheKey: this.getSurveyCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { diff --git a/src/addon/mod/url/providers/url.ts b/src/addon/mod/url/providers/url.ts index 3e63ebf9f..13261f104 100644 --- a/src/addon/mod/url/providers/url.ts +++ b/src/addon/mod/url/providers/url.ts @@ -20,6 +20,7 @@ import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseProvider } from '@core/course/providers/course'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { CoreConstants } from '@core/constants'; +import { CoreSite } from '@classes/site'; /** * Service that provides some features for urls. @@ -114,7 +115,8 @@ export class AddonModUrlProvider { courseids: [courseId] }, preSets = { - cacheKey: this.getUrlCacheKey(courseId) + cacheKey: this.getUrlCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_url_get_urls_by_courses', params, preSets).then((response) => { diff --git a/src/addon/mod/wiki/providers/wiki.ts b/src/addon/mod/wiki/providers/wiki.ts index e20543769..4523f541b 100644 --- a/src/addon/mod/wiki/providers/wiki.ts +++ b/src/addon/mod/wiki/providers/wiki.ts @@ -22,7 +22,7 @@ import { CoreAppProvider } from '@providers/app'; import { CoreFilepoolProvider } from '@providers/filepool'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { AddonModWikiOfflineProvider } from './wiki-offline'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; export interface AddonModWikiSubwikiListData { /** @@ -134,7 +134,8 @@ export class AddonModWikiProvider { pageid: pageId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getPageContentsCacheKey(pageId) + cacheKey: this.getPageContentsCacheKey(pageId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (offline) { @@ -215,7 +216,8 @@ export class AddonModWikiProvider { userid: userId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getSubwikiFilesCacheKey(wikiId, groupId, userId) + cacheKey: this.getSubwikiFilesCacheKey(wikiId, groupId, userId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (offline) { @@ -299,7 +301,8 @@ export class AddonModWikiProvider { }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getSubwikiPagesCacheKey(wikiId, groupId, userId) + cacheKey: this.getSubwikiPagesCacheKey(wikiId, groupId, userId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (offline) { @@ -352,7 +355,8 @@ export class AddonModWikiProvider { wikiid: wikiId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getSubwikisCacheKey(wikiId) + cacheKey: this.getSubwikisCacheKey(wikiId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (offline) { @@ -408,7 +412,8 @@ export class AddonModWikiProvider { courseids: [courseId] }, preSets = { - cacheKey: this.getWikiDataCacheKey(courseId) + cacheKey: this.getWikiDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('mod_wiki_get_wikis_by_courses', params, preSets).then((response) => { diff --git a/src/addon/mod/workshop/providers/workshop.ts b/src/addon/mod/workshop/providers/workshop.ts index 86e0c3525..bae7854f0 100644 --- a/src/addon/mod/workshop/providers/workshop.ts +++ b/src/addon/mod/workshop/providers/workshop.ts @@ -19,6 +19,7 @@ import { CoreSitesProvider } from '@providers/sites'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper'; import { AddonModWorkshopOfflineProvider } from './offline'; +import { CoreSite } from '@classes/site'; /** * Service that provides some features for workshops. @@ -212,7 +213,8 @@ export class AddonModWorkshopProvider { courseids: [courseId] }; const preSets: any = { - cacheKey: this.getWorkshopDataCacheKey(courseId) + cacheKey: this.getWorkshopDataCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (forceCache) { @@ -355,7 +357,8 @@ export class AddonModWorkshopProvider { workshopid: workshopId }; const preSets: any = { - cacheKey: this.getUserPlanDataCacheKey(workshopId) + cacheKey: this.getUserPlanDataCacheKey(workshopId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; if (offline) { @@ -408,7 +411,8 @@ export class AddonModWorkshopProvider { groupid: groupId }; const preSets: any = { - cacheKey: this.getSubmissionsDataCacheKey(workshopId, userId, groupId) + cacheKey: this.getSubmissionsDataCacheKey(workshopId, userId, groupId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; if (offline) { @@ -539,7 +543,8 @@ export class AddonModWorkshopProvider { perpage: perPage || AddonModWorkshopProvider.PER_PAGE }; const preSets: any = { - cacheKey: this.getGradesReportDataCacheKey(workshopId, groupId) + cacheKey: this.getGradesReportDataCacheKey(workshopId, groupId), + updateFrequency: CoreSite.FREQUENCY_OFTEN }; if (offline) { @@ -1004,7 +1009,8 @@ export class AddonModWorkshopProvider { mode: mode || 'assessment' }; const preSets: any = { - cacheKey: this.getAssessmentFormDataCacheKey(workshopId, assessmentId, mode) + cacheKey: this.getAssessmentFormDataCacheKey(workshopId, assessmentId, mode), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (offline) { diff --git a/src/addon/notes/providers/notes.ts b/src/addon/notes/providers/notes.ts index 78fb79c1c..006a78093 100644 --- a/src/addon/notes/providers/notes.ts +++ b/src/addon/notes/providers/notes.ts @@ -17,7 +17,7 @@ import { CoreAppProvider } from '@providers/app'; import { CoreLoggerProvider } from '@providers/logger'; import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreSitesProvider } from '@providers/sites'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; import { TranslateService } from '@ngx-translate/core'; import { CoreUserProvider } from '@core/user/providers/user'; import { AddonNotesOfflineProvider } from './notes-offline'; @@ -160,20 +160,23 @@ export class AddonNotesProvider { // The only way to detect if it's enabled is to perform a WS call. // We use an invalid user ID (-1) to avoid saving the note if the user has permissions. const data = { - notes: [ - { - userid: -1, - publishstate: 'personal', - courseid: courseId, - text: '', - format: 1 - } - ] - }; + notes: [ + { + userid: -1, + publishstate: 'personal', + courseid: courseId, + text: '', + format: 1 + } + ] + }, + preSets = { + updateFrequency: CoreSite.FREQUENCY_RARELY + }; /* Use .read to cache data and be able to check it in offline. This means that, if a user loses the capabilities to add notes, he'll still see the option in the app. */ - return this.utils.promiseWorks(site.read('core_notes_create_notes', data)); + return this.utils.promiseWorks(site.read('core_notes_create_notes', data, preSets)); }); } @@ -232,7 +235,8 @@ export class AddonNotesProvider { } const preSets: CoreSiteWSPreSets = { - cacheKey: this.getNotesCacheKey(courseId, userId) + cacheKey: this.getNotesCacheKey(courseId, userId), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; if (ignoreCache) { diff --git a/src/addon/notifications/providers/notifications.ts b/src/addon/notifications/providers/notifications.ts index 1cd0f9806..db8b5b62b 100644 --- a/src/addon/notifications/providers/notifications.ts +++ b/src/addon/notifications/providers/notifications.ts @@ -21,6 +21,7 @@ import { CoreTimeUtilsProvider } from '@providers/utils/time'; import { CoreUserProvider } from '@core/user/providers/user'; import { CoreEmulatorHelperProvider } from '@core/emulator/providers/helper'; import { AddonMessagesProvider } from '@addon/messages/providers/messages'; +import { CoreSite } from '@classes/site'; /** * Service to handle notifications. @@ -121,7 +122,8 @@ export class AddonNotificationsProvider { return this.sitesProvider.getSite(siteId).then((site) => { const preSets = { - cacheKey: this.getNotificationPreferencesCacheKey() + cacheKey: this.getNotificationPreferencesCacheKey(), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('core_message_get_user_notification_preferences', {}, preSets).then((data) => { diff --git a/src/core/comments/providers/comments.ts b/src/core/comments/providers/comments.ts index 2d876990d..9808a0c83 100644 --- a/src/core/comments/providers/comments.ts +++ b/src/core/comments/providers/comments.ts @@ -102,7 +102,8 @@ export class CoreCommentsProvider { }; const preSets = { - cacheKey: this.getCommentsCacheKey(contextLevel, instanceId, component, itemId, area, page) + cacheKey: this.getCommentsCacheKey(contextLevel, instanceId, component, itemId, area, page), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('core_comment_get_comments', params, preSets).then((response) => { diff --git a/src/core/course/providers/course.ts b/src/core/course/providers/course.ts index af6daecd4..1815352ea 100644 --- a/src/core/course/providers/course.ts +++ b/src/core/course/providers/course.ts @@ -258,7 +258,8 @@ export class CoreCourseProvider { courseid: courseId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getCourseBlocksCacheKey(courseId) + cacheKey: this.getCourseBlocksCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_block_get_course_blocks', params, preSets).then((result) => { @@ -336,7 +337,8 @@ export class CoreCourseProvider { options: [] }; const preSets: CoreSiteWSPreSets = { - omitExpires: preferCache + omitExpires: preferCache, + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (includeStealth) { @@ -446,7 +448,8 @@ export class CoreCourseProvider { cmid: moduleId }, preSets = { - cacheKey: this.getModuleCacheKey(moduleId) + cacheKey: this.getModuleCacheKey(moduleId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_course_get_course_module', params, preSets).then((response) => { @@ -502,7 +505,8 @@ export class CoreCourseProvider { module: module }, preSets = { - cacheKey: this.getModuleBasicInfoByInstanceCacheKey(id, module) + cacheKey: this.getModuleBasicInfoByInstanceCacheKey(id, module), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_course_get_course_module_by_instance', params, preSets).then((response) => { @@ -629,6 +633,7 @@ export class CoreCourseProvider { return this.sitesProvider.getSite(siteId).then((site) => { preSets = preSets || {}; preSets.cacheKey = this.getSectionsCacheKey(courseId); + preSets.updateFrequency = preSets.updateFrequency || CoreSite.FREQUENCY_RARELY; const params = { courseid: courseId, diff --git a/src/core/courses/providers/courses.ts b/src/core/courses/providers/courses.ts index 21c22ebbf..9f53303c2 100644 --- a/src/core/courses/providers/courses.ts +++ b/src/core/courses/providers/courses.ts @@ -63,7 +63,8 @@ export class CoreCoursesProvider { addsubcategories: addSubcategories ? 1 : 0 }, preSets = { - cacheKey: this.getCategoriesCacheKey(categoryId, addSubcategories) + cacheKey: this.getCategoriesCacheKey(categoryId, addSubcategories), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_course_get_categories', data, preSets); @@ -271,7 +272,8 @@ export class CoreCoursesProvider { courseid: id }, preSets = { - cacheKey: this.getCourseEnrolmentMethodsCacheKey(id) + cacheKey: this.getCourseEnrolmentMethodsCacheKey(id), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_enrol_get_course_enrolment_methods', params, preSets); @@ -301,7 +303,8 @@ export class CoreCoursesProvider { instanceid: instanceId }, preSets = { - cacheKey: this.getCourseGuestEnrolmentInfoCacheKey(instanceId) + cacheKey: this.getCourseGuestEnrolmentInfoCacheKey(instanceId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('enrol_guest_get_instance_info', params, preSets).then((response) => { @@ -343,7 +346,8 @@ export class CoreCoursesProvider { } }, preSets = { - cacheKey: this.getCoursesCacheKey(ids) + cacheKey: this.getCoursesCacheKey(ids), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_course_get_courses', data, preSets); @@ -445,7 +449,8 @@ export class CoreCoursesProvider { value: field ? value : '' }, preSets = { - cacheKey: this.getCoursesByFieldCacheKey(field, value) + cacheKey: this.getCoursesByFieldCacheKey(field, value), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_course_get_courses_by_field', data, preSets).then((courses) => { @@ -604,7 +609,8 @@ export class CoreCoursesProvider { courseids: courseIds }, preSets = { - cacheKey: this.getUserAdministrationOptionsCacheKey(courseIds) + cacheKey: this.getUserAdministrationOptionsCacheKey(courseIds), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_course_get_user_administration_options', params, preSets).then((response) => { @@ -650,7 +656,8 @@ export class CoreCoursesProvider { courseids: courseIds }, preSets = { - cacheKey: this.getUserNavigationOptionsCacheKey(courseIds) + cacheKey: this.getUserNavigationOptionsCacheKey(courseIds), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_course_get_user_navigation_options', params, preSets).then((response) => { @@ -728,7 +735,8 @@ export class CoreCoursesProvider { preSets = { cacheKey: this.getUserCoursesCacheKey(), getCacheUsingCacheKey: true, - omitExpires: !!preferCache + omitExpires: !!preferCache, + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (site.isVersionGreaterEqualThan('3.7')) { diff --git a/src/core/courses/providers/dashboard.ts b/src/core/courses/providers/dashboard.ts index 5f2a2792d..24ac80e2c 100644 --- a/src/core/courses/providers/dashboard.ts +++ b/src/core/courses/providers/dashboard.ts @@ -49,7 +49,8 @@ export class CoreCoursesDashboardProvider { const params = { }, preSets = { - cacheKey: this.getDashboardBlocksCacheKey(userId) + cacheKey: this.getDashboardBlocksCacheKey(userId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (userId) { diff --git a/src/core/rating/providers/rating.ts b/src/core/rating/providers/rating.ts index 1b9104459..1b482dd08 100644 --- a/src/core/rating/providers/rating.ts +++ b/src/core/rating/providers/rating.ts @@ -251,7 +251,8 @@ export class CoreRatingProvider { sort: sort }; const preSets: CoreSiteWSPreSets = { - cacheKey: this.getItemRatingsCacheKey(contextLevel, instanceId, component, ratingArea, itemId, scaleId, sort) + cacheKey: this.getItemRatingsCacheKey(contextLevel, instanceId, component, ratingArea, itemId, scaleId, sort), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { preSets.getFromCache = false; diff --git a/src/core/siteplugins/providers/siteplugins.ts b/src/core/siteplugins/providers/siteplugins.ts index 20036c9be..8739e4722 100644 --- a/src/core/siteplugins/providers/siteplugins.ts +++ b/src/core/siteplugins/providers/siteplugins.ts @@ -234,6 +234,8 @@ export class CoreSitePluginsProvider { preSets = preSets || {}; preSets.cacheKey = this.getContentCacheKey(component, method, args); + preSets.updateFrequency = typeof preSets.updateFrequency != 'undefined' ? preSets.updateFrequency : + CoreSite.FREQUENCY_OFTEN; return this.sitesProvider.getCurrentSite().read('tool_mobile_get_content', data, preSets); }).then((result) => { diff --git a/src/core/user/providers/user.ts b/src/core/user/providers/user.ts index aa844e9e3..5b6141006 100644 --- a/src/core/user/providers/user.ts +++ b/src/core/user/providers/user.ts @@ -151,7 +151,8 @@ export class CoreUserProvider { } ] }, preSets: any = { - cacheKey: this.getParticipantsListCacheKey(courseId) + cacheKey: this.getParticipantsListCacheKey(courseId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { @@ -235,7 +236,8 @@ export class CoreUserProvider { protected getUserFromWS(userId: number, courseId?: number, siteId?: string): Promise { return this.sitesProvider.getSite(siteId).then((site) => { const presets = { - cacheKey: this.getUserCacheKey(userId) + cacheKey: this.getUserCacheKey(userId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; let wsName, data; @@ -329,7 +331,8 @@ export class CoreUserProvider { return this.sitesProvider.getSite(siteId).then((site) => { const data = { name }; const preSets: CoreSiteWSPreSets = { - cacheKey: this.getUserPreferenceCacheKey(data.name) + cacheKey: this.getUserPreferenceCacheKey(data.name), + updateFrequency: CoreSite.FREQUENCY_SOMETIMES }; return site.read('core_user_get_user_preferences', data, preSets).then((result) => { diff --git a/src/providers/groups.ts b/src/providers/groups.ts index f2ce0b146..a6507bc1f 100644 --- a/src/providers/groups.ts +++ b/src/providers/groups.ts @@ -16,7 +16,7 @@ import { Injectable } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; import { CoreSitesProvider } from './sites'; import { CoreCoursesProvider } from '@core/courses/providers/courses'; -import { CoreSiteWSPreSets } from '@classes/site'; +import { CoreSite, CoreSiteWSPreSets } from '@classes/site'; /** * Group info for an activity. @@ -89,7 +89,8 @@ export class CoreGroupsProvider { userid: userId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getActivityAllowedGroupsCacheKey(cmId, userId) + cacheKey: this.getActivityAllowedGroupsCacheKey(cmId, userId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { @@ -196,7 +197,8 @@ export class CoreGroupsProvider { cmid: cmId }, preSets: CoreSiteWSPreSets = { - cacheKey: this.getActivityGroupModeCacheKey(cmId) + cacheKey: this.getActivityGroupModeCacheKey(cmId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; if (ignoreCache) { @@ -283,7 +285,8 @@ export class CoreGroupsProvider { courseid: courseId }, preSets = { - cacheKey: this.getUserGroupsInCourseCacheKey(courseId, userId) + cacheKey: this.getUserGroupsInCourseCacheKey(courseId, userId), + updateFrequency: CoreSite.FREQUENCY_RARELY }; return site.read('core_group_get_course_user_groups', data, preSets).then((response) => { From 5356418f681bee29db086385f0270cec446e5e15 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Mon, 20 May 2019 13:12:24 +0200 Subject: [PATCH 3/3] MOBILE-3036 forum: Fix used WS not invalidated in discussion --- src/addon/mod/forum/pages/discussion/discussion.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/addon/mod/forum/pages/discussion/discussion.ts b/src/addon/mod/forum/pages/discussion/discussion.ts index 3f4405bb9..d145ca7f3 100644 --- a/src/addon/mod/forum/pages/discussion/discussion.ts +++ b/src/addon/mod/forum/pages/discussion/discussion.ts @@ -472,7 +472,8 @@ export class AddonModForumDiscussionPage implements OnDestroy { const promises = [ this.forumProvider.invalidateForumData(this.courseId), this.forumProvider.invalidateDiscussionPosts(this.discussionId), - this.forumProvider.invalidateAccessInformation(this.forumId) + this.forumProvider.invalidateAccessInformation(this.forumId), + this.forumProvider.invalidateCanAddDiscussion(this.forumId) ]; return this.utils.allPromises(promises).catch(() => {