code.gitea.io/gitea@v1.22.3/web_src/js/features/repo-migrate.js (about) 1 import {hideElem, showElem} from '../utils/dom.js'; 2 import {GET, POST} from '../modules/fetch.js'; 3 4 export function initRepoMigrationStatusChecker() { 5 const repoMigrating = document.getElementById('repo_migrating'); 6 if (!repoMigrating) return; 7 8 document.getElementById('repo_migrating_retry')?.addEventListener('click', doMigrationRetry); 9 10 const repoLink = repoMigrating.getAttribute('data-migrating-repo-link'); 11 12 // returns true if the refresh still needs to be called after a while 13 const refresh = async () => { 14 const res = await GET(`${repoLink}/-/migrate/status`); 15 if (res.status !== 200) return true; // continue to refresh if network error occurs 16 17 const data = await res.json(); 18 19 // for all status 20 if (data.message) { 21 document.getElementById('repo_migrating_progress_message').textContent = data.message; 22 } 23 24 // TaskStatusFinished 25 if (data.status === 4) { 26 window.location.reload(); 27 return false; 28 } 29 30 // TaskStatusFailed 31 if (data.status === 3) { 32 hideElem('#repo_migrating_progress'); 33 hideElem('#repo_migrating'); 34 showElem('#repo_migrating_retry'); 35 showElem('#repo_migrating_failed'); 36 showElem('#repo_migrating_failed_image'); 37 document.getElementById('repo_migrating_failed_error').textContent = data.message; 38 return false; 39 } 40 41 return true; // continue to refresh 42 }; 43 44 const syncTaskStatus = async () => { 45 let doNextRefresh = true; 46 try { 47 doNextRefresh = await refresh(); 48 } finally { 49 if (doNextRefresh) { 50 setTimeout(syncTaskStatus, 2000); 51 } 52 } 53 }; 54 55 syncTaskStatus(); // no await 56 } 57 58 async function doMigrationRetry(e) { 59 await POST(e.target.getAttribute('data-migrating-task-retry-url')); 60 window.location.reload(); 61 }