瀏覽代碼

Evolution #196: Liste de lecture

Sevajol Bastien 11 年之前
父節點
當前提交
f29acbb314

+ 6 - 0
src/Muzich/CoreBundle/Entity/Element.php 查看文件

@@ -28,6 +28,12 @@ class Element
28 28
    * @var string 
29 29
    */
30 30
   const DATA_REF_ID         = "data_ref_id";
31
+  
32
+  /**
33
+   * Identifiant de l'objet externe
34
+   * @var string 
35
+   */
36
+  const DATA_NORMALIZED_URL = "data_normalized_url";
31 37
   /**
32 38
    * Adresse HTTP(S) de la jaquette
33 39
    * @var string 

+ 11 - 0
src/Muzich/CoreBundle/Factory/Elements/Soundcloudcom.php 查看文件

@@ -154,6 +154,11 @@ class Soundcloudcom extends ElementFactory
154 154
         {
155 155
           $this->element->setData(Element::DATA_REF_ID, $result['id']);
156 156
         }
157
+        
158
+        if (array_key_exists('uri', $result) )
159
+        {
160
+          $this->element->setData(Element::DATA_NORMALIZED_URL, $result['uri']);
161
+        }
157 162
 
158 163
         if (array_key_exists('artwork_url', $result) )
159 164
         {
@@ -214,6 +219,12 @@ class Soundcloudcom extends ElementFactory
214 219
           .'width="100%" name="embed_'.$embed_id.'"></embed>
215 220
         </object>'
216 221
       );
222
+//      $this->element->setEmbed(
223
+//        '<iframe id="sc-widget_'.$this->element->getData(Element::DATA_REF_ID).
224
+//          '" src="http://w.soundcloud.com/player/?url='.
225
+//          $ref_id.'" width="100%" '.
226
+//          'height="'.$height.'" scrolling="no" frameborder="no"></iframe>'
227
+//      );
217 228
     }
218 229
   }
219 230
   

+ 5 - 0
src/Muzich/CoreBundle/Resources/views/layout.html.twig 查看文件

@@ -25,6 +25,10 @@
25 25
 	<script src="{{ asset('bundles/muzichcore/js/muzich.js') }}" type="text/javascript"></script>
26 26
 	
27 27
   <script type="text/javascript" src="{{ asset('js/swfobject.js') }}"></script> 
28
+  
29
+       <script src="http://connect.soundcloud.com/sdk.js"></script>
30
+       <script src="http://w.soundcloud.com/player/api.js"></script>
31
+       
28 32
   <script src="{{ asset('bundles/muzichcore/js/autoplay.js') }}" type="text/javascript"></script>
29 33
   
30 34
   <script src="{{ asset('js/tags/jquery.autoGrowInput.js') }}" type="text/javascript"></script>
@@ -97,6 +101,7 @@
97 101
     <div id="autoplay_player_container">
98 102
       <div id="autoplay_player"></div>
99 103
     </div>
104
+    <div id="autoplay_player_soundcloud"></div>
100 105
     <img id="autoplay_loader" src="{{ asset('/bundles/muzichcore/img/ajax-loader.gif') }}" alt="loader" />
101 106
     <p id="autoplay_noelements_text" style="display: none;">{{ 'elements.autoplay.noelements.text'|trans({}, 'elements') }}</p>
102 107
   </div>

+ 3 - 1
src/Muzich/CoreBundle/lib/AutoplayManager.php 查看文件

@@ -52,7 +52,9 @@ class AutoplayManager
52 52
         'element_ref_id'   => $ref_id,
53 53
         'element_type'     => $element->getType(),
54 54
         'element_id'       => $element->getId(),
55
-        'element_name'     => $element->getName()
55
+        'element_name'     => $element->getName(),
56
+        'element_url'      => $element->getUrl(),
57
+        'element_normalized_url' => $element->getData(Element::DATA_NORMALIZED_URL)
56 58
       );
57 59
     }
58 60
     

+ 124 - 7
web/bundles/muzichcore/js/autoplay.js 查看文件

@@ -9,6 +9,8 @@ $(document).ready(function(){
9 9
   var autoplay_list = new Array;
10 10
   // object player
11 11
   var autoplay_player = null;
12
+  // Ritournelle pour le lecteur soundcloud (une seule variable sinon bug)
13
+  var autoplay_player_soundcloud = null;
12 14
   // identifiant de la division du lecteur
13 15
   var autoplay_player_div_id = "autoplay_player";
14 16
   // identifiant du lecteur
@@ -33,7 +35,6 @@ $(document).ready(function(){
33 35
       {
34 36
         // On récupère la liste d'élèments
35 37
         autoplay_list = response.data;
36
-        console.debug(autoplay_list);
37 38
         autoplay_run(0);
38 39
       }
39 40
       
@@ -51,6 +52,14 @@ $(document).ready(function(){
51 52
     $('li#autoplay_element_container').html('');
52 53
     $('img#autoplay_loader').show();
53 54
     
55
+    
56
+    ////// TMP to check
57
+    if (autoplay_player_soundcloud)
58
+    {
59
+      autoplay_player_soundcloud.pause();
60
+    }
61
+    $('div#autoplay_player_soundcloud').hide();
62
+    
54 63
     if (autoplay_list.length)
55 64
     {
56 65
     
@@ -63,7 +72,7 @@ $(document).ready(function(){
63 72
           {
64 73
             $(location).attr('href', url_index);
65 74
           }
66
-
75
+          
67 76
           if (response.status == 'success')
68 77
           {
69 78
             // On récupère la liste d'élèments
@@ -75,6 +84,10 @@ $(document).ready(function(){
75 84
               youtube_create_player(autoplay_list[step].element_ref_id);
76 85
             }
77 86
             
87
+            if (autoplay_list[step].element_type == 'soundcloud.com')
88
+            {
89
+              soundcloud_create_player(autoplay_list[step].element_ref_id, autoplay_list[step].element_normalized_url);
90
+            }
78 91
           }
79 92
 
80 93
         });
@@ -95,6 +108,11 @@ $(document).ready(function(){
95 108
     $('li#autoplay_element_container').html('');
96 109
     $('#autoplay_noelements_text').show();
97 110
     $('img#autoplay_loader').hide();
111
+    if (autoplay_player_soundcloud)
112
+    {
113
+      $('div#autoplay_player_soundcloud').hide();
114
+      autoplay_player_soundcloud.pause();
115
+    }
98 116
   }
99 117
   
100 118
   // Avancer d'un élelement dans la liste
@@ -128,9 +146,9 @@ $(document).ready(function(){
128 146
   }
129 147
   
130 148
   // bouton précedent
131
-  $('a#autoplay_previous').click(function(){ autoplay_previous(); });
149
+  $('a#autoplay_previous').click(function(){autoplay_previous();});
132 150
   // bouton suivant
133
-  $('a#autoplay_next').click(function(){ autoplay_next(); });
151
+  $('a#autoplay_next').click(function(){autoplay_next();});
134 152
   // Fermeture de la lecture auto
135 153
   $('a#autoplay_close').click(function(){
136 154
     // Fond gris
@@ -143,15 +161,21 @@ $(document).ready(function(){
143 161
    
144 162
   
145 163
   /*
164
+   *
165
+   *
166
+   *
146 167
    * Fonction youtube.com et youtu.be
168
+   * 
169
+   * 
170
+   * 
147 171
    */
148 172
     
149 173
   // Création du lecteur FLASH youtube
150 174
   function youtube_create_player(ref_id)
151 175
   {
152 176
     var playerapiid = "ytplayerapiid";
153
-    var params = { allowScriptAccess: "always" };
154
-    var atts = { id: autoplay_player_id };
177
+    var params = {allowScriptAccess: "always"};
178
+    var atts = {id: autoplay_player_id};
155 179
     swfobject.embedSWF(
156 180
       "http://www.youtube.com/v/"+ref_id+"?enablejsapi=1&playerapiid="+playerapiid+"&version=3",
157 181
       autoplay_player_div_id,
@@ -193,4 +217,97 @@ $(document).ready(function(){
193 217
     }
194 218
   }
195 219
   
196
-});
220
+  /*
221
+   * 
222
+   * 
223
+   * Fonctions soundcloud
224
+   * 
225
+   * 
226
+   * 
227
+   */
228
+  
229
+  function soundcloud_create_player(ref_id, ref_url)
230
+  {
231
+    
232
+    // Variable dans lequelle on met l'index dela track lu précedamment
233
+    var index_track_previous = 0;
234
+     
235
+    if (!$('iframe#soundcloud_iframe_player').length)
236
+    {
237
+      $('div#autoplay_player_soundcloud').show();
238
+
239
+        // TODO: on garde ?
240
+        SC.initialize({
241
+          client_id: '39946ea18e3d78d64c0ac95a025794e1'
242
+        });
243
+
244
+      // Aucun lecteur soundcloud n'a été ouvert pour le moment
245
+      $('#autoplay_player_soundcloud').html(
246
+        '<iframe id="soundcloud_iframe_player" src="http://w.soundcloud.com/player/?url='
247
+          +ref_url+'&show_artwork=false&auto_play=true" width="100%" '
248
+          +'height="370" scrolling="no" frameborder="no"></iframe>'
249
+      );
250
+
251
+      //console.debug(document.getElementById('sc-widget_'+ref_id));
252
+      var widgetIframe = document.getElementById('soundcloud_iframe_player');
253
+      autoplay_player_soundcloud = SC.Widget(widgetIframe);
254
+
255
+      // Lorsque le lecteur est prêt on lance la lecture
256
+      autoplay_player_soundcloud.bind(SC.Widget.Events.READY, function ()
257
+      {
258
+        autoplay_player_soundcloud.play();
259
+        $('img#autoplay_loader').hide();
260
+
261
+      });
262
+
263
+      autoplay_player_soundcloud.bind(SC.Widget.Events.PLAY, function ()
264
+      {
265
+        // Lorsque le lecteur commence une lecture
266
+        // On garde en mémoire l'index de la lecture en cours
267
+        autoplay_player_soundcloud.getCurrentSoundIndex(function(value){
268
+            index_track_previous = value;
269
+        });
270
+      });
271
+
272
+      // Lorsque le lecteur a terminé sa lecture, on passe au suivant
273
+      autoplay_player_soundcloud.bind(SC.Widget.Events.FINISH, function ()
274
+      {
275
+
276
+        // Cette variable contient le nombre de pistes dans la liste de lecture
277
+        var track_count = 1;
278
+        autoplay_player_soundcloud.getSounds(function(value){
279
+          // On récupère le nomre de pistes
280
+          track_count = value.length;
281
+        });
282
+
283
+        autoplay_player_soundcloud.getCurrentSoundIndex(function(value){
284
+
285
+          // Si la index_track_previous est la même maintenant que la piste
286
+          // est terminé, c'est que l'on est arrivé en fin de liste.
287
+          // Cependant, si c'est une liste avec une piste unique, on passe 
288
+          // tout de suite a la suite
289
+          if (value == index_track_previous || track_count == 1)
290
+          {
291
+            autoplay_next();
292
+          }
293
+
294
+          // Sinon on prend al nouvelle valeur
295
+          index_track_previous = value;
296
+
297
+        });
298
+
299
+      });
300
+
301
+    }
302
+    else
303
+    {
304
+      // Le lecteur iframe existait déjà
305
+    $('div#autoplay_player_soundcloud').show();
306
+      autoplay_player_soundcloud.load(ref_url+'&show_artwork=false&auto_play=true');
307
+      //autoplay_player_soundcloud.play();
308
+    $('img#autoplay_loader').hide();
309
+    }
310
+         
311
+  }
312
+  
313
+});