All files / src/file-system-module/operations/rename-file rename-file-operation.function.ts

10.52% Statements 2/19
0% Branches 0/1
0% Functions 0/4
10.52% Lines 2/19

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50            5x                   5x                                                                  
/**
 * Exports rename file operation function.
 *
 * @module
 */
import type { ReleaseLock } from '@agogpixel/pgmmv-resource-support/src/locks/release-lock.type';
import { pollWithBackoff } from '@agogpixel/pgmmv-resource-support/src/time/poll-with-backoff.function';
 
import type { RenameFileOperationPayload } from './rename-file-operation-payload.interface';
 
/**
 * Rename file operation.
 *
 * @param payload Operation payload.
 * @param releaseLock Release lock callback.
 */
export function renameFileOperation(payload: RenameFileOperationPayload, releaseLock: ReleaseLock) {
  const dirPath = payload.dirPath;
  const oldName = payload.oldName;
  const newName = payload.newName;
  const callback = payload.callback;
 
  const path = `${dirPath}/${oldName}`;
  const newPath = `${dirPath}/${newName}`;
 
  function conditional() {
    return jsb.fileUtils.isFileExist(newPath);
  }
 
  function onProceed() {
    releaseLock();
    callback(true);
  }
 
  function onTimeout(elapsed: number) {
    releaseLock();
    callback(false, `Rename operation of '${path}' to '${newPath}' timed out after ${elapsed / 1000}s`);
  }
 
  const result = jsb.fileUtils.renameFile(dirPath, oldName, newName);
 
  Iif (!result) {
    releaseLock();
    callback(false, `Rename operation of '${path}' to '${newPath}' failed immediately`);
    return;
  }
 
  pollWithBackoff(conditional, onProceed, onTimeout, 1000, 5);
}