Replace stray tab
Disambiguate the line number in QSP exception errors.
Revert "Add ChannelIcons to the list of "special" storage groups."

This reverts commit d2316b47974f27dc333dd2924e8beb0aca92a73e.

The ChannelIcon group is a built-in group, built-in groups aren't
included in disk space calculations.
Lookup channel data by chanid instead of source+channum, the latter requires a single query and the former three queries.
Fix services GetChannelIcon() when height or width are specified
Use the ChannelInfo class instead of loading data in fragments from ChannelUtil
Change CommFree from an int to a bool
Merge some identical channel loading code in the guide and channel
services.

Also:
* Start exposing correct visibility information for channels returned by
  GetProgramGuide. This would be necessary for any third parties
  wishing only to display the channels the user actually wants to use
  (which may be dozens out of hundreds for Satellite/Cable).

* Change some argument types from int to uint for consistency, and
  because these cannot legitimately be less than zero so it forces
  users of the services API to provide sane values
Fix a whitespace error in site.css
Services API: Order programs in GetProgramGuide() by starttime
Services API: Fix aggregation of channel and program information in GetProgramGuide()
Use Live TV order for the card list.

In many cases, the list of available cards was being returned in card
ID order, when it would be more appropriate (and correct) to use the
Live TV order.
Allow Live TV to be entered from the top-level Program Guide.

This allows the user to start Live TV on a specific channel from the
Program Guide grid.  Otherwise, the user needs to wait for Live TV to
start and tune the initial channel, then find the channel actually
wanted, and wait for it to be tuned.  This also provides a workaround
when the default initial channel is untunable for some reason.

Currently, if the desired channel is not tunable (e.g., all capable
recorders are already busy), it will fail.

Refs #11913.
Add a guide grid to the internal web-server.

This is a WORK IN PROGRESS, not a final finished product. Please do
NOT open tickets for it yet.

What does NOT work (yet)?
 * The 'One-Click-Record' menu isn't hooked.
 * There is no Recording Rule Editor.
 * There are no button to move back/forwards through the guide.

Basically you can view the guide, browse through it by date or time but not much else.

It has been designed with modern browsers in mind. It utilises some
CSS3 and DOM features that may not work with browsers more than 6
months old. This is intentional, it is not a bug but I may be bribed
to change my mind.

The styling is provisional, the finished article may either look very
similar or entirely different.

Firefox, Opera, Opera Mobile, Opera Mobile Classic (Android) and
Chromium were tested. Internet Explorer and Chrome were not tested but
since we're following the standards here they should of course work too.

There is a known issue with Opera Mobile (both versions) and the
record menu throwing everthing out of wack.
Fix popup positioning in web guide grid
Show a busy dialog when loading pages
Add columns for season and episode to program and recordedprogram tables.
Insert season and episode from guide data into the database.
Insert season/episode from EIT data into database
Escape HTML special chars in the Guide Grid