Guest User

some day i'll learn js. not today

a guest
Sep 8th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  (function () {
  2.     let src = data.element.mediaInfo && data.element.mediaInfo.source;
  3.     if (!src) {
  4.         setStatus('Quick Save: No media found');
  5.         return;
  6.     }
  7.    
  8.     // var domain = data.context.frameUrl.replace(/^(https?:\/\/)?([^@\n]+@)?(www\.)?(?:[^:\/\n?]+)/ig, '');
  9.  
  10.     var matches = data.context.frameUrl.match(/^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i);
  11.     var domain = matches && matches[1];
  12.     domain = domain.replace(/[:/\\?!#*"<>]/ig, '');
  13.    // var domain = data.context.frameUrl.replace(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n?]+)/ig, '')[1];
  14.    // domain: /^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n?]+)/i
  15.  
  16.    // var fullurl = encodeURIComponent(data.context.frameUrl) + "/";
  17.  
  18.    // var pagetitle = document.title.replace(/[^a-zA-Z0-9-_]/g, '_');
  19.    var pagetitle = document.title.replace(/[:/\\?!#*"<>|]/ig, '_');
  20.     pagetitle = pagetitle.replace(/(^\([0-9]+\) )/g, '');
  21.     pagetitle = pagetitle.replace(/ /g, '_');
  22.     pagetitle = pagetitle.substr(0, 60);
  23.     let placeholders = [], rules = [];
  24.    
  25.     // -- Define placeholders --
  26.     placeholders.push([ '%MEDIADIR%', 'inbox/' + domain + "/" + pagetitle + "/"]);
  27.     placeholders.push([ '%MISC%', 'misc/' + domain + "/" + pagetitle + "/"]);
  28.     // placeholders.push([ '%AUDIO_DIR%', 'Audio/' ]);
  29.  
  30.     // -- Define rules --
  31.     // Capturing group 1 must be the filename.
  32.     // Defaults
  33.     rules.push({ name: 'MEDIA', regex: /([^\/]+\.(gif|png|jpe?g|mp4|mkv|webm|flac|mp3|m4a|aac))($|\?|#)/i, target: '%MEDIADIR%/%F%' });
  34.     rules.push({ name: 'MISC', regex: /(?=\w+\.\w{3,4}$).+/i, target: '%MISC%/%F%' });
  35.     //rules.push({ name: 'MISC2', regex:/([^\/]+)($|\?|#)/i, target: '%MISC%/%F%' });
  36.     // rules.push({ name: 'Video', regex: /([^\/]+\.(webm|mp4|mkv))($|\?|#)/i, target: '%VIDEO_DIR%/%F%' });
  37.     // rules.push({ name: 'Audio', regex: /([^\/]+\.(mp3|flac|m4a|aac))($|\?|#)/i, target: '%AUDIO_DIR%/%F%' });
  38.  
  39.  
  40.     // Evaluate rules
  41.     let match = null;
  42.     for (let i = 0; i < rules.length; i++) {
  43.         if ((match = src.match(rules[i].regex)) != null) {
  44.             // Evaluate placeholders
  45.             let filename = match[1];
  46.             placeholders.push([ '%F%', filename ]);
  47.             let target = placeholders.reduce((target, placeholder) => target.replace(placeholder[0], placeholder[1]), rules[i].target);
  48.             // data.context.frameUrl+"/"
  49.             // -- Privileged operation begin --
  50.             return executeInBackground((rule, src, target) => {
  51.                 // Start the download
  52.                 return browser.downloads.download({ url: src, filename: target }).then(id => {
  53.                     if (rule.erase) {
  54.                         // Remove the download from history on completion
  55.                         let listener = (downloadDelta) => {
  56.                             if ((downloadDelta.id === id) && (downloadDelta.state.current !== 'in_progress')) {
  57.                                 browser.downloads.onChanged.removeListener(listener);
  58.                                 browser.downloads.erase({ id: downloadDelta.id });
  59.                             }
  60.                         };
  61.                         browser.downloads.onChanged.addListener(listener);
  62.                     }
  63.                 });
  64.             }, [ rules[i], src, target ])
  65.             // -- Privileged operation end --
  66.                 .then(x => setStatus('Quick Save: SAVED! "' + filename + '" using ' + rules[i].name))
  67.                 .catch(err => setStatus('Quick Save: Failed to save "' + filename + ': ' + err + "\n pagetitle: " + pagetitle+ "\n domain: " + domain));
  68.         } else {
  69.             match = []
  70.         }
  71.     }
  72.    
  73.     setStatus('Quick Save: No matching rule');
  74.     return;
  75. }());
Add Comment
Please, Sign In to add comment