You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

repo-migrate.js 1.8KB

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