wiki:TaskThemeDownloader

This page is to track the proposed Theme Downloader. This involves three components: mythfrontend (Theme chooser), mythbackend (downloader), and services.mythtv.org (hosts Themes available for download).

Components
- Services webpage - http://services.mythtv.org/themes/
  - Hosts an 'index generator' that generates static html pages for each aspect
    ratio for each version of MythTV.  These are 'index.html' files put into
    subdirectories for the aspect ratio with a parent dir of the MythTV version
    number.  The Frontend will reference these via the subdirectory without
    specifying the 'index.html' portion. This will allow us the future option of
    switching to a dynamic page such as index.php without breaking existing
    frontends already deployed.  These pages are nothing fancy, they return just
    a list of theme names that are of the given aspect ratio and compatible with
    the given MythTV version.  The index generator also modifies the themeinfo.xml
    files to add a downloadurl tag to tell mythfrontend where to download the
    theme tarball from.  This gives us the flexibility of moving the download
    location or changing the tarball file naming convention at any time.  These
    downloads will probably come directly off the OSUOSL mirrors, so this index
    generator script will run after the OSUOSL rsync.

    This index generator may also optionally generate a 'details.html' in each
    subdirectory which can be viewed in a web browser to view details about the
    the themes compatible with that version/aspect.  This detail includes
    information from the themeinfo.xml file and also shows the preview image
    and a link to the download URL.  This is for people who want to manually
    browse the themes rather than using the Frontend theme browser.

  - Serves up static index pages listing what themes are available for a given
    MythTV version.

    Example full URLs:
      http://services.mythtv.org/themes/repository/0.23/index/All/index.html
      http://services.mythtv.org/themes/repository/0.23/index/4:3/index.html
      http://services.mythtv.org/themes/repository/0.23/index/16:9/index.html
      http://services.mythtv.org/themes/repository/0.23/index/16:10/index.html

    Frontend will access like this:
      http://services.mythtv.org/themes/repository/0.23/index/All/
      http://services.mythtv.org/themes/repository/0.23/index/4:3/
      http://services.mythtv.org/themes/repository/0.23/index/16:9/
      http://services.mythtv.org/themes/repository/0.23/index/16:10/

    Example Result for /themes/repository/0.23/16:9/:
      Arclight
      Graphite
      LCARS
      Mythbuntu

  - Serves up static themeinfo.xml files for the above-named themes.  These
    have been modified by the index generator to include a downloadurl tag
    to specify where to download the theme from.

    Query:
      http://services.mythtv.org/themes/repository/0.23/Graphite/themeinfo.xml

    Example:
      http://mythtv.bc2va.org/themes/repository/0.23/Graphite/themeinfo.xml

  - Serves up static preview images for the above-named themes.

    Query:
      http://services.mythtv.org/themes/repository/0.23/Arclight/preview.png

    Example:
      http://mythtv.bc2va.org/themes/repository/0.23/Arclight/preview.png

  - Optionally Serve up static tarballs for the above-named themes.  We could
    include an alternate download url in the themeinfo.xml file for use when
    the rsync process had not completed yet and a tarball was not available from
    the mirrors.  This might come in handy once we have a theme uploader UI on
    the website which allows people to upload and/or update their own themes
    on the website.

    Query:
      http://services.mythtv.org/themes/downloads/Graphite/Graphite-1.1_0.23.tar.gz

    Example:
      http://mythtv.bc2va.org/themes/download/Graphite/Graphite-1.1_0.23.tar.gz

  - Installing a new theme on the services website is as simple as:
    - Copy tarball to .../themes/download/THEMENAME/THEMENAME-THEMEVERSION_MYTHVERSION.tgz
      (NOTE: this location may change or their may need to be a script which puts the files
       in the proper location for the OSUOSL rsync job)
      ie, .../themes/download/Graphite/Graphite-1.1_0.23.tgz
    - Theme tarball should included a versioned subdir (ie, 'Graphite-1.1_0.23', not 'Graphite')
    - Unpack themeinfo.xml and preview images into repository dir for correct MythTV version
      .../themes/repository/0.23/Graphite/themeinfo.xml
      .../themes/repository/0.23/Graphite/preview.png
    - Run the 'index generator' script.

  - The sample services page above parses the themeinfo.xml files to check the aspect ratio as
    well as to display the Theme information on the human-readable version of the webpage.

- mythfrontend
  - Theme chooser
    - Gets list of theme names from services webpage
    - downloads themeinfo.xml file for each theme.
      downloaded to temp directory under GetConfDir()  ~/.mythtv/themedownloader/Graphite-1.1_0.23/themeinfo.xml
    - parses themeinfo.xml using existing ThemeInfo class to allow displaying theme info on screen.
    - downloads preview(s) for each theme
    - presents user with a screen to download/install one or multiple themes
  - Requests backend to download theme tarball when user picks a theme
  - Can use a remote theme from the master BE over mythproto or D/L theme from MBE and install locally.

- mythbackend (master backend only)
  - Downloads theme tarballs when requested by the frontend
  - Sends out myth event when theme is downloaded
  - Extracts downloaded themes to GetConfDir()/themes
  - Serves up themes in GetConfDir()/themes subdir via normal mythproto file serving
  - Serves up theme tarballs over myth proto for any FE to download locally and install.

Last modified 8 years ago Last modified on Jul 19, 2010, 1:23:00 PM