Fork Explanation and Activation Instructions

Adds a README.md to the root of the project explaining the purpose of
this fork of AwesomeTTS and how to activate it within Anki.
No Versioning for Compiled Python and User Data

Configures a .gitignore in the root of the project to exclude compiled
Python files (*.pyc) and user data (*.db) from version control, allowing
the symlink method described in the README.md instructions to work
without risk of accidentally checking these files in.
No Versioning for Generated Forms

Removes awesometts/forms/*.py and introduces a .gitignore instead.

Python files in the forms/ subdirectory are generated programmatically
by the tools/build_ui.sh script, and do not need to be entered into
version control.
Executable UI Builder

Marks the tools/build_ui.sh script as executable so that it can be run
directly from the terminal without explicitly sourcing it.
Instructions for Building the User Interface

Updates the project's README.md to reflect the fact that the built user
interface code is no longer included in the repository, so instead the
commands the build it after downloading are given.
Google Caching Modifier in Version

Adjusts the version string, as displayed on the configuration screen, to
reflect that this variant of the AwesomeTTS plug-in is to have caching
available for remote Google TTS assets.
"Cache Downloads from Google TTS" Checkbox

Adds a new checkbox to the configuration screen to enable the user to
turn on or off the new caching feature to store all downloaded files
from Google TTS locally.
New caching Column for general Table

This adjusts the current "general" table creation code to include a new
"caching" header and also provides an upgrade path for an installation
that already has a "general" table to have the "caching" column added.
Expose "caching" Value from config Module

Adds an assignment from the resulted row from the general table so that
other modules using the config module will have access to the "caching"
value.
Configuration Database and Form Wiring

Adds serialization and deserialization between the new "caching" column
in the database and the on-screen configuration form.
Google TTS Caching Implementation

Adds a check in the playGoogleTTS function to see if the caching feature
is turned on. If it is, the phrase is hashed and a cache filename is
generated and checked for existence.

If the file does not exist, an HTTP request is made within Python to try
to retrieve the audio. If that request is successful, the file is
written to disk and that file's path is passed to the underlying mplayer
call rather than the original URL as before.

On subsequent calls, the file will already exist and it can just be
passed immediately to mplayer.
No Versioning for Cached Downloads

Configures a .gitignore in the new awesometts/services/cache directory
that will be in-use for downloading audio from Google TTS.
Whitespace Normalization of Google TTS Text Input

In the use of psuedo "tts" tags in defining the speech text on various
cards on various templates, there can be differences in whitespace
between what are otherwise the same expressions.

This adds an additional regular expression replacement to the text input
before hashing it, collapsing all whitespace down and trimming it,
decreasing the number of cache misses.
Binary Mode for Cached MP3s

Adds the 'b' flag to the open() call when writing out the cached MP3
files. While Linux does not care about this flag, Windows sure does.
Exception Handling for Bad TTS Calls

This adds on-screen error messages for when a urllib2 urlopen() call
either throws an exception or the response back from Google TTS is not
what is expected (i.e. an audio/mpeg file with a status of 200).

Both types of error messages will only be displayed once, which is
controlled by two different module-level flags.
Clear Cache Button on Configuration Layout

Adds a new button to the configuration layout called "pushClearCache"
that will be usable for viewing the state of the cache and also clearing
it.
Caching Direction Definition in Config Module

Moves the caching directory initialization to the config module, so that
it may be more accessible elsewhere in the program (notably, the code
that initializes the configuration screen).

Also, in the future, it might be nice to let the user specify the
directory to use for caching (and in that way, the user could cache to a
network or shared drive if s/he wanted to share the cache among multiple
instances of the program).
"Clear Cache" Button Initialization

Sets the button and its text up upon opening the configuration dialog
box. This includes the disabled/enabled status and also the file count
when there are files in the cache.
"Clear Cache" Button Implementation

Adds support for disabling the button, removing the underlying files,
and updating the button text when the user clicks it.
Merge feature/google-caching.counter-clear

Brings this experimental feature into the main feature/google-caching
branch after its successful implementation.