public function getStateDetails()
{
$data = $this->soap("AVTransport", "GetPositionInfo");
# Check for line in mode
if ($data["TrackMetaData"] === "NOT_IMPLEMENTED") {
$state = new State($data["TrackURI"]);
$state->stream = "Line-In";
return $state;
}
# Check for an empty queue
if (!$data["TrackMetaData"]) {
return new State();
}
$parser = new XmlParser($data["TrackMetaData"]);
$state = State::createFromXml($parser->getTag("item"), $this);
if ((string) $parser->getTag("streamContent")) {
$info = $this->getMediaInfo();
if (!($state->stream = (string) (new XmlParser($info["CurrentURIMetaData"]))->getTag("title"))) {
$state->stream = (string) $parser->getTag("title");
}
}
$state->queueNumber = (int) $data["Track"];
$state->duration = $data["TrackDuration"];
$state->position = $data["RelTime"];
# If we have a queue number, it'll be one-based, rather than zero-based, so convert it
if ($state->queueNumber > 0) {
$state->queueNumber--;
}
return $state;
}