[for internal use] convert json/dict into python object

    |coro|

    Parameters
    ----------
    object_dict : dict
      json representation of object from emby

    Notes
    -----
    if a string is given, it is assumed to be an id, obj is returned.
    if a list is given, this method is called for each item in list.

    Returns
    -------
    EmbyObject
      the object that is represented by the json dict
    list
      if input is a list, list is returned

async def process(self, object_dict):
    '''[for internal use] convert json/dict into python object

    |coro|

    Parameters
    ----------
    object_dict : dict
      json representation of object from emby

    Notes
    -----
    if a string is given, it is assumed to be an id, obj is returned.
    if a list is given, this method is called for each item in list.

    Returns
    -------
    EmbyObject
      the object that is represented by the json dict
    list
      if input is a list, list is returned
    '''
    # if ID was given, create dummy object and update it to get full dict
    try:
      if type(object_dict) == str:
        existing = EmbyObject.known_objects.get(object_dict)
        if existing:
          return existing

        obj = EmbyObject({"Id":object_dict}, self.connector, save=False)
        object_dict = (await obj.update()).object_dict
    except:
      return None

    # if nothing was given, return it back
    # if already created object was given, return it back too
    if not object_dict or isinstance(object_dict, EmbyObject):
      return object_dict

    # if a json dict that's really just a list was given,
    #   convert to list
    if type(object_dict)       == dict and \
       set(object_dict.keys()) == {'Items', 'TotalRecordCount'}:
      object_dict = object_dict['Items']

    # if a list was given,
    #   process each item in list
    if type(object_dict) == list:
      items = []
      for item in object_dict:
        item = await self.process(item)
        if item:
          items.append(item)
      return items

    # otherwise we probably have an object dict
    #   so we should process that

    # if dict has no id, it's a fake
    if 'Id' not in object_dict and 'ItemId' not in object_dict:
      return object_dict

    # if object is already stored,
    #   update with existing info and return
    itemId   = object_dict.get('Id', object_dict.get('ItemId'))
    existing = EmbyObject.known_objects.get(itemId)
    if existing:
      existing.object_dict.update(object_dict)
      return existing

    import embypy.objects.folders
    import embypy.objects.videos
    import embypy.objects.misc

    # if objectc is not already stored,
    #   figure out its type (if unknown use this base class)
    #   create an object with subclass of that type
    #   return
    if 'Type' in object_dict:
        if object_dict['Type'] == 'Audio':
          return embypy.objects.misc.Audio(object_dict, self.connector)
        if object_dict['Type'] == 'Person':
          return embypy.objects.misc.Person(object_dict, self.connector)
        if object_dict['Type'] == 'Video':
          return embypy.objects.videos.Video(object_dict, self.connector)
        if object_dict['Type'] == 'Movie':
          return embypy.objects.videos.Movie(object_dict, self.connector)
        if object_dict['Type'] == 'Trailer':
          return embypy.objects.videos.Trailer(object_dict, self.connector)
        if object_dict['Type'] == 'AdultVideo':
          return embypy.objects.videos.AdultVideo(object_dict, self.connector)
        if object_dict['Type'] == 'MusicVideo':
          return embypy.objects.videos.MusicVideo(object_dict, self.connector)
        if object_dict['Type'] == 'Episode':
          return embypy.objects.videos.Episode(object_dict, self.connector)
        if object_dict['Type'] == 'Folder':
          return embypy.objects.folders.Folder(object_dict, self.connector)
        if object_dict['Type'] == 'Playlist':
          return embypy.objects.folders.Playlist(object_dict, self.connector)
        if object_dict['Type'] == 'BoxSet':
          return embypy.objects.folders.BoxSet(object_dict, self.connector)
        if object_dict['Type'] == 'MusicAlbum':
          return embypy.objects.folders.MusicAlbum(object_dict, self.connector)
        if object_dict['Type'] == 'MusicArtist':
          return embypy.objects.folders.MusicArtist(object_dict, self.connector)
        if object_dict['Type'] == 'Season':
          return embypy.objects.folders.Season(object_dict, self.connector)
        if object_dict['Type'] == 'Series':
          return embypy.objects.folders.Series(object_dict, self.connector)
        if object_dict['Type'] == 'Game':
          return embypy.objects.misc.Game(object_dict, self.connector)
        if object_dict['Type'] == 'GameSystem':
          return embypy.objects.folders.GameSystem(object_dict, self.connector)
        if object_dict['Type'] == 'Photo':
          return embypy.objects.misc.Photo(object_dict, self.connector)
        if object_dict['Type'] == 'Book':
          return embypy.objects.misc.Book(object_dict, self.connector)
        if object_dict['Type'] == 'Image':
          return embypy.objects.misc.Image(object_dict, self.connector)
    elif 'AppName' in object_dict:
            return embypy.objects.misc.Device(object_dict, self.connector)
    elif 'HasPassword' in object_dict:
            return embypy.objects.misc.User(object_dict, self.connector)

    return EmbyObject(object_dict, self.connector)