| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import {hideElem, showElem, type DOMEvent} from '../utils/dom.ts';
- import {GET, POST} from '../modules/fetch.ts';
-
- export function initRepoMigrationStatusChecker() {
- const repoMigrating = document.querySelector('#repo_migrating');
- if (!repoMigrating) return;
-
- document.querySelector<HTMLButtonElement>('#repo_migrating_retry')?.addEventListener('click', doMigrationRetry);
-
- const repoLink = repoMigrating.getAttribute('data-migrating-repo-link');
-
- // returns true if the refresh still needs to be called after a while
- const refresh = async () => {
- const res = await GET(`${repoLink}/-/migrate/status`);
- if (res.status !== 200) return true; // continue to refresh if network error occurs
-
- const data = await res.json();
-
- // for all status
- if (data.message) {
- document.querySelector('#repo_migrating_progress_message').textContent = data.message;
- }
-
- // TaskStatusFinished
- if (data.status === 4) {
- window.location.reload();
- return false;
- }
-
- // TaskStatusFailed
- if (data.status === 3) {
- hideElem('#repo_migrating_progress');
- hideElem('#repo_migrating');
- showElem('#repo_migrating_retry');
- showElem('#repo_migrating_failed');
- showElem('#repo_migrating_failed_image');
- document.querySelector('#repo_migrating_failed_error').textContent = data.message;
- return false;
- }
-
- return true; // continue to refresh
- };
-
- const syncTaskStatus = async () => {
- let doNextRefresh = true;
- try {
- doNextRefresh = await refresh();
- } finally {
- if (doNextRefresh) {
- setTimeout(syncTaskStatus, 2000);
- }
- }
- };
-
- syncTaskStatus(); // no await
- }
-
- async function doMigrationRetry(e: DOMEvent<MouseEvent>) {
- await POST(e.target.getAttribute('data-migrating-task-retry-url'));
- window.location.reload();
- }
|