I am assuming that a .pls file is a playlist file which contains multiple urls for the stream.<br>The Amarok 1.x behaviour to show multiple tracks in the playlist on loading a pls file for a stream<br>is a bit ugly imo. We might be able to create MetaStream instance from a pls file directly, which could
<br>then select the stream to play internally, although i&#39;m not quite sure how do that yet.<br>maybe we could add a special case in the enginecontroller which would then try to play the other stream urls if the engine fails to play the first one, although i&#39;m not really happy with that solution.
<br><br>I agree it&#39; not an issue now, because we can&#39;t load pls playlists yet, but when we implement that, we have to retrieve the new metadata for the stream from the engine periodically. only MetaStream does that at the moment, and i don&#39;t think we need that capability in any other class. Does it make sense to change the service infrastrructure so that it&#39;s able to handle Meta::Track instances which are not ServiceTracks?
<br><br>Max<br><br><div><span class="gmail_quote">On 9/10/07, <b class="gmail_sendername">Nikolaj Hald Nielsen</b> &lt;<a href="mailto:nhnfreespirit@gmail.com">nhnfreespirit@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Right now I am not sure this is even an issue, as the streams are in<br>the form of a .pls file that the playlist currently cannot even<br>accept. Will the playlist loader not take care of this conversion?<br><br>On 9/10/07, Maximilian Kossick &lt;
<a href="mailto:maximilian.kossick@googlemail.com">maximilian.kossick@googlemail.com</a>&gt; wrote:<br>&gt; Nikolaj, I just noticed: because the shoutcast service operates on radio<br>&gt; streams instead of streams of a single track, you should use
<br>&gt; the stream classes provided in meta/stream instead of your ServieTrack<br>&gt; classes. MetaStream updates itself whenever the engine provides new metadata<br>&gt; for the stream.<br>&gt;<br>&gt;<br>&gt; On 9/10/07, Nikolaj Hald Nielsen &lt;
<a href="mailto:nhnFreespirit@gmail.com">nhnFreespirit@gmail.com</a>&gt; wrote:<br>&gt; &gt; SVN commit 710526 by nhnielsen:<br>&gt; &gt;<br>&gt; &gt; base ShoutcastServiceQueryMaker on the new DynamicServiceQueryMaker class
<br>&gt; &gt;<br>&gt; &gt; M&nbsp;&nbsp;+1 -1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShoutcastServiceQueryMaker.cpp<br>&gt; &gt; M&nbsp;&nbsp;+7 -42&nbsp;&nbsp;&nbsp;&nbsp; ShoutcastServiceQueryMaker.h<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; ---<br>&gt; trunk/extragear/multimedia/amarok/src/servicebrowser/shoutcast/ShoutcastServiceQueryMaker.cpp
<br>&gt; #710525:710526<br>&gt; &gt; @@ -42,7 +42,7 @@<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; ShoutcastServiceQueryMaker::ShoutcastServiceQueryMaker(<br>&gt; ShoutcastServiceCollection * collection )<br>&gt; &gt; - : QueryMaker()
<br>&gt; &gt; + : DynamicServiceQueryMaker()<br>&gt; &gt;&nbsp;&nbsp; , m_storedTransferJob( 0 )<br>&gt; &gt;&nbsp;&nbsp; , d( new Private )<br>&gt; &gt;<br>&gt; &gt; ---<br>&gt; trunk/extragear/multimedia/amarok/src/servicebrowser/shoutcast/ShoutcastServiceQueryMaker.h
<br>&gt; #710525:710526<br>&gt; &gt; @@ -17,10 +17,10 @@<br>&gt; &gt;&nbsp;&nbsp; *&nbsp;&nbsp; 51 Franklin Street, Fifth Floor, Boston, MA&nbsp;&nbsp;02111-1307, USA.<br>&gt;&nbsp;&nbsp;*<br>&gt; &gt;<br>&gt; ***************************************************************************/
<br>&gt; &gt;<br>&gt; &gt; -#ifndef DYNAMICSERVICEQUERYMAKER_H<br>&gt; &gt; -#define DYNAMICSERVICEQUERYMAKER_H<br>&gt; &gt; +#ifndef SHOUTCASTSERVICEQUERYMAKER_H<br>&gt; &gt; +#define SHOUTCASTSERVICEQUERYMAKER_H<br>&gt; &gt;
<br>&gt; &gt; -#include &quot;QueryMaker.h&quot;<br>&gt; &gt; +#include &quot;DynamicServiceQueryMaker.h&quot;<br>&gt; &gt;<br>&gt; &gt; #include &quot;meta.h&quot;<br>&gt; &gt;<br>&gt; &gt; @@ -39,7 +39,7 @@<br>&gt; &gt;
<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @author<br>&gt; &gt; */<br>&gt; &gt; -class ShoutcastServiceQueryMaker : public QueryMaker<br>&gt; &gt; +class ShoutcastServiceQueryMaker : public DynamicServiceQueryMaker<br>&gt; &gt; {<br>&gt; &gt; Q_OBJECT
<br>&gt; &gt; public:<br>&gt; &gt; @@ -53,9 +53,11 @@<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* startTrackQuery();<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* startGenreQuery();<br>&gt; &gt;<br>&gt; &gt; -<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* addMatch ( const Meta::GenrePtr &amp;genre );
<br>&gt; &gt; +&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* addMatch ( const Meta::DataPtr &amp;data );<br>&gt; &gt;<br>&gt; &gt; +&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* returnResultAsDataPtrs ( bool resultAsDataPtrs );<br>&gt; &gt; +<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Methods &quot;borrowed&quot; from MemoryQueryMaker
<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void runQuery();<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void handleResult();<br>&gt; &gt; @@ -65,43 +67,6 @@<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void fetchGenres();<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; -<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;//currently unimplemented stuff:
<br>&gt; &gt; -<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;//as this particular QueryMaker ronly knows about genres and tracks,<br>&gt; all the other stuuf is kinda overkill!!<br>&gt; &gt; -<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* startComposerQuery() { return this; }
<br>&gt; &gt; -<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* startArtistQuery() { return this; }<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* startAlbumQuery() { return this; }<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* startYearQuery() { return this; }
<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* startCustomQuery() { return this; }<br>&gt; &gt; -<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* returnResultAsDataPtrs ( bool resultAsDataPtrs );<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* addReturnValue ( qint64 value ) { return this; }
<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* orderBy ( qint64 value, bool descending = false )<br>&gt; { return this; }<br>&gt; &gt; -<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* includeCollection ( const QString &amp;collectionId )<br>
&gt; { return this; }<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* excludeCollection ( const QString &amp;collectionId )<br>&gt;&nbsp;&nbsp;{ return this; }<br>&gt; &gt; -<br>&gt; &gt; -<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* addMatch ( const Meta::TrackPtr &amp;track ) { return
<br>&gt; this; }<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* addMatch ( const Meta::ArtistPtr &amp;artist ) {<br>&gt; return this; }<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* addMatch ( const Meta::AlbumPtr &amp;album ) { return<br>
&gt; this; }<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* addMatch ( const Meta::ComposerPtr &amp;composer ) {<br>&gt; return this; }<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* addMatch ( const Meta::YearPtr &amp;year ) { return<br>&gt; this; }
<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* addMatch ( const Meta::DataPtr &amp;data );<br>&gt; &gt; -<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* addFilter ( qint64 value, const QString &amp;filter,<br>&gt; bool matchBegin, bool matchEnd ) { return this; }
<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* excludeFilter ( qint64 value, const QString<br>&gt; &amp;filter, bool matchBegin, bool matchEnd ) { return this; }<br>&gt; &gt; -<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* limitMaxResultSize ( int size ) { return this; }
<br>&gt; &gt; -<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* beginAnd() { return this; }<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* beginOr() { return this; }<br>&gt; &gt; -&nbsp;&nbsp;&nbsp;&nbsp;virtual QueryMaker* endAndOr() { return this; }<br>&gt; &gt; -
<br>&gt; &gt; -<br>&gt; &gt; signals:<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void dynamicQueryComplete();<br>&gt; &gt;<br>&gt; &gt;<br>&gt;<br>&gt;<br></blockquote></div><br>