NS_PrimeWire

Sorts and filters primewire video hosts.

  1. // ==UserScript==
  2. // @name NS_PrimeWire
  3. // @namespace mugPuke
  4. // @include https?://www.primewire.ag/watch*
  5. // @include https?://www.primewire.ag/tv-*
  6. // @version 1
  7. // @description Sorts and filters primewire video hosts.
  8. // @grant none
  9. // @run-at document-idle
  10. // ==/UserScript==
  11.  
  12. // author: mugPuke, license: GPL v3
  13. (function () {
  14. // vid hosters that should be removed (edit to your liking):
  15. var block = new Set([
  16. // advertisement
  17. // ---------------------------------------------------------------------
  18. 'Sponsor Host',
  19. 'Promo Host',
  20. // hosters that are not covered by the NS_primewire_hosters script
  21. // ---------------------------------------------------------------------
  22. // 'movdivx.com', // needs divx
  23. // 'movshare.net', // 500 err - 17.09.31
  24. // 'noslocker.com', // NS_* script xml playlist
  25. // 'nosvideo.com', // NS_* script xml playlist
  26. // 'novamov.com', // 500 err - 17.09.31
  27. // 'nowvideo.sx', // 500 err - 17.09.31
  28. // 'speedvid.net', // cookie - 17.09.31
  29. // 'streamin.to', // TODO
  30. // 'streamplay.to', // Wrong IP - 17.09.31
  31. // 'thevideo.me', // NS_* TOS
  32. // 'videoweed.es', // 500 err - 17.09.31
  33. // 'vidup.me', // NS_* TOS
  34. // 'vshare.eu', // TODO
  35. // not tested hosters:
  36. // ---------------------------------------------------------------------
  37. // 'briskfile.com',
  38. // 'cloudtime.to',
  39. // 'filenuke.com',
  40. // 'letwatch.us',
  41. // 'movshare.net',
  42. // 'novamov.com',
  43. // 'nowvideo.sx',
  44. // 'playedto.me',
  45. // 'promptfile.com',
  46. // 'sharerepo.com',
  47. // 'sharesix.com',
  48. // 'thefile.me',
  49. // 'vidbull.com',
  50. // 'videoweed.es',
  51. // 'vidlockers.ag',
  52. // 'vidto.me',
  53. // 'vodlocker.com',
  54. ]);
  55. // vid hoster sord order (edit to your liking):
  56. // -------------------------------------------------------------------------
  57. var sort = new Map();
  58. var idx = 0;
  59. sort.set( "vidlox.tv", idx++ );
  60. sort.set( "vidzi.to", idx++ );
  61. sort.set( "vidzi.tv", idx++ );
  62. sort.set( "vidtodo.com", idx++ );
  63. sort.set( "daclips.com", idx++ );
  64. sort.set( "daclips.in", idx++ );
  65. sort.set( "gorillavid.com", idx++ );
  66. sort.set( "gorillavid.in", idx++ );
  67. sort.set( "movpod.net", idx++ );
  68. sort.set( "movpod.in", idx++ );
  69. // trim strings
  70. var trim = function(str)
  71. {
  72. var str = str.replace(/^\s\s*/, '');
  73. var ws = /\s/;
  74. var i = str.length;
  75. while (ws.test(str.charAt(--i)));
  76. return str.slice(0, i + 1);
  77. }
  78. // url table elements
  79. var getTargets = function()
  80. {
  81. return document.querySelectorAll('#first table.movie_version');
  82. }
  83. // url table container
  84. var getTargetParent = function()
  85. {
  86. return document.querySelector('#first');
  87. }
  88. var sort_fcn = function( a, b )
  89. {
  90. if(b == null)
  91. {
  92. return false;
  93. }
  94. if(a == null)
  95. {
  96. return true;
  97. }
  98. var a_elem = a.querySelector("span.version_host");
  99. var b_elem = b.querySelector("span.version_host");
  100. if(b_elem == null)
  101. {
  102. return false;
  103. }
  104. if(a_elem == null)
  105. {
  106. return true;
  107. }
  108. var a_str = trim(a_elem.innerHTML);
  109. var b_str = trim(b_elem.innerHTML);
  110. var a_flag = sort.has(a_str);
  111. var b_flag = sort.has(b_str);
  112. if( a_flag && b_flag )
  113. {
  114. var f = sort.get(a_str) > sort.get(b_str);
  115. return f;
  116. }
  117. else if( a_flag )
  118. {
  119. return false;
  120. }
  121. else if( b_flag )
  122. {
  123. return true;
  124. }
  125. return a_str > b_str;
  126. }
  127. var cleanTargets = function( targets )
  128. {
  129. // write hoster info without enabled js
  130. var reg = /document.writeln\('(.[^']*)'\)/;
  131. var out_arr = [];
  132. for(var target of targets)
  133. {
  134. var sub_target = target.querySelector("span.version_host");
  135. if(sub_target == null)
  136. {
  137. continue;
  138. }
  139. var trash_target = sub_target.querySelector("script");
  140. if(trash_target != null)
  141. {
  142. var matches = reg.exec(trash_target.innerHTML)
  143. if (matches.length < 2)
  144. {
  145. continue
  146. }
  147. sub_target.innerHTML = matches[1];
  148. }
  149. var str = trim(sub_target.innerHTML);
  150. if (block.has(str))
  151. {
  152. continue;
  153. }
  154. sub_target.innerHTML = str;
  155. out_arr.push(target)
  156. }
  157. return out_arr;
  158. }
  159. var main = function()
  160. {
  161. var targets = getTargets();
  162. var targetsLen = targets.length;
  163. if (targetsLen == 0)
  164. {
  165. console.log("Targets missing.")
  166. return;
  167. }
  168. targets_arr = cleanTargets( targets )
  169. targets_arr.sort(sort_fcn);
  170. // clean container ...
  171. var parent = getTargetParent();
  172. parent.innerHTML = " ";
  173. // ... and repopulate it
  174. for(var target of targets_arr)
  175. {
  176. if(target == null){continue;}
  177. parent.appendChild(target);
  178. }
  179. }
  180. main();
  181. }());