MOBILE-4550 quiz: Remove unneded calls to get review WS
parent
cdb56d172e
commit
bc88cac82a
|
@ -196,15 +196,9 @@ export class AddonModQuizIndexComponent extends CoreCourseModuleMainActivityComp
|
|||
if (AddonModQuiz.isQuizOffline(quiz)) {
|
||||
if (sync) {
|
||||
// Try to sync the quiz.
|
||||
try {
|
||||
await this.syncActivity(showErrors);
|
||||
} catch {
|
||||
// Ignore errors, keep getting data even if sync fails.
|
||||
this.autoReview = undefined;
|
||||
}
|
||||
await CoreUtils.ignoreErrors(this.syncActivity(showErrors));
|
||||
}
|
||||
} else {
|
||||
this.autoReview = undefined;
|
||||
this.showStatusSpinner = false;
|
||||
}
|
||||
|
||||
|
@ -400,7 +394,7 @@ export class AddonModQuizIndexComponent extends CoreCourseModuleMainActivityComp
|
|||
*
|
||||
* @returns Promise resolved when done.
|
||||
*/
|
||||
protected async goToAutoReview(): Promise<void> {
|
||||
protected async goToAutoReview(attempts: AddonModQuizAttemptWSData[]): Promise<void> {
|
||||
if (!this.autoReview) {
|
||||
return;
|
||||
}
|
||||
|
@ -409,20 +403,19 @@ export class AddonModQuizIndexComponent extends CoreCourseModuleMainActivityComp
|
|||
this.checkCompletion();
|
||||
|
||||
// Verify that user can see the review.
|
||||
const attemptId = this.autoReview.attemptId;
|
||||
const attempt = attempts.find(attempt => attempt.id === this.autoReview?.attemptId);
|
||||
this.autoReview = undefined;
|
||||
|
||||
if (this.quizAccessInfo?.canreviewmyattempts) {
|
||||
try {
|
||||
await AddonModQuiz.getAttemptReview(attemptId, { page: -1, cmId: this.module.id });
|
||||
|
||||
await CoreNavigator.navigateToSitePath(
|
||||
`${AddonModQuizModuleHandlerService.PAGE_NAME}/${this.courseId}/${this.module.id}/review/${attemptId}`,
|
||||
);
|
||||
} catch {
|
||||
// Ignore errors.
|
||||
}
|
||||
if (!this.quiz || !this.quizAccessInfo || !attempt) {
|
||||
return;
|
||||
}
|
||||
|
||||
const canReview = await AddonModQuizHelper.canReviewAttempt(this.quiz, this.quizAccessInfo, attempt);
|
||||
if (!canReview) {
|
||||
return;
|
||||
}
|
||||
|
||||
await this.reviewAttempt(attempt.id);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -451,22 +444,15 @@ export class AddonModQuizIndexComponent extends CoreCourseModuleMainActivityComp
|
|||
}
|
||||
|
||||
this.hasPlayed = false;
|
||||
let promise = Promise.resolve();
|
||||
|
||||
// Update data when we come back from the player since the attempt status could have changed.
|
||||
// Check if we need to go to review an attempt automatically.
|
||||
if (this.autoReview && this.autoReview.synced) {
|
||||
promise = this.goToAutoReview();
|
||||
}
|
||||
|
||||
// Refresh data.
|
||||
this.showLoading = true;
|
||||
this.content?.scrollToTop();
|
||||
|
||||
await promise;
|
||||
await CoreUtils.ignoreErrors(this.refreshContent(true));
|
||||
|
||||
this.showLoading = false;
|
||||
this.autoReview = undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -605,7 +591,7 @@ export class AddonModQuizIndexComponent extends CoreCourseModuleMainActivityComp
|
|||
const [options] = await Promise.all([
|
||||
AddonModQuiz.getCombinedReviewOptions(quiz.id, { cmId: this.module.id }),
|
||||
this.getQuizGrade(),
|
||||
openReview ? this.goToAutoReview() : undefined,
|
||||
openReview ? this.goToAutoReview(attempts) : undefined,
|
||||
]);
|
||||
|
||||
this.options = options;
|
||||
|
|
|
@ -380,7 +380,7 @@ export class AddonModQuizPrefetchHandlerService extends CoreCourseActivityPrefet
|
|||
|
||||
// We have quiz data, now we'll get specific data for each attempt.
|
||||
await Promise.all(attempts.map(async (attempt) => {
|
||||
await this.prefetchAttempt(quiz, attempt, preflightData, siteId);
|
||||
await this.prefetchAttempt(quiz, quizAccessInfo, attempt, preflightData, siteId);
|
||||
}));
|
||||
|
||||
if (!canStart) {
|
||||
|
@ -400,6 +400,7 @@ export class AddonModQuizPrefetchHandlerService extends CoreCourseActivityPrefet
|
|||
* Prefetch all WS data for an attempt.
|
||||
*
|
||||
* @param quiz Quiz.
|
||||
* @param accessInfo Quiz access info.
|
||||
* @param attempt Attempt.
|
||||
* @param preflightData Preflight required data (like password).
|
||||
* @param siteId Site ID. If not defined, current site.
|
||||
|
@ -407,11 +408,11 @@ export class AddonModQuizPrefetchHandlerService extends CoreCourseActivityPrefet
|
|||
*/
|
||||
async prefetchAttempt(
|
||||
quiz: AddonModQuizQuizWSData,
|
||||
accessInfo: AddonModQuizGetQuizAccessInformationWSResponse,
|
||||
attempt: AddonModQuizAttemptWSData,
|
||||
preflightData: Record<string, string>,
|
||||
siteId?: string,
|
||||
): Promise<void> {
|
||||
const pages = AddonModQuiz.getPagesFromLayout(attempt.layout);
|
||||
const isSequential = AddonModQuiz.isNavigationSequential(quiz);
|
||||
let promises: Promise<unknown>[] = [];
|
||||
|
||||
|
@ -429,16 +430,7 @@ export class AddonModQuizPrefetchHandlerService extends CoreCourseActivityPrefet
|
|||
promises.push(AddonModQuiz.getFeedbackForGrade(quiz.id, attemptGradeNumber, modOptions));
|
||||
}
|
||||
|
||||
// Get the review for each page.
|
||||
pages.forEach((page) => {
|
||||
promises.push(CoreUtils.ignoreErrors(AddonModQuiz.getAttemptReview(attempt.id, {
|
||||
page,
|
||||
...modOptions, // Include all options.
|
||||
})));
|
||||
});
|
||||
|
||||
// Get the review for all questions in same page.
|
||||
promises.push(this.prefetchAttemptReviewFiles(quiz, attempt, modOptions, siteId));
|
||||
promises.push(this.prefetchAttemptReview(quiz, accessInfo, attempt, modOptions));
|
||||
} else {
|
||||
|
||||
// Attempt not finished, get data needed to continue the attempt.
|
||||
|
@ -447,6 +439,8 @@ export class AddonModQuizPrefetchHandlerService extends CoreCourseActivityPrefet
|
|||
|
||||
if (attempt.state === AddonModQuizAttemptStates.IN_PROGRESS) {
|
||||
// Get data for each page.
|
||||
const pages = AddonModQuiz.getPagesFromLayout(attempt.layout);
|
||||
|
||||
promises = promises.concat(pages.map(async (page) => {
|
||||
if (isSequential && typeof attempt.currentpage === 'number' && page < attempt.currentpage) {
|
||||
// Sequential quiz, cannot get pages before the current one.
|
||||
|
@ -473,20 +467,57 @@ export class AddonModQuizPrefetchHandlerService extends CoreCourseActivityPrefet
|
|||
await Promise.all(promises);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prefetch attempt review data.
|
||||
*
|
||||
* @param quiz Quiz.
|
||||
* @param accessInfo Quiz access info.
|
||||
* @param attempt Attempt.
|
||||
* @param modOptions Other options.
|
||||
* @param siteId Site ID.
|
||||
* @returns Promise resolved when done.
|
||||
*/
|
||||
protected async prefetchAttemptReview(
|
||||
quiz: AddonModQuizQuizWSData,
|
||||
accessInfo: AddonModQuizGetQuizAccessInformationWSResponse,
|
||||
attempt: AddonModQuizAttemptWSData,
|
||||
modOptions: CoreCourseCommonModWSOptions,
|
||||
): Promise<void> {
|
||||
// Check if attempt can be reviewed.
|
||||
const canReview = await AddonModQuizHelper.canReviewAttempt(quiz, accessInfo, attempt);
|
||||
if (!canReview) {
|
||||
return;
|
||||
}
|
||||
|
||||
const pages = AddonModQuiz.getPagesFromLayout(attempt.layout);
|
||||
const promises: Promise<unknown>[] = [];
|
||||
|
||||
// Get the review for each page.
|
||||
pages.forEach((page) => {
|
||||
promises.push(CoreUtils.ignoreErrors(AddonModQuiz.getAttemptReview(attempt.id, {
|
||||
page,
|
||||
...modOptions, // Include all options.
|
||||
})));
|
||||
});
|
||||
|
||||
// Get the review for all questions in same page.
|
||||
promises.push(this.prefetchAttemptReviewFiles(quiz, attempt, modOptions));
|
||||
|
||||
await Promise.all(promises);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prefetch attempt review and its files.
|
||||
*
|
||||
* @param quiz Quiz.
|
||||
* @param attempt Attempt.
|
||||
* @param modOptions Other options.
|
||||
* @param siteId Site ID.
|
||||
* @returns Promise resolved when done.
|
||||
*/
|
||||
protected async prefetchAttemptReviewFiles(
|
||||
quiz: AddonModQuizQuizWSData,
|
||||
attempt: AddonModQuizAttemptWSData,
|
||||
modOptions: CoreCourseCommonModWSOptions,
|
||||
siteId?: string,
|
||||
): Promise<void> {
|
||||
// Get the review for all questions in same page.
|
||||
const data = await CoreUtils.ignoreErrors(AddonModQuiz.getAttemptReview(attempt.id, {
|
||||
|
@ -503,7 +534,7 @@ export class AddonModQuizPrefetchHandlerService extends CoreCourseActivityPrefet
|
|||
question,
|
||||
this.component,
|
||||
quiz.coursemodule,
|
||||
siteId,
|
||||
modOptions.siteId,
|
||||
attempt.uniqueid,
|
||||
);
|
||||
}));
|
||||
|
@ -569,7 +600,7 @@ export class AddonModQuizPrefetchHandlerService extends CoreCourseActivityPrefet
|
|||
preflightData = await this.getPreflightData(quiz, quizAccessInfo, lastAttempt, askPreflight, 'core.download', siteId);
|
||||
|
||||
// Get data for last attempt.
|
||||
await this.prefetchAttempt(quiz, lastAttempt, preflightData, siteId);
|
||||
await this.prefetchAttempt(quiz, quizAccessInfo, lastAttempt, preflightData, siteId);
|
||||
}
|
||||
|
||||
// Prefetch finished, set the right status.
|
||||
|
|
|
@ -513,7 +513,6 @@ export class AddonModQuizProvider {
|
|||
};
|
||||
const preSets = {
|
||||
cacheKey: this.getAttemptReviewCacheKey(attemptId, page),
|
||||
cacheErrors: ['noreview'],
|
||||
component: ADDON_MOD_QUIZ_COMPONENT,
|
||||
componentId: options.cmId,
|
||||
...CoreSites.getReadingStrategyPreSets(options.readingStrategy), // Include reading strategy preSets.
|
||||
|
|
Loading…
Reference in New Issue