GMEPG Do not repaint backgrounds at this point.
GMEPG fix spurious missing descriptions and large timejumps.
GMEPG add ServiceEvent support.
Avoid race condition, consolidate check into stat() exception block.
OrbitalPosition shows the position of the next channel.
ServiceName Reference resolves alternates.
GMEPG Actually honour font statements specified in the skin.
GMEPG Show channels with a different colour if not playable.
Minimise code duplication for isPlayable functions.

Pull together several similar routines in places sprinkled throughout
the code and centralise them in one place to minimise code duplication.
GetEcmInfo make ecm global to support peeking in the raw lines.
Cleanup SkinSelector to use os.path and follow symlinks.
Change some backslash and continue on next line

As it makes the code less readable
GMEPG: Make alignments of Service Name and Events configurable
GMEPG: possibleAlignmentChoises start with lower case letter
Ensure that we only have one nofication to enter parantel pin

As sometimes with preview we could have mulitple instances
GMEPG: Avoid GSOD when parantal control blocks a service

On OK you never get to a parentel controlled channel. You even cannot
exit the GMEPG. Only with exit this is possible this time - but then you
have to enter a PIN.
pmt: always restart m_PAT/m_PMT when frontend state changes to ok

Even if we have already allocated a demux, it could be that
m_PAT / m_PMT have timed out (or returned invalid data) on
the previous attempt.
When that happened, we would not restart them when the
frontend lost and re-gained it's lock, because we already
allocated a demux.

This situation might occur with a rotor setup for instance,
where the frontend gets a lock before the positioner has
reached the correct orbital position.
(as might happen when there is no current measurement, or
current measurement is not reliable)
As a result, no channel would be started, and no retries
would be attempted.
tstools: force m_pts_length to be recalculated when m_pts_begin is set

m_pts_length can be correctly calculated (by calcEnd) only when
m_pts_begin is known, so calcBegin should have succeeded before
calcEnd is called.
Under certain circumstances, calcEnd could succeed before calcBegin,
leaving m_pts_length at an illegal value.
In that case, eDVBTSTools::calcLen might return an invalid length.

To avoid this, make sure the end value is invalidated, whenever
the begin value is set.
That ensures that begin and end are always calculated in the right
order, and m_pts_length will always be correct when m_begin_valid
and m_end_valid are both set.

thanks to betacentauri for finding this issue
ServiceName: getName() cannot be called with zero arguments.
Revert "ServiceName: getName() cannot be called with zero arguments."

This reverts commit 027d32076d459084f45dde81dd439c12c26e1e99.

It was a fix for the <n/a> channels but it has a big site effect
that the channelname was not available anymore on the OSD when there
was no explecit #description in the settings