Browse Source

Evolution #196: Liste de lecture

Sevajol Bastien 12 years ago
parent
commit
f29acbb314

+ 6 - 0
src/Muzich/CoreBundle/Entity/Element.php View File

28
    * @var string 
28
    * @var string 
29
    */
29
    */
30
   const DATA_REF_ID         = "data_ref_id";
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
    * Adresse HTTP(S) de la jaquette
38
    * Adresse HTTP(S) de la jaquette
33
    * @var string 
39
    * @var string 

+ 11 - 0
src/Muzich/CoreBundle/Factory/Elements/Soundcloudcom.php View File

154
         {
154
         {
155
           $this->element->setData(Element::DATA_REF_ID, $result['id']);
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
         if (array_key_exists('artwork_url', $result) )
163
         if (array_key_exists('artwork_url', $result) )
159
         {
164
         {
214
           .'width="100%" name="embed_'.$embed_id.'"></embed>
219
           .'width="100%" name="embed_'.$embed_id.'"></embed>
215
         </object>'
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 View File

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

+ 3 - 1
src/Muzich/CoreBundle/lib/AutoplayManager.php View File

52
         'element_ref_id'   => $ref_id,
52
         'element_ref_id'   => $ref_id,
53
         'element_type'     => $element->getType(),
53
         'element_type'     => $element->getType(),
54
         'element_id'       => $element->getId(),
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 View File

9
   var autoplay_list = new Array;
9
   var autoplay_list = new Array;
10
   // object player
10
   // object player
11
   var autoplay_player = null;
11
   var autoplay_player = null;
12
+  // Ritournelle pour le lecteur soundcloud (une seule variable sinon bug)
13
+  var autoplay_player_soundcloud = null;
12
   // identifiant de la division du lecteur
14
   // identifiant de la division du lecteur
13
   var autoplay_player_div_id = "autoplay_player";
15
   var autoplay_player_div_id = "autoplay_player";
14
   // identifiant du lecteur
16
   // identifiant du lecteur
33
       {
35
       {
34
         // On récupère la liste d'élèments
36
         // On récupère la liste d'élèments
35
         autoplay_list = response.data;
37
         autoplay_list = response.data;
36
-        console.debug(autoplay_list);
37
         autoplay_run(0);
38
         autoplay_run(0);
38
       }
39
       }
39
       
40
       
51
     $('li#autoplay_element_container').html('');
52
     $('li#autoplay_element_container').html('');
52
     $('img#autoplay_loader').show();
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
     if (autoplay_list.length)
63
     if (autoplay_list.length)
55
     {
64
     {
56
     
65
     
63
           {
72
           {
64
             $(location).attr('href', url_index);
73
             $(location).attr('href', url_index);
65
           }
74
           }
66
-
75
+          
67
           if (response.status == 'success')
76
           if (response.status == 'success')
68
           {
77
           {
69
             // On récupère la liste d'élèments
78
             // On récupère la liste d'élèments
75
               youtube_create_player(autoplay_list[step].element_ref_id);
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
     $('li#autoplay_element_container').html('');
108
     $('li#autoplay_element_container').html('');
96
     $('#autoplay_noelements_text').show();
109
     $('#autoplay_noelements_text').show();
97
     $('img#autoplay_loader').hide();
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
   // Avancer d'un élelement dans la liste
118
   // Avancer d'un élelement dans la liste
128
   }
146
   }
129
   
147
   
130
   // bouton précedent
148
   // bouton précedent
131
-  $('a#autoplay_previous').click(function(){ autoplay_previous(); });
149
+  $('a#autoplay_previous').click(function(){autoplay_previous();});
132
   // bouton suivant
150
   // bouton suivant
133
-  $('a#autoplay_next').click(function(){ autoplay_next(); });
151
+  $('a#autoplay_next').click(function(){autoplay_next();});
134
   // Fermeture de la lecture auto
152
   // Fermeture de la lecture auto
135
   $('a#autoplay_close').click(function(){
153
   $('a#autoplay_close').click(function(){
136
     // Fond gris
154
     // Fond gris
143
    
161
    
144
   
162
   
145
   /*
163
   /*
164
+   *
165
+   *
166
+   *
146
    * Fonction youtube.com et youtu.be
167
    * Fonction youtube.com et youtu.be
168
+   * 
169
+   * 
170
+   * 
147
    */
171
    */
148
     
172
     
149
   // Création du lecteur FLASH youtube
173
   // Création du lecteur FLASH youtube
150
   function youtube_create_player(ref_id)
174
   function youtube_create_player(ref_id)
151
   {
175
   {
152
     var playerapiid = "ytplayerapiid";
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
     swfobject.embedSWF(
179
     swfobject.embedSWF(
156
       "http://www.youtube.com/v/"+ref_id+"?enablejsapi=1&playerapiid="+playerapiid+"&version=3",
180
       "http://www.youtube.com/v/"+ref_id+"?enablejsapi=1&playerapiid="+playerapiid+"&version=3",
157
       autoplay_player_div_id,
181
       autoplay_player_div_id,
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
+});