예제 #1
0
def monitor_daemon():
    f = open('/tmp/mkchromecast.pid', 'rb')
    pidnumber = int(pickle.load(f))
    print(colors.options('PID of main process:') + ' ' + str(pidnumber))

    localpid = getpid()
    print(colors.options('PID of streaming process:') + ' ' + str(localpid))

    while psutil.pid_exists(localpid) == True:
        try:
            time.sleep(0.5)
            if psutil.pid_exists(
                    pidnumber
            ) == False:  # With this I ensure that if the main app fails, everything
                if platform == 'Darwin':  # will get back to normal
                    inputint()
                    outputint()
                else:
                    from mkchromecast.pulseaudio import remove_sink
                    remove_sink()
                parent = psutil.Process(localpid)
                for child in parent.children(
                        recursive=True
                ):  # or parent.children() for recursive=False
                    child.kill()
                parent.kill()
        except KeyboardInterrupt:
            print('Ctrl-c was requested')
            sys.exit(0)
        except IOError:
            print('I/O Error')
            sys.exit(0)
        except OSError:
            print('OSError')
            sys.exit(0)
예제 #2
0
 def get_cc(self):
     if self.debug == True:
         print('def get_cc(self):')
     try:
         if self.ccname != None:
             self.cast_to = self.ccname
         self.cast = self._get_chromecast(self.cast_to)
         # Wait for cast device to be ready
         self.cast.wait()
         print(' ')
         print(colors.important('Information about ')+' '+colors.success(self.cast_to))
         print(' ')
         print(self.cast.device)
         print(' ')
         print(colors.important('Status of device ')+' '+colors.success(self.cast_to))
         print(' ')
         print(self.cast.status)
         print(' ')
     except pychromecast.error.NoChromecastFoundError:
         print(colors.error('No Chromecasts matching filter critera were found!'))
         if self.platform == 'Darwin':
             inputint()
             outputint()
         elif self.platform == 'Linux':
             from mkchromecast.pulseaudio import remove_sink
             remove_sink()
         if self.tray == False:  # In the case that the tray is used, we don't kill the application
             print(colors.error('Finishing the application...'))
             terminate()
             exit()
         else:
             self.stop_cast()
예제 #3
0
def monitor_daemon():
    f = open("/tmp/mkchromecast.pid", "rb")
    pidnumber = int(pickle.load(f))
    print(colors.options("PID of main process:") + " " + str(pidnumber))

    localpid = getpid()
    print(colors.options("PID of streaming process:") + " " + str(localpid))

    while psutil.pid_exists(localpid) is True:
        try:
            time.sleep(0.5)
            # With this I ensure that if the main app fails, everything# With
            # this I ensure that if the main app fails, everything
            # will get back to normal
            if psutil.pid_exists(pidnumber) is False:
                if platform == "Darwin":
                    inputint()
                    outputint()
                else:
                    from mkchromecast.pulseaudio import remove_sink

                    remove_sink()
                parent = psutil.Process(localpid)
                for child in parent.children(recursive=True):
                    child.kill()
                parent.kill()
        except KeyboardInterrupt:
            print("Ctrl-c was requested")
            sys.exit(0)
        except IOError:
            print("I/O Error")
            sys.exit(0)
        except OSError:
            print("OSError")
            sys.exit(0)
예제 #4
0
 def terminate_app(self):
     """Terminate the app (kill app)"""
     self.cc.stop_cast()
     if platform == 'Darwin':
         inputint()
         outputint()
     elif platform == 'Linux' and adevice == None:
         remove_sink()
     terminate()
예제 #5
0
 def get_devices(self):
     if self.debug is True:
         print("def get_devices(self):")
     if chromecast:
         try:
             if self.device_name is not None:
                 self.cast_to = self.device_name
             self.cast = self._get_chromecast(self.cast_to)
             # Wait for cast device to be ready
             self.cast.wait()
             print(" ")
             print(
                 colors.important("Information about ")
                 + " "
                 + colors.success(self.cast_to)
             )
             print(" ")
             print(self.cast.device)
             print(" ")
             print(
                 colors.important("Status of device ")
                 + " "
                 + colors.success(self.cast_to)
             )
             print(" ")
             print(self.cast.status)
             print(" ")
         except pychromecast.error.NoChromecastFoundError:
             print(
                 colors.error(
                     "No Chromecasts matching filter criteria" " were found!"
                 )
             )
             if self.platform == "Darwin":
                 inputint()
                 outputint()
             elif self.platform == "Linux":
                 remove_sink()
             # In the case that the tray is used, we don't kill the
             # application
             if self.tray is False:
                 print(colors.error("Finishing the application..."))
                 terminate()
                 exit()
             else:
                 self.stop_cast()
         except AttributeError:
             pass
         except KeyError:
             pass
예제 #6
0
    def reconnect_cc(self):
        """Dummy method to call  _reconnect_cc_().

        In the cast that the self.r thread is alive, we check that the
        chromecast is connected. If it is connected, we check again in
        5 seconds.
        """
        try:
            while self.r.is_alive():
                self._reconnect_cc_()
                time.sleep(5)       #FIXME: I think that this has to be set by users.
        except KeyboardInterrupt:
            self.stop_cast()
            if platform == 'Darwin':
                inputint()
                outputint()
            elif platform == 'Linux' and adevice == None:
                from mkchromecast.pulseaudio import remove_sink
                remove_sink()
            terminate()
예제 #7
0
    def hijack_cc(self):
        """Dummy method to call  _hijack_cc_().

        In the cast that the self.r thread is alive, we check that the
        chromecast is connected. If it is connected, we check again in
        5 seconds.
        """
        try:
            while self.r.is_alive():
                self._hijack_cc_()
                # FIXME: I think that this has to be set by users.
                time.sleep(5)
        except KeyboardInterrupt:
            self.stop_cast()
            if self.platform == "Darwin":
                inputint()
                outputint()
            elif self.platform == "Linux" and self.adevice is None:
                remove_sink()
            terminate()
예제 #8
0
    def hijack_cc(self):
        """Dummy method to call  _hijack_cc_().

        In the cast that the self.r thread is alive, we check that the
        chromecast is connected. If it is connected, we check again in
        5 seconds.
        """
        try:
            while self.r.is_alive():
                self._hijack_cc_()
                # FIXME: I think that this has to be set by users.
                time.sleep(5)
        except KeyboardInterrupt:
            self.stop_cast()
            if self.platform == 'Darwin':
                inputint()
                outputint()
            elif self.platform == 'Linux' and self.adevice is None:
                remove_sink()
            terminate()
예제 #9
0
 def get_cc(self):
     if self.debug is True:
         print('def get_cc(self):')
     if chromecast:
         try:
             if self.ccname is not None:
                 self.cast_to = self.ccname
             self.cast = self._get_chromecast(self.cast_to)
             # Wait for cast device to be ready
             self.cast.wait()
             print(' ')
             print(colors.important('Information about ') + ' ' +
                   colors.success(self.cast_to))
             print(' ')
             print(self.cast.device)
             print(' ')
             print(colors.important('Status of device ') + ' ' +
                   colors.success(self.cast_to))
             print(' ')
             print(self.cast.status)
             print(' ')
         except pychromecast.error.NoChromecastFoundError:
             print(colors.error('No Chromecasts matching filter criteria'
                                ' were found!'))
             if self.platform == 'Darwin':
                 inputint()
                 outputint()
             elif self.platform == 'Linux':
                 remove_sink()
             # In the case that the tray is used, we don't kill the
             # application
             if self.tray is False:
                 print(colors.error('Finishing the application...'))
                 terminate()
                 exit()
             else:
                 self.stop_cast()
         except AttributeError:
             pass
         except KeyError:
             pass
예제 #10
0
 def get_devices(self):
     if self.debug is True:
         print('def get_devices(self):')
     if chromecast:
         try:
             if self.device_name is not None:
                 self.cast_to = self.device_name
             self.cast = self._get_chromecast(self.cast_to)
             # Wait for cast device to be ready
             self.cast.wait()
             print(' ')
             print(colors.important('Information about ') + ' ' +
                   colors.success(self.cast_to))
             print(' ')
             print(self.cast.device)
             print(' ')
             print(colors.important('Status of device ') + ' ' +
                   colors.success(self.cast_to))
             print(' ')
             print(self.cast.status)
             print(' ')
         except pychromecast.error.NoChromecastFoundError:
             print(colors.error('No Chromecasts matching filter criteria'
                                ' were found!'))
             if self.platform == 'Darwin':
                 inputint()
                 outputint()
             elif self.platform == 'Linux':
                 remove_sink()
             # In the case that the tray is used, we don't kill the
             # application
             if self.tray is False:
                 print(colors.error('Finishing the application...'))
                 terminate()
                 exit()
             else:
                 self.stop_cast()
         except AttributeError:
             pass
         except KeyError:
             pass
예제 #11
0
    def initialize_cast(self):
        import mkchromecast.__init__            # This is to verify against some needed variables.
        from pychromecast import socket_client  # This fixes the `No handlers could be found for logger "pychromecast.socket_client` warning"`.
                                                # See commit 18005ebd4c96faccd69757bf3d126eb145687e0d.
        self.cclist = self._get_chromecasts()
        if self.debug == True:
            print('self.cclist', self.cclist)

        """
        This block was used for casting youtube with pychromecast, but it does not work
        """
        """
        try:
            self.youtubeurl = mkchromecast.__init__.youtubeurl
        except AttributeError:
            self.youtubeurl = None
        """

        if len(self.cclist) != 0 and self.select_cc == False and self.ccname == None:
            if self.debug == True:
                print('if len(self.cclist) != 0 and self.select_cc == False:')
            print(' ')
            print(colors.important('List of Google Cast devices available in your network:'))
            print(colors.important('------------------------------------------------------'))
            print(' ')
            print(colors.important('Index   Friendly name'))
            print(colors.important('=====   ============= '))
            for self.index,device in enumerate(self.cclist):
                try:
                    print(str(self.index)+'      ', str(device))
                except UnicodeEncodeError:
                    print(str(self.index)+'      ', str(unicode(device).encode("utf-8")))
            print(' ')
            if self.discover == False:
                print(colors.important('We will cast to first device in the list above!'))
                print(' ')
                self.cast_to = self.cclist[0]
                print(colors.success(self.cast_to))
                print(' ')

        elif len(self.cclist) != 0 and self.select_cc == True and self.tray == False and self.ccname == None:
            if self.debug == True:
                print('elif len(self.cclist) != 0 and self.select_cc == True and self.tray == False:')
            if os.path.exists('/tmp/mkchromecast.tmp') == False:
                self.tf = open('/tmp/mkchromecast.tmp', 'wb')
                print(' ')
                print(colors.important('List of Google Cast devices available in your network:'))
                print(colors.important('------------------------------------------------------'))
                print(' ')
                print(colors.important('Index   Friendly name'))
                print(colors.important('=====   ============= '))
                self.availablecc()
            else:
                if self.debug == True:
                    print('else:')
                self.tf = open('/tmp/mkchromecast.tmp', 'rb')
                self.index=pickle.load(self.tf)
                self.cast_to = self.cclist[int(self.index)]
                print(' ')
                print(colors.options('Casting to:')+' '+colors.success(self.cast_to))
                print(' ')

        elif len(self.cclist) != 0 and self.select_cc == True and self.tray == True:
            if self.debug == True:
                print('elif len(self.cclist) != 0 and self.select_cc == True and self.tray == True:')
            if os.path.exists('/tmp/mkchromecast.tmp') == False:
                self.tf = open('/tmp/mkchromecast.tmp', 'wb')
                print(' ')
                print(colors.important('List of Google Cast devices available in your network:'))
                print(colors.important('------------------------------------------------------'))
                print(' ')
                print(colors.important('Index   Friendly name'))
                print(colors.important('=====   ============= '))
                self.availablecc()
            else:
                if self.debug == True:
                    print('else:')
                self.tf = open('/tmp/mkchromecast.tmp', 'rb')
                self.cast_to=pickle.load(self.tf)
                self.availablecc()
                print(' ')
                print(colors.options('Casting to:')+' '+colors.success(self.cast_to))
                print(' ')

        elif len(self.cclist) == 0 and self.tray == False:
            if self.debug == True:
                print('elif len(self.cclist) == 0 and self.tray == False:')
            print(colors.error('No devices found!'))
            if self.platform == 'Linux' and self.adevice == None:
                from mkchromecast.pulseaudio import remove_sink
                remove_sink()
            elif self.platform == 'Darwin':
                inputint()
                outputint()
            terminate()
            exit()

        elif len(self.cclist) == 0 and self.tray == True:
            print(colors.error(':::Tray::: No devices found!'))
            self.availablecc = []
예제 #12
0
if debug is True:
    print("Google Cast name: %s." % device_name)

"""
Check that input file exists
"""
if input_file != None and os.path.isfile(input_file) is False:
    if platform == "Darwin":
        from mkchromecast.audio_devices import inputint, outputint

        inputint()
        outputint()
    else:
        from mkchromecast.pulseaudio import remove_sink

        remove_sink()

    print(colors.warning("File not found!"))
    terminate()

"""
Media-Type
"""
mtype = args.mtype

if args.mtype is not None and args.video is False:
    print(
        colors.warning("The media type is not supported for audio.")
        % args.encoder_backend
    )
예제 #13
0
 def reset_audio(self):
     if platform == 'Darwin':
         inputint()
         outputint()
     else:
         remove_sink()
예제 #14
0
 def reset_audio(self):
     if platform == 'Darwin':
         inputint()
         outputint()
     else:
         remove_sink()
예제 #15
0
    def initialize_cast(self):
        # This fixes the `No handlers could be found for logger
        # "pychromecast.socket_client` warning"`.
        # See commit 18005ebd4c96faccd69757bf3d126eb145687e0d.
        if chromecast:
            from pychromecast import socket_client
            self.cclist = self._get_chromecasts()
            self.cclist = [[i, _, 'Gcast'] for i, _ in enumerate(self.cclist)]
        else:
            self.cclist = []

        if sonos:
            try:
                self.sonos_list = list(soco.discover())
                for self.index, device in enumerate(self.sonos_list):
                    add_sonos = [self.index, device, 'Sonos']
                    self.cclist.append(add_sonos)
            except TypeError:
                pass

        if self.debug is True:
            print('self.cclist', self.cclist)

        if (len(self.cclist) != 0 and self.select_device is False and
                self.device_name is None):
            if self.debug is True:
                print('if len(self.cclist) != 0 and self.select_device == False:')
            print(' ')
            print_available_devices(self.available_devices())
            print(' ')
            if self.discover is False:
                print(colors.important('Casting to first device shown above!'))
                print(colors.important('Select devices by using the -s flag.'))
                print(' ')
                self.cast_to = self.cclist[0][1]
                if self.cclist[0][2] == 'Sonos':
                    print(colors.success(self.cast_to.player_name))
                else:
                    print(colors.success(self.cast_to))
                print(' ')

        elif (len(self.cclist) != 0 and self.select_device is True and
                self.tray is False and self.device_name is None):
            if self.debug is True:
                print('elif len(self.cclist) != 0 and self.select_device == True'
                      ' and self.tray == False:')
            if os.path.exists('/tmp/mkchromecast.tmp') is False:
                self.tf = open('/tmp/mkchromecast.tmp', 'wb')
                print(' ')
                print_available_devices(self.available_devices())
            else:
                if self.debug is True:
                    print('else:')
                self.tf = open('/tmp/mkchromecast.tmp', 'rb')
                self.index = pickle.load(self.tf)
                self.cast_to = self.cclist[int(self.index)]
                print(' ')
                print(colors.options('Casting to:') + ' ' +
                      colors.success(self.cast_to))
                print(' ')

        elif (len(self.cclist) != 0 and self.select_device is True and
                self.tray is True):
            if self.debug is True:
                print('elif len(self.cclist) != 0 and self.select_device == True'
                      '  and self.tray == True:')
            if os.path.exists('/tmp/mkchromecast.tmp') is False:
                self.tf = open('/tmp/mkchromecast.tmp', 'wb')
                print(' ')
                print_available_devices(self.available_devices())
            else:
                if self.debug is True:
                    print('else:')
                self.tf = open('/tmp/mkchromecast.tmp', 'rb')
                self.cast_to = pickle.load(self.tf)
                print_available_devices(self.available_devices())
                print(' ')
                print(colors.options('Casting to:') + ' ' +
                      colors.success(self.cast_to))
                print(' ')

        elif len(self.cclist) == 0 and self.tray is False:
            if self.debug is True:
                print('elif len(self.cclist) == 0 and self.tray == False:')
            print(colors.error('No devices found!'))
            if self.platform == 'Linux' and self.adevice is None:
                remove_sink()
            elif self.platform == 'Darwin':
                inputint()
                outputint()
            terminate()
            exit()

        elif len(self.cclist) == 0 and self.tray is True:
            print(colors.error(':::Tray::: No devices found!'))
            self.available_devices = []
예제 #16
0
    def initialize_cast(self):
        # This fixes the `No handlers could be found for logger
        # "pychromecast.socket_client` warning"`.
        # See commit 18005ebd4c96faccd69757bf3d126eb145687e0d.
        from pychromecast import socket_client
        self.cclist = self._get_chromecasts()
        self.cclist = [[i, _, 'Gcast'] for i, _ in enumerate(self.cclist)]

        if sonos is True:
            try:
                self.sonos_list = list(soco.discover())
                for self.index, device in enumerate(self.sonos_list):
                    add_sonos = [self.index, device, 'Sonos']
                    self.cclist.append(add_sonos)
            except TypeError:
                pass

        if self.debug is True:
            print('self.cclist', self.cclist)

        if (len(self.cclist) != 0 and self.select_cc is False
                and self.ccname is None):
            if self.debug is True:
                print('if len(self.cclist) != 0 and self.select_cc == False:')
            print(' ')
            print(colors.important('List of Devices Available in Network:'))
            print(colors.important('-------------------------------------\n'))
            print(colors.important('Index   Types   Friendly Name '))
            print(colors.important('=====   =====   ============= '))
            self.availablecc()
            print(' ')
            if self.discover is False:
                print(colors.important('Casting to first device shown above!'))
                print(colors.important('Select devices by using the -s flag.'))
                print(' ')
                self.cast_to = self.cclist[0][1]
                if self.cclist[0][2] == 'Sonos':
                    print(colors.success(self.cast_to.player_name))
                else:
                    print(colors.success(self.cast_to))
                print(' ')

        elif (len(self.cclist) != 0 and self.select_cc is True
              and self.tray is False and self.ccname is None):
            if self.debug is True:
                print('elif len(self.cclist) != 0 and self.select_cc == True'
                      ' and self.tray == False:')
            if os.path.exists('/tmp/mkchromecast.tmp') is False:
                self.tf = open('/tmp/mkchromecast.tmp', 'wb')
                print(' ')
                print(
                    colors.important('List of Devices Available in Network:'))
                print(
                    colors.important(
                        '-------------------------------------\n'))
                print(colors.important('Index   Types   Friendly Name '))
                print(colors.important('=====   =====   ============= '))
                self.availablecc()
            else:
                if self.debug is True:
                    print('else:')
                self.tf = open('/tmp/mkchromecast.tmp', 'rb')
                self.index = pickle.load(self.tf)
                self.cast_to = self.cclist[int(self.index)]
                print(' ')
                print(
                    colors.options('Casting to:') + ' ' +
                    colors.success(self.cast_to))
                print(' ')

        elif (len(self.cclist) != 0 and self.select_cc is True
              and self.tray is True):
            if self.debug is True:
                print('elif len(self.cclist) != 0 and self.select_cc == True'
                      '  and self.tray == True:')
            if os.path.exists('/tmp/mkchromecast.tmp') is False:
                self.tf = open('/tmp/mkchromecast.tmp', 'wb')
                print(' ')
                print(
                    colors.important('List of Devices Available in Network:'))
                print(
                    colors.important(
                        '-------------------------------------\n'))
                print(colors.important('Index   Types   Friendly Name '))
                print(colors.important('=====   =====   ============= '))
                self.availablecc()
            else:
                if self.debug is True:
                    print('else:')
                self.tf = open('/tmp/mkchromecast.tmp', 'rb')
                self.cast_to = pickle.load(self.tf)
                self.availablecc()
                print(' ')
                print(
                    colors.options('Casting to:') + ' ' +
                    colors.success(self.cast_to))
                print(' ')

        elif len(self.cclist) == 0 and self.tray is False:
            if self.debug is True:
                print('elif len(self.cclist) == 0 and self.tray == False:')
            print(colors.error('No devices found!'))
            if self.platform == 'Linux' and self.adevice is None:
                remove_sink()
            elif self.platform == 'Darwin':
                inputint()
                outputint()
            terminate()
            exit()

        elif len(self.cclist) == 0 and self.tray is True:
            print(colors.error(':::Tray::: No devices found!'))
            self.availablecc = []
예제 #17
0

if debug is True:
    print('Google Cast name: %s.' % device_name)

"""
Check that input file exists
"""
if input_file != None and os.path.isfile(input_file) is False:
    if platform == 'Darwin':
        from mkchromecast.audio_devices import inputint, outputint
        inputint()
        outputint()
    else:
        from mkchromecast.pulseaudio import remove_sink
        remove_sink()

    print(colors.warning('File not found!'))
    terminate()

"""
Media-Type
"""
mtype = args.mtype

if args.mtype is not None and args.video is False:
    print(colors.warning('The media type is not supported for audio.')
          % args.encoder_backend)

"""
Reset
예제 #18
0
    def initialize_cast(self):
        # This fixes the `No handlers could be found for logger
        # "pychromecast.socket_client` warning"`.
        # See commit 18005ebd4c96faccd69757bf3d126eb145687e0d.
        if chromecast:
            from pychromecast import socket_client

            self.cclist = self._get_chromecasts()
            self.cclist = [[i, _, "Gcast"] for i, _ in enumerate(self.cclist)]
        else:
            self.cclist = []

        if sonos:
            try:
                # Checking groups
                zone = soco.discovery.any_soco()

                self.sonos_list = zone.all_groups

                for self.index, group in enumerate(self.sonos_list):
                    add_sonos = [self.index, group.coordinator, "Sonos"]
                    self.cclist.append(add_sonos)
            except (TypeError, AttributeError):
                pass

        if self.debug is True:
            print("self.cclist", self.cclist)

        if (len(self.cclist) != 0 and self.select_device is False
                and self.device_name is None):
            if self.debug is True:
                print(
                    "if len(self.cclist) != 0 and self.select_device == False:"
                )
            print(" ")
            print_available_devices(self.available_devices())
            print(" ")
            if self.discover is False:
                print(colors.important("Casting to first device shown above!"))
                print(colors.important("Select devices by using the -s flag."))
                print(" ")
                self.cast_to = self.cclist[0][1]
                if self.cclist[0][2] == "Sonos":
                    print(colors.success(self.cast_to.coordinator.player_name))
                else:
                    print(colors.success(self.cast_to))
                print(" ")

        elif (len(self.cclist) != 0 and self.select_device is True
              and self.tray is False and self.device_name is None):
            if self.debug is True:
                print(
                    "elif len(self.cclist) != 0 and self.select_device == True"
                    " and self.tray == False:")
            if os.path.exists("/tmp/mkchromecast.tmp") is False:
                self.tf = open("/tmp/mkchromecast.tmp", "wb")
                print(" ")
                print_available_devices(self.available_devices())
            else:
                if self.debug is True:
                    print("else:")
                self.tf = open("/tmp/mkchromecast.tmp", "rb")
                self.index = pickle.load(self.tf)
                self.cast_to = self.cclist[int(self.index)]
                print(" ")
                print(
                    colors.options("Casting to:") + " " +
                    colors.success(self.cast_to))
                print(" ")

        elif len(self.cclist
                 ) != 0 and self.select_device is True and self.tray is True:
            if self.debug is True:
                print(
                    "elif len(self.cclist) != 0 and self.select_device == True"
                    "  and self.tray == True:")
            if os.path.exists("/tmp/mkchromecast.tmp") is False:
                self.tf = open("/tmp/mkchromecast.tmp", "wb")
                print(" ")
                print_available_devices(self.available_devices())
            else:
                if self.debug is True:
                    print("else:")
                self.tf = open("/tmp/mkchromecast.tmp", "rb")
                self.cast_to = pickle.load(self.tf)
                print_available_devices(self.available_devices())
                print(" ")
                print(
                    colors.options("Casting to:") + " " +
                    colors.success(self.cast_to))
                print(" ")

        elif len(self.cclist) == 0 and self.tray is False:
            if self.debug is True:
                print("elif len(self.cclist) == 0 and self.tray == False:")
            print(colors.error("No devices found!"))
            if self.platform == "Linux" and self.adevice is None:
                remove_sink()
            elif self.platform == "Darwin":
                inputint()
                outputint()
            terminate()
            exit()

        elif len(self.cclist) == 0 and self.tray is True:
            print(colors.error(":::Tray::: No devices found!"))
            self.available_devices = []
예제 #19
0
    def initialize_cast(self):
        import mkchromecast.__init__  # This is to verify against some needed variables.
        from pychromecast import socket_client  # This fixes the `No handlers could be found for logger "pychromecast.socket_client` warning"`.
        # See commit 18005ebd4c96faccd69757bf3d126eb145687e0d.
        self.cclist = self._get_chromecasts()
        self.cclist = [[index, _, 'Gcast']
                       for index, _ in enumerate(self.cclist)]

        if sonos == True:
            try:
                self.sonos_list = list(soco.discover())
                length = len(self.cclist)
                for self.index, device in enumerate(self.sonos_list):
                    add_sonos = [self.index, device, 'Sonos']
                    self.cclist.append(add_sonos)
            except TypeError:
                pass

        if self.debug == True:
            print('self.cclist', self.cclist)
        """
        This block was used for casting youtube with pychromecast, but it does not work
        """
        """
        try:
            self.youtubeurl = mkchromecast.__init__.youtubeurl
        except AttributeError:
            self.youtubeurl = None
        """

        if (len(self.cclist) != 0 and self.select_cc == False
                and self.ccname == None):
            if self.debug == True:
                print('if len(self.cclist) != 0 and self.select_cc == False:')
            print(' ')
            print(
                colors.important('List of Devices Available in your Network:'))
            print(
                colors.important(
                    '------------------------------------------\n'))
            print(colors.important('Index \tTypes \tFriendly Name '))
            print(colors.important('===== \t===== \t============= '))
            self.availablecc()
            print(' ')
            if self.discover == False:
                print(
                    colors.important(
                        'We will cast to first device in the list above!'))
                print(' ')
                self.cast_to = self.cclist[0][1]
                print(colors.success(self.cast_to))
                print(' ')

        elif (len(self.cclist) != 0 and self.select_cc == True
              and self.tray == False and self.ccname == None):
            if self.debug == True:
                print(
                    'elif len(self.cclist) != 0 and self.select_cc == True and self.tray == False:'
                )
            if os.path.exists('/tmp/mkchromecast.tmp') == False:
                self.tf = open('/tmp/mkchromecast.tmp', 'wb')
                print(' ')
                print(
                    colors.important(
                        'List of Devices Available in your Network:'))
                print(
                    colors.important(
                        '------------------------------------------\n'))
                print(colors.important('Index \tTypes \tFriendly Name '))
                print(colors.important('===== \t===== \t============= '))
                self.availablecc()
            else:
                if self.debug == True:
                    print('else:')
                self.tf = open('/tmp/mkchromecast.tmp', 'rb')
                self.index = pickle.load(self.tf)
                self.cast_to = self.cclist[int(self.index)]
                print(' ')
                print(
                    colors.options('Casting to:') + ' ' +
                    colors.success(self.cast_to))
                print(' ')

        elif (len(self.cclist) != 0 and self.select_cc == True
              and self.tray == True):
            if self.debug == True:
                print(
                    'elif len(self.cclist) != 0 and self.select_cc == True and self.tray == True:'
                )
            if os.path.exists('/tmp/mkchromecast.tmp') == False:
                self.tf = open('/tmp/mkchromecast.tmp', 'wb')
                print(' ')
                print(
                    colors.important(
                        'List of Devices Available in your Network:'))
                print(
                    colors.important(
                        '------------------------------------------\n'))
                print(colors.important('Index \tTypes \tFriendly Name '))
                print(colors.important('===== \t===== \t============= '))
                self.availablecc()
            else:
                if self.debug == True:
                    print('else:')
                self.tf = open('/tmp/mkchromecast.tmp', 'rb')
                self.cast_to = pickle.load(self.tf)
                self.availablecc()
                print(' ')
                print(
                    colors.options('Casting to:') + ' ' +
                    colors.success(self.cast_to))
                print(' ')

        elif len(self.cclist) == 0 and self.tray == False:
            if self.debug == True:
                print('elif len(self.cclist) == 0 and self.tray == False:')
            print(colors.error('No devices found!'))
            if self.platform == 'Linux' and self.adevice == None:
                remove_sink()
            elif self.platform == 'Darwin':
                inputint()
                outputint()
            terminate()
            exit()

        elif len(self.cclist) == 0 and self.tray == True:
            print(colors.error(':::Tray::: No devices found!'))
            self.availablecc = []