mirror of
https://github.com/getgrav/grav-plugin-admin.git
synced 2025-11-01 19:06:16 +01:00
fix stuck progress at 80% - part deux
This commit is contained in:
@@ -186,6 +186,78 @@ class SafeUpgradeManager
|
|||||||
$this->writeManifest($data);
|
$this->writeManifest($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function ensureJobResult(array $result): void
|
||||||
|
{
|
||||||
|
if (!$this->jobManifestPath) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$status = $result['status'] ?? null;
|
||||||
|
$progress = $this->getProgress();
|
||||||
|
|
||||||
|
if ($status === 'success') {
|
||||||
|
$targetVersion = $result['version'] ?? ($result['manifest']['target_version'] ?? null);
|
||||||
|
$manifest = $result['manifest'] ?? null;
|
||||||
|
|
||||||
|
if (($progress['stage'] ?? null) !== 'complete') {
|
||||||
|
$extras = [];
|
||||||
|
if ($targetVersion !== null) {
|
||||||
|
$extras['target_version'] = $targetVersion;
|
||||||
|
}
|
||||||
|
if ($manifest !== null) {
|
||||||
|
$extras['manifest'] = $manifest;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->setProgress('complete', 'Upgrade complete.', 100, $extras);
|
||||||
|
$progress = $this->getProgress();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->updateJob([
|
||||||
|
'status' => 'success',
|
||||||
|
'completed_at' => time(),
|
||||||
|
'result' => $result,
|
||||||
|
'progress' => $progress,
|
||||||
|
]);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($status === 'error') {
|
||||||
|
$message = $result['message'] ?? 'Safe upgrade failed.';
|
||||||
|
if (($progress['stage'] ?? null) !== 'error') {
|
||||||
|
$this->setProgress('error', $message, null, ['message' => $message]);
|
||||||
|
$progress = $this->getProgress();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->updateJob([
|
||||||
|
'status' => 'error',
|
||||||
|
'completed_at' => time(),
|
||||||
|
'result' => $result,
|
||||||
|
'progress' => $progress,
|
||||||
|
'error' => $message,
|
||||||
|
]);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($status === 'noop' || $status === 'finalized') {
|
||||||
|
if (($progress['stage'] ?? null) !== 'complete') {
|
||||||
|
$this->setProgress('complete', $progress['message'] ?? 'Upgrade complete.', 100, [
|
||||||
|
'target_version' => $result['version'] ?? null,
|
||||||
|
'manifest' => $result['manifest'] ?? null,
|
||||||
|
]);
|
||||||
|
$progress = $this->getProgress();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->updateJob([
|
||||||
|
'status' => $status,
|
||||||
|
'completed_at' => time(),
|
||||||
|
'result' => $result,
|
||||||
|
'progress' => $progress,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function markJobError(string $message): void
|
public function markJobError(string $message): void
|
||||||
{
|
{
|
||||||
$this->setProgress('error', $message, null, ['message' => $message]);
|
$this->setProgress('error', $message, null, ['message' => $message]);
|
||||||
|
|||||||
@@ -445,8 +445,9 @@ export default class SafeUpgrade {
|
|||||||
|
|
||||||
this.pollTimer = null;
|
this.pollTimer = null;
|
||||||
let nextStage = null;
|
let nextStage = null;
|
||||||
|
let jobComplete = false;
|
||||||
let shouldContinue = true;
|
let jobFailed = false;
|
||||||
|
let shouldReload = false;
|
||||||
|
|
||||||
console.debug('[SafeUpgrade] poll status');
|
console.debug('[SafeUpgrade] poll status');
|
||||||
|
|
||||||
@@ -464,6 +465,7 @@ export default class SafeUpgrade {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
nextStage = 'error';
|
nextStage = 'error';
|
||||||
|
jobFailed = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -475,16 +477,32 @@ export default class SafeUpgrade {
|
|||||||
this.renderProgress(data, job);
|
this.renderProgress(data, job);
|
||||||
|
|
||||||
if (job.status === 'error') {
|
if (job.status === 'error') {
|
||||||
shouldContinue = false;
|
|
||||||
nextStage = 'error';
|
nextStage = 'error';
|
||||||
const message = job.error || data.message || t('SAFE_UPGRADE_GENERIC_ERROR', 'Safe upgrade could not complete. See Grav logs for details.');
|
const message = job.error || data.message || t('SAFE_UPGRADE_GENERIC_ERROR', 'Safe upgrade could not complete. See Grav logs for details.');
|
||||||
this.renderResult({ status: 'error', message });
|
this.renderProgress({
|
||||||
} else if (job.status === 'success' && data.stage === 'complete') {
|
stage: 'error',
|
||||||
shouldContinue = false;
|
message,
|
||||||
nextStage = 'complete';
|
percent: null
|
||||||
if (job.result) {
|
}, job);
|
||||||
this.renderResult(job.result);
|
jobFailed = true;
|
||||||
|
} else if (job.status === 'success') {
|
||||||
|
if (data.stage !== 'complete') {
|
||||||
|
const completePayload = {
|
||||||
|
stage: 'complete',
|
||||||
|
message: t('SAFE_UPGRADE_STAGE_COMPLETE', 'Upgrade complete'),
|
||||||
|
percent: 100,
|
||||||
|
target_version: (job.result && job.result.version) || data.target_version || null,
|
||||||
|
manifest: (job.result && job.result.manifest) || data.manifest || null
|
||||||
|
};
|
||||||
|
|
||||||
|
this.renderProgress(completePayload, job);
|
||||||
|
nextStage = 'complete';
|
||||||
}
|
}
|
||||||
|
jobComplete = true;
|
||||||
|
shouldReload = true;
|
||||||
|
} else if (!job.status && data.stage === 'complete') {
|
||||||
|
jobComplete = true;
|
||||||
|
shouldReload = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -495,17 +513,17 @@ export default class SafeUpgrade {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nextStage === 'complete' || nextStage === 'error') {
|
if (jobFailed) {
|
||||||
this.stopPolling();
|
this.stopPolling();
|
||||||
this.jobId = null;
|
this.jobId = null;
|
||||||
if (nextStage === 'complete') {
|
} else if (jobComplete || nextStage === 'complete') {
|
||||||
|
this.stopPolling();
|
||||||
|
this.jobId = null;
|
||||||
|
if (shouldReload) {
|
||||||
setTimeout(() => window.location.reload(), 2500);
|
setTimeout(() => window.location.reload(), 2500);
|
||||||
}
|
}
|
||||||
} else if (shouldContinue) {
|
|
||||||
this.schedulePoll();
|
|
||||||
} else {
|
} else {
|
||||||
this.stopPolling();
|
this.schedulePoll();
|
||||||
this.jobId = null;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
51
themes/grav/js/admin.min.js
vendored
51
themes/grav/js/admin.min.js
vendored
@@ -4923,7 +4923,9 @@ var SafeUpgrade = /*#__PURE__*/function () {
|
|||||||
}
|
}
|
||||||
this.pollTimer = null;
|
this.pollTimer = null;
|
||||||
var nextStage = null;
|
var nextStage = null;
|
||||||
var shouldContinue = true;
|
var jobComplete = false;
|
||||||
|
var jobFailed = false;
|
||||||
|
var shouldReload = false;
|
||||||
console.debug('[SafeUpgrade] poll status');
|
console.debug('[SafeUpgrade] poll status');
|
||||||
var statusUrl = this.jobId ? "".concat(this.urls.status, "?job=").concat(encodeURIComponent(this.jobId)) : this.urls.status;
|
var statusUrl = this.jobId ? "".concat(this.urls.status, "?job=").concat(encodeURIComponent(this.jobId)) : this.urls.status;
|
||||||
this.statusRequest = utils_request(statusUrl, function (response) {
|
this.statusRequest = utils_request(statusUrl, function (response) {
|
||||||
@@ -4937,6 +4939,7 @@ var SafeUpgrade = /*#__PURE__*/function () {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
nextStage = 'error';
|
nextStage = 'error';
|
||||||
|
jobFailed = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var payload = response.data || {};
|
var payload = response.data || {};
|
||||||
@@ -4945,19 +4948,31 @@ var SafeUpgrade = /*#__PURE__*/function () {
|
|||||||
nextStage = data.stage || null;
|
nextStage = data.stage || null;
|
||||||
_this6.renderProgress(data, job);
|
_this6.renderProgress(data, job);
|
||||||
if (job.status === 'error') {
|
if (job.status === 'error') {
|
||||||
shouldContinue = false;
|
|
||||||
nextStage = 'error';
|
nextStage = 'error';
|
||||||
var message = job.error || data.message || t('SAFE_UPGRADE_GENERIC_ERROR', 'Safe upgrade could not complete. See Grav logs for details.');
|
var message = job.error || data.message || t('SAFE_UPGRADE_GENERIC_ERROR', 'Safe upgrade could not complete. See Grav logs for details.');
|
||||||
_this6.renderResult({
|
_this6.renderProgress({
|
||||||
status: 'error',
|
stage: 'error',
|
||||||
message: message
|
message: message,
|
||||||
});
|
percent: null
|
||||||
} else if (job.status === 'success' && data.stage === 'complete') {
|
}, job);
|
||||||
shouldContinue = false;
|
jobFailed = true;
|
||||||
nextStage = 'complete';
|
} else if (job.status === 'success') {
|
||||||
if (job.result) {
|
if (data.stage !== 'complete') {
|
||||||
_this6.renderResult(job.result);
|
var completePayload = {
|
||||||
|
stage: 'complete',
|
||||||
|
message: t('SAFE_UPGRADE_STAGE_COMPLETE', 'Upgrade complete'),
|
||||||
|
percent: 100,
|
||||||
|
target_version: job.result && job.result.version || data.target_version || null,
|
||||||
|
manifest: job.result && job.result.manifest || data.manifest || null
|
||||||
|
};
|
||||||
|
_this6.renderProgress(completePayload, job);
|
||||||
|
nextStage = 'complete';
|
||||||
}
|
}
|
||||||
|
jobComplete = true;
|
||||||
|
shouldReload = true;
|
||||||
|
} else if (!job.status && data.stage === 'complete') {
|
||||||
|
jobComplete = true;
|
||||||
|
shouldReload = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
var finalize = function finalize() {
|
var finalize = function finalize() {
|
||||||
@@ -4965,19 +4980,19 @@ var SafeUpgrade = /*#__PURE__*/function () {
|
|||||||
if (!_this6.isPolling) {
|
if (!_this6.isPolling) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (nextStage === 'complete' || nextStage === 'error') {
|
if (jobFailed) {
|
||||||
_this6.stopPolling();
|
_this6.stopPolling();
|
||||||
_this6.jobId = null;
|
_this6.jobId = null;
|
||||||
if (nextStage === 'complete') {
|
} else if (jobComplete || nextStage === 'complete') {
|
||||||
|
_this6.stopPolling();
|
||||||
|
_this6.jobId = null;
|
||||||
|
if (shouldReload) {
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
return window.location.reload();
|
return window.location.reload();
|
||||||
}, 2500);
|
}, 2500);
|
||||||
}
|
}
|
||||||
} else if (shouldContinue) {
|
|
||||||
_this6.schedulePoll();
|
|
||||||
} else {
|
} else {
|
||||||
_this6.stopPolling();
|
_this6.schedulePoll();
|
||||||
_this6.jobId = null;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
this.statusRequest.then(finalize, finalize);
|
this.statusRequest.then(finalize, finalize);
|
||||||
@@ -14246,4 +14261,4 @@ external_jQuery_default()(__webpack_require__.g).on('sidebar_state._grav', funct
|
|||||||
/******/ Grav = __webpack_exports__;
|
/******/ Grav = __webpack_exports__;
|
||||||
/******/
|
/******/
|
||||||
/******/ })()
|
/******/ })()
|
||||||
;
|
;
|
||||||
|
|||||||
Reference in New Issue
Block a user