@@ -427,15 +427,6 @@ async def _scheduled_task(self, item: Item, interaction: Interaction):
427427 except Exception as e :
428428 return await self .on_error (e , item , interaction )
429429
430- def _start_listening_from_store (self , store : ViewStore ) -> None :
431- self .__cancel_callback = partial (store .remove_view )
432- if self .timeout :
433- loop = asyncio .get_running_loop ()
434- if self .__timeout_task is not None :
435- self .__timeout_task .cancel ()
436-
437- self .__timeout_expiry = time .monotonic () + self .timeout
438- self .__timeout_task = loop .create_task (self .__timeout_task_impl ())
439430
440431 def _dispatch_timeout (self ):
441432 if self .__stopped .done ():
@@ -563,77 +554,3 @@ def message(self):
563554 def message (self , value ):
564555 self ._message = value
565556
566-
567- class ViewStore :
568- def __init__ (self , state : ConnectionState ):
569- # (component_type, message_id, custom_id): (View, Item)
570- self ._views : dict [tuple [int , int | None , str ], tuple [View , Item ]] = {}
571- # message_id: View
572- self ._synced_message_views : dict [int , View ] = {}
573- self ._state : ConnectionState = state
574-
575- @property
576- def persistent_views (self ) -> Sequence [View ]:
577- views = {
578- view .id : view
579- for (_ , (view , _ )) in self ._views .items ()
580- if view .is_persistent ()
581- }
582- return list (views .values ())
583-
584- def __verify_integrity (self ):
585- to_remove : list [tuple [int , int | None , str ]] = []
586- for k , (view , _ ) in self ._views .items ():
587- if view .is_finished ():
588- to_remove .append (k )
589-
590- for k in to_remove :
591- del self ._views [k ]
592-
593- def add_view (self , view : View , message_id : int | None = None ):
594- self .__verify_integrity ()
595-
596- view ._start_listening_from_store (self )
597- for item in view .children :
598- if item .is_dispatchable ():
599- self ._views [(item .type .value , message_id , item .custom_id )] = (view , item ) # type: ignore
600-
601- if message_id is not None :
602- self ._synced_message_views [message_id ] = view
603-
604- def remove_view (self , view : View ):
605- for item in view .children :
606- if item .is_dispatchable ():
607- self ._views .pop ((item .type .value , item .custom_id ), None ) # type: ignore
608-
609- for key , value in self ._synced_message_views .items ():
610- if value .id == view .id :
611- del self ._synced_message_views [key ]
612- break
613-
614- def dispatch (self , component_type : int , custom_id : str , interaction : Interaction ):
615- self .__verify_integrity ()
616- message_id : int | None = interaction .message and interaction .message .id
617- key = (component_type , message_id , custom_id )
618- # Fallback to None message_id searches in case a persistent view
619- # was added without an associated message_id
620- value = self ._views .get (key ) or self ._views .get (
621- (component_type , None , custom_id )
622- )
623- if value is None :
624- return
625-
626- view , item = value
627- item .refresh_state (interaction )
628- view ._dispatch_item (item , interaction )
629-
630- def is_message_tracked (self , message_id : int ):
631- return message_id in self ._synced_message_views
632-
633- def remove_message_tracking (self , message_id : int ) -> View | None :
634- return self ._synced_message_views .pop (message_id , None )
635-
636- def update_from_message (self , message_id : int , components : list [ComponentPayload ]):
637- # pre-req: is_message_tracked == true
638- view = self ._synced_message_views [message_id ]
639- view .refresh ([_component_factory (d ) for d in components ])
0 commit comments