def gen_show_infos_dict(show_obj):
        # type: (TVShow) -> ShowInfosDict
        show_infos = ShowInfosDict()

        def _get_show_info(tv_id):
            try:
                show_lang = show_obj.lang
                # There's gotta be a better way of doing this but we don't wanna
                # change the language value elsewhere
                tvinfo_config = sickbeard.TVInfoAPI(tv_id).api_params.copy()
                tvinfo_config['fanart'] = True
                tvinfo_config['posters'] = True
                tvinfo_config['banners'] = True
                tvinfo_config['dvdorder'] = 0 != show_obj.dvdorder

                if show_lang and not 'en' == show_lang:
                    tvinfo_config['language'] = show_lang

                t = sickbeard.TVInfoAPI(tv_id).setup(**tvinfo_config)
                return t.get_show((show_obj.ids[tv_id]['id'], show_obj.prodid)[tv_src == show_obj.tvid],
                                  load_episodes=False, banners=False, posters=False, fanart=True)
            except (BaseTVinfoError, IOError) as e:
                logger.log(u"Unable to look up show on " + sickbeard.TVInfoAPI(
                    tv_id).name + ", not downloading images: " + ex(e), logger.WARNING)

        # todo: when tmdb is added as tv source remove the hardcoded TVINFO_TMDB
        for tv_src in list(OrderedDict.fromkeys([show_obj.tvid] + list_keys(sickbeard.TVInfoAPI().search_sources) +
                                                [TVINFO_TMDB])):
            if tv_src != show_obj.tvid and not show_obj.ids.get(tv_src, {}).get('id'):
                continue
            if tv_src == show_obj.tvid:
                show_infos[tv_src] = _get_show_info(tv_src)
            else:
                show_infos[tv_src] = _get_show_info

        return show_infos