From 5794b66cd95a503f932b473af20e3b3e9078a1f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Thu, 16 Dec 2021 13:30:33 +0100 Subject: [PATCH] MOBILE-3833 completion: Remove course name from completion objects --- .../course/pages/contents/contents.ts | 5 +++- .../features/course/services/course-helper.ts | 3 +- .../course/services/course-offline.ts | 3 +- src/core/features/course/services/course.ts | 4 +-- .../course/services/database/course.ts | 3 +- src/core/features/course/services/sync.ts | 30 +++++++++++++------ 6 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/core/features/course/pages/contents/contents.ts b/src/core/features/course/pages/contents/contents.ts index 69bbfe521..768cfc65f 100644 --- a/src/core/features/course/pages/contents/contents.ts +++ b/src/core/features/course/pages/contents/contents.ts @@ -256,7 +256,10 @@ export class CoreCourseContentsPage implements OnInit, OnDestroy { if (sync) { // Try to synchronize the course data. // For now we don't allow manual syncing, so ignore errors. - const result = await CoreUtils.ignoreErrors(CoreCourseSync.syncCourse(this.course.id)); + const result = await CoreUtils.ignoreErrors(CoreCourseSync.syncCourse( + this.course.id, + this.course.displayname || this.course.fullname, + )); if (result?.warnings?.length) { CoreDomUtils.showErrorModal(result.warnings[0]); } diff --git a/src/core/features/course/services/course-helper.ts b/src/core/features/course/services/course-helper.ts index 733d4a843..53ff749db 100644 --- a/src/core/features/course/services/course-helper.ts +++ b/src/core/features/course/services/course-helper.ts @@ -164,7 +164,7 @@ export class CoreCourseHelperProvider { * @param sections List of sections to treat modules. * @param courseId Course ID of the modules. * @param completionStatus List of completion status. - * @param courseName Course name. Recommended if completionStatus is supplied. + * @param courseName Not used since 4.0 * @param forCoursePage Whether the data will be used to render the course page. * @return Whether the sections have content. */ @@ -210,7 +210,6 @@ export class CoreCourseHelperProvider { valueused: activityStatus.valueused, tracking: activityStatus.tracking, courseId, - courseName, cmid: module.id, }; } diff --git a/src/core/features/course/services/course-offline.ts b/src/core/features/course/services/course-offline.ts index d6ae57611..033c9f551 100644 --- a/src/core/features/course/services/course-offline.ts +++ b/src/core/features/course/services/course-offline.ts @@ -81,7 +81,7 @@ export class CoreCourseOfflineProvider { * @param cmId The module ID to store the completion. * @param completed Whether the module is completed or not. * @param courseId Course ID the module belongs to. - * @param courseName Course name. Recommended, it is used to display a better warning message. + * @param courseName Not used since 4.0. * @param siteId Site ID. If not defined, current site. * @return Promise resolved when completion is successfully stored. */ @@ -99,7 +99,6 @@ export class CoreCourseOfflineProvider { cmid: cmId, completed: completed ? 1 : 0, courseid: courseId, - coursename: courseName || '', timecompleted: Date.now(), }; await site.getDb().insertRecord(MANUAL_COMPLETION_TABLE, entry); diff --git a/src/core/features/course/services/course.ts b/src/core/features/course/services/course.ts index 55e848c58..279750440 100644 --- a/src/core/features/course/services/course.ts +++ b/src/core/features/course/services/course.ts @@ -1041,7 +1041,7 @@ export class CoreCourseProvider { * @param cmId The module ID. * @param completed Whether the module is completed or not. * @param courseId Course ID the module belongs to. - * @param courseName Course name. Recommended, it is used to display a better warning message. + * @param courseName Not used since 4.0. * @param siteId Site ID. If not defined, current site. * @return Promise resolved when completion is successfully sent or stored. */ @@ -1057,7 +1057,7 @@ export class CoreCourseProvider { // Convenience function to store a completion to be synchronized later. const storeOffline = (): Promise => - CoreCourseOffline.markCompletedManually(cmId, completed, courseId, courseName, siteId); + CoreCourseOffline.markCompletedManually(cmId, completed, courseId, undefined, siteId); // The offline function requires a courseId and it could be missing because it's a calculated field. if (!CoreApp.isOnline()) { diff --git a/src/core/features/course/services/database/course.ts b/src/core/features/course/services/database/course.ts index db0305c68..7869b8a55 100644 --- a/src/core/features/course/services/database/course.ts +++ b/src/core/features/course/services/database/course.ts @@ -81,7 +81,7 @@ export const OFFLINE_SITE_SCHEMA: CoreSiteSchema = { type: 'INTEGER', }, { - name: 'coursename', + name: 'coursename', // Not used since 4.0 it can be safely removed. type: 'TEXT', }, { @@ -106,6 +106,5 @@ export type CoreCourseManualCompletionDBRecord = { cmid: number; completed: number; courseid: number; - coursename: string; timecompleted: number; }; diff --git a/src/core/features/course/services/sync.ts b/src/core/features/course/services/sync.ts index 3b29dc151..9d3899dba 100644 --- a/src/core/features/course/services/sync.ts +++ b/src/core/features/course/services/sync.ts @@ -28,6 +28,7 @@ import { CoreCourseManualCompletionDBRecord } from './database/course'; import { CoreNetworkError } from '@classes/errors/network-error'; import { makeSingleton, Translate } from '@singletons'; import { CoreEvents } from '@singletons/events'; +import { CoreCourses } from '@features/courses/services/courses'; /** * Service to sync course offline data. This only syncs the offline data of the course itself, not the offline data of @@ -77,10 +78,18 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider { const completions = await CoreCourseOffline.getAllManualCompletions(siteId); + const courseNames: Record = {}; + // Sync all courses. await Promise.all(completions.map(async (completion) => { - const result = await (force ? this.syncCourse(completion.courseid, siteId) : - this.syncCourseIfNeeded(completion.courseid, siteId)); + if (courseNames[completion.courseid] === undefined) { + const course = await CoreUtils.ignoreErrors(CoreCourses.getUserCourse(completion.courseid, true, siteId)); + + courseNames[completion.courseid] = course?.displayname || course?.fullname; + } + + const result = await (force ? this.syncCourse(completion.courseid, courseNames[completion.courseid], siteId) : + this.syncCourseIfNeeded(completion.courseid, courseNames[completion.courseid], siteId)); if (!result || !result.updated) { return; @@ -98,23 +107,25 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider { + syncCourseIfNeeded(courseId: number, courseName?: string, siteId?: string): Promise { // Usually we call isSyncNeeded to check if a certain time has passed. // However, since we barely send data for now just sync the course. - return this.syncCourse(courseId, siteId); + return this.syncCourse(courseId, courseName, siteId); } /** * Synchronize a course. * * @param courseId Course ID to be synced. + * @param courseName Course Name to be synced. * @param siteId Site ID. If not defined, current site. * @return Promise resolved if sync is successful, rejected otherwise. */ - async syncCourse(courseId: number, siteId?: string): Promise { + async syncCourse(courseId: number, courseName?: string, siteId?: string): Promise { siteId = siteId || CoreSites.getCurrentSiteId(); const currentSyncPromise = this.getOngoingSync(courseId, siteId); @@ -125,17 +136,18 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider { + protected async syncCourseCompletion(courseId: number, courseName?: string, siteId?: string): Promise { const result: CoreCourseSyncResult = { warnings: [], updated: false, @@ -182,7 +194,7 @@ export class CoreCourseSyncProvider extends CoreSyncBaseProvider