o
    >h                     @   s   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 eedddur,e  G d	d
 d
ejZG dd dejZddedeeef fddZdgZdS )a  
This module provides support for Twisted to interact with the glib
mainloop via GObject Introspection.

In order to use this support, simply do the following::

    from twisted.internet import gireactor
    gireactor.install()

If you wish to use a GApplication, register it with the reactor::

    from twisted.internet import reactor
    reactor.registerGApplication(app)

Then use twisted.internet APIs as usual.

On Python 3, pygobject v3.4 or later is required.
    )Union)GLib)	_glibbase)ReactorAlreadyRunning)runtimethreads_initNc                   @   s&   e Zd ZdZdZdddZdd ZdS )		GIReactorz
    GObject-introspection event loop reactor.

    @ivar _gapplication: A C{Gio.Application} instance that was registered
        with C{registerGApplication}.
    NFc                 C   s   t j| td  d S N)r   GlibReactorBase__init__r   selfuseGtk r   z/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/twisted/internet/gireactor.pyr   /   s   zGIReactor.__init__c                    sV   | j dur	td| jrtdt dstd | _  fdd}|| _ j| _dS )a  
        Register a C{Gio.Application} or C{Gtk.Application}, whose main loop
        will be used instead of the default one.

        We will C{hold} the application so it doesn't exit on its own. In
        versions of C{python-gi} 3.2 and later, we exit the event loop using
        the C{app.quit} method which overrides any holds. Older versions are
        not supported.
        Nz2Can't register more than one application instance.z5Can't register application after reactor was started.quitzPApplication registration is not supported in versions of PyGObject prior to 3.2.c                      s        d  d S r	   )holdrunr   appr   r   r   I   s   z+GIReactor.registerGApplication.<locals>.run)_gapplicationRuntimeError_startedr   hasattr_runr   _crash)r   r   r   r   r   r   registerGApplication2   s   


zGIReactor.registerGApplicationF)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   $   s
    
r   c                       s4   e Zd ZdZd fdd	Zdd Zdd	d
Z  ZS )PortableGIReactorz<
    Portable GObject Introspection event loop reactor.
    Fc                    s   t  jtd |d d S )Nr   )superr   r   r   	__class__r   r   r   W   s   zPortableGIReactor.__init__c                 C   s   t d)z
        Register a C{Gio.Application} or C{Gtk.Application}, whose main loop
        will be used instead of the default one.
        z3GApplication is not currently supported on Windows.)NotImplementedError)r   r   r   r   r   r   Z   s   z&PortableGIReactor.registerGApplicationreturnNc                 C   s   dS )z5
        For compatibility only. Do nothing.
        Nr   )r   r   r   r   simulatea   s    zPortableGIReactor.simulater   )r(   N)r   r   r    r!   r   r   r)   __classcell__r   r   r%   r   r"   R   s
    r"   Fr   r(   c                 C   s<   t j dkrt| d}nt| d}ddlm} || |S )z
    Configure the twisted mainloop to be run inside the glib mainloop.

    @param useGtk: A hint that the Gtk GUI will or will not be used.  Currently
        does not modify any behavior.
    posixr#   r   )installReactor)r   platformgetTyper   r"   twisted.internet.mainr,   )r   reactorr,   r   r   r   installg   s   
r1   r   )r!   typingr   gi.repositoryr   twisted.internetr   twisted.internet.errorr   twisted.pythonr   getattrr   r
   r   r"   boolr1   __all__r   r   r   r   <module>   s   .
