@appshuttle.io/bell
Version:
Device and Emulator Library used in Shuttle
112 lines (98 loc) • 4.03 kB
JavaScript
const AndroidManager = require('./Android/AndroidManager')
const iOSManager = require('./iOS/iOSManager')
const IOS_PLATFORM = 'IOS'
const ANDROID_PLATFORM = 'ANDROID'
const BOTH_PLATFORMS = 'BOTH'
class SHBell {
constructor (params) {
this.params = params
this.run = function () {
this.params.platforms = []
if (this.params.ios && this.canRunPlatform(IOS_PLATFORM)) {
this.params.platforms.push(IOS_PLATFORM)
this.iosManager = new iOSManager(this.params.ios)
}
if (this.params.android && this.canRunPlatform(ANDROID_PLATFORM)) {
this.params.platforms.push(ANDROID_PLATFORM)
this.androidManager = new AndroidManager(this.params.android)
}
var runPromises = []
for (const platform of params.platforms) {
runPromises.push(this.runPlatform(platform))
}
return Promise.all(runPromises)
}
this.canRunPlatform = function (platform) {
switch (platform) {
case IOS_PLATFORM:
if (!this.iosManager) {
var tempiOSManager = new iOSManager({
buildPath: '.',
appBundleId: '.',
deviceStringID: '.'
})
return tempiOSManager.checkIOSEnvironment()
} else {
return this.iosManager.checkIOSEnvironment()
}
break
case ANDROID_PLATFORM:
if (!this.androidManager) {
var tempAndroidManager = new AndroidManager({
buildPath: '.',
appBundleId: '.',
deviceStringID: '.'
})
return tempAndroidManager.checkAndroidEnvironment()
} else {
return this.androidManager.checkAndroidEnvironment()
}
break
default:
return
}
}
this.runPlatform = function (platform) {
switch (platform) {
case IOS_PLATFORM:
return this.iosManager.run()
case ANDROID_PLATFORM:
return this.androidManager.run()
default:
return;
}
}
this.getAvailableRunTargets = function (platform) {
const context = this
return new Promise((resolve, reject) => {
var targets = {
iOS: undefined,
Android: undefined
}
switch (platform) {
case IOS_PLATFORM:
if (context.canRunPlatform(IOS_PLATFORM)) {
var tempiOSManager = new iOSManager({ buildPath: '.', appBundleId: '.', deviceStringID: '.' })
return tempiOSManager.getAvailableDevices().then(function (value) {
targets.iOS = value
resolve(targets)
}).catch(function (error) {
reject(error)
})
} else {
reject('Can\'t run selected platform: ' + platform)
}
break;
case ANDROID_PLATFORM:
//TODO: Get Android Available Devices
resolve(targets)
break;
case BOTH_PLATFORMS:
resolve(targets)
break;
}
})
}
}
}
module.exports = SHBell