2024-07-07 18:32:30 +03:00
import { hideElem , showElem } from '../utils/dom.ts' ;
import { GET , POST } from '../modules/fetch.ts' ;
2022-01-29 00:00:11 +03:00
2021-10-16 20:28:04 +03:00
export function initRepoMigrationStatusChecker() {
2024-06-10 23:49:33 +03:00
const repoMigrating = document . querySelector ( '#repo_migrating' ) ;
2024-02-17 23:07:47 +03:00
if ( ! repoMigrating ) return ;
2023-05-11 11:25:46 +03:00
2024-10-02 07:37:16 +03:00
document . querySelector ( '#repo_migrating_retry' ) ? . addEventListener ( 'click' , doMigrationRetry ) ;
2023-08-04 05:21:32 +03:00
2024-10-02 07:37:16 +03:00
const repoLink = repoMigrating . getAttribute ( 'data-migrating-repo-link' ) ;
2023-05-11 11:25:46 +03:00
2024-02-17 23:07:47 +03:00
// returns true if the refresh still needs to be called after a while
2023-05-11 11:25:46 +03:00
const refresh = async ( ) = > {
2024-10-02 07:37:16 +03:00
const res = await GET ( ` ${ repoLink } /-/migrate/status ` ) ;
2023-05-11 11:25:46 +03:00
if ( res . status !== 200 ) return true ; // continue to refresh if network error occurs
const data = await res . json ( ) ;
// for all status
if ( data . message ) {
2024-06-10 23:49:33 +03:00
document . querySelector ( '#repo_migrating_progress_message' ) . textContent = data . message ;
2023-05-11 11:25:46 +03:00
}
// TaskStatusFinished
if ( data . status === 4 ) {
window . location . reload ( ) ;
return false ;
2021-10-16 20:28:04 +03:00
}
2023-05-11 11:25:46 +03:00
// TaskStatusFailed
if ( data . status === 3 ) {
hideElem ( '#repo_migrating_progress' ) ;
hideElem ( '#repo_migrating' ) ;
2023-08-04 05:21:32 +03:00
showElem ( '#repo_migrating_retry' ) ;
2023-05-11 11:25:46 +03:00
showElem ( '#repo_migrating_failed' ) ;
showElem ( '#repo_migrating_failed_image' ) ;
2024-06-10 23:49:33 +03:00
document . querySelector ( '#repo_migrating_failed_error' ) . textContent = data . message ;
2023-05-11 11:25:46 +03:00
return false ;
}
return true ; // continue to refresh
} ;
const syncTaskStatus = async ( ) = > {
let doNextRefresh = true ;
try {
doNextRefresh = await refresh ( ) ;
} finally {
if ( doNextRefresh ) {
setTimeout ( syncTaskStatus , 2000 ) ;
2021-10-16 20:28:04 +03:00
}
2023-05-11 11:25:46 +03:00
}
} ;
syncTaskStatus ( ) ; // no await
2021-10-16 20:28:04 +03:00
}
2023-08-04 05:21:32 +03:00
async function doMigrationRetry ( e ) {
2024-02-17 23:07:47 +03:00
await POST ( e . target . getAttribute ( 'data-migrating-task-retry-url' ) ) ;
2023-08-04 05:21:32 +03:00
window . location . reload ( ) ;
}