mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-30 18:12:25 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			178 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			178 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| const {
 | |
|     access,
 | |
|     constants,
 | |
|     existsSync,
 | |
|     rename,
 | |
|     renameSync,
 | |
|     rmdir,
 | |
|     rmdirSync,
 | |
|     unlink,
 | |
|     unlinkSync
 | |
| } = require("graceful-fs");
 | |
| 
 | |
| const { promisify } = require("util");
 | |
| 
 | |
| const min = (a, b) => {
 | |
|     if (b === undefined || a <= b) return a;
 | |
|     return b;
 | |
| };
 | |
| 
 | |
| const max = (a, b) => {
 | |
|     if (b === undefined || a > b) return a;
 | |
|     return b;
 | |
| };
 | |
| 
 | |
| const convertSize = (size) => {
 | |
|     const sizes = ["bytes", "KB", "MB", "GB"];
 | |
| 
 | |
|     var index = Math.floor(Math.log2(size) / 10);
 | |
|     if (index > 3) index = 3;
 | |
| 
 | |
|     return Math.round(((size / Math.pow(1024, index)) + Number.EPSILON) * 100) / 100 + " " + sizes[index];
 | |
| };
 | |
| 
 | |
| const fileExists = async (a) => {
 | |
|     try {
 | |
|         await promisify(access)(a, constants.F_OK);
 | |
|         return true;
 | |
|     } catch (error) {
 | |
|         // console.error(error); file does not exist no need for error
 | |
|         return false;
 | |
|     }
 | |
| }
 | |
| 
 | |
| const fileExistsSync = (a) => {
 | |
|     try {
 | |
|         return existsSync(a);
 | |
|     } catch (error) {
 | |
|         console.error(error);
 | |
|         return false;
 | |
|     }
 | |
| }
 | |
| 
 | |
| const moveFile = async (a, b) => {
 | |
|     try {
 | |
|         await promisify(rename)(a, b);
 | |
|         return true;
 | |
|     } catch (error) {
 | |
|         console.error(error);
 | |
|         return false;
 | |
|     }
 | |
| };
 | |
| 
 | |
| const moveFileSync = (a, b) => {
 | |
|     try {
 | |
|         renameSync(a, b);
 | |
|         return true;
 | |
|     } catch (error) {
 | |
|         console.error(error);
 | |
|         return false;
 | |
|     }
 | |
| };
 | |
| 
 | |
| const deleteFile = async (filepath) => {
 | |
|     try {
 | |
|         await promisify(unlink)(filepath);
 | |
|         return true;
 | |
|     } catch (error) {
 | |
|         console.error(error);
 | |
|         return false;
 | |
|     }
 | |
| };
 | |
| 
 | |
| const deleteFileSync = (filepath) => {
 | |
|     try {
 | |
|         unlinkSync(filepath);
 | |
|         return true;
 | |
|     } catch (error) {
 | |
|         console.error(error);
 | |
|         return false;
 | |
|     }
 | |
| }
 | |
| 
 | |
| const replaceFile = async (a, b) => {
 | |
|     if (!await moveFile(a, a + ".old")) return false;
 | |
| 
 | |
|     if (!await moveFile(b, a)) {
 | |
|         await moveFile(a + ".old", a);
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     await deleteFile(a + ".old");
 | |
| 
 | |
|     return true;
 | |
| };
 | |
| 
 | |
| const replaceFileSync = (a, b) => {
 | |
|     if (!moveFileSync(a, a + ".old")) return false;
 | |
| 
 | |
|     if (!moveFileSync(b, a)) {
 | |
|         moveFile(a + ".old", a);
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     deleteFileSync(a + ".old");
 | |
| 
 | |
|     return true;
 | |
| };
 | |
| 
 | |
| const deleteDirectory = async (dirpath) => {
 | |
|     try {
 | |
|         await promisify(rmdir)(dirpath);
 | |
|         return true;
 | |
|     } catch {
 | |
|         return false;
 | |
|     }
 | |
| };
 | |
| 
 | |
| const deleteDirectorySync = (dirpath) => {
 | |
|     try {
 | |
|         rmdirSync(dirpath);
 | |
|         return true;
 | |
|     } catch {
 | |
|         return false;
 | |
|     }
 | |
| };
 | |
| 
 | |
| const releaseLock = async (store, release) => {
 | |
|     try {
 | |
|         await release();
 | |
|     } catch (error) {
 | |
|         if (!["ERELEASED", "ENOTACQUIRED"].includes(error.code)) {
 | |
|             error.store = store;
 | |
|             throw error;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| const releaseLockSync = (store, release) => {
 | |
|     try {
 | |
|         release();
 | |
|     } catch (error) {
 | |
|         if (!["ERELEASED", "ENOTACQUIRED"].includes(error.code)) {
 | |
|             error.store = store;
 | |
|             throw error;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| exports.min = min;
 | |
| exports.max = max;
 | |
| 
 | |
| exports.convertSize = convertSize;
 | |
| 
 | |
| exports.fileExists = fileExists;
 | |
| exports.fileExistsSync = fileExistsSync;
 | |
| exports.moveFile = moveFile;
 | |
| exports.moveFileSync = moveFileSync;
 | |
| exports.replaceFile = replaceFile;
 | |
| exports.replaceFileSync = replaceFileSync;
 | |
| exports.deleteFile = deleteFile;
 | |
| exports.deleteFileSync = deleteFileSync;
 | |
| exports.deleteDirectory = deleteDirectory;
 | |
| exports.deleteDirectorySync = deleteDirectorySync;
 | |
| 
 | |
| exports.releaseLock = releaseLock;
 | |
| exports.releaseLockSync = releaseLockSync; |