Greasy Fork is available in English.

Gofile Link Resolver

resolve link from gofile

Instalirajte ovu skriptu?
Autorov prijedlog skripta

Možda ti se također svidi Arca base64 autodecoder.

Instalirajte ovu skriptu
  1. // ==UserScript==
  2. // @name Gofile Link Resolver
  3. // @namespace GFLR_V1D
  4. // @version 1.0
  5. // @description resolve link from gofile
  6. // @icon https://www.google.com/s2/favicons?sz=64&domain=gofile.io
  7. // @author Laria
  8. // @match https://gofile.io/d/*
  9. // @license MIT
  10. // @grant none
  11.  
  12. // ==/UserScript==
  13. 'use strict';
  14. let taskRepID = -1;
  15.  
  16. const gfsprefix = '[®] ';
  17.  
  18. const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
  19.  
  20. function waitForElm(selector) {
  21. return new Promise(resolve => {
  22. if (document.querySelector(selector)) {
  23. return resolve(document.querySelector(selector));
  24. }
  25. const observer = new MutationObserver(mutations => {
  26. if (document.querySelector(selector)) {
  27. observer.disconnect();
  28. resolve(document.querySelector(selector));
  29. }
  30. });
  31. observer.observe(document.body, {
  32. childList: true,
  33. subtree: true
  34. });
  35. });
  36. }
  37.  
  38. async function replaceLink(gfdb) {
  39. //try to get file db list
  40. let filedb = null;
  41.  
  42. let target_db = appdata.fileManager.mainContent.data;
  43. if (target_db.hasOwnProperty('children')) {
  44. filedb = target_db.children;
  45. } else if (target_db.hasOwnProperty('contents')) {//deprecated in V2
  46. filedb = target_db.contents;
  47. } else {
  48. console.error('cannot detect any contents in gofile internal db, please update script..', target_db);
  49. return;
  50. }
  51.  
  52. //data-item-id : file's uuid
  53. //
  54. Array.from(document.querySelector('#filemanager_itemslist').children).filter((i)=>i.getAttribute('data-item-id')).forEach((target)=>{
  55. let contid = target.getAttribute('data-item-id');
  56. target.setAttribute('data-uuid', contid); //backup id
  57. target.removeAttribute('data-item-id'); //remove id prevent interval task
  58. let contdb = filedb[contid];
  59. if (!contdb) {
  60. //no item in gofile db
  61. console.error('id:', contid, '- not found in gofile file db..');
  62. return; //skip current item, run next(foreach)
  63. } else {
  64. //item in gofile db
  65.  
  66. //chk data available
  67. if(!contdb.hasOwnProperty('name') || !contdb.hasOwnProperty('link')) {
  68. //no name or link in gofile db
  69. console.error('id:', contid, '- not found name or link in gofile file db..');
  70. return; //skip current item, run next(foreach)
  71. } else {
  72. //item ok, link,name ok
  73.  
  74. //old(with original click event)
  75. let oldLinkElem = target.querySelector('a.item_open');
  76. //new(to be replace)
  77. let newLinkElem = document.createElement("a");
  78.  
  79. //copy title
  80. newLinkElem.innerHTML = gfsprefix+oldLinkElem.innerHTML;
  81. //file link
  82. newLinkElem.href = contdb.link;
  83. newLinkElem.rel = "external nofollow noopener noreferrer";
  84. newLinkElem.target = "_blank";
  85. newLinkElem.title = GM.info.script.name + "에 의해 링크 재설정됨";
  86. //copy class
  87. newLinkElem.classList = oldLinkElem.classList;
  88. //remove item open class(remove listner)
  89. newLinkElem.classList.remove('item_open');
  90.  
  91.  
  92. if (contdb.overloaded) {
  93. //current item overloaded
  94. newLinkElem.innerHTML = '[❌] '+newLinkElem.innerHTML;
  95. newLinkElem.title += ', 다운시도 너무 많아서 일시적 잠김';
  96. }
  97.  
  98. //replace elem
  99. oldLinkElem.parentNode.replaceChild(newLinkElem, oldLinkElem);
  100. }
  101. }
  102. });
  103. }
  104.  
  105. async function disableAds() {
  106. //removed
  107. }
  108.  
  109. async function intervalTask() {
  110. await waitForElm('#filemanager_itemslist');
  111. console.log('wait gofile db..');
  112.  
  113. //await gofile db
  114. while(!appdata.hasOwnProperty('fileManager')) {
  115. await delay(100);
  116. }
  117. await disableAds(); //disable ads
  118.  
  119. //await gofile db 2
  120. while(!appdata.fileManager.mainContent.data) {
  121. await delay(100);
  122. await disableAds(); //disable ads
  123. }
  124. console.log('db loaded.');
  125.  
  126. //check hidden password form created
  127. await waitForElm('#filemanager_alert_passwordform');
  128.  
  129. //await password solved
  130. //chk form for prevent parent elem refresh
  131. await disableAds(); //disable ads
  132. while(!(document.querySelector('#filemanager_alert_passwordform') && document.querySelector('#filemanager_alert_passwordform').classList.contains('hidden'))) {
  133. await delay(100);
  134. }
  135. await disableAds(); //disable ads
  136.  
  137. //await gofile db ready
  138. while(!appdata.fileManager.mainContent.data.canAccess) {
  139. await delay(100);
  140. await disableAds(); //disable ads
  141. }
  142. await disableAds(); //disable ads
  143.  
  144. //hide ads area
  145. document.querySelector('#index_ads').style.display = 'none';
  146. await replaceLink(appdata);
  147. console.log('resolve finished.');
  148. await disableAds(); //disable ads
  149. }
  150.  
  151. async function rootProcedure(){
  152. await intervalTask();
  153. //taskRepID = setInterval(intervalTask, 100);
  154. //setTimeout(() => { clearInterval(taskRepID); }, 5000);
  155. }
  156.  
  157.  
  158. window.addEventListener('load', () => setTimeout(rootProcedure, 100));