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  }