SC Display Languages

Displays movies audio and text languages in SC

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         SC Display Languages
// @version      0.1.2
// @description  Displays movies audio and text languages in SC
// @author       risq
// @match        http*://secret-cinema.pw/torrents.php?id=*
// @namespace https://greasyfork.org/users/157340
// ==/UserScript==

var torrents = unsafeWindow.jQuery('.torrent_table .torrent_row').each(function (i, el) {
  var $el = unsafeWindow.jQuery(el);
  var languages = parseText($el.next().find('> td > blockquote').text());

  var text = void 0;
  if (languages.audio.length) {
    text = 'Audio: <i><b>' + languages.audio.join(', ') + '</b></i>';

    if (languages.text.length) {
      text += ' / Text:  <i><b>' + languages.text.join(', ') + '</b></i>';
    }
  } else if (languages.text.length) {
    text = 'Text:  <i><b>' + languages.text.join(', ') + '</b></i>';
  }

  if (text) {
    $el.find('> td:first-child').append('<div style="color: #666">' + text + '</div>');
  }
});

function parseText(text) {
  var res = {
    audio: [],
    text: []
  };

  var dataFound = false;

  const bdinfoAudio = /AUDIO:\s*\n\n\s*Codec\s*Language.*\s*\n\s*(-|\s)*\s*\n((.|\n)*)\n\s*SUBTITLES/gi.exec(text);
  if (bdinfoAudio) {
    bdinfoAudio[2].split(/\n/g).forEach(function (info) {
      var audio = /(\s\s)+\s*(\w+)/gi.exec(info);

      if (audio && isResultValid(audio[2])) {
        dataFound = true;
        res.audio.push(audio[2]);
      }
    });
  }

  const bdinfoText = /SUBTITLES:\s*\n\n\s*Codec\s*Language.*\s*\n\s*(-|\s)*\s*\n((.|\n)*)\n\s*FILES/gi.exec(text);
  if (bdinfoText) {
    bdinfoText[2].split(/\n/g).forEach(function (info) {
      var text = /(\s\s)+\s*(\w+)/gi.exec(info);

      if (text && isResultValid(text[2])) {
        dataFound = true;
        res.text.push(text[2]);
      }
    });
  }

  if (dataFound) {
    return res;
  }

  var blocks = text.split(/\s*\n\s*\n\s*/g).forEach(function (block) {
    var title = block.split('\n')[0].toLowerCase();

    if (title.indexOf('audio') > -1) {
      var audio = /language\s*:\s*(.*)/gi.exec(block);

      if (audio && isResultValid(audio[1])) {
        dataFound = true;
        res.audio.push(audio[1]);
      }
    }

    if (title.indexOf('text') > -1) {
      var text = /language\s*:\s*(.*)/gi.exec(block);

      if (text && isResultValid(text[1])) {
        dataFound = true;
        res.text.push(text[1]);
      }
    }
  });

  if (dataFound) {
    return res;
  }

  var lines = text.split(/\n/g);

  lines.forEach(function (line) {
    var audio = /.*?(audio).*?:\s*(\w+)/gi.exec(line);

    if (audio && isResultValid(audio[2])) {
      res.audio.push(audio[2]);
      return;
    }

    var text = /.*?(subtitle|text).*?:\s*(\w+)/gi.exec(line);

    if (text && isResultValid(text[2])) {
      res.text.push(text[2]);
      return;
    }
  });

  return res;
}

function isResultValid(result) {
  if (result.trim().length === 0) {
    return false;
  }
  var invalidWords = ['untouched', 'none', 'no'];

  var regexp = new RegExp('(\\b' + invalidWords.join('\\b|\\b') + '\\b)', 'gi');

  return !regexp.test(result);
}