0

バージョン 5.4 に更新すると、「プレイリスト」コンテナにプレイリストを作成するオプションも、既存のプレイリストにトラックを追加するオプションもなくなりました。バージョン 5.3 では問題なく動作していました。Sonosの他の音楽サービスもチェックしましたが、同じ問題です。プレイリスト編集のドキュメントで指定されていない、ユーザー コンテンツ プレイリストの仕様の変更はありましたか?

これは、ユーザー コンテンツ コンテナーを追加する方法です。

$result->mediaCollection[] = array('id'=>'playlists', 'title'=>'My Playlists', 'itemType'=>'favorites', 'containsFavorite'=>true, 'displayType'=>'genreList', 'readOnly'=>false, 'userContent'=>true, 'renameable'=>true, 'albumArtURI'=>PATH.'/img.png');

編集:
Android コントローラー (バージョン 5.4、ビルド 29590261) を使用しており、Play:1 (バージョン 5.4、ビルド 29591030) でテストしています。
曲/プレイリストを既存のプレイリストまたは新しいプレイリストに追加することはできます (曲を長押しして拡張メタデータにアクセスし、[トラックを 'サービス名' プレイリストに追加] します)。プレイリストの削除、プレイリストの名前の変更、プレイリスト内の曲の編集 (並べ替え、曲の削除) の方法がわかりません。バージョン 5.3 のスクリーンショットはありませんが、プレイリスト コンテナーの右上隅 (3 つの縦のドット) にボタンがあり、そこからプレイリストを編集したり、新しいプレイリストを作成したりできます (バージョン 5.4 の以下のスクリーンショットを確認してください)。何か不足していますか?

プレイリスト コンテナ プレイリスト コンテナを長押しします。

編集 2:
問題の原因を突き止めました。カスタム アイテム表示を実装できるようにするために、ベータ版の .wsdl を使用しています (新しい SMAPI 機能の追加ページから理解したように、これはもうベータ版ではありません)。Sonos Documentation から通常のSonos.wsdl ファイルに戻ると、情報とオプションのボタンが再び表示されます。情報ボタンとオプション ボタンをそのままにして、プレイリスト編集のすべての機能を変更せずに、カスタム アイテム表示を使用するにはどうすればよいですか?

注: Sonos(beta).wsdl はここにありましたが、もう利用できません。

編集 3: Sonos のドキュメント
から Sonos.wsdl をダウンロードしましたが、まだボタンが表示されません。問題を再現するには、次の PHP 実装とプレゼンテーション マップ XML コードを確認してください。

PHP 実装:

define('BASE_PATH', rtrim("http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']), '/'));

class SonosAPI
{
    public function getMetadata($args)
    {
        $result = new StdClass();
        $result->index = $args->index;
        switch($args->id) {
            case 'root':
                $result->mediaCollection[] = array('id'=>'playlists', 'title'=>'My Playlists', 'itemType'=>'favorites', 'displayType'=>'genreList', 'readOnly'=>false, 'userContent'=>true, 'renameable'=>true, 'albumArtURI'=>BASE_PATH.'/image.png');
                $result->count = $result->total = 1;
                break;
            case 'playlists':
                $result->mediaCollection[] = array('id'=>'123', 'title'=>'Title', 'itemType'=>'playlist', 'displayType'=>'genreList', 'canPlay'=>true, 'readOnly'=>false, 'userContent'=>false, 'renameable'=>true, 'albumArtURI'=>BASE_PATH.'/image.png');
                $result->count = $result->total = 1;
                break;
        }

        return array('getMetadataResult' => $result);
    }

}

$server = new SoapServer("Sonos.wsdl", array('cache_wsdl' => 0)); // disable cache in development
$server->setClass('SonosAPI');

try {
    $server->handle();
} catch (Exception $e) {
    Log("[ERROR] ".$e->getMessage());
}

?>

プレゼンテーション マップ ファイル:

<?xml version="1.0" encoding="utf-8" ?>
<Presentation>

    <PresentationMap type="DisplayType">
        <DisplayType id="genreGrid">
            <DisplayMode>GRID</DisplayMode>
        </DisplayType>
        <DisplayType id="genreList">
            <DisplayMode>LIST</DisplayMode>
        </DisplayType>
        <DisplayType id="genreHero">
            <DisplayMode>HERO</DisplayMode>
        </DisplayType>
        <DisplayType id="genreEditorial">
            <DisplayMode>EDITORIAL</DisplayMode>
        </DisplayType>
        <DisplayType id="twoLine">
          <Lines>
            <Line token="title"/>
            <Line token="summary"/>
          </Lines>
        </DisplayType>
    </PresentationMap>

</Presentation>

ルート (プレイリスト コンテナーを含む) の getMetadata への XML 応答:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns1="http://www.sonos.com/Services/1.1" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Body>
      <ns1:getMetadataResponse>
         <ns1:getMetadataResult>
            <ns1:index>0</ns1:index>
            <ns1:count>4</ns1:count>
            <ns1:total>4</ns1:total>
            <ns1:mediaCollection>
               <ns1:id>rootlang:ar</ns1:id>
               <ns1:itemType>collection</ns1:itemType>
               <ns1:displayType>genreGrid</ns1:displayType>
               <ns1:title>Arabic</ns1:title>
               <ns1:albumArtURI>{SOME LINK}</ns1:albumArtURI>
            </ns1:mediaCollection>
            <ns1:mediaCollection>
               <ns1:id>rootlang:en</ns1:id>
               <ns1:itemType>collection</ns1:itemType>
               <ns1:displayType>genreGrid</ns1:displayType>
               <ns1:title>International</ns1:title>
               <ns1:albumArtURI>{SOME LINK}</ns1:albumArtURI>
            </ns1:mediaCollection>
            <ns1:mediaCollection>
               <ns1:id>rootlang:default</ns1:id>
               <ns1:itemType>collection</ns1:itemType>
               <ns1:displayType>genreGrid</ns1:displayType>
               <ns1:title>Arabic + International</ns1:title>
               <ns1:albumArtURI>{SOME LINK}</ns1:albumArtURI>
            </ns1:mediaCollection>
            <ns1:mediaCollection renameable="true" readOnly="false" userContent="true">
               <ns1:id>playlists</ns1:id>
               <ns1:itemType>favorites</ns1:itemType>
               <ns1:displayType>genreList</ns1:displayType>
               <ns1:title>My Playlists</ns1:title>
               <ns1:albumArtURI>{SOME LINK}</ns1:albumArtURI>
            </ns1:mediaCollection>
         </ns1:getMetadataResult>
      </ns1:getMetadataResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

プレイリストの getMetadata への XML レスポンス:

 <?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns1="http://www.sonos.com/Services/1.1" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Body>
      <ns1:getMetadataResponse>
         <ns1:getMetadataResult>
            <ns1:index>0</ns1:index>
            <ns1:count>1</ns1:count>
            <ns1:total>1</ns1:total>
            <ns1:mediaCollection renameable="true" readOnly="false" userContent="false">
               <ns1:id>playlist:19663408</ns1:id>
               <ns1:itemType>playlist</ns1:itemType>
               <ns1:displayType>genreList</ns1:displayType>
               <ns1:title>Test Playlist</ns1:title>
               <ns1:canPlay>true</ns1:canPlay>
               <ns1:albumArtURI>{SOME LINK}</ns1:albumArtURI>
            </ns1:mediaCollection>
         </ns1:getMetadataResult>
      </ns1:getMetadataResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
4

1 に答える 1

0

カスタム表示タイプは、最新の製品版ソフトウェア アップデートで利用できるようになりました。使用していたベータ wsdl は、現在の製品ビルドである v5.4 用です。製品バージョンの wsdl を使用していることを確認してください。情報とオプションがあり、カスタム表示タイプにもアクセスできます (サービスで適切に有効になっている場合)。

ただし、プレイリストの編集が有効になっているときに、プレイリスト コンテナーで表示タイプを使用するとバグが発生することが確認されています。回避策は、ルート プレイリストおよび子プレイリスト コンテナから displayType ノードを削除することです (displayType を使用する他のすべてのコンテナを変更する必要はありません)。この回避策はテスト済みで、機能します。これを社内で追跡するためにイシューをオープンしました。

于 2015-08-06T16:42:18.933 に答える