Revamped and simplified load_spec infrastructure
[conkeror.git] / modules / page-modes / google-video.js
blobb611f8be5f3ef19c53764982fe67ec10894211aa
1 require("content-buffer.js");
2 require("media.js");
4 function media_scrape_google_video(buffer) {
6     var doc = buffer.top_document;
8     try {
9         let frame_doc = buffer.top_frame.frames[0].document;
10         let mime_type;
11         let ext;
12         let elem;
13         let target_uri;
14         if ((elem = frame_doc.getElementById('macdownloadlink'))) {
15             mime_type = "video/x-msvideo";
16             ext = "avi";
17             target_uri = elem.href;
18         } else if ((elem = frame_doc.getElementById('ipoddownloadlink'))) {
19             mime_type = "video/mp4";
20             ext = "mp4";
21             target_uri = elem.href;
22         } else if ((elem = frame_doc.getElementsByTagName('embed'))) {
23             elem = elem[0];
24             let tu = elem.src;
25             let l = tu.indexOf("videoUrl") + 9;
26             let r = tu.indexOf("&",l);
27             target_uri = unescape(tu.substr(l, r-l));
28             ext = "flv";
29             mime_type = "video/x-flv";
30         } else
31             return null;
32         return [load_spec({uri: target_uri,
33                            title: doc.title,
34                            filename_extension: ext,
35                            source_frame: buffer.top_frame,
36                            mime_type: mime_type})];
37     } catch (e if !(e instanceof interactive_error)) {}
38     return null;
42 define_page_mode("google_video_mode", "Google Video", $enable = function (buffer) {
43     buffer.local_variables.media_scraper = media_scrape_google_video;
44     media_setup_local_object_classes(buffer);
45 });
47 auto_mode_list.push([/^http:\/\/video\.google\.com\//, google_video_mode]);