gitea源码

repo-migrate.ts 1.8KB

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