mirror of
https://github.com/spacedriveapp/spacedrive
synced 2024-07-02 10:03:28 +00:00
* wip for iDevices * Working HardwareModel Info for iOS * wip * Merge 'main' into 'mob-hw-info-overview' * Half-Working `get_volume()` * Objective c bridge to talk to FS * Working objc bridge The bridge works now, and we can now access the iOS file system using the native objective-c APIs instead for proper values, including on the simulator. * Isolate `icrate` for `ios` deployments only * Working Stats for Android * Clean Up + `pnpm format` * Fix to FSInfoResult Type Due to the RNFS fork change, I had to change the types to make it so it doesn't fail building and CI. * iOS Device Name Fix
42 lines
860 B
JavaScript
42 lines
860 B
JavaScript
import { exec as execCb } from 'node:child_process'
|
|
import * as fs from 'node:fs/promises'
|
|
import * as os from 'node:os'
|
|
import * as path from 'node:path'
|
|
import { env } from 'node:process'
|
|
import { promisify } from 'node:util'
|
|
|
|
const exec = promisify(execCb)
|
|
|
|
/**
|
|
* @param {string} progName
|
|
* @returns {Promise<boolean>}
|
|
*/
|
|
async function where(progName) {
|
|
// Reject paths
|
|
if (/[\\]/.test(progName)) return false
|
|
try {
|
|
await exec(`where "${progName}"`)
|
|
} catch {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
/**
|
|
* @param {string} progName
|
|
* @returns {Promise<boolean>}
|
|
*/
|
|
export async function which(progName) {
|
|
return os.type() === 'Windows_NT'
|
|
? where(progName)
|
|
: Promise.any(
|
|
Array.from(new Set(env.PATH?.split(':'))).map(dir =>
|
|
fs.access(path.join(dir, progName), fs.constants.X_OK)
|
|
)
|
|
).then(
|
|
() => true,
|
|
() => false
|
|
)
|
|
}
|