IG-Add2Lib

indiegala 快速领取免费游戏

当前为 2021-02-23 提交的版本,查看 最新版本

  1. "use strict";
  2.  
  3. function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
  4.  
  5. function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
  6.  
  7. function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
  8.  
  9. function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
  10.  
  11. function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
  12.  
  13. function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
  14.  
  15. function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
  16.  
  17. function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
  18.  
  19. function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
  20.  
  21. // ==UserScript==
  22. // @name IG-Add2Lib
  23. // @namespace IG-Add2Lib
  24. // @version 1.0.4
  25. // @description indiegala 快速领取免费游戏
  26. // @author HCLonely
  27. // @license MIT
  28. // @iconURL https://auto-task-test.hclonely.com/img/favicon.ico
  29. // @homepage https://github.com/HCLonely/IG-Helper/
  30. // @supportURL https://github.com/HCLonely/IG-Helper/issues/
  31. // @include *://keylol.com/*
  32. // @grant GM_addStyle
  33. // @grant GM_xmlhttpRequest
  34. // @grant GM_registerMenuCommand
  35. // @grant unsafeWindow
  36. // @require https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.slim.min.js
  37. // @require https://cdn.jsdelivr.net/npm/regenerator-runtime@0.13.7/runtime.min.js
  38. // @require https://cdn.jsdelivr.net/npm/sweetalert2@9
  39. // @require https://cdn.jsdelivr.net/npm/promise-polyfill@8.1.3/dist/polyfill.min.js
  40. // @require https://greasyfork.org/scripts/418102-tm-request/code/TM_request.js?version=902218
  41. // @connect indiegala.com
  42. // @run-at document-end
  43. // @noframes
  44. // ==/UserScript==
  45.  
  46. /* global addToIndiegalaLibrary, syncIgLib */
  47. (function () {
  48. function addButton() {
  49. var _iterator = _createForOfIteratorHelper($('a[href*=".indiegala.com/"]:not(".ig-add2lib")')),
  50. _step;
  51.  
  52. try {
  53. for (_iterator.s(); !(_step = _iterator.n()).done;) {
  54. var el = _step.value;
  55. var $this = $(el).addClass('ig-add2lib');
  56. var href = $this.attr('href');
  57.  
  58. if (/^https?:\/\/.+?\.indiegala\.com\/.+$/.test(href)) {
  59. $this.after("<a class=\"add-to-library\" href=\"javascript:void(0)\" onclick=\"addToIndiegalaLibrary(this)\" data-href=\"".concat(href, "\" target=\"_self\">\u5165\u5E93</a>"));
  60. }
  61. }
  62. } catch (err) {
  63. _iterator.e(err);
  64. } finally {
  65. _iterator.f();
  66. }
  67. }
  68.  
  69. unsafeWindow.addToIndiegalaLibrary = /*#__PURE__*/function () {
  70. var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(el) {
  71. var href, url;
  72. return regeneratorRuntime.wrap(function _callee$(_context) {
  73. while (1) {
  74. switch (_context.prev = _context.next) {
  75. case 0:
  76. href = typeof el === 'string' ? el : $(el).attr('data-href');
  77. Swal.fire({
  78. title: '正在获取入库链接...',
  79. text: href,
  80. icon: 'info'
  81. });
  82. _context.next = 4;
  83. return TM_request({
  84. url: href,
  85. method: 'GET',
  86. anonymous: true,
  87. timeout: 30000,
  88. retry: 3
  89. }).then(function (response) {
  90. var _response$responseTex;
  91.  
  92. if (!response.responseText) {
  93. console.error(response);
  94. return null;
  95. }
  96.  
  97. var pageId = (_response$responseTex = response.responseText.match(/dataToSend\.gala_page_id[\s]*?=[\s]*?'(.*?)';/)) === null || _response$responseTex === void 0 ? void 0 : _response$responseTex[1];
  98.  
  99. if (!pageId) {
  100. console.error(response);
  101. return null;
  102. }
  103.  
  104. return new URL("/ajax/add-to-library/".concat(pageId, "/").concat(new URL(href).pathname.replace(/\//g, ''), "/").concat(new URL(href).hostname.replace('.indiegala.com', '')), href).href;
  105. })["catch"](function (error) {
  106. console.error(error);
  107. return null;
  108. });
  109.  
  110. case 4:
  111. url = _context.sent;
  112.  
  113. if (url) {
  114. _context.next = 8;
  115. break;
  116. }
  117.  
  118. Swal.update({
  119. title: '获取入库链接失败!',
  120. text: href,
  121. icon: 'error'
  122. });
  123. return _context.abrupt("return", null);
  124.  
  125. case 8:
  126. Swal.update({
  127. title: '正在入库...',
  128. text: href,
  129. icon: 'info'
  130. });
  131. return _context.abrupt("return", TM_request({
  132. url: url,
  133. method: 'POST',
  134. responseType: 'json',
  135. nocache: true,
  136. headers: {
  137. 'content-type': 'application/json'
  138. },
  139. timeout: 30000,
  140. retry: 3
  141. }).then(function (response) {
  142. var _response$response, _response$response2, _response$response3;
  143.  
  144. if (((_response$response = response.response) === null || _response$response === void 0 ? void 0 : _response$response.status) === 'ok') {
  145. Swal.update({
  146. title: '入库成功!',
  147. text: href,
  148. icon: 'success'
  149. });
  150.  
  151. if (syncIgLib) {
  152. syncIgLib(false, false).then(function (allGames) {
  153. var _iterator2 = _createForOfIteratorHelper($('a[href*=".indiegala.com/"]')),
  154. _step2;
  155.  
  156. try {
  157. for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
  158. var _el = _step2.value;
  159. var $this = $(_el).addClass('ig-checked');
  160.  
  161. var _href = $this.attr('href');
  162.  
  163. if (/^https?:\/\/[\w\d]+?\.indiegala\.com\/.+$/.test(_href) && allGames.includes(new URL(_href).pathname.replace(/\//g, ''))) {
  164. $this.addClass('ig-owned');
  165. }
  166. }
  167. } catch (err) {
  168. _iterator2.e(err);
  169. } finally {
  170. _iterator2.f();
  171. }
  172. });
  173. }
  174.  
  175. return true;
  176. } else if (((_response$response2 = response.response) === null || _response$response2 === void 0 ? void 0 : _response$response2.status) === 'added') {
  177. Swal.update({
  178. title: '已在库中!',
  179. text: href,
  180. icon: 'warning'
  181. });
  182. return true;
  183. } else if (((_response$response3 = response.response) === null || _response$response3 === void 0 ? void 0 : _response$response3.status) === 'login') {
  184. Swal.fire({
  185. title: '请先登录!',
  186. icon: 'error',
  187. html: '<a href="https://www.indiegala.com/login" target="_blank">登录</a>'
  188. });
  189. return false;
  190. } else {
  191. console.error(response);
  192. Swal.update({
  193. title: '入库失败!',
  194. text: href,
  195. icon: 'error'
  196. });
  197. return null;
  198. }
  199. }));
  200.  
  201. case 10:
  202. case "end":
  203. return _context.stop();
  204. }
  205. }
  206. }, _callee);
  207. }));
  208.  
  209. return function (_x) {
  210. return _ref.apply(this, arguments);
  211. };
  212. }();
  213.  
  214. GM_registerMenuCommand('入库所有', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
  215. var links, newLinks, failedLinks, _iterator3, _step3, link, result;
  216.  
  217. return regeneratorRuntime.wrap(function _callee2$(_context2) {
  218. while (1) {
  219. switch (_context2.prev = _context2.next) {
  220. case 0:
  221. links = $.makeArray($('a.add-to-library')).map(function (e, i) {
  222. return $(e).prev().hasClass('ig-owned') ? null : $(e).attr('data-href');
  223. }).filter(function (e) {
  224. return e;
  225. });
  226. newLinks = _toConsumableArray(new Set(links));
  227. failedLinks = [];
  228. _iterator3 = _createForOfIteratorHelper(newLinks);
  229. _context2.prev = 4;
  230.  
  231. _iterator3.s();
  232.  
  233. case 6:
  234. if ((_step3 = _iterator3.n()).done) {
  235. _context2.next = 18;
  236. break;
  237. }
  238.  
  239. link = _step3.value;
  240. _context2.next = 10;
  241. return addToIndiegalaLibrary(link);
  242.  
  243. case 10:
  244. result = _context2.sent;
  245.  
  246. if (!(result === false)) {
  247. _context2.next = 15;
  248. break;
  249. }
  250.  
  251. return _context2.abrupt("break", 18);
  252.  
  253. case 15:
  254. if (!result) {
  255. failedLinks.push("<a href=\"".concat(link, "\" target=_blank\">").concat(link, "</a>"));
  256. }
  257.  
  258. case 16:
  259. _context2.next = 6;
  260. break;
  261.  
  262. case 18:
  263. _context2.next = 23;
  264. break;
  265.  
  266. case 20:
  267. _context2.prev = 20;
  268. _context2.t0 = _context2["catch"](4);
  269.  
  270. _iterator3.e(_context2.t0);
  271.  
  272. case 23:
  273. _context2.prev = 23;
  274.  
  275. _iterator3.f();
  276.  
  277. return _context2.finish(23);
  278.  
  279. case 26:
  280. if (failedLinks.length === 0) {
  281. Swal.fire({
  282. title: '全部任务完成!',
  283. icon: 'success'
  284. });
  285. } else {
  286. Swal.fire({
  287. title: '以下任务未完成!',
  288. icon: 'warning',
  289. html: failedLinks.join('<br/>')
  290. });
  291. }
  292.  
  293. case 27:
  294. case "end":
  295. return _context2.stop();
  296. }
  297. }
  298. }, _callee2, null, [[4, 20, 23, 26]]);
  299. })));
  300. GM_addStyle('.add-to-library{margin-left:10px;}');
  301. addButton();
  302. var observer = new MutationObserver(addButton);
  303. observer.observe(document.documentElement, {
  304. attributes: true,
  305. characterData: true,
  306. childList: true,
  307. subtree: true
  308. });
  309. })();