1- import { EventEmitter } from "node:events " ;
2- import { injectable } from "inversify " ;
1+ import { inject , injectable } from "inversify " ;
2+ import { MAIN_TOKENS } from "../../di/tokens.js " ;
33import { logger } from "../../lib/logger.js" ;
4+ import { TypedEventEmitter } from "../../lib/typed-event-emitter.js" ;
45import { getMainWindow } from "../../trpc/context.js" ;
5- import type { DeepLinkHandler } from "../deep-link/service.js" ;
6+ import type { DeepLinkService } from "../deep-link/service.js" ;
67
78const log = logger . scope ( "task-link-service" ) ;
89
9- @injectable ( )
10- export class TaskLinkService {
11- private emitter = new EventEmitter ( ) ;
12-
13- /**
14- * Get the deep link handler for task links.
15- * Register this with DeepLinkService for the "task" key.
16- * Expects URLs like: array://task/{taskId}
17- */
18- public getDeepLinkHandler ( ) : DeepLinkHandler {
19- return ( path ) => this . handleTaskLink ( path ) ;
20- }
10+ export const TaskLinkEvent = {
11+ OpenTask : "openTask" ,
12+ } as const ;
2113
22- /**
23- * Subscribe to task link events.
24- */
25- public onTaskLink ( callback : ( taskId : string ) => void ) : ( ) => void {
26- this . emitter . on ( "task" , callback ) ;
27- return ( ) => this . emitter . off ( "task" , callback ) ;
14+ export interface TaskLinkEvents {
15+ [ TaskLinkEvent . OpenTask ] : { taskId : string } ;
16+ }
17+
18+ @injectable ( )
19+ export class TaskLinkService extends TypedEventEmitter < TaskLinkEvents > {
20+ constructor (
21+ @inject ( MAIN_TOKENS . DeepLinkService )
22+ private readonly deepLinkService : DeepLinkService ,
23+ ) {
24+ super ( ) ;
25+ // Register task link handler for deep links
26+ this . deepLinkService . registerHandler ( "task" , ( path ) =>
27+ this . handleTaskLink ( path ) ,
28+ ) ;
29+ log . info ( "Registered task link handler for deep links" ) ;
2830 }
2931
3032 private handleTaskLink ( path : string ) : boolean {
@@ -37,7 +39,7 @@ export class TaskLinkService {
3739 }
3840
3941 log . info ( `Emitting task link event: ${ taskId } ` ) ;
40- this . emitter . emit ( "task" , taskId ) ;
42+ this . emit ( TaskLinkEvent . OpenTask , { taskId } ) ;
4143
4244 // Focus the window
4345 const mainWindow = getMainWindow ( ) ;
0 commit comments