# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Command for scraping images from a URL or list of URLs.

Prerequisites:
  1. The command_line package from tools/site_compare
  2. Either the IE BHO or Firefox extension (or both)

Installation:
  1. Build the IE BHO, or call regsvr32 on a prebuilt binary
  2. Add a file called "measurepageloadtimeextension@google.com" to
     the default Firefox profile directory under extensions, containing
     the path to the Firefox extension root

Invoke with the command line arguments as documented within
the command line.
"""

import command_line

from drivers import windowing
from utils import browser_iterate

def CreateCommand(cmdline):
  """Inserts the command and arguments into a command line for parsing."""
  cmd = cmdline.AddCommand(
    ["scrape"],
    "Scrapes an image from a URL or series of URLs.",
    None,
    ExecuteScrape)

  browser_iterate.SetupIterationCommandLine(cmd)
  cmd.AddArgument(
    ["-log", "--logfile"], "File to write text output", type="string")
  cmd.AddArgument(
    ["-out", "--outdir"], "Directory to store scrapes", type="string", required=True)


def ExecuteScrape(command):
  """Executes the Scrape command."""

  def ScrapeResult(url, proc, wnd, result):
    """Capture and save the scrape."""
    if log_file: log_file.write(result)

    # Scrape the page
    image = windowing.ScrapeWindow(wnd)
    filename = windowing.URLtoFilename(url, command["--outdir"], ".bmp")
    image.save(filename)

  if command["--logfile"]: log_file = open(command["--logfile"], "w")
  else: log_file = None

  browser_iterate.Iterate(command, ScrapeResult)

  # Close the log file and return. We're done.
  if log_file: log_file.close()
