При реализации Sonos Music API, как мне получить меню со списком элементов коллекции, чтобы отобразить кнопку «Воспроизвести все»?

Чего я пытаюсь достичь

Я хочу отобразить тот же пункт меню «Воспроизвести все», который я получаю при перечислении дорожек (меню с itemType=trackList) для меню других itemType, например. Плейлисты. Это возможно?

Так, например, представляя каждое меню в виде вложенного списка, я хочу:

  • Collection 1
    • Play All <---- I don't get this one!
    • Playlist 1
      • Play All <-- I get this
      • Трек 1
      • Трек 2
      • ...
    • Playlist 2
      • Play All <-- I get this
      • Трек 1
      • Трек 1
    • ...

Ничего страшного, если такое поведение невозможно, но я просто хотел перепроверить.

Что говорят документы

Согласно документации Sonos API, вы можете сделать другие типы элементов доступными для воспроизведения, установив canPlay=true. Фактически, в нем конкретно упоминается мой вариант использования:

Флаг canPlay используется для указания того, что коллекция может быть поставлена ​​в очередь для воспроизведения целиком. Для этого клиент вызовет getMetadata, передав логический параметр «recursive», установленный в true. Это вернет сглаженный список всех элементов mediaItem в коллекции. Например, "canPlay" может быть верным для коллекции, представляющей плейлист треков...

Когда я устанавливаю canPlay=true, я могу нажать и удерживать коллекцию в предыдущем меню, и у меня появляется всплывающее меню, которое позволяет мне воспроизводить все таким образом, но у меня нет реального значка «Воспроизвести все» в последующем меню. . Так задумано или есть способ отобразить значок «Воспроизвести все»?

На странице типов элементов SMAPI указано:

mediaCollection of itemType trackList с canEnumerate = true активирует узел «Все дорожки», когда вы просматриваете контейнер, как показано ниже.

Это единственный itemType, для которого это сработает?

Мои getMetadata ответы

Если будет полезно, вот мои getMetadata ответы:

  1. getMetadata вызов, который отображает меню, содержащее коллекцию:

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
       <soap:Body>
          <getMetadataResponse xmlns="http://www.sonos.com/Services/1.1">
             <getMetadataResult>
                <index>0</index>
                <count>10</count>
                <total>10</total>
    
                ...
    
                <mediaCollection>
                   <id>collections:134</id>
                   <itemType>collection</itemType>
                   <displayType>standardView</displayType>
                   <title>Collection 1</title>
                   <summary>Collection 1 Summary</summary>
                   <canPlay>true</canPlay>
                   <albumArtURI>https://path/to/album_art.jpg</albumArtURI>
                </mediaCollection>
    
                ...
    
             </getMetadataResult>
          </getMetadataResponse>
       </soap:Body>
        </soap:Envelope>
    
  2. getMetadata вызов, в котором перечислены плейлисты коллекции:

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
       <soap:Body>
          <getMetadataResponse xmlns="http://www.sonos.com/Services/1.1">
             <getMetadataResult>
                <index>0</index>
                <count>1</count>
                <total>1</total>
                <mediaCollection>
                   <id>collections:134:playlists:506</id>
                   <itemType>trackList</itemType>
                   <displayType>standardView</displayType>
                   <title>Playlist 1</title>
                   <summary>Playlist 1 summary</summary>
                   <canPlay>true</canPlay>
                   <albumArtURI>http://path/to/album_art.jpg</albumArtURI>
                </mediaCollection>
             </getMetadataResult>
          </getMetadataResponse>
       </soap:Body>
    </soap:Envelope>
    

person Rob Isenberg    schedule 20.04.2016    source источник
comment
Привет, Роб, кажется, ты достиг хорошей точки с этим. нам нужен кто-то знающий об этом для консультации как можно скорее. Вы были бы доступны? если хорошо, пожалуйста, дайте мне знать через чат или [email protected]   -  person Alex Darsonik    schedule 24.04.2016


Ответы (1)


Похоже, вы пытаетесь отобразить узел «Все песни» в верхней части коллекции треков. Как вы упомянули, установка для «canPlay» значения true приведет к отображению узла «Play All», и это должно работать для любого mediaCollection независимо от типа контейнера. Аналогичным образом, если для параметра "canEnumerate" задано значение true, узел "Все дорожки" будет отображаться в верхней части контейнера для любой коллекции mediaCollection. К сожалению, нет возможности отобразить кнопку «Воспроизвести все» в верхней части контейнера.

person Allison    schedule 21.04.2016
comment
Привет Эллисон, спасибо за ваш ответ. Я действительно пытаюсь отобразить узел «Все песни» в верхней части контейнера/набора элементов. Я называю это «Воспроизвести все» выше, потому что это текст, который отображается в приложении Sonos для iPhone для этого элемента. Вы говорите, что это должно работать для любого mediaCollection, независимо от типа контейнера (устанавливая canPlay=true), но это не мой опыт. Я могу отобразить узел «Воспроизвести все» в меню только тогда, когда itemType=trackList. Для других itemTypes например. collection, other, container и т.д., не вижу этого узла в меню. - person Rob Isenberg; 25.04.2016
comment
Возможно ли, что он не отображается для других itemType в приложении для iPhone? Можете ли вы указать мне пример его работы для другого музыкального сервиса? - person Rob Isenberg; 25.04.2016
comment
Привет, Роб, здесь не должно быть никаких ограничений уровня itemType, и я, к сожалению, не могу придумать какие-либо другие производственные сервисы, в настоящее время реализующие эту конкретную функциональность. Глядя выше, не похоже, что вы специально устанавливаете для canEnumerate значение true - я бы попробовал это для начала. Еще одна вещь, на которую следует обратить внимание: когда в очередь добавляется узел Play All, проигрыватель будет отправлять recursive is equal to true, а результаты контейнера нужно будет вернуть в виде плоского списка. - person Allison; 10.05.2016