From bf235058647d0ff5a8bc186b65ece2487d1e749d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Fri, 8 Mar 2019 16:30:59 +0100 Subject: [PATCH] MOBILE-2873 quiz: Avoid start new attempt if first synced --- .../mod/quiz/providers/prefetch-handler.ts | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/addon/mod/quiz/providers/prefetch-handler.ts b/src/addon/mod/quiz/providers/prefetch-handler.ts index 9c9c65704..b4ec1137c 100644 --- a/src/addon/mod/quiz/providers/prefetch-handler.ts +++ b/src/addon/mod/quiz/providers/prefetch-handler.ts @@ -239,7 +239,16 @@ export class AddonModQuizPrefetchHandler extends CoreCourseActivityPrefetchHandl * @return {Promise} Promise resolved when done. */ prefetch(module: any, courseId?: number, single?: boolean, dirPath?: string, canStart: boolean = true): Promise { + if (module.attemptFinished) { + // Delete the value so it does not block anything if true. + delete module.attemptFinished; + + // Quiz got synced recently and an attempt has finished. Do not prefetch. + return Promise.resolve(); + } + return this.prefetchPackage(module, courseId, single, this.prefetchQuiz.bind(this), undefined, canStart); + } /** @@ -559,16 +568,25 @@ export class AddonModQuizPrefetchHandler extends CoreCourseActivityPrefetchHandl * Sync a module. * * @param {any} module Module. + * @param {number} courseId Course ID the module belongs to * @param {string} [siteId] Site ID. If not defined, current site. * @return {Promise} Promise resolved when done. */ - sync(module: any, siteId?: string): Promise { + sync(module: any, courseId: number, siteId?: any): Promise { if (!this.syncProvider) { this.syncProvider = this.injector.get(AddonModQuizSyncProvider); } - return this.quizProvider.getQuiz(module.course, module.id).then((quiz) => { - return this.syncProvider.syncQuiz(quiz, false, siteId); + return this.quizProvider.getQuiz(courseId, module.id).then((quiz) => { + return this.syncProvider.syncQuiz(quiz, false, siteId).then((results) => { + module.attemptFinished = (results && results.attemptFinished) || false; + + return results; + }).catch(() => { + // Ignore errors. + + module.attemptFinished = false; + }); }); } }