Release version 0.4
[GM_direct_download_links.git] / direct_download_links.user.js
index 9344012..81a6fb8 100644 (file)
@@ -1,7 +1,7 @@
 // direct_download_links - Add direct download links
-// version 0.3
-// 2011-12-23
-// Copyright (C) 2011  Antonio Ospite <ospite@studenti.unina.it>
+// version 0.4
+// 2012-02-12
+// Copyright (C) 2011,2012  Antonio Ospite <ospite@studenti.unina.it>
 // Released under the GPL license
 // http://www.gnu.org/copyleft/gpl.html
 //
@@ -107,11 +107,11 @@ var supported_sites = [
           return true;
         };
     },
-    urlContainerXPath: '//div[@id="Player"]',
+    urlContainerXPath: '//div[@id="silverlightControlHost" or @id="SilverlightPlayer"]',
     urlRegexp: /mediaUri=(http:\/\/[^,]*)/,
     onEvent: { evt: 'DOMNodeInserted', targetElement: 'object' },
     processURL: _rai_get_actual_url,
-    linkDestXPath: '//div[@id="Player"]',
+    linkDestXPath: '//div[@id="silverlightControlHost" or @id="SilverlightPlayer"]',
   },
   {
     locationRegexp: /^http:\/\/soundcloud.com\/.*$/,
@@ -146,6 +146,7 @@ function getElementByXPath(query, root) {
  * @return: null on error, true on success
  */
 function direct_download_link_add(pageURL, site) {
+  site.pageURL = pageURL
   var element = getElementByXPath(site.urlContainerXPath);
   if (!element) {
     DDL_log('DirectDL (' + site.pageURL  + '): Cannot find the element ' + site.urlContainerXPath + ' containing the URL.');
@@ -267,9 +268,21 @@ function _rai_get_actual_url(site, URL) {
         parser = new DOMParser();
         xmlDoc = parser.parseFromString(text, "text/xml");
 
-        ref = xmlDoc.getElementsByTagName('REF');
-        if (ref.length > 0) {
-          href = ref[0].getAttribute('HREF');;
+        // MMS streams
+        elems = xmlDoc.getElementsByTagName('REF');
+        if (elems.length > 0) {
+          href = elems[0].getAttribute('HREF');;
+
+          var evt = document.createEvent('Event');
+          evt.initEvent('UrlFetched', true, true);
+          evt.site = site;
+          evt.URL = href;
+          document.dispatchEvent(evt);
+        }
+        // SmoothStreaming streams
+        elems = xmlDoc.getElementsByTagName('playListItem');
+        if (elems.length > 0) {
+          href = elems[0].getAttribute('mediaSource');;
 
           var evt = document.createEvent('Event');
           evt.initEvent('UrlFetched', true, true);