You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.0 KiB
58 lines
2.0 KiB
import { PlatformService } from './PlatformService'
|
|
import { WebPlatformService } from './platforms/WebPlatformService'
|
|
import { CapacitorPlatformService } from './platforms/CapacitorPlatformService'
|
|
import { ElectronPlatformService } from './platforms/ElectronPlatformService'
|
|
import { PyWebViewPlatformService } from './platforms/PyWebViewPlatformService'
|
|
|
|
/**
|
|
* Factory class for creating platform-specific service implementations.
|
|
* Implements the Singleton pattern to ensure only one instance of PlatformService exists.
|
|
*
|
|
* The factory determines which platform implementation to use based on the VITE_PLATFORM
|
|
* environment variable. Supported platforms are:
|
|
* - capacitor: Mobile platform using Capacitor
|
|
* - electron: Desktop platform using Electron
|
|
* - pywebview: Python WebView implementation
|
|
* - web: Default web platform (fallback)
|
|
*
|
|
* @example
|
|
* ```typescript
|
|
* const platformService = PlatformServiceFactory.getInstance();
|
|
* await platformService.takePicture();
|
|
* ```
|
|
*/
|
|
export class PlatformServiceFactory {
|
|
private static instance: PlatformService | null = null
|
|
|
|
/**
|
|
* Gets or creates the singleton instance of PlatformService.
|
|
* Creates the appropriate platform-specific implementation based on environment.
|
|
*
|
|
* @returns {PlatformService} The singleton instance of PlatformService
|
|
*/
|
|
public static getInstance(): PlatformService {
|
|
if (PlatformServiceFactory.instance) {
|
|
return PlatformServiceFactory.instance
|
|
}
|
|
|
|
const platform = process.env.VITE_PLATFORM || 'web'
|
|
|
|
switch (platform) {
|
|
case 'capacitor':
|
|
PlatformServiceFactory.instance = new CapacitorPlatformService()
|
|
break
|
|
case 'electron':
|
|
PlatformServiceFactory.instance = new ElectronPlatformService()
|
|
break
|
|
case 'pywebview':
|
|
PlatformServiceFactory.instance = new PyWebViewPlatformService()
|
|
break
|
|
case 'web':
|
|
default:
|
|
PlatformServiceFactory.instance = new WebPlatformService()
|
|
break
|
|
}
|
|
|
|
return PlatformServiceFactory.instance
|
|
}
|
|
}
|
|
|