def series(service_name, series_id):
    service = g.account.services[service_name]
    series = service.get_series(series_id)
    collection = service.get_collection()
    series_info = find_series_in_collection(collection, str(series_id))
    if not series_info:
        raise Exception("Can't find series '%s' in collection." % series_id)

    lib = CbzLibrary(g.account.library_path)
    for issue in series:
        issue.series_title = series_info.title # Patch missing series_title from Comixology
        path = lib.get_issue_path(issue)
        issue.path = path
        if os.path.isfile(path):
            issue.downloaded = True

        issue.small_cover_url = service.cdn.get_resized(issue.cover_url, 170, 170)

    return render_template(
            'series.html',
            title="Your Collection: %s" % series_info.title,
            service_name=service.service_name,
            username=service.username,
            series_id=series_id,
            series=series
            )
def download(issue_id, service_name=None, output=None, metadata_only=False):
    ''' Downloads comicbook issues.
    '''
    service = _get_service_safe(service_name)

    issue = service.get_issue(issue_id)
    app.logger.info("[%s] %s" % (issue.comic_id, issue.get_display_title()))
    
    if output is None:
        account = _get_account()
        library = CbzLibrary(account.library_path)
        output = library.get_issue_path(issue)
    out_path = output.strip('\'" ')

    builder = CbzBuilder(service, subscriber=CliDownloadProgress(), temp_folder=cache_dir)
    builder.username = service.username
    if metadata_only:
        builder.update(issue, out_path=out_path)
        app.logger.info("Issue updated at: %s" % out_path)
    else:
        builder.save(issue, out_path=out_path)
        app.logger.info("Issue saved at: %s" % out_path)