Update timeline to return an active timeline object w/ attributes (#572)
Update timeline to return an active timeline object w/ attributes (#572)

* timeline() now returns ClientTimeline objects

* timeline() creates and returns ClientTimeline objects with associated attributes and caching
* Refactor isPlayingMedia to use the new attributes and fix it's default value

* Clarify docstrings

* Remove default param in timeline call & fix docstring typo

* return empty list if `timelines()` comes back empty

Web clients can occasionally return no timelines if no media has been played on them or if nothing has played for a while, this prevents errors in those cases.

* typo

* Workaround for unresponsive clients

* Use sendCommand rather than timelines() for PTP workaround

* Remove workaround, set timeline's wait default to 1

* set timelines() wait default to 0, document buggy behavior

* Use ClientTimeline.key for consistency

Co-authored-by: jjlawren <98437fd1abd0b218b90ac28f9f196c0cabe2c117@users.noreply.github.com>

* cast playQueue's IDs as int

Co-authored-by: jjlawren <98437fd1abd0b218b90ac28f9f196c0cabe2c117@users.noreply.github.com>

* Add audio attribs & make casts bool from int where it makes sense.

Co-authored-by: jjlawren <98437fd1abd0b218b90ac28f9f196c0cabe2c117@users.noreply.github.com>
mjs7231/python-plexapi,pkkid/python-plexapi