HTTP Server: Add a mime-type for m4v.
Change the sorting for 'NextRecording' so that recording rules with no upcoming records are moved to the back of the list instead of the front.
Add comment explaining [2035013]
WebFrontend: Don't resize the page content for the menu, instead let the menu overlay it. The effect of resizing didn't work well enough, especially on slower browsers/devices.
WebFrontend: Bump up the z-index of the menu.
WebFrontend: Make the guide timebar static.

This one tiny detail has caused me more headaches than almost any
other bit of the WebFrontend so far. I looked at several approaches
and hit many dead ends. This _should_ be pure css, but it doesn't
appear possible. I investigated giving the timebar fixed positioning,
but that requires too many compromises, too many wrappers (css was
supposed to do away with markup for the purpose of styling) and it
would make updates to the page harder.

A fancy javascript (jQuery) carousel type approach proved to be way
too slow on mobile devices. Javascript just is never going to be fast
enough on phones/tablets.

So going back to a simple approach I've mixed css (overflow: scroll)
with a one liner of javascript to resize the div to the remaining
screen height (impossible in css). However there is still an
irritating mis-alignment issue on mobile browsers because they don't
display the scrollbar, this results in the timebar being slightly
mis-aligned with respect to the programme boundaries. Since I've
already wasted a lot of time on this, I'm committing it as is and will
revisit the alignment problem if/when time allows.
Try to fix corner cases when stopping in-progress recordings.

The backend uses EncoderLink::MatchesRecording(), which in turn uses
ProgramInfo::IsSameRecording(), to determine which recorder to stop.
Unfortunately the logic used is too strict in some respects and too
loose in others.  It is too strict in that it requires an exact match
on ProgramInfo::recstartts when there are many places in the code
where the exact recstartts used by the recorder is not known.  The
result is the stop recording request is ignored in those cases.  It is
too loose in that it doesn't only uses chanid and recstartts.  The
result is that it can stop the wrong recording in some cases.

This change attempts to resolve at least some of the issues.  Changed
PI:IsSameRecording() to also check the program title.  Changed
EL::MatchesProgram() to check PI::IsSameProgramWeakCheck() and the
inputids instead of PI::IsSameRecording() when the inputid is known.
This handles the cases where the exact recstartts isn't known.
Finally, removed a work-around for this problem in ScheduleCommon that
didn't always work.
Services API: Add GetFrontends endpoint which returns a list of frontends connected to the backend.

The endpoint takes a boolean 'OnLine' arg which limits the list to
only frontends which are currently connected, excluding those which
have connected but are presently offline.

The frontend information return is limited to it's hostname (Name) and
it's IP address. This should improve in time.

The frontend IP (and port 6547) enables a services client to connect
to the frontend http service where they can then fetch further
frontend information or control aspects of the frontend.

This adds a BackendContext global object to the backend which
maintains a list of all frontends which connect to the backend and
those which are presently connected. This is an incomplete
implementation as we don't yet store the frontend information in the
database so that it will persist through backend restarts.

Ultimately the BackendContext may evole to track other information.
Services API: Return a simple boolean 'OnLine' for the Frontend object instead of the connection count.
Move ANN logging to VB_NETWORK, replacing it with the more user-friendly logging from BackendContext
Merge branch 'devel/resync-ffmpeg'

Make distclean is compulsory. Deleting any installed mythtv headers is highly recommended
replace 1895 with VIDEO_YEAR_DEFAULT
add GuessLookupType for VideoMetadata to match other content

Refactor the lookup so its easier to compare the guessing.
Guess its an episode if it has an episode title

Guessing the content type for videos was only looking at the
season and episode number.
Comment out links to non-existant JS files. These will probably exist eventually, but they don't right now so remove them to prevent browsers complaining.
WebFrontend: Add frontend status to the overview page, just online/offline for now.
WebFrontend: Link to the frontend http server from the Backend Overview
WebFrontend: Merge in a patch fixing a bug in jScroll. https://github.com/gpayer/jscroll/commit/d72f7bb23272ed5d3586fede7727c89c5852c023
Frontend state tracking improvements including a bug fix and a change to ensure we always update the fronted IP when it reconnects.
WebFrontend: Fix 'Edit Rec Rule' in the recordings page loading the wrong rule.