mirror of https://github.com/OpenVidu/openvidu.git
222 lines
5.1 KiB
TypeScript
222 lines
5.1 KiB
TypeScript
import platform = require('platform');
|
|
|
|
export class PlatformUtils {
|
|
protected static instance: PlatformUtils;
|
|
constructor() {}
|
|
|
|
static getInstance(): PlatformUtils {
|
|
if (!this.instance) {
|
|
this.instance = new PlatformUtils();
|
|
}
|
|
return PlatformUtils.instance;
|
|
}
|
|
|
|
public isChromeBrowser(): boolean {
|
|
return platform.name === 'Chrome';
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isSafariBrowser(): boolean {
|
|
return platform.name === 'Safari';
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isChromeMobileBrowser(): boolean {
|
|
return platform.name === 'Chrome Mobile';
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isFirefoxBrowser(): boolean {
|
|
return platform.name === 'Firefox';
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isFirefoxMobileBrowser(): boolean {
|
|
return platform.name === 'Firefox Mobile' || platform.name === 'Firefox for iOS';
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isOperaBrowser(): boolean {
|
|
return platform.name === 'Opera';
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isOperaMobileBrowser(): boolean {
|
|
return platform.name === 'Opera Mobile';
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isEdgeBrowser(): boolean {
|
|
const version = platform?.version ? parseFloat(platform.version) : -1;
|
|
return platform.name === 'Microsoft Edge' && version >= 80;
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isEdgeMobileBrowser(): boolean {
|
|
const version = platform?.version ? parseFloat(platform.version) : -1;
|
|
return platform.name === 'Microsoft Edge' && (platform.os?.family === 'Android' || platform.os?.family === 'iOS') && version > 45;
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isAndroidBrowser(): boolean {
|
|
return platform.name === 'Android Browser';
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isElectron(): boolean {
|
|
return platform.name === 'Electron';
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isNodeJs(): boolean {
|
|
return platform.name === 'Node.js';
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isSamsungBrowser(): boolean {
|
|
return platform.name === 'Samsung Internet Mobile' || platform.name === 'Samsung Internet';
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isIPhoneOrIPad(): boolean {
|
|
const userAgent = !!platform.ua ? platform.ua : navigator.userAgent;
|
|
const isTouchable = 'ontouchend' in document;
|
|
const isIPad = /\b(\w*Macintosh\w*)\b/.test(userAgent) && isTouchable;
|
|
const isIPhone = /\b(\w*iPhone\w*)\b/.test(userAgent) && /\b(\w*Mobile\w*)\b/.test(userAgent) && isTouchable;
|
|
return isIPad || isIPhone;
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isIOSWithSafari(): boolean {
|
|
const userAgent = !!platform.ua ? platform.ua : navigator.userAgent;
|
|
return (
|
|
this.isIPhoneOrIPad() &&
|
|
/\b(\w*Apple\w*)\b/.test(navigator.vendor) &&
|
|
/\b(\w*Safari\w*)\b/.test(userAgent) &&
|
|
!/\b(\w*CriOS\w*)\b/.test(userAgent) &&
|
|
!/\b(\w*FxiOS\w*)\b/.test(userAgent)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isIonicIos(): boolean {
|
|
return this.isIPhoneOrIPad() && platform.ua!!.indexOf('Safari') === -1;
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isIonicAndroid(): boolean {
|
|
return platform.os!!.family === 'Android' && platform.name == 'Android Browser';
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isMobileDevice(): boolean {
|
|
return platform.os!!.family === 'iOS' || platform.os!!.family === 'Android';
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isReactNative(): boolean {
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public isChromium(): boolean {
|
|
return (
|
|
this.isChromeBrowser() ||
|
|
this.isChromeMobileBrowser() ||
|
|
this.isOperaBrowser() ||
|
|
this.isOperaMobileBrowser() ||
|
|
this.isEdgeBrowser() ||
|
|
this.isEdgeMobileBrowser() ||
|
|
this.isSamsungBrowser() ||
|
|
this.isIonicAndroid() ||
|
|
this.isIonicIos() ||
|
|
this.isElectron()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public canScreenShare(): boolean {
|
|
const version = platform?.version ? parseFloat(platform.version) : -1;
|
|
// Reject mobile devices
|
|
if (this.isMobileDevice()) {
|
|
return false;
|
|
}
|
|
return (
|
|
this.isChromeBrowser() ||
|
|
this.isFirefoxBrowser() ||
|
|
this.isOperaBrowser() ||
|
|
this.isElectron() ||
|
|
this.isEdgeBrowser() ||
|
|
(this.isSafariBrowser() && version >= 13)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public getName(): string {
|
|
return platform.name || '';
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public getVersion(): string {
|
|
return platform.version || '';
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public getFamily(): string {
|
|
return platform.os!!.family || '';
|
|
}
|
|
|
|
/**
|
|
* @hidden
|
|
*/
|
|
public getDescription(): string {
|
|
return platform.description || '';
|
|
}
|
|
}
|