mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-11-08 11:02:08 +08:00
When the service's start type was changed from automatic, startup waited about two minutes for it before falling back to Sidecar. Detect this immediately, skip the TUN readiness wait, and offer a reinstall that restores automatic start. Refs #8129
43 lines
982 B
TypeScript
43 lines
982 B
TypeScript
/** Why a privileged service is needed. */
|
|
export type ServiceRequestReason =
|
|
| 'sysproxyRefused'
|
|
| 'sysproxySidecarReady'
|
|
| 'tunNeedsService'
|
|
| 'serviceLocationRefused'
|
|
| 'serviceNotAutoStarted'
|
|
|
|
export interface ServiceRequest {
|
|
readonly reason: ServiceRequestReason
|
|
/** Settings to apply after the core enters service mode. */
|
|
readonly restore?: Partial<IVergeConfig>
|
|
}
|
|
|
|
type Subscriber = () => void
|
|
|
|
let request: ServiceRequest | null = null
|
|
const subscribers = new Set<Subscriber>()
|
|
|
|
const notify = () => {
|
|
subscribers.forEach((subscriber) => subscriber())
|
|
}
|
|
|
|
export const requestService = (next: ServiceRequest) => {
|
|
request = next
|
|
notify()
|
|
}
|
|
|
|
export const clearServiceRequest = () => {
|
|
if (request === null) return
|
|
request = null
|
|
notify()
|
|
}
|
|
|
|
export const subscribeServiceRequest = (subscriber: Subscriber) => {
|
|
subscribers.add(subscriber)
|
|
return () => {
|
|
subscribers.delete(subscriber)
|
|
}
|
|
}
|
|
|
|
export const getServiceRequest = () => request
|