Furaffinity-Request-Helper

Library to simplify requests to Furaffinity

目前为 2025-02-22 提交的版本。查看 最新版本

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.cn-greasyfork.org/scripts/483952/1541529/Furaffinity-Request-Helper.js

  1. // ==UserScript==
  2. // @name Furaffinity-Request-Helper
  3. // @namespace Violentmonkey Scripts
  4. // @require https://update.greasyfork.org/scripts/525666/1530872/Furaffinity-Prototype-Extensions.js
  5. // @grant none
  6. // @version 1.4.0
  7. // @author Midori Dragon
  8. // @description Library to simplify requests to Furaffinity
  9. // @icon https://www.furaffinity.net/themes/beta/img/banners/fa_logo.png
  10. // @license MIT
  11. // ==/UserScript==
  12. // jshint esversion: 8
  13. (() => {
  14. "use strict";
  15. class Semaphore {
  16. constructor(maxConcurrency) {
  17. this.maxConcurrency = maxConcurrency;
  18. this.currentConcurrency = 0;
  19. this.waitingQueue = [];
  20. }
  21. acquire() {
  22. return new Promise((resolve => {
  23. if (this.currentConcurrency < this.maxConcurrency) {
  24. this.currentConcurrency++;
  25. resolve();
  26. } else this.waitingQueue.push(resolve);
  27. }));
  28. }
  29. release() {
  30. if (this.waitingQueue.length > 0) {
  31. const nextResolve = this.waitingQueue.shift();
  32. if (null != nextResolve) nextResolve();
  33. } else this.currentConcurrency--;
  34. }
  35. }
  36. class PercentHelper {
  37. constructor() {
  38. throw new Error("The PercentHelper class is static and cannot be instantiated.");
  39. }
  40. static setPercentValue(id, value) {
  41. if (value && PercentHelper._percentAll.hasOwnProperty(id)) {
  42. PercentHelper._percentAll[id] = value;
  43. return true;
  44. }
  45. return false;
  46. }
  47. static getPercentValue(id, decimalPlaces = 2) {
  48. if (null == id) return -1;
  49. const percent = PercentHelper._percentAll[id];
  50. if (!percent) return -1; else return parseFloat(percent.toFixed(decimalPlaces));
  51. }
  52. static createPercentValue(uniqueId) {
  53. PercentHelper._percentAll[uniqueId] = 0;
  54. }
  55. static deletePercentValue(id) {
  56. if (PercentHelper._percentAll.hasOwnProperty(id)) delete PercentHelper._percentAll[id];
  57. }
  58. static updatePercentValue(id, value, totalValue) {
  59. if (null != id && "" !== id && -1 !== id) {
  60. const progress = value / totalValue * 100;
  61. PercentHelper.setPercentValue(id, progress);
  62. }
  63. }
  64. }
  65. PercentHelper._percentAll = {};
  66. var __awaiter = function(thisArg, _arguments, P, generator) {
  67. return new (P || (P = Promise))((function(resolve, reject) {
  68. function fulfilled(value) {
  69. try {
  70. step(generator.next(value));
  71. } catch (e) {
  72. reject(e);
  73. }
  74. }
  75. function rejected(value) {
  76. try {
  77. step(generator.throw(value));
  78. } catch (e) {
  79. reject(e);
  80. }
  81. }
  82. function step(result) {
  83. result.done ? resolve(result.value) : function adopt(value) {
  84. return value instanceof P ? value : new P((function(resolve) {
  85. resolve(value);
  86. }));
  87. }(result.value).then(fulfilled, rejected);
  88. }
  89. step((generator = generator.apply(thisArg, _arguments || [])).next());
  90. }));
  91. };
  92. class WaitAndCallAction {
  93. constructor(action, delay) {
  94. this.delay = 10;
  95. this._running = false;
  96. this._action = action;
  97. if (null != delay) this.delay = delay;
  98. }
  99. start() {
  100. if (null != this._action && false === this._running) {
  101. this._running = true;
  102. this._intervalId = setInterval((() => {
  103. var _a;
  104. this._action(PercentHelper.getPercentValue(null === (_a = this._intervalId) || void 0 === _a ? void 0 : _a.toString()));
  105. }), this.delay);
  106. PercentHelper.createPercentValue(this._intervalId.toString());
  107. return this._intervalId;
  108. }
  109. }
  110. stop() {
  111. if (this._running) {
  112. this._running = false;
  113. clearInterval(this._intervalId);
  114. if (null != this._intervalId) PercentHelper.deletePercentValue(this._intervalId.toString());
  115. }
  116. }
  117. static callFunctionAsync(functionToCall_1, params_1, action_1, delay_1) {
  118. return __awaiter(this, arguments, void 0, (function*(functionToCall, params, action, delay, usePercent = false) {
  119. if (null == action) return yield functionToCall(...params);
  120. const waitAndCallAction = new WaitAndCallAction(action, delay), percentId = waitAndCallAction.start();
  121. if (usePercent) params.push(percentId);
  122. const result = yield functionToCall(...params);
  123. waitAndCallAction.stop();
  124. return result;
  125. }));
  126. }
  127. static callFunction(functionToCall, params, action, delay, usePercent = false) {
  128. if (null == action) return functionToCall(...params);
  129. const waitAndCallAction = new WaitAndCallAction(action, delay), percentId = waitAndCallAction.start();
  130. if (usePercent) params.push(percentId);
  131. const result = functionToCall(...params);
  132. waitAndCallAction.stop();
  133. return result;
  134. }
  135. }
  136. class IdArray {
  137. constructor() {
  138. throw new Error("The IdArray class is static and cannot be instantiated.");
  139. }
  140. static getTillId(collection, toId, attributeName = "id") {
  141. const result = [];
  142. toId = toId.toString();
  143. for (const elem of collection) {
  144. result.push(elem);
  145. const attribute = elem.getAttribute(attributeName);
  146. if (null != attribute && attribute.replace("sid-", "") === toId) break;
  147. }
  148. return result;
  149. }
  150. static getSinceId(collection, fromId, attributeName = "id") {
  151. const array = collection;
  152. array.reverse();
  153. const result = [];
  154. fromId = fromId.toString();
  155. for (const elem of array) {
  156. result.push(elem);
  157. const attribute = elem.getAttribute(attributeName);
  158. if (null != attribute && attribute.replace("sid-", "") === fromId) break;
  159. }
  160. result.reverse();
  161. return result;
  162. }
  163. static getBetweenIds(collection, fromId, toId, attributeName = "id") {
  164. const array = collection;
  165. let startIndex = -1, endIndex = -1;
  166. fromId = fromId.toString();
  167. toId = toId.toString();
  168. for (let i = 0; i < array.length; i++) {
  169. const attribute = array[i].getAttribute(attributeName);
  170. if (null != attribute && attribute.replace("sid-", "") === fromId) startIndex = i;
  171. if (null != attribute && attribute.replace("sid-", "") === toId) endIndex = i;
  172. if (-1 !== startIndex && -1 !== endIndex) break;
  173. }
  174. if (-1 === startIndex && -1 === endIndex) return array;
  175. if (-1 === startIndex) startIndex = 0;
  176. if (-1 === endIndex) endIndex = array.length - 1;
  177. const result = [];
  178. for (let i = startIndex; i <= endIndex; i++) result.push(array[i]);
  179. return result;
  180. }
  181. static containsId(collection, id, attributeName = "id") {
  182. id = id.toString();
  183. for (const elem of collection) {
  184. const attribute = elem.getAttribute(attributeName);
  185. if (null != attribute && attribute.replace("sid-", "") === id) return true;
  186. }
  187. return false;
  188. }
  189. }
  190. function convertToNumber(value) {
  191. if (null == value) return;
  192. const number = parseInt(value.toString());
  193. if (!isNaN(number)) return number;
  194. }
  195. var LogLevel, Scraps_awaiter = function(thisArg, _arguments, P, generator) {
  196. return new (P || (P = Promise))((function(resolve, reject) {
  197. function fulfilled(value) {
  198. try {
  199. step(generator.next(value));
  200. } catch (e) {
  201. reject(e);
  202. }
  203. }
  204. function rejected(value) {
  205. try {
  206. step(generator.throw(value));
  207. } catch (e) {
  208. reject(e);
  209. }
  210. }
  211. function step(result) {
  212. result.done ? resolve(result.value) : function adopt(value) {
  213. return value instanceof P ? value : new P((function(resolve) {
  214. resolve(value);
  215. }));
  216. }(result.value).then(fulfilled, rejected);
  217. }
  218. step((generator = generator.apply(thisArg, _arguments || [])).next());
  219. }));
  220. };
  221. class Scraps {
  222. constructor(semaphore) {
  223. this._semaphore = semaphore;
  224. }
  225. static get hardLink() {
  226. return FuraffinityRequests.fullUrl + "/scraps/";
  227. }
  228. getSubmissionPageNo(username_1, submissionId_1, fromPageNumber_1, toPageNumber_1, action_1) {
  229. return Scraps_awaiter(this, arguments, void 0, (function*(username, submissionId, fromPageNumber, toPageNumber, action, delay = 100) {
  230. submissionId = convertToNumber(submissionId);
  231. fromPageNumber = convertToNumber(fromPageNumber);
  232. toPageNumber = convertToNumber(toPageNumber);
  233. return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getSubmissionPageNo, [ username, submissionId, void 0, fromPageNumber, toPageNumber, GalleryType.SCRAPS, this._semaphore ], action, delay);
  234. }));
  235. }
  236. getFiguresBetweenIds(username_1, fromId_1, toId_1, action_1) {
  237. return Scraps_awaiter(this, arguments, void 0, (function*(username, fromId, toId, action, delay = 100) {
  238. fromId = convertToNumber(fromId);
  239. toId = convertToNumber(toId);
  240. if (null == fromId || fromId <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresTillId, [ username, void 0, toId, void 0, GalleryType.SCRAPS, this._semaphore ], action, delay); else if (null == toId || toId <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresSinceId, [ username, void 0, fromId, void 0, GalleryType.SCRAPS, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresBetweenIds, [ username, void 0, fromId, toId, void 0, void 0, GalleryType.SCRAPS, this._semaphore ], action, delay, true);
  241. }));
  242. }
  243. getFiguresBetweenIdsBetweenPages(username_1, fromId_1, toId_1, fromPageNumber_1, toPageNumber_1, action_1) {
  244. return Scraps_awaiter(this, arguments, void 0, (function*(username, fromId, toId, fromPageNumber, toPageNumber, action, delay = 100) {
  245. fromId = convertToNumber(fromId);
  246. toId = convertToNumber(toId);
  247. fromPageNumber = convertToNumber(fromPageNumber);
  248. toPageNumber = convertToNumber(toPageNumber);
  249. if (null == fromId || fromId <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresTillId, [ username, void 0, toId, fromPageNumber, GalleryType.SCRAPS, this._semaphore ], action, delay); else if (null == toId || toId <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresSinceId, [ username, void 0, fromId, toPageNumber, GalleryType.SCRAPS, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresBetweenIds, [ username, void 0, fromId, toId, fromPageNumber, toPageNumber, GalleryType.SCRAPS, this._semaphore ], action, delay, true);
  250. }));
  251. }
  252. getFiguresBetweenPages(username_1, fromPageNumber_1, toPageNumber_1, action_1) {
  253. return Scraps_awaiter(this, arguments, void 0, (function*(username, fromPageNumber, toPageNumber, action, delay = 100) {
  254. fromPageNumber = convertToNumber(fromPageNumber);
  255. toPageNumber = convertToNumber(toPageNumber);
  256. if (null == fromPageNumber || fromPageNumber <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresTillPage, [ username, void 0, toPageNumber, GalleryType.SCRAPS, this._semaphore ], action, delay, true); else if (null == toPageNumber || toPageNumber <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresSincePage, [ username, void 0, fromPageNumber, GalleryType.SCRAPS, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresBetweenPages, [ username, void 0, fromPageNumber, toPageNumber, GalleryType.SCRAPS, this._semaphore ], action, delay, true);
  257. }));
  258. }
  259. getFigures(username_1, pageNumber_1, action_1) {
  260. return Scraps_awaiter(this, arguments, void 0, (function*(username, pageNumber, action, delay = 100) {
  261. pageNumber = convertToNumber(pageNumber);
  262. return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFigures, [ username, void 0, pageNumber, GalleryType.SCRAPS, this._semaphore ], action, delay);
  263. }));
  264. }
  265. getPage(username_1, pageNumber_1, action_1) {
  266. return Scraps_awaiter(this, arguments, void 0, (function*(username, pageNumber, action, delay = 100) {
  267. pageNumber = convertToNumber(pageNumber);
  268. return yield WaitAndCallAction.callFunctionAsync(Page.getGalleryPage, [ username, void 0, pageNumber, GalleryType.SCRAPS, this._semaphore ], action, delay);
  269. }));
  270. }
  271. }
  272. !function(LogLevel) {
  273. LogLevel[LogLevel.Error = 1] = "Error";
  274. LogLevel[LogLevel.Warning = 2] = "Warning";
  275. LogLevel[LogLevel.Info = 3] = "Info";
  276. }(LogLevel || (LogLevel = {}));
  277. class Logger {
  278. static log(logLevel = LogLevel.Warning, ...args) {
  279. if (null == window.__FF_GLOBAL_LOG_LEVEL__) window.__FF_GLOBAL_LOG_LEVEL__ = LogLevel.Error;
  280. if (!(logLevel > window.__FF_GLOBAL_LOG_LEVEL__)) switch (logLevel) {
  281. case LogLevel.Error:
  282. console.error(...args);
  283. break;
  284.  
  285. case LogLevel.Warning:
  286. console.warn(...args);
  287. break;
  288.  
  289. case LogLevel.Info:
  290. console.log(...args);
  291. }
  292. }
  293. static setLogLevel(logLevel) {
  294. window.__FF_GLOBAL_LOG_LEVEL__ = logLevel;
  295. }
  296. static logError(...args) {
  297. Logger.log(LogLevel.Error, ...args);
  298. }
  299. static logWarning(...args) {
  300. Logger.log(LogLevel.Warning, ...args);
  301. }
  302. static logInfo(...args) {
  303. Logger.log(LogLevel.Info, ...args);
  304. }
  305. }
  306. var Favorites_awaiter = function(thisArg, _arguments, P, generator) {
  307. return new (P || (P = Promise))((function(resolve, reject) {
  308. function fulfilled(value) {
  309. try {
  310. step(generator.next(value));
  311. } catch (e) {
  312. reject(e);
  313. }
  314. }
  315. function rejected(value) {
  316. try {
  317. step(generator.throw(value));
  318. } catch (e) {
  319. reject(e);
  320. }
  321. }
  322. function step(result) {
  323. result.done ? resolve(result.value) : function adopt(value) {
  324. return value instanceof P ? value : new P((function(resolve) {
  325. resolve(value);
  326. }));
  327. }(result.value).then(fulfilled, rejected);
  328. }
  329. step((generator = generator.apply(thisArg, _arguments || [])).next());
  330. }));
  331. };
  332. class Favorites {
  333. constructor(semaphore) {
  334. this.semaphore = semaphore;
  335. }
  336. static get hardLink() {
  337. return FuraffinityRequests.fullUrl + "/favorites/";
  338. }
  339. getSubmissionDataFavId(username_1, submissionId_1, fromDataFavId_1, toDataFavId_1, action_1) {
  340. return Favorites_awaiter(this, arguments, void 0, (function*(username, submissionId, fromDataFavId, toDataFavId, action, delay = 100) {
  341. submissionId = convertToNumber(submissionId);
  342. fromDataFavId = convertToNumber(fromDataFavId);
  343. toDataFavId = convertToNumber(toDataFavId);
  344. return yield WaitAndCallAction.callFunctionAsync(getSubmissionDataFavId, [ username, submissionId, fromDataFavId, toDataFavId, this.semaphore ], action, delay);
  345. }));
  346. }
  347. getFiguresBetweenIds(username_1, fromId_1, toId_1, action_1) {
  348. return Favorites_awaiter(this, arguments, void 0, (function*(username, fromId, toId, action, delay = 100) {
  349. fromId = convertToNumber(fromId);
  350. toId = convertToNumber(toId);
  351. if (null == fromId || fromId <= 0) return yield WaitAndCallAction.callFunctionAsync(getFavoritesFiguresTillId, [ username, toId, void 0, this.semaphore ], action, delay); else if (null == toId || toId <= 0) return yield WaitAndCallAction.callFunctionAsync(getFavoritesFiguresSinceId, [ username, fromId, void 0, this.semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(getFavoritesFiguresBetweenIds, [ username, fromId, toId, void 0, void 0, this.semaphore ], action, delay, true);
  352. }));
  353. }
  354. getFiguresBetweenIdsBetweenPages(username_1, fromId_1, toId_1, fromDataFavId_1, toDataFavId_1, action_1) {
  355. return Favorites_awaiter(this, arguments, void 0, (function*(username, fromId, toId, fromDataFavId, toDataFavId, action, delay = 100) {
  356. fromId = convertToNumber(fromId);
  357. toId = convertToNumber(toId);
  358. fromDataFavId = convertToNumber(fromDataFavId);
  359. toDataFavId = convertToNumber(toDataFavId);
  360. if (null == fromId || fromId <= 0) return yield WaitAndCallAction.callFunctionAsync(getFavoritesFiguresTillId, [ username, toId, fromDataFavId, this.semaphore ], action, delay); else if (null == toId || toId <= 0) return yield WaitAndCallAction.callFunctionAsync(getFavoritesFiguresSinceId, [ username, fromId, toDataFavId, this.semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(getFavoritesFiguresBetweenIds, [ username, fromId, toId, fromDataFavId, toDataFavId, this.semaphore ], action, delay, true);
  361. }));
  362. }
  363. getFiguresBetweenPages(username_1, fromDataFavId_1, toDataFavId_1, action_1) {
  364. return Favorites_awaiter(this, arguments, void 0, (function*(username, fromDataFavId, toDataFavId, action, delay = 100) {
  365. fromDataFavId = convertToNumber(fromDataFavId);
  366. toDataFavId = convertToNumber(toDataFavId);
  367. if (null == fromDataFavId || fromDataFavId <= 0) return yield WaitAndCallAction.callFunctionAsync(getFavoritesFiguresTillPage, [ username, toDataFavId, this.semaphore ], action, delay, true); else if (null == toDataFavId || toDataFavId <= 0) return yield WaitAndCallAction.callFunctionAsync(getFavoritesFiguresSincePage, [ username, fromDataFavId, this.semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(getFavoritesFiguresBetweenPages, [ username, fromDataFavId, toDataFavId, this.semaphore ], action, delay, true);
  368. }));
  369. }
  370. getFigures(username_1, fromDataFavId_1, direction_1, action_1) {
  371. return Favorites_awaiter(this, arguments, void 0, (function*(username, fromDataFavId, direction, action, delay = 100) {
  372. fromDataFavId = convertToNumber(fromDataFavId);
  373. direction = convertToNumber(direction);
  374. return yield WaitAndCallAction.callFunctionAsync(getFavoritesFigures, [ username, fromDataFavId, direction, this.semaphore ], action, delay);
  375. }));
  376. }
  377. getPage(username_1, fromDataFavId_1, direction_1, action_1) {
  378. return Favorites_awaiter(this, arguments, void 0, (function*(username, fromDataFavId, direction, action, delay = 100) {
  379. fromDataFavId = convertToNumber(fromDataFavId);
  380. direction = convertToNumber(direction);
  381. return yield WaitAndCallAction.callFunctionAsync(Page.getFavoritesPage, [ username, fromDataFavId, direction, this.semaphore ], action, delay);
  382. }));
  383. }
  384. }
  385. function getSubmissionDataFavId(username, submissionId, fromDataFavId, toDataFavId, semaphore) {
  386. return Favorites_awaiter(this, void 0, void 0, (function*() {
  387. if (null == submissionId || submissionId <= 0) {
  388. Logger.logError("No submissionId given");
  389. return -1;
  390. }
  391. if (null == fromDataFavId || fromDataFavId <= 0) {
  392. Logger.logWarning("fromDataFavId must be greater than 0. Using default 1 instead.");
  393. fromDataFavId = -1;
  394. }
  395. if (null == toDataFavId || toDataFavId <= 0) {
  396. Logger.logWarning("toDataFavId must be greater than 0. Using default 1 instead.");
  397. toDataFavId = -1;
  398. }
  399. let dataFavId = fromDataFavId, running = true;
  400. for (;running; ) {
  401. const figures = yield getFavoritesFigures(username, dataFavId, 1, semaphore);
  402. let currFigureId;
  403. if (0 !== figures.length) {
  404. currFigureId = figures[0].id;
  405. const dataFavIdString = figures[figures.length - 1].getAttribute("data-fav-id");
  406. if (null == dataFavIdString) {
  407. running = false;
  408. break;
  409. }
  410. dataFavId = parseInt(dataFavIdString);
  411. const resultFigure = figures.find((figure => figure.id.trimStart("sid-") === submissionId.toString()));
  412. if (null != resultFigure) return parseInt(resultFigure.getAttribute("data-fav-id"));
  413. }
  414. if (undefined === currFigureId) running = false;
  415. }
  416. return -1;
  417. }));
  418. }
  419. function getFavoritesFiguresTillId(username, toId, fromDataFavId, semaphore) {
  420. return Favorites_awaiter(this, void 0, void 0, (function*() {
  421. if (null == toId || toId <= 0) {
  422. Logger.logError("No toId given");
  423. return [];
  424. }
  425. if (null == fromDataFavId || fromDataFavId <= 0) {
  426. Logger.logWarning("No fromDataFavId given. Using default 1 instead.");
  427. fromDataFavId = -1;
  428. }
  429. let running = true, dataFavId = fromDataFavId;
  430. const allFigures = [];
  431. for (;running; ) {
  432. const figures = yield getFavoritesFigures(username, dataFavId, 1, semaphore);
  433. let currFigureId;
  434. if (0 !== figures.length) {
  435. currFigureId = figures[0].id;
  436. const dataFavIdString = figures[figures.length - 1].getAttribute("data-fav-id");
  437. if (null == dataFavIdString) {
  438. running = false;
  439. break;
  440. }
  441. dataFavId = parseInt(dataFavIdString);
  442. }
  443. if (undefined === currFigureId) running = false; else if (IdArray.containsId(figures, toId)) {
  444. allFigures.push(IdArray.getTillId(figures, toId));
  445. running = false;
  446. } else allFigures.push(figures);
  447. }
  448. return allFigures;
  449. }));
  450. }
  451. function getFavoritesFiguresSinceId(username, fromId, toDataFavId, semaphore) {
  452. return Favorites_awaiter(this, void 0, void 0, (function*() {
  453. if (null == fromId || fromId <= 0) {
  454. Logger.logError("No fromId given");
  455. return [];
  456. }
  457. if (null == toDataFavId || toDataFavId <= 0) {
  458. Logger.logWarning("No toDataFavId given. Using default 1 instead.");
  459. toDataFavId = -1;
  460. }
  461. let dataFavId = toDataFavId >= 0 ? toDataFavId : -1;
  462. const direction = toDataFavId >= 0 ? -1 : 1;
  463. let running = true;
  464. if (toDataFavId < 0) {
  465. for (;running; ) {
  466. const figures = yield getFavoritesFigures(username, dataFavId, direction, semaphore);
  467. let currFigureId;
  468. if (0 !== figures.length) currFigureId = figures[0].id;
  469. if (undefined === currFigureId) running = false; else if (IdArray.containsId(figures, fromId)) {
  470. running = false;
  471. const dataFavIdString = figures[figures.length - 1].getAttribute("data-fav-id");
  472. if (null == dataFavIdString) {
  473. running = false;
  474. break;
  475. }
  476. dataFavId = parseInt(dataFavIdString);
  477. }
  478. }
  479. running = true;
  480. }
  481. const allFigures = [];
  482. for (;running; ) {
  483. const figures = yield getFavoritesFigures(username, dataFavId, direction, semaphore);
  484. let currFigureId;
  485. if (0 !== figures.length) {
  486. currFigureId = figures[0].id;
  487. const dataFavIdString = direction >= 0 ? figures[figures.length - 1].getAttribute("data-fav-id") : figures[0].getAttribute("data-fav-id");
  488. if (null == dataFavIdString) {
  489. running = false;
  490. break;
  491. }
  492. dataFavId = parseInt(dataFavIdString);
  493. }
  494. if (undefined === currFigureId) running = false; else if (direction < 0) if (IdArray.containsId(figures, fromId)) {
  495. allFigures.push(IdArray.getSinceId(figures, fromId).reverse());
  496. running = false;
  497. } else allFigures.push(Array.from(figures).reverse()); else if (IdArray.containsId(figures, toDataFavId, "data-fav-id")) {
  498. allFigures.push(IdArray.getTillId(figures, toDataFavId, "data-fav-id"));
  499. running = false;
  500. } else allFigures.push(figures);
  501. }
  502. if (direction < 0) allFigures.reverse();
  503. return allFigures;
  504. }));
  505. }
  506. function getFavoritesFiguresBetweenIds(username, fromId, toId, fromDataFavId, toDataFavId, semaphore) {
  507. return Favorites_awaiter(this, void 0, void 0, (function*() {
  508. if (null == fromId || fromId <= 0) {
  509. Logger.logError("No fromId given");
  510. return [];
  511. }
  512. if (null == toId || toId <= 0) {
  513. Logger.logError("No toId given");
  514. return [];
  515. }
  516. if (null == fromDataFavId || fromDataFavId <= 0) {
  517. Logger.logWarning("No fromDataFavId given. Using default 1 instead.");
  518. fromDataFavId = -1;
  519. }
  520. if (null == toDataFavId || toDataFavId <= 0) {
  521. Logger.logWarning("No toDataFavId given. Using default 1 instead.");
  522. toDataFavId = -1;
  523. }
  524. const direction = fromDataFavId >= 0 ? 1 : toDataFavId >= 0 ? -1 : 1;
  525. let lastFigureId, dataFavId = fromDataFavId >= 0 ? fromDataFavId : toDataFavId, running = true;
  526. if (fromDataFavId < 0 && toDataFavId < 0) {
  527. for (;running; ) {
  528. const figures = yield getFavoritesFigures(username, dataFavId, direction, semaphore);
  529. let currFigureId = lastFigureId;
  530. if (0 !== figures.length) {
  531. currFigureId = figures[0].id;
  532. const dataFavIdString = figures[figures.length - 1].getAttribute("data-fav-id");
  533. if (null == dataFavIdString) {
  534. running = false;
  535. break;
  536. }
  537. dataFavId = parseInt(dataFavIdString);
  538. }
  539. if (currFigureId === lastFigureId) running = false; else if (IdArray.containsId(figures, fromId)) running = false;
  540. }
  541. running = true;
  542. }
  543. const allFigures = [];
  544. lastFigureId = void 0;
  545. for (;running; ) {
  546. const figures = yield getFavoritesFigures(username, dataFavId, direction, semaphore);
  547. let currFigureId = lastFigureId;
  548. if (0 !== figures.length) {
  549. currFigureId = figures[0].id;
  550. const dataFavIdString = direction >= 0 ? figures[figures.length - 1].getAttribute("data-fav-id") : figures[0].getAttribute("data-fav-id");
  551. if (null == dataFavIdString) {
  552. running = false;
  553. break;
  554. }
  555. dataFavId = parseInt(dataFavIdString);
  556. }
  557. if (currFigureId === lastFigureId) running = false; else if (direction < 0) if (IdArray.containsId(figures, fromId)) {
  558. allFigures.push(IdArray.getSinceId(figures, fromId).reverse());
  559. running = false;
  560. } else if (IdArray.containsId(figures, toId)) allFigures.push(IdArray.getTillId(figures, toId).reverse()); else allFigures.push(Array.from(figures).reverse()); else if (IdArray.containsId(figures, toId)) {
  561. allFigures.push(IdArray.getTillId(figures, toId));
  562. running = false;
  563. } else if (IdArray.containsId(figures, fromId)) allFigures.push(IdArray.getSinceId(figures, fromId)); else allFigures.push(figures);
  564. }
  565. if (direction < 0) allFigures.reverse();
  566. return allFigures;
  567. }));
  568. }
  569. function getFavoritesFiguresTillPage(username, toDataFavId, semaphore) {
  570. return Favorites_awaiter(this, void 0, void 0, (function*() {
  571. if (null == toDataFavId || toDataFavId <= 0) {
  572. Logger.logWarning("toDataFavId must be greater than 0. Using default 1 instead.");
  573. toDataFavId = -1;
  574. }
  575. let dataFavId = toDataFavId;
  576. const allFigures = [];
  577. let running = true;
  578. for (;running; ) {
  579. const figures = yield getFavoritesFigures(username, dataFavId, 1, semaphore);
  580. let currFigureId;
  581. if (0 !== figures.length) {
  582. currFigureId = figures[0].id;
  583. const dataFavIdString = figures[figures.length - 1].getAttribute("data-fav-id");
  584. if (null == dataFavIdString) {
  585. running = false;
  586. break;
  587. }
  588. dataFavId = parseInt(dataFavIdString);
  589. }
  590. if (undefined === currFigureId) running = false; else if (IdArray.containsId(figures, toDataFavId, "data-fav-id")) {
  591. allFigures.push(IdArray.getTillId(figures, toDataFavId, "data-fav-id"));
  592. running = false;
  593. } else allFigures.push(figures);
  594. }
  595. return allFigures;
  596. }));
  597. }
  598. function getFavoritesFiguresSincePage(username, fromDataFavId, semaphore) {
  599. return Favorites_awaiter(this, void 0, void 0, (function*() {
  600. if (null == fromDataFavId || fromDataFavId <= 0) {
  601. Logger.logWarning("fromDataFavId must be greater than 0. Using default 1 instead.");
  602. fromDataFavId = -1;
  603. }
  604. let dataFavId = fromDataFavId;
  605. const allFigures = [];
  606. let running = true;
  607. for (;running; ) {
  608. const figures = yield getFavoritesFigures(username, dataFavId, 1, semaphore);
  609. let currFigureId;
  610. if (0 !== figures.length) {
  611. currFigureId = figures[0].id;
  612. const dataFavIdString = figures[figures.length - 1].getAttribute("data-fav-id");
  613. if (null == dataFavIdString) {
  614. running = false;
  615. break;
  616. }
  617. dataFavId = parseInt(dataFavIdString);
  618. }
  619. if (undefined === currFigureId) running = false; else if (IdArray.containsId(figures, fromDataFavId, "data-fav-id")) allFigures.push(IdArray.getSinceId(figures, fromDataFavId, "data-fav-id")); else allFigures.push(figures);
  620. }
  621. return allFigures;
  622. }));
  623. }
  624. function getFavoritesFiguresBetweenPages(username, fromDataFavId, toDataFavId, semaphore) {
  625. return Favorites_awaiter(this, void 0, void 0, (function*() {
  626. if (null == fromDataFavId || fromDataFavId <= 0) {
  627. Logger.logWarning("fromDataFavId must be greater than 0. Using default 1 instead.");
  628. fromDataFavId = -1;
  629. }
  630. if (null == toDataFavId || toDataFavId <= 0) {
  631. Logger.logWarning("toDataFavId must be greater than 0. Using default 1 instead.");
  632. toDataFavId = -1;
  633. }
  634. let dataFavId = fromDataFavId;
  635. const allFigures = [];
  636. let running = true;
  637. for (;running; ) {
  638. const figures = yield getFavoritesFigures(username, dataFavId, 1, semaphore);
  639. let currFigureId;
  640. if (0 !== figures.length) {
  641. currFigureId = figures[0].id;
  642. const dataFavIdString = figures[figures.length - 1].getAttribute("data-fav-id");
  643. if (null == dataFavIdString) {
  644. running = false;
  645. break;
  646. }
  647. dataFavId = parseInt(dataFavIdString);
  648. }
  649. if (undefined === currFigureId) running = false; else if (IdArray.containsId(figures, fromDataFavId, "data-fav-id")) allFigures.push(IdArray.getSinceId(figures, fromDataFavId, "data-fav-id")); else if (IdArray.containsId(figures, toDataFavId, "data-fav-id")) {
  650. allFigures.push(IdArray.getTillId(figures, toDataFavId, "data-fav-id"));
  651. running = false;
  652. } else allFigures.push(figures);
  653. }
  654. return allFigures;
  655. }));
  656. }
  657. function getFavoritesFigures(username, dataFavId, direction, semaphore) {
  658. return Favorites_awaiter(this, void 0, void 0, (function*() {
  659. Logger.logInfo(`Getting Favorites of "${username}" since id "${dataFavId}" and direction "${direction}".`);
  660. const galleryDoc = yield Page.getFavoritesPage(username, dataFavId, direction, semaphore);
  661. if (!galleryDoc || !(galleryDoc instanceof Document) || galleryDoc.getElementById("no-images")) {
  662. Logger.logInfo(`No images found at favorites of "${username}" on page "${dataFavId}".`);
  663. return [];
  664. }
  665. const figures = galleryDoc.getElementsByTagName("figure");
  666. if (null == figures || 0 === figures.length) {
  667. Logger.logInfo(`No figures found at favorites of "${username}" on page "${dataFavId}".`);
  668. return [];
  669. }
  670. return Array.from(figures);
  671. }));
  672. }
  673. var Journals_awaiter = function(thisArg, _arguments, P, generator) {
  674. return new (P || (P = Promise))((function(resolve, reject) {
  675. function fulfilled(value) {
  676. try {
  677. step(generator.next(value));
  678. } catch (e) {
  679. reject(e);
  680. }
  681. }
  682. function rejected(value) {
  683. try {
  684. step(generator.throw(value));
  685. } catch (e) {
  686. reject(e);
  687. }
  688. }
  689. function step(result) {
  690. result.done ? resolve(result.value) : function adopt(value) {
  691. return value instanceof P ? value : new P((function(resolve) {
  692. resolve(value);
  693. }));
  694. }(result.value).then(fulfilled, rejected);
  695. }
  696. step((generator = generator.apply(thisArg, _arguments || [])).next());
  697. }));
  698. };
  699. class Journals {
  700. constructor(semaphore) {
  701. this._semaphore = semaphore;
  702. }
  703. static get hardLink() {
  704. return FuraffinityRequests.fullUrl + "/journals/";
  705. }
  706. getJournalPageNo(username_1, journalId_1, fromPageNumber_1, toPageNumber_1, action_1) {
  707. return Journals_awaiter(this, arguments, void 0, (function*(username, journalId, fromPageNumber, toPageNumber, action, delay = 100) {
  708. journalId = convertToNumber(journalId);
  709. fromPageNumber = convertToNumber(fromPageNumber);
  710. toPageNumber = convertToNumber(toPageNumber);
  711. return yield WaitAndCallAction.callFunctionAsync(getJournalPageNo, [ username, journalId, fromPageNumber, toPageNumber, this._semaphore ], action, delay);
  712. }));
  713. }
  714. getFiguresBetweenIds(username_1, fromId_1, toId_1, action_1) {
  715. return Journals_awaiter(this, arguments, void 0, (function*(username, fromId, toId, action, delay = 100) {
  716. fromId = convertToNumber(fromId);
  717. toId = convertToNumber(toId);
  718. if (null == fromId || fromId <= 0) return yield WaitAndCallAction.callFunctionAsync(getJournalsSectionsTillId, [ username, toId, void 0, this._semaphore ], action, delay); else if (null == toId || toId <= 0) return yield WaitAndCallAction.callFunctionAsync(getJournalsSectionsSinceId, [ username, fromId, void 0, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(getJournalsSectionsBetweenIds, [ username, fromId, toId, void 0, void 0, this._semaphore ], action, delay);
  719. }));
  720. }
  721. getFiguresBetweenIdsBetweenPages(username_1, fromId_1, toId_1, fromPageNumber_1, toPageNumber_1, action_1) {
  722. return Journals_awaiter(this, arguments, void 0, (function*(username, fromId, toId, fromPageNumber, toPageNumber, action, delay = 100) {
  723. fromId = convertToNumber(fromId);
  724. toId = convertToNumber(toId);
  725. fromPageNumber = convertToNumber(fromPageNumber);
  726. toPageNumber = convertToNumber(toPageNumber);
  727. if (null == fromId || fromId <= 0) return yield WaitAndCallAction.callFunctionAsync(getJournalsSectionsTillId, [ username, toId, fromPageNumber, this._semaphore ], action, delay); else if (null == toId || toId <= 0) return yield WaitAndCallAction.callFunctionAsync(getJournalsSectionsSinceId, [ username, fromId, toPageNumber, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(getJournalsSectionsBetweenIds, [ username, fromId, toId, fromPageNumber, toPageNumber, this._semaphore ], action, delay);
  728. }));
  729. }
  730. getSectionsBetweenPages(username_1, fromPageNumber_1, toPageNumber_1, action_1) {
  731. return Journals_awaiter(this, arguments, void 0, (function*(username, fromPageNumber, toPageNumber, action, delay = 100) {
  732. fromPageNumber = convertToNumber(fromPageNumber);
  733. toPageNumber = convertToNumber(toPageNumber);
  734. if (null == fromPageNumber || fromPageNumber <= 0) return yield WaitAndCallAction.callFunctionAsync(getJournalsSectionsTillPage, [ username, toPageNumber, this._semaphore ], action, delay, true); else if (null == toPageNumber || toPageNumber <= 0) return yield WaitAndCallAction.callFunctionAsync(getJournalsSectionsSincePage, [ username, fromPageNumber, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(getJournalsSectionsBetweenPages, [ username, fromPageNumber, toPageNumber, this._semaphore ], action, delay, true);
  735. }));
  736. }
  737. getSections(username_1, pageNumber_1, action_1) {
  738. return Journals_awaiter(this, arguments, void 0, (function*(username, pageNumber, action, delay = 100) {
  739. pageNumber = convertToNumber(pageNumber);
  740. return yield WaitAndCallAction.callFunctionAsync(getJournalsSections, [ username, pageNumber, this._semaphore ], action, delay);
  741. }));
  742. }
  743. getPage(username_1, pageNumber_1, action_1) {
  744. return Journals_awaiter(this, arguments, void 0, (function*(username, pageNumber, action, delay = 100) {
  745. pageNumber = convertToNumber(pageNumber);
  746. return yield WaitAndCallAction.callFunctionAsync(Page.getJournalsPage, [ username, pageNumber, this._semaphore ], action, delay);
  747. }));
  748. }
  749. }
  750. function getJournalPageNo(username, journalId, fromPageNumber, toPageNumber, semaphore, percentId) {
  751. return Journals_awaiter(this, void 0, void 0, (function*() {
  752. if (null == journalId || journalId <= 0) {
  753. Logger.logError("No journalId given");
  754. return -1;
  755. }
  756. if (null == fromPageNumber || fromPageNumber <= 0) {
  757. Logger.logWarning("fromPageNumber must be greater than 0. Using default 1 instead.");
  758. fromPageNumber = 1;
  759. }
  760. if (null == toPageNumber || 0 === toPageNumber) {
  761. Logger.logWarning("toPageNumber must be greater than 0. Using default 1 instead.");
  762. toPageNumber = 1;
  763. } else if (toPageNumber < 0) toPageNumber = Number.MAX_SAFE_INTEGER;
  764. const direction = fromPageNumber <= toPageNumber ? 1 : -1, totalPages = Math.abs(toPageNumber - fromPageNumber) + 1;
  765. let completedPages = 0;
  766. for (let i = fromPageNumber; i <= toPageNumber; i += direction) {
  767. const figures = yield getJournalsSections(username, i, semaphore);
  768. if (0 === figures.length) i = toPageNumber; else {
  769. if (null != figures.find((figure => figure.id.trimStart("jid-") === journalId.toString()))) return i;
  770. }
  771. completedPages++;
  772. PercentHelper.updatePercentValue(percentId, completedPages, totalPages);
  773. }
  774. return -1;
  775. }));
  776. }
  777. function getJournalsSectionsTillId(username, toId, fromPage, semaphore) {
  778. return Journals_awaiter(this, void 0, void 0, (function*() {
  779. if (null == toId || toId <= 0) {
  780. Logger.logError("No toId given");
  781. return [];
  782. }
  783. const allSections = [];
  784. let running = true, i = 1;
  785. if (null != fromPage && fromPage >= 1) i = fromPage;
  786. for (;running; ) {
  787. const sections = yield getJournalsSections(username, i, semaphore);
  788. let currSectionId;
  789. if (0 !== sections.length) currSectionId = sections[0].id;
  790. if (undefined === currSectionId) running = false; else if (IdArray.containsId(sections, toId)) {
  791. allSections.push(IdArray.getTillId(sections, toId));
  792. running = false;
  793. } else {
  794. allSections.push(sections);
  795. i++;
  796. }
  797. }
  798. return allSections;
  799. }));
  800. }
  801. function getJournalsSectionsSinceId(username, fromId, toPage, semaphore) {
  802. return Journals_awaiter(this, void 0, void 0, (function*() {
  803. if (null == fromId || fromId <= 0) {
  804. Logger.logError("No fromId given");
  805. return [];
  806. }
  807. const direction = null == toPage || toPage <= 0 ? -1 : 1;
  808. let lastSectionId, running = true, i = null == toPage || toPage <= 0 ? 1 : toPage;
  809. if (null == toPage || toPage <= 0) for (;running; ) {
  810. const figures = yield getJournalsSections(username, i, semaphore);
  811. let currSectionId = lastSectionId;
  812. if (0 !== figures.length) currSectionId = figures[0].id;
  813. if (currSectionId === lastSectionId) running = false; else if (IdArray.containsId(figures, fromId)) running = false; else i++;
  814. }
  815. const allSections = [];
  816. lastSectionId = void 0;
  817. running = true;
  818. for (;running; ) {
  819. const figures = yield getJournalsSections(username, i, semaphore);
  820. let currSectionId = lastSectionId;
  821. if (0 !== figures.length) currSectionId = figures[0].id;
  822. if (currSectionId === lastSectionId) running = false; else {
  823. if (IdArray.containsId(figures, fromId)) {
  824. const figuresPush = IdArray.getSinceId(figures, fromId);
  825. if (direction < 0) {
  826. figuresPush.reverse();
  827. running = false;
  828. }
  829. allSections.push(figuresPush);
  830. } else {
  831. if (direction < 0) figures.reverse();
  832. allSections.push(figures);
  833. }
  834. i += direction;
  835. }
  836. }
  837. if (direction < 0) allSections.reverse();
  838. return allSections;
  839. }));
  840. }
  841. function getJournalsSectionsBetweenIds(username, fromId, toId, fromPage, toPage, semaphore, percentId) {
  842. return Journals_awaiter(this, void 0, void 0, (function*() {
  843. if (null == fromId || fromId <= 0) {
  844. Logger.logError("No fromId given");
  845. return [];
  846. }
  847. if (null == toId || toId <= 0) {
  848. Logger.logError("No toId given");
  849. return [];
  850. }
  851. if (null == fromPage || fromPage <= 0 || null == toPage || toPage <= 1) {
  852. Logger.logWarning("No fromPage or toPage given. Percentages can not be calculated.");
  853. percentId = void 0;
  854. }
  855. let i = 1;
  856. if (null != fromPage && fromPage >= 1) i = fromPage;
  857. const allSections = [];
  858. let running = true, completedPages = 0;
  859. for (;running; ) {
  860. if (null != toPage && toPage >= 1 && i >= toPage) running = false;
  861. const sections = yield getJournalsSections(username, i, semaphore);
  862. let currSectionId;
  863. if (0 !== sections.length) currSectionId = sections[0].id;
  864. if (undefined === currSectionId) running = false; else {
  865. if (IdArray.containsId(sections, fromId)) allSections.push(IdArray.getSinceId(sections, fromId));
  866. if (IdArray.containsId(sections, toId)) {
  867. allSections.push(IdArray.getBetweenIds(sections, fromId, toId));
  868. running = false;
  869. } else {
  870. allSections.push(sections);
  871. i++;
  872. }
  873. }
  874. completedPages++;
  875. if (null != toPage && toPage >= 1) PercentHelper.updatePercentValue(percentId, completedPages, toPage);
  876. }
  877. return allSections;
  878. }));
  879. }
  880. function getJournalsSectionsTillPage(username, toPageNumber, semaphore, percentId) {
  881. return Journals_awaiter(this, void 0, void 0, (function*() {
  882. if (null == toPageNumber || 0 === toPageNumber) {
  883. Logger.logWarning("toPageNumber must be greater than 0. Using default 1 instead.");
  884. toPageNumber = 1;
  885. } else if (toPageNumber < 0) toPageNumber = Number.MAX_SAFE_INTEGER;
  886. const allSections = [];
  887. let completedPages = 0;
  888. for (let i = 1; i <= toPageNumber; i++) {
  889. const sections = yield getJournalsSections(username, i, semaphore);
  890. if (0 === sections.length) i = toPageNumber; else allSections.push(sections);
  891. completedPages++;
  892. PercentHelper.updatePercentValue(percentId, completedPages, toPageNumber);
  893. }
  894. return allSections;
  895. }));
  896. }
  897. function getJournalsSectionsSincePage(username, fromPageNumber, semaphore) {
  898. return Journals_awaiter(this, void 0, void 0, (function*() {
  899. if (null == fromPageNumber || fromPageNumber <= 0) {
  900. Logger.logWarning("fromPageNumber must be greater than 0. Using default 1 instead.");
  901. fromPageNumber = 1;
  902. }
  903. const allSections = [];
  904. let running = true, i = fromPageNumber;
  905. for (;running; ) {
  906. const sections = yield getJournalsSections(username, i, semaphore);
  907. let currSectionId;
  908. if (0 !== sections.length) currSectionId = sections[0].id;
  909. if (undefined === currSectionId) running = false; else {
  910. allSections.push(sections);
  911. i++;
  912. }
  913. }
  914. return allSections;
  915. }));
  916. }
  917. function getJournalsSectionsBetweenPages(username, fromPageNumber, toPageNumber, semaphore, percentId) {
  918. return Journals_awaiter(this, void 0, void 0, (function*() {
  919. if (null == fromPageNumber || fromPageNumber <= 0) {
  920. Logger.logWarning("fromPageNumber must be greater than 0. Using default 1 instead.");
  921. fromPageNumber = 1;
  922. }
  923. if (null == toPageNumber || 0 === toPageNumber) {
  924. Logger.logWarning("toPageNumber must be greater than 0. Using default 1 instead.");
  925. toPageNumber = 1;
  926. } else if (toPageNumber < 0) toPageNumber = Number.MAX_SAFE_INTEGER;
  927. const allSections = [], direction = fromPageNumber < toPageNumber ? 1 : -1, totalPages = Math.abs(toPageNumber - fromPageNumber) + 1;
  928. let completedPages = 0;
  929. for (let i = fromPageNumber; i <= toPageNumber; i += direction) {
  930. const sections = yield getJournalsSections(username, i, semaphore);
  931. if (0 === sections.length) i = toPageNumber; else allSections.push(sections);
  932. completedPages++;
  933. PercentHelper.updatePercentValue(percentId, completedPages, totalPages);
  934. }
  935. return allSections;
  936. }));
  937. }
  938. function getJournalsSections(username, pageNumber, semaphore) {
  939. return Journals_awaiter(this, void 0, void 0, (function*() {
  940. if (null == pageNumber || pageNumber <= 0) {
  941. Logger.logWarning("pageNumber must be greater than 0. Using default 1 instead.");
  942. pageNumber = 1;
  943. }
  944. Logger.logInfo(`Getting Journals of "${username}" on page "${pageNumber}".`);
  945. const galleryDoc = yield Page.getJournalsPage(username, pageNumber, semaphore);
  946. if (!galleryDoc) {
  947. Logger.logWarning(`No journals found at "${username}" on page "${pageNumber}".`);
  948. return [];
  949. }
  950. const columnPage = galleryDoc.getElementById("columnpage");
  951. if (!columnPage) {
  952. Logger.logWarning(`No column page found at "${username}" on page "${pageNumber}".`);
  953. return [];
  954. }
  955. const sections = columnPage.getElementsByTagName("section");
  956. if (null == sections || 0 === sections.length) {
  957. Logger.logWarning(`No journals found at "${username}" on page "${pageNumber}".`);
  958. return [];
  959. }
  960. return Array.from(sections);
  961. }));
  962. }
  963. var Search_awaiter = function(thisArg, _arguments, P, generator) {
  964. return new (P || (P = Promise))((function(resolve, reject) {
  965. function fulfilled(value) {
  966. try {
  967. step(generator.next(value));
  968. } catch (e) {
  969. reject(e);
  970. }
  971. }
  972. function rejected(value) {
  973. try {
  974. step(generator.throw(value));
  975. } catch (e) {
  976. reject(e);
  977. }
  978. }
  979. function step(result) {
  980. result.done ? resolve(result.value) : function adopt(value) {
  981. return value instanceof P ? value : new P((function(resolve) {
  982. resolve(value);
  983. }));
  984. }(result.value).then(fulfilled, rejected);
  985. }
  986. step((generator = generator.apply(thisArg, _arguments || [])).next());
  987. }));
  988. };
  989. class Search {
  990. constructor(semaphore) {
  991. this._semaphore = semaphore;
  992. }
  993. static get hardLink() {
  994. return FuraffinityRequests.fullUrl + "/search/";
  995. }
  996. get newSearchOptions() {
  997. return new SearchOptions;
  998. }
  999. static get newSearchOptions() {
  1000. return new SearchOptions;
  1001. }
  1002. get SearchOptions() {
  1003. return SearchOptions;
  1004. }
  1005. static get SearchOptions() {
  1006. return SearchOptions;
  1007. }
  1008. getFiguresBetweenIds(fromId_1, toId_1, searchOptions_1, action_1) {
  1009. return Search_awaiter(this, arguments, void 0, (function*(fromId, toId, searchOptions, action, delay = 100) {
  1010. fromId = convertToNumber(fromId);
  1011. toId = convertToNumber(toId);
  1012. if (null == fromId || fromId <= 0) return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getSearchFiguresTillId, [ toId, void 0, searchOptions, this._semaphore ], action, delay); else if (null == toId || toId <= 0) return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getSearchFiguresSinceId, [ fromId, void 0, searchOptions, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getSearchFiguresBetweenIds, [ fromId, toId, void 0, void 0, searchOptions, this._semaphore ], action, delay, true);
  1013. }));
  1014. }
  1015. getFiguresBetweenIdsBetweenPages(fromId_1, toId_1, fromPageNumber_1, toPageNumber_1, searchOptions_1, action_1) {
  1016. return Search_awaiter(this, arguments, void 0, (function*(fromId, toId, fromPageNumber, toPageNumber, searchOptions, action, delay = 100) {
  1017. fromId = convertToNumber(fromId);
  1018. toId = convertToNumber(toId);
  1019. fromPageNumber = convertToNumber(fromPageNumber);
  1020. toPageNumber = convertToNumber(toPageNumber);
  1021. if (null == fromId || fromId <= 0) return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getSearchFiguresTillId, [ toId, fromPageNumber, searchOptions, this._semaphore ], action, delay); else if (null == toId || toId <= 0) return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getSearchFiguresSinceId, [ fromId, toPageNumber, searchOptions, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getSearchFiguresBetweenIds, [ fromId, toId, fromPageNumber, toPageNumber, searchOptions, this._semaphore ], action, delay, true);
  1022. }));
  1023. }
  1024. getFiguresBetweenPages(fromPageNumber_1, toPageNumber_1, searchOptions_1, action_1) {
  1025. return Search_awaiter(this, arguments, void 0, (function*(fromPageNumber, toPageNumber, searchOptions, action, delay = 100) {
  1026. fromPageNumber = convertToNumber(fromPageNumber);
  1027. toPageNumber = convertToNumber(toPageNumber);
  1028. if (null == fromPageNumber || fromPageNumber <= 0) return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getSearchFiguresTillPage, [ toPageNumber, searchOptions, this._semaphore ], action, delay, true); else if (null == toPageNumber || toPageNumber <= 0) return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getSearchFiguresSincePage, [ fromPageNumber, searchOptions, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getSearchFiguresBetweenPages, [ fromPageNumber, toPageNumber, searchOptions, this._semaphore ], action, delay, true);
  1029. }));
  1030. }
  1031. getFigures(pageNumber_1, searchOptions_1, action_1) {
  1032. return Search_awaiter(this, arguments, void 0, (function*(pageNumber, searchOptions, action, delay = 100) {
  1033. pageNumber = convertToNumber(pageNumber);
  1034. return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getSearchFigures, [ pageNumber, searchOptions, this._semaphore ], action, delay);
  1035. }));
  1036. }
  1037. getPage(pageNumber_1, searchOptions_1, action_1) {
  1038. return Search_awaiter(this, arguments, void 0, (function*(pageNumber, searchOptions, action, delay = 100) {
  1039. pageNumber = convertToNumber(pageNumber);
  1040. return yield WaitAndCallAction.callFunctionAsync(Page.getSearchPage, [ pageNumber, searchOptions, this._semaphore ], action, delay);
  1041. }));
  1042. }
  1043. }
  1044. class SearchOptions {
  1045. constructor() {
  1046. this.ratingGeneral = true;
  1047. this.ratingMature = true;
  1048. this.ratingAdult = true;
  1049. this.typeArt = true;
  1050. this.typeMusic = true;
  1051. this.typeFlash = true;
  1052. this.typeStory = true;
  1053. this.typePhotos = true;
  1054. this.typePoetry = true;
  1055. this.input = "";
  1056. this.orderBy = SearchOptions.orderBy.relevancy;
  1057. this.orderDirection = SearchOptions.orderDirection.descending;
  1058. this.range = SearchOptions.range.alltime;
  1059. this.rangeFrom = void 0;
  1060. this.rangeTo = void 0;
  1061. this.matching = SearchOptions.matching.all;
  1062. }
  1063. static get orderBy() {
  1064. return {
  1065. relevancy: "relevancy",
  1066. date: "date",
  1067. popularity: "popularity"
  1068. };
  1069. }
  1070. static get orderDirection() {
  1071. return {
  1072. ascending: "asc",
  1073. descending: "desc"
  1074. };
  1075. }
  1076. static get range() {
  1077. return {
  1078. "1day": "1day",
  1079. "3days": "3days",
  1080. "7days": "7days",
  1081. "30days": "30days",
  1082. "90days": "90days",
  1083. "1year": "1year",
  1084. "3years": "3years",
  1085. "5years": "5years",
  1086. alltime: "all",
  1087. manual: "manual"
  1088. };
  1089. }
  1090. static get matching() {
  1091. return {
  1092. all: "all",
  1093. any: "any",
  1094. extended: "extended"
  1095. };
  1096. }
  1097. }
  1098. var SearchRequests_awaiter = function(thisArg, _arguments, P, generator) {
  1099. return new (P || (P = Promise))((function(resolve, reject) {
  1100. function fulfilled(value) {
  1101. try {
  1102. step(generator.next(value));
  1103. } catch (e) {
  1104. reject(e);
  1105. }
  1106. }
  1107. function rejected(value) {
  1108. try {
  1109. step(generator.throw(value));
  1110. } catch (e) {
  1111. reject(e);
  1112. }
  1113. }
  1114. function step(result) {
  1115. result.done ? resolve(result.value) : function adopt(value) {
  1116. return value instanceof P ? value : new P((function(resolve) {
  1117. resolve(value);
  1118. }));
  1119. }(result.value).then(fulfilled, rejected);
  1120. }
  1121. step((generator = generator.apply(thisArg, _arguments || [])).next());
  1122. }));
  1123. };
  1124. class SearchRequests {
  1125. constructor(semaphore) {
  1126. this._semaphore = semaphore;
  1127. this.Browse = new Browse(this._semaphore);
  1128. this.Search = new Search(this._semaphore);
  1129. }
  1130. static getBrowseFiguresTillId(toId, fromPage, browseOptions, semaphore) {
  1131. return SearchRequests_awaiter(this, void 0, void 0, (function*() {
  1132. if (null == toId || toId <= 0) {
  1133. Logger.logError("No toId given");
  1134. return [];
  1135. }
  1136. let allFigures = [], running = true, i = 1;
  1137. if (null != fromPage && fromPage >= 1) i = fromPage;
  1138. for (;running; ) {
  1139. const figures = yield SearchRequests.getBrowseFigures(i, browseOptions, semaphore);
  1140. let currFigureId;
  1141. if (0 !== figures.length) currFigureId = figures[0].id;
  1142. if (undefined === currFigureId) running = false; else if (IdArray.containsId(figures, toId)) {
  1143. allFigures.push(IdArray.getTillId(figures, toId));
  1144. running = false;
  1145. } else {
  1146. allFigures.push(figures);
  1147. i++;
  1148. }
  1149. }
  1150. return allFigures;
  1151. }));
  1152. }
  1153. static getBrowseFiguresSinceId(fromId, toPage, browseOptions, semaphore) {
  1154. return SearchRequests_awaiter(this, void 0, void 0, (function*() {
  1155. if (null == fromId || fromId <= 0) {
  1156. Logger.logError("No fromId given");
  1157. return [];
  1158. }
  1159. const direction = null == toPage || toPage <= 0 ? -1 : 1;
  1160. let lastFigureId, running = true, i = null == toPage || toPage <= 0 ? 1 : toPage;
  1161. if (null == toPage || toPage <= 0) for (;running; ) {
  1162. const figures = yield SearchRequests.getBrowseFigures(i, browseOptions, semaphore);
  1163. let currFigureId = lastFigureId;
  1164. if (0 !== figures.length) currFigureId = figures[0].id;
  1165. if (currFigureId === lastFigureId) running = false; else if (IdArray.containsId(figures, fromId)) running = false; else i++;
  1166. }
  1167. let allFigures = [];
  1168. lastFigureId = void 0;
  1169. running = true;
  1170. for (;running; ) {
  1171. const figures = yield SearchRequests.getBrowseFigures(i, browseOptions, semaphore);
  1172. let currFigureId = lastFigureId;
  1173. if (0 !== figures.length) currFigureId = figures[0].id;
  1174. if (currFigureId === lastFigureId) running = false; else {
  1175. if (IdArray.containsId(figures, fromId)) {
  1176. const figuresPush = IdArray.getSinceId(figures, fromId);
  1177. if (direction < 0) {
  1178. figuresPush.reverse();
  1179. running = false;
  1180. }
  1181. allFigures.push(figuresPush);
  1182. } else {
  1183. if (direction < 0) figures.reverse();
  1184. allFigures.push(figures);
  1185. }
  1186. i += direction;
  1187. }
  1188. }
  1189. if (direction < 0) allFigures.reverse();
  1190. return allFigures;
  1191. }));
  1192. }
  1193. static getBrowseFiguresBetweenIds(fromId, toId, fromPage, toPage, browseOptions, semaphore, percentId) {
  1194. return SearchRequests_awaiter(this, void 0, void 0, (function*() {
  1195. if (null == fromId || fromId <= 0) {
  1196. Logger.logError("No fromId given");
  1197. return [];
  1198. }
  1199. if (null == toId || toId <= 0) {
  1200. Logger.logError("No toId given");
  1201. return [];
  1202. }
  1203. if (null == fromPage || fromPage <= 0 || null == toPage || toPage <= 1) {
  1204. Logger.logWarning("No fromPage or toPage given. Percentages can not be calculated.");
  1205. percentId = void 0;
  1206. }
  1207. let i = 1;
  1208. if (null != fromPage && fromPage >= 1) i = fromPage;
  1209. const allFigures = [];
  1210. let running = true, completedPages = 0;
  1211. for (;running; ) {
  1212. if (null != toPage && toPage >= 1 && i >= toPage) running = false;
  1213. const figures = yield SearchRequests.getBrowseFigures(i, browseOptions, semaphore);
  1214. let currFigureId;
  1215. if (0 !== figures.length) currFigureId = figures[0].id;
  1216. if (undefined === currFigureId) running = false; else {
  1217. if (IdArray.containsId(figures, fromId)) allFigures.push(IdArray.getSinceId(figures, fromId));
  1218. if (IdArray.containsId(figures, toId)) {
  1219. allFigures.push(IdArray.getBetweenIds(figures, fromId, toId));
  1220. running = false;
  1221. } else {
  1222. allFigures.push(figures);
  1223. i++;
  1224. }
  1225. }
  1226. completedPages++;
  1227. if (null != toPage && toPage >= 1) PercentHelper.updatePercentValue(percentId, completedPages, toPage);
  1228. }
  1229. return allFigures;
  1230. }));
  1231. }
  1232. static getBrowseFiguresTillPage(toPageNumber, browseOptions, semaphore, percentId) {
  1233. return SearchRequests_awaiter(this, void 0, void 0, (function*() {
  1234. if (null == toPageNumber || toPageNumber <= 0) {
  1235. Logger.logWarning("toPageNumber must be greater than 0. Using default 1 instead.");
  1236. toPageNumber = 1;
  1237. }
  1238. const allFigures = [];
  1239. let completedPages = 0;
  1240. for (let i = 1; i <= toPageNumber; i++) {
  1241. const figures = yield SearchRequests.getBrowseFigures(i, browseOptions, semaphore);
  1242. if (0 !== figures.length) allFigures.push(figures);
  1243. completedPages++;
  1244. PercentHelper.updatePercentValue(percentId, completedPages, toPageNumber);
  1245. }
  1246. return allFigures;
  1247. }));
  1248. }
  1249. static getBrowseFiguresSincePage(fromPageNumber, browseOptions, semaphore) {
  1250. return SearchRequests_awaiter(this, void 0, void 0, (function*() {
  1251. if (null == fromPageNumber || fromPageNumber <= 0) {
  1252. Logger.logWarning("fromPageNumber must be greater than 0. Using default 1 instead.");
  1253. fromPageNumber = 1;
  1254. }
  1255. const allFigures = [];
  1256. let running = true, i = fromPageNumber;
  1257. for (;running; ) {
  1258. const figures = yield SearchRequests.getBrowseFigures(i, browseOptions, semaphore);
  1259. let currFigureId;
  1260. if (0 !== figures.length) currFigureId = figures[0].id;
  1261. if (undefined === currFigureId) running = false; else {
  1262. allFigures.push(figures);
  1263. i++;
  1264. }
  1265. }
  1266. return allFigures;
  1267. }));
  1268. }
  1269. static getBrowseFiguresBetweenPages(fromPageNumber, toPageNumber, browseOptions, semaphore, percentId) {
  1270. return SearchRequests_awaiter(this, void 0, void 0, (function*() {
  1271. if (null == fromPageNumber || fromPageNumber <= 0) {
  1272. Logger.logWarning("fromPageNumber must be greater than 0. Using default 1 instead.");
  1273. fromPageNumber = 1;
  1274. }
  1275. if (null == toPageNumber || toPageNumber <= 0) {
  1276. Logger.logWarning("toPageNumber must be greater than 0. Using default 1 instead.");
  1277. toPageNumber = 1;
  1278. }
  1279. const allFigures = [], direction = fromPageNumber <= toPageNumber ? 1 : -1, totalPages = Math.abs(toPageNumber - fromPageNumber) + 1;
  1280. for (let i = fromPageNumber; i <= toPageNumber; i += direction) {
  1281. const figures = yield SearchRequests.getBrowseFigures(i, browseOptions, semaphore);
  1282. if (0 !== figures.length) allFigures.push(figures);
  1283. PercentHelper.updatePercentValue(percentId, 0, totalPages);
  1284. }
  1285. return allFigures;
  1286. }));
  1287. }
  1288. static getBrowseFigures(pageNumber, browseOptions, semaphore) {
  1289. return SearchRequests_awaiter(this, void 0, void 0, (function*() {
  1290. if (null == pageNumber || pageNumber <= 0) {
  1291. Logger.logWarning("No pageNumber given. Using default value of 1.");
  1292. pageNumber = 1;
  1293. }
  1294. const galleryDoc = yield Page.getBrowsePage(pageNumber, browseOptions, semaphore);
  1295. if (!galleryDoc || !(galleryDoc instanceof Document) || galleryDoc.getElementById("no-images")) {
  1296. Logger.logInfo(`No images found at browse on page "${pageNumber}".`);
  1297. return [];
  1298. }
  1299. const figures = galleryDoc.getElementsByTagName("figure");
  1300. if (null == figures || 0 === figures.length) {
  1301. Logger.logInfo(`No figures found at browse on page "${pageNumber}".`);
  1302. return [];
  1303. }
  1304. return Array.from(figures);
  1305. }));
  1306. }
  1307. static getSearchFiguresTillId(toId, fromPage, searchOptions, semaphore) {
  1308. return SearchRequests_awaiter(this, void 0, void 0, (function*() {
  1309. if (null == toId || toId <= 0) {
  1310. Logger.logError("No toId given");
  1311. return [];
  1312. }
  1313. let allFigures = [], running = true, i = 1;
  1314. if (null != fromPage && fromPage >= 1) i = fromPage;
  1315. for (;running; ) {
  1316. const figures = yield SearchRequests.getSearchFigures(i, searchOptions, semaphore);
  1317. let currFigureId;
  1318. if (0 !== figures.length) currFigureId = figures[0].id;
  1319. if (undefined === currFigureId) running = false; else if (IdArray.containsId(figures, toId)) {
  1320. allFigures.push(IdArray.getTillId(figures, toId));
  1321. running = false;
  1322. } else {
  1323. allFigures.push(figures);
  1324. i++;
  1325. }
  1326. }
  1327. return allFigures;
  1328. }));
  1329. }
  1330. static getSearchFiguresSinceId(fromId, toPage, searchOptions, semaphore) {
  1331. return SearchRequests_awaiter(this, void 0, void 0, (function*() {
  1332. if (null == fromId || fromId <= 0) {
  1333. Logger.logError("No fromId given");
  1334. return [];
  1335. }
  1336. const direction = null == toPage || toPage <= 0 ? -1 : 1;
  1337. let lastFigureId, running = true, i = null == toPage || toPage <= 0 ? 1 : toPage;
  1338. if (null == toPage || toPage <= 0) for (;running; ) {
  1339. const figures = yield SearchRequests.getSearchFigures(i, searchOptions, semaphore);
  1340. let currFigureId = lastFigureId;
  1341. if (0 !== figures.length) currFigureId = figures[0].id;
  1342. if (currFigureId === lastFigureId) running = false; else if (IdArray.containsId(figures, fromId)) running = false; else i++;
  1343. }
  1344. let allFigures = [];
  1345. lastFigureId = void 0;
  1346. running = true;
  1347. for (;running; ) {
  1348. const figures = yield SearchRequests.getSearchFigures(i, searchOptions, semaphore);
  1349. let currFigureId = lastFigureId;
  1350. if (0 !== figures.length) currFigureId = figures[0].id;
  1351. if (currFigureId === lastFigureId) running = false; else {
  1352. if (IdArray.containsId(figures, fromId)) {
  1353. const figuresPush = IdArray.getSinceId(figures, fromId);
  1354. if (direction < 0) {
  1355. figuresPush.reverse();
  1356. running = false;
  1357. }
  1358. allFigures.push(figuresPush);
  1359. } else {
  1360. if (direction < 0) figures.reverse();
  1361. allFigures.push(figures);
  1362. }
  1363. i += direction;
  1364. }
  1365. }
  1366. if (direction < 0) allFigures.reverse();
  1367. return allFigures;
  1368. }));
  1369. }
  1370. static getSearchFiguresBetweenIds(fromId, toId, fromPage, toPage, searchOptions, semaphore, percentId) {
  1371. return SearchRequests_awaiter(this, void 0, void 0, (function*() {
  1372. if (null == fromId || fromId <= 0) {
  1373. Logger.logError("No fromId given");
  1374. return [];
  1375. }
  1376. if (null == toId || toId <= 0) {
  1377. Logger.logError("No toId given");
  1378. return [];
  1379. }
  1380. if (null == fromPage || fromPage <= 0 || null == toPage || toPage <= 1) {
  1381. Logger.logWarning("No fromPage or toPage given. Percentages can not be calculated.");
  1382. percentId = void 0;
  1383. }
  1384. let i = 1;
  1385. if (null != fromPage && fromPage >= 1) i = fromPage;
  1386. const allFigures = [];
  1387. let running = true, completedPages = 0;
  1388. for (;running; ) {
  1389. if (null != toPage && toPage >= 1 && i >= toPage) running = false;
  1390. const figures = yield SearchRequests.getSearchFigures(i, searchOptions, semaphore);
  1391. let currFigureId;
  1392. if (0 !== figures.length) currFigureId = figures[0].id;
  1393. if (undefined === currFigureId) running = false; else {
  1394. if (IdArray.containsId(figures, fromId)) allFigures.push(IdArray.getSinceId(figures, fromId));
  1395. if (IdArray.containsId(figures, toId)) {
  1396. allFigures.push(IdArray.getBetweenIds(figures, fromId, toId));
  1397. running = false;
  1398. } else {
  1399. allFigures.push(figures);
  1400. i++;
  1401. }
  1402. }
  1403. completedPages++;
  1404. if (null != toPage && toPage >= 1) PercentHelper.updatePercentValue(percentId, completedPages, toPage);
  1405. }
  1406. return allFigures;
  1407. }));
  1408. }
  1409. static getSearchFiguresTillPage(toPageNumber, searchOptions, semaphore, percentId) {
  1410. return SearchRequests_awaiter(this, void 0, void 0, (function*() {
  1411. if (null == toPageNumber || toPageNumber <= 0) {
  1412. Logger.logWarning("toPageNumber must be greater than 0. Using default 1 instead.");
  1413. toPageNumber = 1;
  1414. }
  1415. const allFigures = [];
  1416. let completedPages = 0;
  1417. for (let i = 1; i <= toPageNumber; i++) {
  1418. const figures = yield SearchRequests.getSearchFigures(i, searchOptions, semaphore);
  1419. if (0 !== figures.length) allFigures.push(figures);
  1420. completedPages++;
  1421. PercentHelper.updatePercentValue(percentId, completedPages, toPageNumber);
  1422. }
  1423. return allFigures;
  1424. }));
  1425. }
  1426. static getSearchFiguresSincePage(fromPageNumber, searchOptions, semaphore) {
  1427. return SearchRequests_awaiter(this, void 0, void 0, (function*() {
  1428. if (null == fromPageNumber || fromPageNumber <= 0) {
  1429. Logger.logWarning("fromPageNumber must be greater than 0. Using default 1 instead.");
  1430. fromPageNumber = 1;
  1431. }
  1432. const allFigures = [];
  1433. let running = true, i = fromPageNumber;
  1434. for (;running; ) {
  1435. const figures = yield SearchRequests.getSearchFigures(i, searchOptions, semaphore);
  1436. let currFigureId;
  1437. if (0 !== figures.length) currFigureId = figures[0].id;
  1438. if (undefined === currFigureId) running = false; else {
  1439. allFigures.push(figures);
  1440. i++;
  1441. }
  1442. }
  1443. return allFigures;
  1444. }));
  1445. }
  1446. static getSearchFiguresBetweenPages(fromPageNumber, toPageNumber, searchOptions, semaphore, percentId) {
  1447. return SearchRequests_awaiter(this, void 0, void 0, (function*() {
  1448. if (null == fromPageNumber || fromPageNumber <= 0) {
  1449. Logger.logWarning("fromPageNumber must be greater than 0. Using default 1 instead.");
  1450. fromPageNumber = 1;
  1451. }
  1452. if (null == toPageNumber || toPageNumber <= 0) {
  1453. Logger.logWarning("toPageNumber must be greater than 0. Using default 1 instead.");
  1454. toPageNumber = 1;
  1455. }
  1456. const allFigures = [], direction = fromPageNumber <= toPageNumber ? 1 : -1, totalPages = Math.abs(toPageNumber - fromPageNumber) + 1;
  1457. let completedPages = 0;
  1458. for (let i = fromPageNumber; i <= toPageNumber; i += direction) {
  1459. const figures = yield SearchRequests.getSearchFigures(i, searchOptions, semaphore);
  1460. if (0 !== figures.length) allFigures.push(figures);
  1461. completedPages++;
  1462. PercentHelper.updatePercentValue(percentId, completedPages, totalPages);
  1463. }
  1464. return allFigures;
  1465. }));
  1466. }
  1467. static getSearchFigures(pageNumber, searchOptions, semaphore) {
  1468. return SearchRequests_awaiter(this, void 0, void 0, (function*() {
  1469. if (null == pageNumber || pageNumber <= 0) {
  1470. Logger.logWarning("No pageNumber given. Using default value of 1.");
  1471. pageNumber = 1;
  1472. }
  1473. const galleryDoc = yield Page.getSearchPage(pageNumber, searchOptions, semaphore);
  1474. if (!galleryDoc || !(galleryDoc instanceof Document) || galleryDoc.getElementById("no-images")) {
  1475. Logger.logInfo(`No images found at search on page "${pageNumber}".`);
  1476. return [];
  1477. }
  1478. const figures = galleryDoc.getElementsByTagName("figure");
  1479. if (null == figures || 0 === figures.length) {
  1480. Logger.logInfo(`No figures found at search on page "${pageNumber}".`);
  1481. return [];
  1482. }
  1483. return Array.from(figures);
  1484. }));
  1485. }
  1486. }
  1487. var Browse_awaiter = function(thisArg, _arguments, P, generator) {
  1488. return new (P || (P = Promise))((function(resolve, reject) {
  1489. function fulfilled(value) {
  1490. try {
  1491. step(generator.next(value));
  1492. } catch (e) {
  1493. reject(e);
  1494. }
  1495. }
  1496. function rejected(value) {
  1497. try {
  1498. step(generator.throw(value));
  1499. } catch (e) {
  1500. reject(e);
  1501. }
  1502. }
  1503. function step(result) {
  1504. result.done ? resolve(result.value) : function adopt(value) {
  1505. return value instanceof P ? value : new P((function(resolve) {
  1506. resolve(value);
  1507. }));
  1508. }(result.value).then(fulfilled, rejected);
  1509. }
  1510. step((generator = generator.apply(thisArg, _arguments || [])).next());
  1511. }));
  1512. };
  1513. class Browse {
  1514. constructor(semaphore) {
  1515. this._semaphore = semaphore;
  1516. }
  1517. static get hardLink() {
  1518. return FuraffinityRequests.fullUrl + "/browse/";
  1519. }
  1520. get newBrowseOptions() {
  1521. return new BrowseOptions;
  1522. }
  1523. static get newBrowseOptions() {
  1524. return new BrowseOptions;
  1525. }
  1526. get BrowseOptions() {
  1527. return BrowseOptions;
  1528. }
  1529. static get BrowseOptions() {
  1530. return BrowseOptions;
  1531. }
  1532. getFiguresBetweenIds(fromId_1, toId_1, browseOptions_1, action_1) {
  1533. return Browse_awaiter(this, arguments, void 0, (function*(fromId, toId, browseOptions, action, delay = 100) {
  1534. fromId = convertToNumber(fromId);
  1535. toId = convertToNumber(toId);
  1536. if (null == fromId || fromId <= 0) return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getBrowseFiguresTillId, [ toId, void 0, browseOptions, this._semaphore ], action, delay); else if (null == toId || toId <= 0) return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getBrowseFiguresSinceId, [ fromId, void 0, browseOptions, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getBrowseFiguresBetweenIds, [ fromId, toId, void 0, void 0, browseOptions, this._semaphore ], action, delay, true);
  1537. }));
  1538. }
  1539. getFiguresBetweenIdsBetweenPages(fromId_1, toId_1, fromPageNumber_1, toPageNumber_1, browseOptions_1, action_1) {
  1540. return Browse_awaiter(this, arguments, void 0, (function*(fromId, toId, fromPageNumber, toPageNumber, browseOptions, action, delay = 100) {
  1541. fromId = convertToNumber(fromId);
  1542. toId = convertToNumber(toId);
  1543. fromPageNumber = convertToNumber(fromPageNumber);
  1544. toPageNumber = convertToNumber(toPageNumber);
  1545. if (null == fromId || fromId <= 0) return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getBrowseFiguresTillId, [ toId, fromPageNumber, browseOptions, this._semaphore ], action, delay); else if (null == toId || toId <= 0) return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getBrowseFiguresSinceId, [ fromId, toPageNumber, browseOptions, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getBrowseFiguresBetweenIds, [ fromId, toId, fromPageNumber, toPageNumber, browseOptions, this._semaphore ], action, delay, true);
  1546. }));
  1547. }
  1548. getFiguresBetweenPages(fromPageNumber_1, toPageNumber_1, browseOptions_1, action_1) {
  1549. return Browse_awaiter(this, arguments, void 0, (function*(fromPageNumber, toPageNumber, browseOptions, action, delay = 100) {
  1550. fromPageNumber = convertToNumber(fromPageNumber);
  1551. toPageNumber = convertToNumber(toPageNumber);
  1552. if (null == fromPageNumber || fromPageNumber <= 0) return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getBrowseFiguresTillPage, [ toPageNumber, browseOptions, this._semaphore ], action, delay, true); else if (null == toPageNumber || toPageNumber <= 0) return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getBrowseFiguresSincePage, [ fromPageNumber, browseOptions, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getBrowseFiguresBetweenPages, [ fromPageNumber, toPageNumber, browseOptions, this._semaphore ], action, delay, true);
  1553. }));
  1554. }
  1555. getFigures(pageNumber_1, browseOptions_1, action_1) {
  1556. return Browse_awaiter(this, arguments, void 0, (function*(pageNumber, browseOptions, action, delay = 100) {
  1557. pageNumber = convertToNumber(pageNumber);
  1558. return yield WaitAndCallAction.callFunctionAsync(SearchRequests.getBrowseFigures, [ pageNumber, browseOptions, this._semaphore ], action, delay);
  1559. }));
  1560. }
  1561. getPage(pageNumber_1, browseOptions_1, action_1) {
  1562. return Browse_awaiter(this, arguments, void 0, (function*(pageNumber, browseOptions, action, delay = 100) {
  1563. pageNumber = convertToNumber(pageNumber);
  1564. return yield WaitAndCallAction.callFunctionAsync(Page.getBrowsePage, [ pageNumber, browseOptions, this._semaphore ], action, delay);
  1565. }));
  1566. }
  1567. }
  1568. class BrowseOptions {
  1569. constructor() {
  1570. this.ratingGeneral = true;
  1571. this.ratingMature = true;
  1572. this.ratingAdult = true;
  1573. this.category = BrowseOptions.category.all;
  1574. this.type = BrowseOptions.type.all;
  1575. this.species = BrowseOptions.species.any;
  1576. this.gender = BrowseOptions.gender.any;
  1577. this.results = BrowseOptions.results[72];
  1578. }
  1579. static get category() {
  1580. return {
  1581. all: 1,
  1582. "artwork-digital": 2,
  1583. "artwork-traditional": 3,
  1584. "cel-shading": 4,
  1585. crafting: 5,
  1586. designs: 6,
  1587. flash: 7,
  1588. fursuiting: 8,
  1589. icons: 9,
  1590. mosaics: 10,
  1591. photography: 11,
  1592. "food-recipes": 32,
  1593. sculpting: 12,
  1594. story: 13,
  1595. poetry: 14,
  1596. prose: 15,
  1597. music: 16,
  1598. podcasts: 17,
  1599. skins: 18,
  1600. handhelds: 19,
  1601. resources: 20,
  1602. adoptables: 21,
  1603. auctions: 22,
  1604. contests: 23,
  1605. "current-events": 24,
  1606. desktops: 25,
  1607. stockart: 26,
  1608. screenshots: 27,
  1609. scraps: 28,
  1610. wallpaper: 29,
  1611. "ych-sale": 30,
  1612. other: 31
  1613. };
  1614. }
  1615. static get type() {
  1616. return {
  1617. all: 1,
  1618. abstract: 2,
  1619. "animal-related-non-anthro": 3,
  1620. anime: 4,
  1621. comics: 5,
  1622. doodle: 6,
  1623. fanart: 7,
  1624. fantasy: 8,
  1625. human: 9,
  1626. portraits: 10,
  1627. scenery: 11,
  1628. "still-life": 12,
  1629. tutorials: 13,
  1630. miscellaneous: 14,
  1631. "baby-fur": 101,
  1632. bondage: 102,
  1633. digimon: 103,
  1634. "fat-furs": 104,
  1635. "fetish-other": 105,
  1636. fursuit: 106,
  1637. gore: 119,
  1638. hyper: 107,
  1639. hypnosis: 121,
  1640. inflation: 108,
  1641. micro: 109,
  1642. muscle: 110,
  1643. "my-little-pony": 111,
  1644. paw: 112,
  1645. pokemon: 113,
  1646. pregnancy: 114,
  1647. sonic: 115,
  1648. transformation: 116,
  1649. "tf-tg": 120,
  1650. vore: 117,
  1651. "water-sports": 118,
  1652. "general-furry-art": 100,
  1653. techno: 201,
  1654. trance: 202,
  1655. house: 203,
  1656. "90s": 204,
  1657. "80s": 205,
  1658. "70s": 206,
  1659. "60s": 207,
  1660. "pre-60s": 208,
  1661. classical: 209,
  1662. "game-music": 210,
  1663. rock: 211,
  1664. pop: 212,
  1665. rap: 213,
  1666. industrial: 214,
  1667. "other-music": 200
  1668. };
  1669. }
  1670. static get species() {
  1671. return {
  1672. any: 1,
  1673. "airborne-vehicle": 10001,
  1674. alien: 5001,
  1675. amphibian: 1e3,
  1676. aquatic: 2e3,
  1677. avian: 3e3,
  1678. bear: 6002,
  1679. bovine: 6007,
  1680. canine: 6017,
  1681. cervine: 6018,
  1682. dog: 6010,
  1683. dragon: 4e3,
  1684. equine: 10009,
  1685. exotic: 5e3,
  1686. feline: 6030,
  1687. fox: 6075,
  1688. slime: 10007,
  1689. "hybrid-species": 10002,
  1690. inanimate: 10006,
  1691. insect: 8003,
  1692. "land-vehicle": 10003,
  1693. mammal: 6e3,
  1694. marsupial: 6042,
  1695. mustelid: 6051,
  1696. plant: 10008,
  1697. primate: 6058,
  1698. reptilian: 7e3,
  1699. robot: 10004,
  1700. rodent: 6067,
  1701. "sea-vehicle": 10005,
  1702. taur: 5025,
  1703. vulpine: 6015,
  1704. "original-species": 11014,
  1705. character: 11015,
  1706. aeromorph: 11001,
  1707. "angel-dragon": 11002,
  1708. avali: 11012,
  1709. chakat: 5003,
  1710. citra: 5005,
  1711. crux: 5006,
  1712. dracat: 5009,
  1713. dutch: 11003,
  1714. felkin: 11011,
  1715. ferrin: 11004,
  1716. jogauni: 11005,
  1717. langurhali: 5014,
  1718. nevrean: 11006,
  1719. protogen: 11007,
  1720. rexouium: 11016,
  1721. sergal: 5021,
  1722. synx: 11010,
  1723. wickerbeast: 11013,
  1724. yinglet: 11009,
  1725. zorgoia: 11008,
  1726. angel: 12001,
  1727. centaur: 12002,
  1728. cerberus: 12003,
  1729. "shape-shifter": 12038,
  1730. chimera: 12004,
  1731. chupacabra: 12005,
  1732. cockatrice: 12006,
  1733. daemon: 5007,
  1734. demon: 12007,
  1735. "displacer-beast": 12008,
  1736. dragonborn: 12009,
  1737. drow: 12010,
  1738. dwarf: 12011,
  1739. "eastern-dragon": 4001,
  1740. elf: 5011,
  1741. gargoyle: 5012,
  1742. goblin: 12012,
  1743. golem: 12013,
  1744. gryphon: 3007,
  1745. harpy: 12014,
  1746. hellhound: 12015,
  1747. hippogriff: 12016,
  1748. hobbit: 12017,
  1749. hydra: 4002,
  1750. imp: 12018,
  1751. incubus: 12019,
  1752. jackalope: 12020,
  1753. kirin: 12021,
  1754. kitsune: 12022,
  1755. kobold: 12023,
  1756. lamia: 12024,
  1757. manticore: 12025,
  1758. minotaur: 12026,
  1759. naga: 5016,
  1760. nephilim: 12027,
  1761. orc: 5018,
  1762. pegasus: 12028,
  1763. peryton: 12029,
  1764. phoenix: 3010,
  1765. sasquatch: 12030,
  1766. satyr: 5020,
  1767. sphinx: 12031,
  1768. succubus: 12032,
  1769. tiefling: 12033,
  1770. troll: 12034,
  1771. unicorn: 5023,
  1772. "water-dragon": 12035,
  1773. werewolf: 12036,
  1774. "western-dragon": 4004,
  1775. wyvern: 4005,
  1776. yokai: 12037,
  1777. alicorn: 13001,
  1778. argonian: 5002,
  1779. asari: 13002,
  1780. bangaa: 13003,
  1781. "bubble-dragon": 13004,
  1782. burmecian: 13005,
  1783. charr: 13006,
  1784. chiss: 13007,
  1785. chocobo: 5004,
  1786. deathclaw: 13008,
  1787. digimon: 5008,
  1788. draenei: 5010,
  1789. drell: 13009,
  1790. elcor: 13010,
  1791. ewok: 13011,
  1792. hanar: 13012,
  1793. hrothgar: 13013,
  1794. iksar: 5013,
  1795. kaiju: 5015,
  1796. kelpie: 13041,
  1797. kemonomimi: 13014,
  1798. khajiit: 13015,
  1799. koopa: 13016,
  1800. krogan: 13017,
  1801. lombax: 13018,
  1802. mimiga: 13019,
  1803. mobian: 13020,
  1804. moogle: 5017,
  1805. neopet: 13021,
  1806. "nu-mou": 13022,
  1807. pokemon: 5019,
  1808. "pony-mlp": 13023,
  1809. protoss: 13024,
  1810. quarian: 13025,
  1811. ronso: 13026,
  1812. salarian: 13027,
  1813. sangheili: 13028,
  1814. tauntaun: 13029,
  1815. tauren: 13030,
  1816. trandoshan: 13031,
  1817. transformer: 13032,
  1818. turian: 13033,
  1819. twilek: 13034,
  1820. viera: 13035,
  1821. wookiee: 13036,
  1822. xenomorph: 5024,
  1823. yautja: 13037,
  1824. yordle: 13038,
  1825. yoshi: 13039,
  1826. zerg: 13040,
  1827. aardvark: 14001,
  1828. aardwolf: 14002,
  1829. "african-wild-dog": 14003,
  1830. akita: 14004,
  1831. albatross: 14005,
  1832. crocodile: 7001,
  1833. alpaca: 14006,
  1834. anaconda: 14007,
  1835. anteater: 14008,
  1836. antelope: 6004,
  1837. arachnid: 8e3,
  1838. "arctic-fox": 14009,
  1839. armadillo: 14010,
  1840. axolotl: 14011,
  1841. baboon: 14012,
  1842. badger: 6045,
  1843. bat: 6001,
  1844. beaver: 6064,
  1845. bee: 14013,
  1846. binturong: 14014,
  1847. bison: 14015,
  1848. "blue-jay": 14016,
  1849. "border-collie": 14017,
  1850. "brown-bear": 14018,
  1851. buffalo: 14019,
  1852. "buffalo-bison": 14020,
  1853. "bull-terrier": 14021,
  1854. butterfly: 14022,
  1855. caiman: 14023,
  1856. camel: 6074,
  1857. capybara: 14024,
  1858. caribou: 14025,
  1859. caterpillar: 14026,
  1860. cephalopod: 2001,
  1861. chameleon: 14027,
  1862. cheetah: 6021,
  1863. chicken: 14028,
  1864. chimpanzee: 14029,
  1865. chinchilla: 14030,
  1866. chipmunk: 14031,
  1867. civet: 14032,
  1868. "clouded-leopard": 14033,
  1869. coatimundi: 14034,
  1870. cockatiel: 14035,
  1871. corgi: 14036,
  1872. corvid: 3001,
  1873. cougar: 6022,
  1874. cow: 6003,
  1875. coyote: 6008,
  1876. crab: 14037,
  1877. crane: 14038,
  1878. crayfish: 14039,
  1879. crow: 3002,
  1880. crustacean: 14040,
  1881. dalmatian: 14041,
  1882. deer: 14042,
  1883. dhole: 14043,
  1884. dingo: 6011,
  1885. dinosaur: 8001,
  1886. doberman: 6009,
  1887. dolphin: 2002,
  1888. donkey: 6019,
  1889. duck: 3003,
  1890. eagle: 3004,
  1891. eel: 14044,
  1892. elephant: 14045,
  1893. falcon: 3005,
  1894. fennec: 6072,
  1895. ferret: 6046,
  1896. finch: 14046,
  1897. fish: 2005,
  1898. flamingo: 14047,
  1899. fossa: 14048,
  1900. frog: 1001,
  1901. gazelle: 6005,
  1902. gecko: 7003,
  1903. genet: 14049,
  1904. "german-shepherd": 6012,
  1905. gibbon: 14050,
  1906. giraffe: 6031,
  1907. goat: 6006,
  1908. goose: 3006,
  1909. gorilla: 6054,
  1910. "gray-fox": 14051,
  1911. "great-dane": 14052,
  1912. "grizzly-bear": 14053,
  1913. "guinea-pig": 14054,
  1914. hamster: 14055,
  1915. hawk: 3008,
  1916. hedgehog: 6032,
  1917. heron: 14056,
  1918. hippopotamus: 6033,
  1919. honeybee: 14057,
  1920. horse: 6034,
  1921. housecat: 6020,
  1922. human: 6055,
  1923. humanoid: 14058,
  1924. hummingbird: 14059,
  1925. husky: 6014,
  1926. hyena: 6035,
  1927. iguana: 7004,
  1928. impala: 14060,
  1929. jackal: 6013,
  1930. jaguar: 6023,
  1931. kangaroo: 6038,
  1932. "kangaroo-mouse": 14061,
  1933. "kangaroo-rat": 14062,
  1934. kinkajou: 14063,
  1935. "kit-fox": 14064,
  1936. koala: 6039,
  1937. "kodiak-bear": 14065,
  1938. "komodo-dragon": 14066,
  1939. labrador: 14067,
  1940. lemur: 6056,
  1941. leopard: 6024,
  1942. liger: 14068,
  1943. linsang: 14069,
  1944. lion: 6025,
  1945. lizard: 7005,
  1946. llama: 6036,
  1947. lobster: 14070,
  1948. "longhair-cat": 14071,
  1949. lynx: 6026,
  1950. magpie: 14072,
  1951. "maine-coon": 14073,
  1952. malamute: 14074,
  1953. "mammal-feline": 14075,
  1954. "mammal-herd": 14076,
  1955. "mammal-marsupial": 14077,
  1956. "mammal-mustelid": 14078,
  1957. "mammal-other predator": 14079,
  1958. "mammal-prey": 14080,
  1959. "mammal-primate": 14081,
  1960. "mammal-rodent": 14082,
  1961. manatee: 14083,
  1962. mandrill: 14084,
  1963. "maned-wolf": 14085,
  1964. mantid: 8004,
  1965. marmoset: 14086,
  1966. marten: 14087,
  1967. meerkat: 6043,
  1968. mink: 6048,
  1969. mole: 14088,
  1970. mongoose: 6044,
  1971. "monitor-lizard": 14089,
  1972. monkey: 6057,
  1973. moose: 14090,
  1974. moth: 14091,
  1975. mouse: 6065,
  1976. "musk-deer": 14092,
  1977. "musk-ox": 14093,
  1978. newt: 1002,
  1979. ocelot: 6027,
  1980. octopus: 14094,
  1981. okapi: 14095,
  1982. olingo: 14096,
  1983. opossum: 6037,
  1984. orangutan: 14097,
  1985. orca: 14098,
  1986. oryx: 14099,
  1987. ostrich: 14100,
  1988. otter: 6047,
  1989. owl: 3009,
  1990. panda: 6052,
  1991. pangolin: 14101,
  1992. panther: 6028,
  1993. parakeet: 14102,
  1994. parrot: 14103,
  1995. peacock: 14104,
  1996. penguin: 14105,
  1997. "persian-cat": 14106,
  1998. pig: 6053,
  1999. pigeon: 14107,
  2000. pika: 14108,
  2001. "pine-marten": 14109,
  2002. platypus: 14110,
  2003. "polar-bear": 14111,
  2004. pony: 6073,
  2005. poodle: 14112,
  2006. porcupine: 14113,
  2007. porpoise: 2004,
  2008. procyonid: 14114,
  2009. puffin: 14115,
  2010. quoll: 6040,
  2011. rabbit: 6059,
  2012. raccoon: 6060,
  2013. rat: 6061,
  2014. ray: 14116,
  2015. "red-fox": 14117,
  2016. "red-panda": 6062,
  2017. reindeer: 14118,
  2018. reptillian: 14119,
  2019. rhinoceros: 6063,
  2020. robin: 14120,
  2021. rottweiler: 14121,
  2022. sabercats: 14122,
  2023. sabertooth: 14123,
  2024. salamander: 1003,
  2025. scorpion: 8005,
  2026. seagull: 14124,
  2027. seahorse: 14125,
  2028. seal: 6068,
  2029. "secretary-bird": 14126,
  2030. "serpent-dragon": 4003,
  2031. serval: 14127,
  2032. shark: 2006,
  2033. sheep: 14128,
  2034. "shiba-inu": 14129,
  2035. "shorthair-cat": 14130,
  2036. shrew: 14131,
  2037. siamese: 14132,
  2038. sifaka: 14133,
  2039. "silver-fox": 14134,
  2040. skunk: 6069,
  2041. sloth: 14135,
  2042. snail: 14136,
  2043. "snake-serpent": 7006,
  2044. "snow-leopard": 14137,
  2045. sparrow: 14138,
  2046. squid: 14139,
  2047. squirrel: 6070,
  2048. stoat: 14140,
  2049. stork: 14141,
  2050. "sugar-glider": 14142,
  2051. "sun-bear": 14143,
  2052. swan: 3011,
  2053. "swift-fox": 14144,
  2054. tanuki: 5022,
  2055. tapir: 14145,
  2056. "tasmanian-devil": 14146,
  2057. thylacine: 14147,
  2058. tiger: 6029,
  2059. toucan: 14148,
  2060. turtle: 7007,
  2061. vulture: 14149,
  2062. wallaby: 6041,
  2063. walrus: 14150,
  2064. wasp: 14151,
  2065. weasel: 6049,
  2066. whale: 2003,
  2067. wolf: 6016,
  2068. wolverine: 6050,
  2069. zebra: 6071
  2070. };
  2071. }
  2072. static get gender() {
  2073. return {
  2074. any: 0,
  2075. male: 2,
  2076. female: 3,
  2077. herm: 4,
  2078. intersex: 11,
  2079. "trans-male": 8,
  2080. "trans-female": 9,
  2081. "non-binary": 10,
  2082. multiple: 6,
  2083. other: 7,
  2084. "not-specified": 7
  2085. };
  2086. }
  2087. static get results() {
  2088. return {
  2089. 24: 24,
  2090. 48: 48,
  2091. 72: 72,
  2092. 96: 96,
  2093. 128: 128
  2094. };
  2095. }
  2096. }
  2097. function checkTags(element) {
  2098. var _a;
  2099. if (!("1" === document.body.getAttribute("data-user-logged-in"))) {
  2100. setBlockedState(element, false);
  2101. return;
  2102. }
  2103. const tagsHideMissingTags = "1" === document.body.getAttribute("data-tag-blocklist-hide-tagless"), tags = null === (_a = element.getAttribute("data-tags")) || void 0 === _a ? void 0 : _a.trim().split(/\s+/);
  2104. let blockReason = "";
  2105. if (null != tags && tags.length > 0 && "" !== tags[0]) {
  2106. const blockedTags = function getBannedTags(tags) {
  2107. var _a;
  2108. const tagsBlocklist = null !== (_a = document.body.getAttribute("data-tag-blocklist")) && void 0 !== _a ? _a : [];
  2109. let bTags = [];
  2110. if (null == tags || 0 === tags.length) return [];
  2111. for (const tag of tags) for (const blockedTag of tagsBlocklist) if (tag === blockedTag) bTags.push(blockedTag);
  2112. return [ ...new Set(bTags) ];
  2113. }(tags);
  2114. if (blockedTags.length <= 0) setBlockedState(element, false); else {
  2115. setBlockedState(element, true);
  2116. blockReason = "Blocked tags:\n";
  2117. for (const tag of blockedTags) blockReason += "• " + tag + "\n";
  2118. }
  2119. } else {
  2120. setBlockedState(element, tagsHideMissingTags);
  2121. if (tagsHideMissingTags) blockReason = "Content is missing tags.";
  2122. }
  2123. if ("" !== blockReason && "submissionImg" !== element.id) element.setAttribute("title", blockReason);
  2124. }
  2125. function setBlockedState(element, isBlocked) {
  2126. element.classList[isBlocked ? "add" : "remove"]("blocked-content");
  2127. }
  2128. function checkTagsAll(doc) {
  2129. if (null == doc) return;
  2130. doc.querySelectorAll("img[data-tags]").forEach((element => checkTags(element)));
  2131. }
  2132. var Page_awaiter = function(thisArg, _arguments, P, generator) {
  2133. return new (P || (P = Promise))((function(resolve, reject) {
  2134. function fulfilled(value) {
  2135. try {
  2136. step(generator.next(value));
  2137. } catch (e) {
  2138. reject(e);
  2139. }
  2140. }
  2141. function rejected(value) {
  2142. try {
  2143. step(generator.throw(value));
  2144. } catch (e) {
  2145. reject(e);
  2146. }
  2147. }
  2148. function step(result) {
  2149. result.done ? resolve(result.value) : function adopt(value) {
  2150. return value instanceof P ? value : new P((function(resolve) {
  2151. resolve(value);
  2152. }));
  2153. }(result.value).then(fulfilled, rejected);
  2154. }
  2155. step((generator = generator.apply(thisArg, _arguments || [])).next());
  2156. }));
  2157. };
  2158. class Page {
  2159. static getGalleryPage(username, folderId, pageNumber, galleryType, semaphore) {
  2160. return Page_awaiter(this, void 0, void 0, (function*() {
  2161. if (galleryType === GalleryType.FAVORITES) {
  2162. const dataFavId = null != folderId ? folderId : pageNumber;
  2163. return yield Page.getFavoritesPage(username, dataFavId, pageNumber, semaphore);
  2164. } else if (galleryType === GalleryType.JOURNALS) return yield Page.getJournalsPage(username, pageNumber, semaphore); else if (galleryType === GalleryType.BROWSE) return yield Page.getBrowsePage(pageNumber, void 0, semaphore); else if (galleryType === GalleryType.SEARCH) return yield Page.getSearchPage(pageNumber, void 0, semaphore);
  2165. if (null == username) {
  2166. Logger.logError("No username given");
  2167. return;
  2168. }
  2169. if (null == pageNumber || pageNumber <= 0) {
  2170. Logger.logWarning("No page number given. Using default value of 1.");
  2171. pageNumber = 1;
  2172. }
  2173. let url;
  2174. if (!username.endsWith("/")) username += "/";
  2175. switch (galleryType) {
  2176. case GalleryType.GALLERY:
  2177. url = Gallery.hardLink + username;
  2178. break;
  2179.  
  2180. case GalleryType.SCRAPS:
  2181. url = Scraps.hardLink + username;
  2182. }
  2183. if (null != folderId && -1 !== folderId) url += `folder/${folderId}/`;
  2184. const page = yield FuraffinityRequests.getHTML(url + pageNumber, semaphore);
  2185. checkTagsAll(page);
  2186. return page;
  2187. }));
  2188. }
  2189. static getFavoritesPage(username, dataFavId, direction, semaphore) {
  2190. return Page_awaiter(this, void 0, void 0, (function*() {
  2191. if (null == username) {
  2192. Logger.logError("No username given");
  2193. return;
  2194. }
  2195. if (null == direction) {
  2196. Logger.logWarning("No direction given. Using default 1 instead.");
  2197. direction = 1;
  2198. }
  2199. if (!username.endsWith("/")) username += "/";
  2200. let url = Favorites.hardLink;
  2201. if (null != dataFavId && dataFavId >= 0) url += `${username}${dataFavId}/`; else {
  2202. Logger.logWarning("No last data fav id given. Using default 1 instead.");
  2203. url += username;
  2204. }
  2205. if (direction >= 0) url += "next/"; else url += "prev/";
  2206. const page = yield FuraffinityRequests.getHTML(url, semaphore);
  2207. checkTagsAll(page);
  2208. return page;
  2209. }));
  2210. }
  2211. static getJournalsPage(username, pageNumber, semaphore) {
  2212. return Page_awaiter(this, void 0, void 0, (function*() {
  2213. if (null == username) {
  2214. Logger.logError("No username given");
  2215. return;
  2216. }
  2217. if (null == pageNumber || pageNumber <= 0) {
  2218. Logger.logWarning("Page number must be greater than 0. Using default 1 instead.");
  2219. pageNumber = 1;
  2220. }
  2221. if (!username.endsWith("/")) username += "/";
  2222. const url = Journals.hardLink + username;
  2223. return yield FuraffinityRequests.getHTML(url + pageNumber, semaphore);
  2224. }));
  2225. }
  2226. static getBrowsePage(pageNumber, browseOptions, semaphore) {
  2227. return Page_awaiter(this, void 0, void 0, (function*() {
  2228. if (null == pageNumber || pageNumber <= 0) {
  2229. Logger.logWarning("Page number must be greater than 0. Using default 1 instead.");
  2230. pageNumber = 1;
  2231. }
  2232. if (null == browseOptions) browseOptions = new BrowseOptions;
  2233. const payload = {
  2234. cat: browseOptions.category,
  2235. atype: browseOptions.type,
  2236. species: browseOptions.species,
  2237. gender: browseOptions.gender,
  2238. perpage: browseOptions.results,
  2239. page: pageNumber,
  2240. rating_general: browseOptions.ratingGeneral ? "on" : "off",
  2241. rating_mature: browseOptions.ratingMature ? "on" : "off",
  2242. rating_adult: browseOptions.ratingAdult ? "on" : "off"
  2243. };
  2244. for (const key in payload) if (null == payload[key] || 0 === payload[key] || "off" === payload[key]) delete payload[key];
  2245. const payloadArray = Object.entries(payload).map((([key, value]) => {
  2246. var _a;
  2247. return [ key, null !== (_a = null == value ? void 0 : value.toString()) && void 0 !== _a ? _a : "" ];
  2248. })), url = Browse.hardLink, page = yield FuraffinityRequests.postHTML(url, payloadArray, semaphore);
  2249. checkTagsAll(page);
  2250. return page;
  2251. }));
  2252. }
  2253. static getSearchPage(pageNumber, searchOptions, semaphore) {
  2254. return Page_awaiter(this, void 0, void 0, (function*() {
  2255. if (null == pageNumber || pageNumber <= 0) {
  2256. Logger.logWarning("Page number must be greater than 0. Using default 1 instead.");
  2257. pageNumber = 1;
  2258. }
  2259. if (null == searchOptions) searchOptions = new SearchOptions;
  2260. const payload = {
  2261. page: pageNumber,
  2262. q: searchOptions.input,
  2263. "order-by": searchOptions.orderBy,
  2264. "order-direction": searchOptions.orderDirection,
  2265. range: searchOptions.range,
  2266. range_from: void 0,
  2267. range_to: void 0,
  2268. "rating-general": searchOptions.ratingGeneral ? 1 : 0,
  2269. "rating-mature": searchOptions.ratingMature ? 1 : 0,
  2270. "rating-adult": searchOptions.ratingAdult ? 1 : 0,
  2271. "type-art": searchOptions.typeArt ? 1 : 0,
  2272. "type-music": searchOptions.typeMusic ? 1 : 0,
  2273. "type-flash": searchOptions.typeFlash ? 1 : 0,
  2274. "type-story": searchOptions.typeStory ? 1 : 0,
  2275. "type-photos": searchOptions.typePhotos ? 1 : 0,
  2276. "type-poetry": searchOptions.typePoetry ? 1 : 0,
  2277. mode: searchOptions.matching
  2278. };
  2279. if (searchOptions.rangeFrom instanceof Date && null != searchOptions.rangeFrom) {
  2280. const formattedDate = `${searchOptions.rangeFrom.getFullYear()}-${(searchOptions.rangeFrom.getMonth() + 1).toString().padStart(2, "0")}-${searchOptions.rangeFrom.getDate().toString().padStart(2, "0")}`;
  2281. payload.range_from = formattedDate;
  2282. } else if ("string" == typeof searchOptions.rangeFrom && searchOptions.rangeFrom) payload.range_from = searchOptions.rangeFrom;
  2283. if (searchOptions.rangeTo instanceof Date && null != searchOptions.rangeTo) {
  2284. const formattedDate = `${searchOptions.rangeTo.getFullYear()}-${(searchOptions.rangeTo.getMonth() + 1).toString().padStart(2, "0")}-${searchOptions.rangeTo.getDate().toString().padStart(2, "0")}`;
  2285. payload.range_to = formattedDate;
  2286. } else if ("string" == typeof searchOptions.rangeTo && searchOptions.rangeTo) payload.range_to = searchOptions.rangeTo;
  2287. for (const key in payload) if (null == payload[key] || 0 === payload[key] || "off" === payload[key]) delete payload[key];
  2288. const payloadArray = Object.entries(payload).map((([key, value]) => {
  2289. var _a;
  2290. return [ key, null !== (_a = null == value ? void 0 : value.toString()) && void 0 !== _a ? _a : "" ];
  2291. })), url = Search.hardLink, page = yield FuraffinityRequests.postHTML(url, payloadArray, semaphore);
  2292. checkTagsAll(page);
  2293. return page;
  2294. }));
  2295. }
  2296. }
  2297. var Gallery_awaiter = function(thisArg, _arguments, P, generator) {
  2298. return new (P || (P = Promise))((function(resolve, reject) {
  2299. function fulfilled(value) {
  2300. try {
  2301. step(generator.next(value));
  2302. } catch (e) {
  2303. reject(e);
  2304. }
  2305. }
  2306. function rejected(value) {
  2307. try {
  2308. step(generator.throw(value));
  2309. } catch (e) {
  2310. reject(e);
  2311. }
  2312. }
  2313. function step(result) {
  2314. result.done ? resolve(result.value) : function adopt(value) {
  2315. return value instanceof P ? value : new P((function(resolve) {
  2316. resolve(value);
  2317. }));
  2318. }(result.value).then(fulfilled, rejected);
  2319. }
  2320. step((generator = generator.apply(thisArg, _arguments || [])).next());
  2321. }));
  2322. };
  2323. class Gallery {
  2324. constructor(semaphore) {
  2325. this._semaphore = semaphore;
  2326. }
  2327. static get hardLink() {
  2328. return FuraffinityRequests.fullUrl + "/gallery/";
  2329. }
  2330. getSubmissionPageNo(username_1, submissionId_1, folderId_1, fromPageNumber_1, toPageNumber_1, action_1) {
  2331. return Gallery_awaiter(this, arguments, void 0, (function*(username, submissionId, folderId, fromPageNumber, toPageNumber, action, delay = 100) {
  2332. submissionId = convertToNumber(submissionId);
  2333. folderId = convertToNumber(folderId);
  2334. fromPageNumber = convertToNumber(fromPageNumber);
  2335. toPageNumber = convertToNumber(toPageNumber);
  2336. return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getSubmissionPageNo, [ username, submissionId, folderId, fromPageNumber, toPageNumber, GalleryType.GALLERY, this._semaphore ], action, delay);
  2337. }));
  2338. }
  2339. getFiguresBetweenIds(username_1, fromId_1, toId_1, action_1) {
  2340. return Gallery_awaiter(this, arguments, void 0, (function*(username, fromId, toId, action, delay = 100) {
  2341. fromId = convertToNumber(fromId);
  2342. toId = convertToNumber(toId);
  2343. if (null == fromId || fromId <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresTillId, [ username, void 0, toId, void 0, GalleryType.GALLERY, this._semaphore ], action, delay); else if (null == toId || toId <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresSinceId, [ username, void 0, fromId, void 0, GalleryType.GALLERY, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresBetweenIds, [ username, void 0, fromId, toId, void 0, void 0, GalleryType.GALLERY, this._semaphore ], action, delay, true);
  2344. }));
  2345. }
  2346. getFiguresInFolderBetweenIds(username_1, folderId_1, fromId_1, toId_1, action_1) {
  2347. return Gallery_awaiter(this, arguments, void 0, (function*(username, folderId, fromId, toId, action, delay = 100) {
  2348. folderId = convertToNumber(folderId);
  2349. fromId = convertToNumber(fromId);
  2350. toId = convertToNumber(toId);
  2351. if (null == fromId || fromId <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresTillId, [ username, folderId, toId, void 0, GalleryType.GALLERY, this._semaphore ], action, delay); else if (null == toId || toId <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresSinceId, [ username, folderId, fromId, void 0, GalleryType.GALLERY, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresBetweenIds, [ username, folderId, fromId, toId, void 0, void 0, GalleryType.GALLERY, this._semaphore ], action, delay, true);
  2352. }));
  2353. }
  2354. getFiguresBetweenIdsBetweenPages(username_1, fromId_1, toId_1, fromPageNumber_1, toPageNumber_1, action_1) {
  2355. return Gallery_awaiter(this, arguments, void 0, (function*(username, fromId, toId, fromPageNumber, toPageNumber, action, delay = 100) {
  2356. fromId = convertToNumber(fromId);
  2357. toId = convertToNumber(toId);
  2358. fromPageNumber = convertToNumber(fromPageNumber);
  2359. toPageNumber = convertToNumber(toPageNumber);
  2360. if (null == fromId || fromId <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresTillId, [ username, void 0, toId, fromPageNumber, GalleryType.GALLERY, this._semaphore ], action, delay); else if (null == toId || toId <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresSinceId, [ username, void 0, fromId, toPageNumber, GalleryType.GALLERY, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresBetweenIds, [ username, void 0, fromId, toId, fromPageNumber, toPageNumber, GalleryType.GALLERY, this._semaphore ], action, delay, true);
  2361. }));
  2362. }
  2363. getFiguresInFolderBetweenIdsBetweenPages(username_1, folderId_1, fromId_1, toId_1, fromPageNumber_1, toPageNumber_1, action_1) {
  2364. return Gallery_awaiter(this, arguments, void 0, (function*(username, folderId, fromId, toId, fromPageNumber, toPageNumber, action, delay = 100) {
  2365. folderId = convertToNumber(folderId);
  2366. fromId = convertToNumber(fromId);
  2367. toId = convertToNumber(toId);
  2368. fromPageNumber = convertToNumber(fromPageNumber);
  2369. toPageNumber = convertToNumber(toPageNumber);
  2370. if (null == fromId || fromId <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresTillId, [ username, folderId, toId, fromPageNumber, GalleryType.GALLERY, this._semaphore ], action, delay); else if (null == toId || toId <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresSinceId, [ username, folderId, fromId, toPageNumber, GalleryType.GALLERY, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresBetweenIds, [ username, folderId, fromId, toId, fromPageNumber, toPageNumber, GalleryType.GALLERY, this._semaphore ], action, delay, true);
  2371. }));
  2372. }
  2373. getFiguresBetweenPages(username_1, fromPageNumber_1, toPageNumber_1, action_1) {
  2374. return Gallery_awaiter(this, arguments, void 0, (function*(username, fromPageNumber, toPageNumber, action, delay = 100) {
  2375. fromPageNumber = convertToNumber(fromPageNumber);
  2376. toPageNumber = convertToNumber(toPageNumber);
  2377. if (null == fromPageNumber || fromPageNumber <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresTillPage, [ username, void 0, toPageNumber, GalleryType.GALLERY, this._semaphore ], action, delay, true); else if (null == toPageNumber || toPageNumber <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresSincePage, [ username, void 0, fromPageNumber, GalleryType.GALLERY, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresBetweenPages, [ username, void 0, fromPageNumber, toPageNumber, GalleryType.GALLERY, this._semaphore ], action, delay, true);
  2378. }));
  2379. }
  2380. getFiguresInFolderBetweenPages(username_1, folderId_1, fromPageNumber_1, toPageNumber_1, action_1) {
  2381. return Gallery_awaiter(this, arguments, void 0, (function*(username, folderId, fromPageNumber, toPageNumber, action, delay = 100) {
  2382. folderId = convertToNumber(folderId);
  2383. fromPageNumber = convertToNumber(fromPageNumber);
  2384. toPageNumber = convertToNumber(toPageNumber);
  2385. if (null == fromPageNumber || fromPageNumber <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresTillPage, [ username, folderId, toPageNumber, GalleryType.GALLERY, this._semaphore ], action, delay, true); else if (null == toPageNumber || toPageNumber <= 0) return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresSincePage, [ username, folderId, fromPageNumber, GalleryType.GALLERY, this._semaphore ], action, delay); else return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFiguresBetweenPages, [ username, folderId, fromPageNumber, toPageNumber, GalleryType.GALLERY, this._semaphore ], action, delay, true);
  2386. }));
  2387. }
  2388. getFigures(username_1, pageNumber_1, action_1) {
  2389. return Gallery_awaiter(this, arguments, void 0, (function*(username, pageNumber, action, delay = 100) {
  2390. pageNumber = convertToNumber(pageNumber);
  2391. return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFigures, [ username, void 0, pageNumber, GalleryType.GALLERY, this._semaphore ], action, delay);
  2392. }));
  2393. }
  2394. getFiguresInFolder(username_1, folderId_1, pageNumber_1, action_1) {
  2395. return Gallery_awaiter(this, arguments, void 0, (function*(username, folderId, pageNumber, action, delay = 100) {
  2396. folderId = convertToNumber(folderId);
  2397. pageNumber = convertToNumber(pageNumber);
  2398. return yield WaitAndCallAction.callFunctionAsync(GalleryRequests.getGalleryFigures, [ username, folderId, pageNumber, GalleryType.GALLERY, this._semaphore ], action, delay);
  2399. }));
  2400. }
  2401. getPage(username_1, pageNumber_1, action_1) {
  2402. return Gallery_awaiter(this, arguments, void 0, (function*(username, pageNumber, action, delay = 100) {
  2403. pageNumber = convertToNumber(pageNumber);
  2404. return yield WaitAndCallAction.callFunctionAsync(Page.getGalleryPage, [ username, void 0, pageNumber, GalleryType.GALLERY, this._semaphore ], action, delay);
  2405. }));
  2406. }
  2407. getPageInFolder(username_1, folderId_1, pageNumber_1, action_1) {
  2408. return Gallery_awaiter(this, arguments, void 0, (function*(username, folderId, pageNumber, action, delay = 100) {
  2409. folderId = convertToNumber(folderId);
  2410. pageNumber = convertToNumber(pageNumber);
  2411. return yield WaitAndCallAction.callFunctionAsync(Page.getGalleryPage, [ username, folderId, pageNumber, GalleryType.GALLERY, this._semaphore ], action, delay);
  2412. }));
  2413. }
  2414. }
  2415. var GalleryType, GalleryRequests_awaiter = function(thisArg, _arguments, P, generator) {
  2416. return new (P || (P = Promise))((function(resolve, reject) {
  2417. function fulfilled(value) {
  2418. try {
  2419. step(generator.next(value));
  2420. } catch (e) {
  2421. reject(e);
  2422. }
  2423. }
  2424. function rejected(value) {
  2425. try {
  2426. step(generator.throw(value));
  2427. } catch (e) {
  2428. reject(e);
  2429. }
  2430. }
  2431. function step(result) {
  2432. result.done ? resolve(result.value) : function adopt(value) {
  2433. return value instanceof P ? value : new P((function(resolve) {
  2434. resolve(value);
  2435. }));
  2436. }(result.value).then(fulfilled, rejected);
  2437. }
  2438. step((generator = generator.apply(thisArg, _arguments || [])).next());
  2439. }));
  2440. };
  2441. class GalleryRequests {
  2442. constructor(semaphore) {
  2443. this._semaphore = semaphore;
  2444. this.Gallery = new Gallery(this._semaphore);
  2445. this.Scraps = new Scraps(this._semaphore);
  2446. this.Favorites = new Favorites(this._semaphore);
  2447. this.Journals = new Journals(this._semaphore);
  2448. }
  2449. static getSubmissionPageNo(username, submissionId, folderId, fromPageNumber, toPageNumber, galleryType, semaphore, percentId) {
  2450. return GalleryRequests_awaiter(this, void 0, void 0, (function*() {
  2451. if (null == submissionId || submissionId <= 0) {
  2452. Logger.logError("No submissionId given");
  2453. return -1;
  2454. }
  2455. if (null == fromPageNumber || fromPageNumber <= 0) {
  2456. Logger.logWarning("fromPageNumber must be greater than 0. Using default 1 instead.");
  2457. fromPageNumber = 1;
  2458. }
  2459. if (null == toPageNumber || 0 === toPageNumber) {
  2460. Logger.logWarning("toPageNumber must be greater than 0. Using default 1 instead.");
  2461. toPageNumber = 1;
  2462. } else if (toPageNumber < 0) toPageNumber = Number.MAX_SAFE_INTEGER;
  2463. const direction = fromPageNumber <= toPageNumber ? 1 : -1, totalPages = Math.abs(toPageNumber - fromPageNumber) + 1;
  2464. let completedPages = 0;
  2465. for (let i = fromPageNumber; i <= toPageNumber; i += direction) {
  2466. const figures = yield GalleryRequests.getGalleryFigures(username, folderId, i, galleryType, semaphore);
  2467. if (0 === figures.length) i = toPageNumber; else {
  2468. if (null != figures.find((figure => figure.id.trimStart("sid-") === submissionId.toString()))) return i;
  2469. }
  2470. completedPages++;
  2471. PercentHelper.updatePercentValue(percentId, completedPages, totalPages);
  2472. }
  2473. return -1;
  2474. }));
  2475. }
  2476. static getGalleryFiguresTillId(username, folderId, toId, fromPage, galleryType, semaphore) {
  2477. return GalleryRequests_awaiter(this, void 0, void 0, (function*() {
  2478. if (null == toId || toId <= 0) {
  2479. Logger.logError("No toId given");
  2480. return [];
  2481. }
  2482. const allFigures = [];
  2483. let running = true, i = 1;
  2484. if (null != fromPage && fromPage >= 1) i = fromPage;
  2485. for (;running; ) {
  2486. const figures = yield GalleryRequests.getGalleryFigures(username, folderId, i, galleryType, semaphore);
  2487. let currFigureId;
  2488. if (0 !== figures.length) currFigureId = figures[0].id;
  2489. if (undefined === currFigureId) running = false; else if (IdArray.containsId(figures, toId)) {
  2490. allFigures.push(IdArray.getTillId(figures, toId));
  2491. running = false;
  2492. } else {
  2493. allFigures.push(figures);
  2494. i++;
  2495. }
  2496. }
  2497. return allFigures;
  2498. }));
  2499. }
  2500. static getGalleryFiguresSinceId(username, folderId, fromId, toPage, galleryType, semaphore) {
  2501. return GalleryRequests_awaiter(this, void 0, void 0, (function*() {
  2502. if (null == fromId || fromId <= 0) {
  2503. Logger.logError("No fromId given");
  2504. return [];
  2505. }
  2506. const direction = null == toPage || toPage <= 0 ? -1 : 1;
  2507. let lastFigureId, running = true, i = null == toPage || toPage <= 0 ? 1 : toPage;
  2508. if (null == toPage || toPage <= 0) for (;running; ) {
  2509. const figures = yield GalleryRequests.getGalleryFigures(username, folderId, i, galleryType, semaphore);
  2510. let currFigureId = lastFigureId;
  2511. if (0 !== figures.length) currFigureId = figures[0].id;
  2512. if (currFigureId === lastFigureId) running = false; else if (IdArray.containsId(figures, fromId)) running = false; else i++;
  2513. }
  2514. const allFigures = [];
  2515. lastFigureId = void 0;
  2516. running = true;
  2517. for (;running; ) {
  2518. const figures = yield GalleryRequests.getGalleryFigures(username, folderId, i, galleryType, semaphore);
  2519. let currFigureId = lastFigureId;
  2520. if (0 !== figures.length) currFigureId = figures[0].id;
  2521. if (currFigureId === lastFigureId) running = false; else {
  2522. if (IdArray.containsId(figures, fromId)) {
  2523. const figuresPush = IdArray.getSinceId(figures, fromId);
  2524. if (direction < 0) {
  2525. figuresPush.reverse();
  2526. running = false;
  2527. }
  2528. allFigures.push(figuresPush);
  2529. } else {
  2530. if (direction < 0) figures.reverse();
  2531. allFigures.push(figures);
  2532. }
  2533. i += direction;
  2534. }
  2535. }
  2536. if (direction < 0) allFigures.reverse();
  2537. return allFigures;
  2538. }));
  2539. }
  2540. static getGalleryFiguresBetweenIds(username, folderId, fromId, toId, fromPage, toPage, galleryType, semaphore, percentId) {
  2541. return GalleryRequests_awaiter(this, void 0, void 0, (function*() {
  2542. if (null == fromId || fromId <= 0) {
  2543. Logger.logError("No fromId given");
  2544. return [];
  2545. }
  2546. if (null == toId || toId <= 0) {
  2547. Logger.logError("No toId given");
  2548. return [];
  2549. }
  2550. if (null == fromPage || fromPage <= 0 || null == toPage || toPage <= 1) {
  2551. Logger.logWarning("No fromPage or toPage given. Percentages can not be calculated.");
  2552. percentId = void 0;
  2553. }
  2554. let i = 1;
  2555. if (null != fromPage && fromPage >= 1) i = fromPage;
  2556. const allFigures = [];
  2557. let running = true, completedPages = 0;
  2558. for (;running; ) {
  2559. if (null != toPage && toPage >= 1 && i >= toPage) running = false;
  2560. const figures = yield GalleryRequests.getGalleryFigures(username, folderId, i, galleryType, semaphore);
  2561. let currFigureId;
  2562. if (0 !== figures.length) currFigureId = figures[0].id;
  2563. if (undefined === currFigureId) running = false; else {
  2564. if (IdArray.containsId(figures, fromId)) allFigures.push(IdArray.getSinceId(figures, fromId));
  2565. if (IdArray.containsId(figures, toId)) {
  2566. allFigures.push(IdArray.getBetweenIds(figures, fromId, toId));
  2567. running = false;
  2568. } else {
  2569. allFigures.push(figures);
  2570. i++;
  2571. }
  2572. }
  2573. completedPages++;
  2574. if (null != toPage && toPage >= 1) PercentHelper.updatePercentValue(percentId, completedPages, toPage);
  2575. }
  2576. return allFigures;
  2577. }));
  2578. }
  2579. static getGalleryFiguresTillPage(username, folderId, toPageNumber, galleryType, semaphore, percentId) {
  2580. return GalleryRequests_awaiter(this, void 0, void 0, (function*() {
  2581. if (null == toPageNumber || 0 === toPageNumber) {
  2582. Logger.logWarning("toPageNumber must be greater than 0. Using default 1 instead.");
  2583. toPageNumber = 1;
  2584. } else if (toPageNumber < 0) toPageNumber = Number.MAX_SAFE_INTEGER;
  2585. const allFigures = [];
  2586. let completedPages = 0;
  2587. for (let i = 1; i <= toPageNumber; i++) {
  2588. const figures = yield GalleryRequests.getGalleryFigures(username, folderId, i, galleryType, semaphore);
  2589. if (0 === figures.length) i = toPageNumber; else allFigures.push(figures);
  2590. completedPages++;
  2591. PercentHelper.updatePercentValue(percentId, completedPages, toPageNumber);
  2592. }
  2593. return allFigures;
  2594. }));
  2595. }
  2596. static getGalleryFiguresSincePage(username, folderId, fromPageNumber, galleryType, semaphore) {
  2597. return GalleryRequests_awaiter(this, void 0, void 0, (function*() {
  2598. if (null == fromPageNumber || fromPageNumber <= 0) {
  2599. Logger.logWarning("fromPageNumber must be greater than 0. Using default 1 instead.");
  2600. fromPageNumber = 1;
  2601. }
  2602. const allFigures = [];
  2603. let running = true, i = fromPageNumber;
  2604. for (;running; ) {
  2605. const figures = yield GalleryRequests.getGalleryFigures(username, folderId, i, galleryType, semaphore);
  2606. let currFigureId;
  2607. if (0 !== figures.length) currFigureId = figures[0].id;
  2608. if (undefined === currFigureId) running = false; else {
  2609. allFigures.push(figures);
  2610. i++;
  2611. }
  2612. }
  2613. return allFigures;
  2614. }));
  2615. }
  2616. static getGalleryFiguresBetweenPages(username, folderId, fromPageNumber, toPageNumber, galleryType, semaphore, percentId) {
  2617. return GalleryRequests_awaiter(this, void 0, void 0, (function*() {
  2618. if (null == fromPageNumber || fromPageNumber <= 0) {
  2619. Logger.logWarning("fromPageNumber must be greater than 0. Using default 1 instead.");
  2620. fromPageNumber = 1;
  2621. }
  2622. if (null == toPageNumber || 0 === toPageNumber) {
  2623. Logger.logWarning("toPageNumber must be greater than 0. Using default 1 instead.");
  2624. toPageNumber = 1;
  2625. } else if (toPageNumber < 0) toPageNumber = Number.MAX_SAFE_INTEGER;
  2626. const allFigures = [], direction = fromPageNumber <= toPageNumber ? 1 : -1, totalPages = Math.abs(toPageNumber - fromPageNumber) + 1;
  2627. let completedPages = 0;
  2628. for (let i = fromPageNumber; i <= toPageNumber; i += direction) {
  2629. const figures = yield GalleryRequests.getGalleryFigures(username, folderId, i, galleryType, semaphore);
  2630. if (0 === figures.length) i = toPageNumber; else allFigures.push(figures);
  2631. completedPages++;
  2632. PercentHelper.updatePercentValue(percentId, completedPages, totalPages);
  2633. }
  2634. return allFigures;
  2635. }));
  2636. }
  2637. static getGalleryFigures(username, folderId, pageNumber, galleryType, semaphore) {
  2638. return GalleryRequests_awaiter(this, void 0, void 0, (function*() {
  2639. if (null == pageNumber || pageNumber <= 0) {
  2640. Logger.logWarning("No pageNumber given. Using default value of 1.");
  2641. pageNumber = 1;
  2642. }
  2643. if (null == folderId || folderId <= 0) Logger.logInfo(`Getting ${galleryType} of "${username}" on page "${pageNumber}".`); else Logger.logInfo(`Getting ${galleryType} of "${username}" in folder "${folderId}" on page "${pageNumber}".`);
  2644. const galleryDoc = yield Page.getGalleryPage(username, folderId, pageNumber, galleryType, semaphore);
  2645. if (!galleryDoc || !(galleryDoc instanceof Document) || galleryDoc.getElementById("no-images")) {
  2646. Logger.logInfo(`No images found at ${galleryType} of "${username}" on page "${pageNumber}".`);
  2647. return [];
  2648. }
  2649. const figures = galleryDoc.getElementsByTagName("figure");
  2650. if (null == figures || 0 === figures.length) {
  2651. Logger.logInfo(`No figures found at ${galleryType} of "${username}" on page "${pageNumber}".`);
  2652. return [];
  2653. }
  2654. return Array.from(figures);
  2655. }));
  2656. }
  2657. }
  2658. !function(GalleryType) {
  2659. GalleryType.GALLERY = "gallery";
  2660. GalleryType.FAVORITES = "favorites";
  2661. GalleryType.SCRAPS = "scraps";
  2662. GalleryType.JOURNALS = "journals";
  2663. GalleryType.BROWSE = "browse";
  2664. GalleryType.SEARCH = "search";
  2665. }(GalleryType || (GalleryType = {}));
  2666. var UserRequests_awaiter = function(thisArg, _arguments, P, generator) {
  2667. return new (P || (P = Promise))((function(resolve, reject) {
  2668. function fulfilled(value) {
  2669. try {
  2670. step(generator.next(value));
  2671. } catch (e) {
  2672. reject(e);
  2673. }
  2674. }
  2675. function rejected(value) {
  2676. try {
  2677. step(generator.throw(value));
  2678. } catch (e) {
  2679. reject(e);
  2680. }
  2681. }
  2682. function step(result) {
  2683. result.done ? resolve(result.value) : function adopt(value) {
  2684. return value instanceof P ? value : new P((function(resolve) {
  2685. resolve(value);
  2686. }));
  2687. }(result.value).then(fulfilled, rejected);
  2688. }
  2689. step((generator = generator.apply(thisArg, _arguments || [])).next());
  2690. }));
  2691. };
  2692. class UserRequests {
  2693. constructor(semaphore) {
  2694. this._semaphore = semaphore;
  2695. this.GalleryRequests = new GalleryRequests(this._semaphore);
  2696. this.SearchRequests = new SearchRequests(this._semaphore);
  2697. }
  2698. static get hardLinks() {
  2699. return {
  2700. user: FuraffinityRequests.fullUrl + "/user/",
  2701. watch: FuraffinityRequests.fullUrl + "/watch/",
  2702. unwatch: FuraffinityRequests.fullUrl + "/unwatch/",
  2703. block: FuraffinityRequests.fullUrl + "/block/",
  2704. unblock: FuraffinityRequests.fullUrl + "/unblock/"
  2705. };
  2706. }
  2707. getUserPage(username_1, action_1) {
  2708. return UserRequests_awaiter(this, arguments, void 0, (function*(username, action, delay = 100) {
  2709. return yield WaitAndCallAction.callFunctionAsync(getUserPageLocal, [ username, this._semaphore ], action, delay);
  2710. }));
  2711. }
  2712. watchUser(username_1, watchKey_1, action_1) {
  2713. return UserRequests_awaiter(this, arguments, void 0, (function*(username, watchKey, action, delay = 100) {
  2714. return yield WaitAndCallAction.callFunctionAsync(watchUserLocal, [ username, watchKey, this._semaphore ], action, delay);
  2715. }));
  2716. }
  2717. unwatchUser(username_1, unwatchKey_1, action_1) {
  2718. return UserRequests_awaiter(this, arguments, void 0, (function*(username, unwatchKey, action, delay = 100) {
  2719. return yield WaitAndCallAction.callFunctionAsync(unwatchUserLocal, [ username, unwatchKey, this._semaphore ], action, delay);
  2720. }));
  2721. }
  2722. blockUser(username_1, blockKey_1, action_1) {
  2723. return UserRequests_awaiter(this, arguments, void 0, (function*(username, blockKey, action, delay = 100) {
  2724. return yield WaitAndCallAction.callFunctionAsync(blockUserLocal, [ username, blockKey, this._semaphore ], action, delay);
  2725. }));
  2726. }
  2727. unblockUser(username_1, unblockKey_1, action_1) {
  2728. return UserRequests_awaiter(this, arguments, void 0, (function*(username, unblockKey, action, delay = 100) {
  2729. return yield WaitAndCallAction.callFunctionAsync(unblockUserLocal, [ username, unblockKey, this._semaphore ], action, delay);
  2730. }));
  2731. }
  2732. }
  2733. function getUserPageLocal(username, semaphore) {
  2734. return UserRequests_awaiter(this, void 0, void 0, (function*() {
  2735. if (null == username) {
  2736. Logger.logWarning("No username given");
  2737. return;
  2738. }
  2739. const url = UserRequests.hardLinks.user + username;
  2740. return yield FuraffinityRequests.getHTML(url, semaphore);
  2741. }));
  2742. }
  2743. function watchUserLocal(username, watchKey, semaphore) {
  2744. return UserRequests_awaiter(this, void 0, void 0, (function*() {
  2745. if (null == username || "" === username) {
  2746. Logger.logError("No username given");
  2747. return false;
  2748. }
  2749. if (null == watchKey || "" === watchKey || -1 === watchKey) {
  2750. Logger.logError("No watch key given");
  2751. return false;
  2752. }
  2753. const url = UserRequests.hardLinks.watch + username + "?key=" + watchKey;
  2754. return null == (yield FuraffinityRequests.getHTML(url, semaphore));
  2755. }));
  2756. }
  2757. function unwatchUserLocal(username, unwatchKey, semaphore) {
  2758. return UserRequests_awaiter(this, void 0, void 0, (function*() {
  2759. if (null == username || "" === username) {
  2760. Logger.logError("No username given");
  2761. return false;
  2762. }
  2763. if (null == unwatchKey || "" === unwatchKey || -1 === unwatchKey) {
  2764. Logger.logError("No unwatch key given");
  2765. return false;
  2766. }
  2767. const url = UserRequests.hardLinks.unwatch + username + "?key=" + unwatchKey;
  2768. return null == (yield FuraffinityRequests.getHTML(url, semaphore));
  2769. }));
  2770. }
  2771. function blockUserLocal(username, blockKey, semaphore) {
  2772. return UserRequests_awaiter(this, void 0, void 0, (function*() {
  2773. if (null == username || "" === username) {
  2774. Logger.logError("No username given");
  2775. return false;
  2776. }
  2777. if (null == blockKey || "" === blockKey || -1 === blockKey) {
  2778. Logger.logError("No block key given");
  2779. return false;
  2780. }
  2781. const url = UserRequests.hardLinks.block + username + "?key=" + blockKey;
  2782. return null == (yield FuraffinityRequests.getHTML(url, semaphore));
  2783. }));
  2784. }
  2785. function unblockUserLocal(username, unblockKey, semaphore) {
  2786. return UserRequests_awaiter(this, void 0, void 0, (function*() {
  2787. if (null == username || "" === username) {
  2788. Logger.logError("No username given");
  2789. return false;
  2790. }
  2791. if (null == unblockKey || "" === unblockKey || -1 === unblockKey) {
  2792. Logger.logError("No unblock key given");
  2793. return false;
  2794. }
  2795. const url = UserRequests.hardLinks.unblock + username + "?key=" + unblockKey;
  2796. return null == (yield FuraffinityRequests.getHTML(url, semaphore));
  2797. }));
  2798. }
  2799. var NewSubmissions_awaiter = function(thisArg, _arguments, P, generator) {
  2800. return new (P || (P = Promise))((function(resolve, reject) {
  2801. function fulfilled(value) {
  2802. try {
  2803. step(generator.next(value));
  2804. } catch (e) {
  2805. reject(e);
  2806. }
  2807. }
  2808. function rejected(value) {
  2809. try {
  2810. step(generator.throw(value));
  2811. } catch (e) {
  2812. reject(e);
  2813. }
  2814. }
  2815. function step(result) {
  2816. result.done ? resolve(result.value) : function adopt(value) {
  2817. return value instanceof P ? value : new P((function(resolve) {
  2818. resolve(value);
  2819. }));
  2820. }(result.value).then(fulfilled, rejected);
  2821. }
  2822. step((generator = generator.apply(thisArg, _arguments || [])).next());
  2823. }));
  2824. };
  2825. class NewSubmissions {
  2826. constructor(semaphore) {
  2827. this._semaphore = semaphore;
  2828. }
  2829. static get hardLink() {
  2830. return FuraffinityRequests.fullUrl + "/msg/submissions/";
  2831. }
  2832. getSubmissionsPage(firstSubmissionId_1, action_1) {
  2833. return NewSubmissions_awaiter(this, arguments, void 0, (function*(firstSubmissionId, action, delay = 100) {
  2834. firstSubmissionId = convertToNumber(firstSubmissionId);
  2835. return yield WaitAndCallAction.callFunctionAsync(getSubmissionsPageLocal, [ firstSubmissionId, this._semaphore ], action, delay);
  2836. }));
  2837. }
  2838. removeSubmissions(submissionIds_1, action_1) {
  2839. return NewSubmissions_awaiter(this, arguments, void 0, (function*(submissionIds, action, delay = 100) {
  2840. return yield WaitAndCallAction.callFunctionAsync(removeSubmissionsLocal, [ submissionIds, this._semaphore ], action, delay);
  2841. }));
  2842. }
  2843. nukeSubmissions(action_1) {
  2844. return NewSubmissions_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  2845. return yield WaitAndCallAction.callFunctionAsync(nukeSubmissionsLocal, [ this._semaphore ], action, delay);
  2846. }));
  2847. }
  2848. }
  2849. function getSubmissionsPageLocal(firstSubmissionId, semaphore) {
  2850. return NewSubmissions_awaiter(this, void 0, void 0, (function*() {
  2851. if (null == firstSubmissionId || firstSubmissionId <= 0) return yield FuraffinityRequests.getHTML(`${NewSubmissions.hardLink}new@72/`, semaphore); else return yield FuraffinityRequests.getHTML(`${NewSubmissions.hardLink}new~${firstSubmissionId}@72/`, semaphore);
  2852. }));
  2853. }
  2854. function removeSubmissionsLocal(submissionIds, semaphore) {
  2855. return NewSubmissions_awaiter(this, void 0, void 0, (function*() {
  2856. if (null == submissionIds || 0 === submissionIds.length) {
  2857. Logger.logError("No submission ids to remove");
  2858. return;
  2859. }
  2860. const payload = [ [ "messagecenter-action", Message.hardActions.remove ] ];
  2861. for (const submissionId of submissionIds) payload.push([ "submissions[]", submissionId.toString() ]);
  2862. return yield FuraffinityRequests.postHTML(`${NewSubmissions.hardLink}new@72/`, payload, semaphore);
  2863. }));
  2864. }
  2865. function nukeSubmissionsLocal(semaphore) {
  2866. return NewSubmissions_awaiter(this, void 0, void 0, (function*() {
  2867. const payload = {
  2868. "messagecenter-action": Message.hardActions.nuke
  2869. }, payloadArray = Object.entries(payload).map((([key, value]) => {
  2870. var _a;
  2871. return [ key, null !== (_a = null == value ? void 0 : value.toString()) && void 0 !== _a ? _a : "" ];
  2872. }));
  2873. return yield FuraffinityRequests.postHTML(`${NewSubmissions.hardLink}new@72/`, payloadArray, semaphore);
  2874. }));
  2875. }
  2876. var NewWatches_awaiter = function(thisArg, _arguments, P, generator) {
  2877. return new (P || (P = Promise))((function(resolve, reject) {
  2878. function fulfilled(value) {
  2879. try {
  2880. step(generator.next(value));
  2881. } catch (e) {
  2882. reject(e);
  2883. }
  2884. }
  2885. function rejected(value) {
  2886. try {
  2887. step(generator.throw(value));
  2888. } catch (e) {
  2889. reject(e);
  2890. }
  2891. }
  2892. function step(result) {
  2893. result.done ? resolve(result.value) : function adopt(value) {
  2894. return value instanceof P ? value : new P((function(resolve) {
  2895. resolve(value);
  2896. }));
  2897. }(result.value).then(fulfilled, rejected);
  2898. }
  2899. step((generator = generator.apply(thisArg, _arguments || [])).next());
  2900. }));
  2901. };
  2902. class NewWatches {
  2903. constructor(semaphore) {
  2904. this._semaphore = semaphore;
  2905. }
  2906. static get hardLink() {
  2907. return FuraffinityRequests.fullUrl + "/msg/others/";
  2908. }
  2909. static get hardActions() {
  2910. return {
  2911. remove: [ "remove-watches", "Remove Selected Watches" ],
  2912. nuke: [ "nuke-watches", "Nuke Watches" ]
  2913. };
  2914. }
  2915. removeMessages(userIds_1, action_1) {
  2916. return NewWatches_awaiter(this, arguments, void 0, (function*(userIds, action, delay = 100) {
  2917. return yield WaitAndCallAction.callFunctionAsync(removeWatchMessagesLocal, [ userIds, this._semaphore ], action, delay);
  2918. }));
  2919. }
  2920. nukeMessages(action_1) {
  2921. return NewWatches_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  2922. return yield WaitAndCallAction.callFunctionAsync(nukeWatchMessagesLocal, [ this._semaphore ], action, delay);
  2923. }));
  2924. }
  2925. }
  2926. function removeWatchMessagesLocal(userIds, semaphore) {
  2927. return NewWatches_awaiter(this, void 0, void 0, (function*() {
  2928. if (null == userIds || 0 === userIds.length) {
  2929. Logger.logError("No submission ids to remove");
  2930. return;
  2931. }
  2932. const payload = [ NewWatches.hardActions.remove ];
  2933. for (const submissionId of userIds) payload.push([ "watches[]", submissionId.toString() ]);
  2934. return yield FuraffinityRequests.postHTML(NewWatches.hardLink, payload, semaphore);
  2935. }));
  2936. }
  2937. function nukeWatchMessagesLocal(semaphore) {
  2938. return NewWatches_awaiter(this, void 0, void 0, (function*() {
  2939. const payload = [ NewWatches.hardActions.nuke ];
  2940. return yield FuraffinityRequests.postHTML(NewWatches.hardLink, payload, semaphore);
  2941. }));
  2942. }
  2943. var NewJournalComments_awaiter = function(thisArg, _arguments, P, generator) {
  2944. return new (P || (P = Promise))((function(resolve, reject) {
  2945. function fulfilled(value) {
  2946. try {
  2947. step(generator.next(value));
  2948. } catch (e) {
  2949. reject(e);
  2950. }
  2951. }
  2952. function rejected(value) {
  2953. try {
  2954. step(generator.throw(value));
  2955. } catch (e) {
  2956. reject(e);
  2957. }
  2958. }
  2959. function step(result) {
  2960. result.done ? resolve(result.value) : function adopt(value) {
  2961. return value instanceof P ? value : new P((function(resolve) {
  2962. resolve(value);
  2963. }));
  2964. }(result.value).then(fulfilled, rejected);
  2965. }
  2966. step((generator = generator.apply(thisArg, _arguments || [])).next());
  2967. }));
  2968. };
  2969. class NewJournalComments {
  2970. constructor(semaphore) {
  2971. this._semaphore = semaphore;
  2972. }
  2973. static get hardLink() {
  2974. return FuraffinityRequests.fullUrl + "/msg/others/";
  2975. }
  2976. static get hardActions() {
  2977. return {
  2978. remove: [ "remove-journal-comments", "Remove Selected Comments" ],
  2979. nuke: [ "nuke-journal-comments", "Nuke Journal Comments" ]
  2980. };
  2981. }
  2982. removeMessages(commentIds_1, action_1) {
  2983. return NewJournalComments_awaiter(this, arguments, void 0, (function*(commentIds, action, delay = 100) {
  2984. return yield WaitAndCallAction.callFunctionAsync(removeJournalCommentMessagesLocal, [ commentIds, this._semaphore ], action, delay);
  2985. }));
  2986. }
  2987. nukeMessages(action_1) {
  2988. return NewJournalComments_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  2989. return yield WaitAndCallAction.callFunctionAsync(nukeJournalCommentMessagesLocal, [ this._semaphore ], action, delay);
  2990. }));
  2991. }
  2992. }
  2993. function removeJournalCommentMessagesLocal(commentIds, semaphore) {
  2994. return NewJournalComments_awaiter(this, void 0, void 0, (function*() {
  2995. if (null == commentIds || 0 === commentIds.length) {
  2996. Logger.logError("No submission ids to remove");
  2997. return;
  2998. }
  2999. const payload = [ NewJournalComments.hardActions.remove ];
  3000. for (const submissionId of commentIds) payload.push([ "comments-journals[]", submissionId.toString() ]);
  3001. return yield FuraffinityRequests.postHTML(NewJournalComments.hardLink, payload, semaphore);
  3002. }));
  3003. }
  3004. function nukeJournalCommentMessagesLocal(semaphore) {
  3005. return NewJournalComments_awaiter(this, void 0, void 0, (function*() {
  3006. const payload = [ NewJournalComments.hardActions.nuke ];
  3007. return yield FuraffinityRequests.postHTML(NewJournalComments.hardLink, payload, semaphore);
  3008. }));
  3009. }
  3010. var NewShouts_awaiter = function(thisArg, _arguments, P, generator) {
  3011. return new (P || (P = Promise))((function(resolve, reject) {
  3012. function fulfilled(value) {
  3013. try {
  3014. step(generator.next(value));
  3015. } catch (e) {
  3016. reject(e);
  3017. }
  3018. }
  3019. function rejected(value) {
  3020. try {
  3021. step(generator.throw(value));
  3022. } catch (e) {
  3023. reject(e);
  3024. }
  3025. }
  3026. function step(result) {
  3027. result.done ? resolve(result.value) : function adopt(value) {
  3028. return value instanceof P ? value : new P((function(resolve) {
  3029. resolve(value);
  3030. }));
  3031. }(result.value).then(fulfilled, rejected);
  3032. }
  3033. step((generator = generator.apply(thisArg, _arguments || [])).next());
  3034. }));
  3035. };
  3036. class NewShouts {
  3037. constructor(semaphore) {
  3038. this._semaphore = semaphore;
  3039. }
  3040. static get hardLink() {
  3041. return FuraffinityRequests.fullUrl + "/msg/others/";
  3042. }
  3043. static get hardActions() {
  3044. return {
  3045. remove: [ "remove-shouts", "Remove Selected Shouts" ],
  3046. nuke: [ "nuke-shouts", "Nuke Shouts" ]
  3047. };
  3048. }
  3049. removeMessages(shoutIds_1, action_1) {
  3050. return NewShouts_awaiter(this, arguments, void 0, (function*(shoutIds, action, delay = 100) {
  3051. return yield WaitAndCallAction.callFunctionAsync(removeShoutMessagesLocal, [ shoutIds, this._semaphore ], action, delay);
  3052. }));
  3053. }
  3054. nukeMessages(action_1) {
  3055. return NewShouts_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  3056. return yield WaitAndCallAction.callFunctionAsync(nukeShoutMessagesLocal, [ this._semaphore ], action, delay);
  3057. }));
  3058. }
  3059. }
  3060. function removeShoutMessagesLocal(shoutIds, semaphore) {
  3061. return NewShouts_awaiter(this, void 0, void 0, (function*() {
  3062. if (null == shoutIds || 0 === shoutIds.length) {
  3063. Logger.logError("No submission ids to remove");
  3064. return;
  3065. }
  3066. const payload = [ NewShouts.hardActions.remove ];
  3067. for (const submissionId of shoutIds) payload.push([ "shouts[]", submissionId.toString() ]);
  3068. return yield FuraffinityRequests.postHTML(NewShouts.hardLink, payload, semaphore);
  3069. }));
  3070. }
  3071. function nukeShoutMessagesLocal(semaphore) {
  3072. return NewShouts_awaiter(this, void 0, void 0, (function*() {
  3073. const payload = [ NewShouts.hardActions.nuke ];
  3074. return yield FuraffinityRequests.postHTML(NewShouts.hardLink, payload, semaphore);
  3075. }));
  3076. }
  3077. var NewFavorites_awaiter = function(thisArg, _arguments, P, generator) {
  3078. return new (P || (P = Promise))((function(resolve, reject) {
  3079. function fulfilled(value) {
  3080. try {
  3081. step(generator.next(value));
  3082. } catch (e) {
  3083. reject(e);
  3084. }
  3085. }
  3086. function rejected(value) {
  3087. try {
  3088. step(generator.throw(value));
  3089. } catch (e) {
  3090. reject(e);
  3091. }
  3092. }
  3093. function step(result) {
  3094. result.done ? resolve(result.value) : function adopt(value) {
  3095. return value instanceof P ? value : new P((function(resolve) {
  3096. resolve(value);
  3097. }));
  3098. }(result.value).then(fulfilled, rejected);
  3099. }
  3100. step((generator = generator.apply(thisArg, _arguments || [])).next());
  3101. }));
  3102. };
  3103. class NewFavorites {
  3104. constructor(semaphore) {
  3105. this._semaphore = semaphore;
  3106. }
  3107. static get hardLink() {
  3108. return FuraffinityRequests.fullUrl + "/msg/others/";
  3109. }
  3110. static get hardActions() {
  3111. return {
  3112. remove: [ "remove-favorites", "Remove Selected Favorites" ],
  3113. nuke: [ "nuke-favorites", "Nuke Favorites" ]
  3114. };
  3115. }
  3116. removeMessages(submissionIds_1, action_1) {
  3117. return NewFavorites_awaiter(this, arguments, void 0, (function*(submissionIds, action, delay = 100) {
  3118. return yield WaitAndCallAction.callFunctionAsync(removeFavoriteMessagesLocal, [ submissionIds, this._semaphore ], action, delay);
  3119. }));
  3120. }
  3121. nukeMessages(action_1) {
  3122. return NewFavorites_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  3123. return yield WaitAndCallAction.callFunctionAsync(nukeFavoriteMessagesLocal, [ this._semaphore ], action, delay);
  3124. }));
  3125. }
  3126. }
  3127. function removeFavoriteMessagesLocal(submissionIds, semaphore) {
  3128. return NewFavorites_awaiter(this, void 0, void 0, (function*() {
  3129. if (null == submissionIds || 0 === submissionIds.length) {
  3130. Logger.logError("No submission ids to remove");
  3131. return;
  3132. }
  3133. const payload = [ NewFavorites.hardActions.remove ];
  3134. for (const submissionId of submissionIds) payload.push([ "favorites[]", submissionId.toString() ]);
  3135. return yield FuraffinityRequests.postHTML(NewFavorites.hardLink, payload, semaphore);
  3136. }));
  3137. }
  3138. function nukeFavoriteMessagesLocal(semaphore) {
  3139. return NewFavorites_awaiter(this, void 0, void 0, (function*() {
  3140. const payload = [ NewFavorites.hardActions.nuke ];
  3141. return yield FuraffinityRequests.postHTML(NewFavorites.hardLink, payload, semaphore);
  3142. }));
  3143. }
  3144. var NewJournals_awaiter = function(thisArg, _arguments, P, generator) {
  3145. return new (P || (P = Promise))((function(resolve, reject) {
  3146. function fulfilled(value) {
  3147. try {
  3148. step(generator.next(value));
  3149. } catch (e) {
  3150. reject(e);
  3151. }
  3152. }
  3153. function rejected(value) {
  3154. try {
  3155. step(generator.throw(value));
  3156. } catch (e) {
  3157. reject(e);
  3158. }
  3159. }
  3160. function step(result) {
  3161. result.done ? resolve(result.value) : function adopt(value) {
  3162. return value instanceof P ? value : new P((function(resolve) {
  3163. resolve(value);
  3164. }));
  3165. }(result.value).then(fulfilled, rejected);
  3166. }
  3167. step((generator = generator.apply(thisArg, _arguments || [])).next());
  3168. }));
  3169. };
  3170. class NewJournals {
  3171. constructor(semaphore) {
  3172. this._semaphore = semaphore;
  3173. }
  3174. static get hardLink() {
  3175. return FuraffinityRequests.fullUrl + "/msg/others/";
  3176. }
  3177. static get hardActions() {
  3178. return {
  3179. remove: [ "remove-journals", "Remove Selected Journals" ],
  3180. nuke: [ "nuke-journals", "Nuke Journals" ]
  3181. };
  3182. }
  3183. removeMessages(journalIds_1, action_1) {
  3184. return NewJournals_awaiter(this, arguments, void 0, (function*(journalIds, action, delay = 100) {
  3185. return yield WaitAndCallAction.callFunctionAsync(removeJournalMessagesLocal, [ journalIds, this._semaphore ], action, delay);
  3186. }));
  3187. }
  3188. nukeMessages(action_1) {
  3189. return NewJournals_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  3190. return yield WaitAndCallAction.callFunctionAsync(nukeJournalMessagesLocal, [ this._semaphore ], action, delay);
  3191. }));
  3192. }
  3193. }
  3194. function removeJournalMessagesLocal(journalIds, semaphore) {
  3195. return NewJournals_awaiter(this, void 0, void 0, (function*() {
  3196. if (null == journalIds || 0 === journalIds.length) {
  3197. Logger.logError("No submission ids to remove");
  3198. return;
  3199. }
  3200. const payload = [ NewJournals.hardActions.remove ];
  3201. for (const submissionId of journalIds) payload.push([ "journals[]", submissionId.toString() ]);
  3202. return yield FuraffinityRequests.postHTML(NewJournals.hardLink, payload, semaphore);
  3203. }));
  3204. }
  3205. function nukeJournalMessagesLocal(semaphore) {
  3206. return NewJournals_awaiter(this, void 0, void 0, (function*() {
  3207. const payload = [ NewJournals.hardActions.nuke ];
  3208. return yield FuraffinityRequests.postHTML(NewJournals.hardLink, payload, semaphore);
  3209. }));
  3210. }
  3211. var NewMessages_awaiter = function(thisArg, _arguments, P, generator) {
  3212. return new (P || (P = Promise))((function(resolve, reject) {
  3213. function fulfilled(value) {
  3214. try {
  3215. step(generator.next(value));
  3216. } catch (e) {
  3217. reject(e);
  3218. }
  3219. }
  3220. function rejected(value) {
  3221. try {
  3222. step(generator.throw(value));
  3223. } catch (e) {
  3224. reject(e);
  3225. }
  3226. }
  3227. function step(result) {
  3228. result.done ? resolve(result.value) : function adopt(value) {
  3229. return value instanceof P ? value : new P((function(resolve) {
  3230. resolve(value);
  3231. }));
  3232. }(result.value).then(fulfilled, rejected);
  3233. }
  3234. step((generator = generator.apply(thisArg, _arguments || [])).next());
  3235. }));
  3236. };
  3237. class NewMessages {
  3238. constructor(semaphore) {
  3239. this._semaphore = semaphore;
  3240. this.Watches = new NewWatches(this._semaphore);
  3241. this.JournalComments = new NewJournalComments(this._semaphore);
  3242. this.Shouts = new NewShouts(this._semaphore);
  3243. this.Favorites = new NewFavorites(this._semaphore);
  3244. this.Journals = new NewJournals(this._semaphore);
  3245. }
  3246. static get hardLink() {
  3247. return FuraffinityRequests.fullUrl + "/msg/others/";
  3248. }
  3249. static get hardActions() {
  3250. return {
  3251. remove: [ "remove-all", "Remove Selected" ],
  3252. nuke: [ "nuke-all", "Nuke Selected" ]
  3253. };
  3254. }
  3255. getMessagesPage(action_1) {
  3256. return NewMessages_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  3257. return yield WaitAndCallAction.callFunctionAsync(getMessagesPageLocal, [ this._semaphore ], action, delay);
  3258. }));
  3259. }
  3260. removeMessages(userIds_1, journalCommentIds_1, shoutIds_1, favoriteIds_1, journalIds_1, action_1) {
  3261. return NewMessages_awaiter(this, arguments, void 0, (function*(userIds, journalCommentIds, shoutIds, favoriteIds, journalIds, action, delay = 100) {
  3262. null != userIds || (userIds = []);
  3263. null != journalCommentIds || (journalCommentIds = []);
  3264. null != shoutIds || (shoutIds = []);
  3265. null != favoriteIds || (favoriteIds = []);
  3266. null != journalIds || (journalIds = []);
  3267. return yield WaitAndCallAction.callFunctionAsync(removeMessagesLocal, [ userIds, journalCommentIds, shoutIds, favoriteIds, journalIds, this._semaphore ], action, delay);
  3268. }));
  3269. }
  3270. }
  3271. function getMessagesPageLocal(semaphore) {
  3272. return NewMessages_awaiter(this, void 0, void 0, (function*() {
  3273. return yield FuraffinityRequests.getHTML(NewMessages.hardLink, semaphore);
  3274. }));
  3275. }
  3276. function removeMessagesLocal(userIds, journalCommentIds, shoutIds, favoriteIds, journalIds, semaphore) {
  3277. return NewMessages_awaiter(this, void 0, void 0, (function*() {
  3278. const payload = [ NewMessages.hardActions.remove ];
  3279. if (null != userIds && 0 !== userIds.length) for (const submissionId of userIds) payload.push([ "watches[]", submissionId.toString() ]);
  3280. if (null != journalCommentIds && 0 !== journalCommentIds.length) for (const submissionId of journalCommentIds) payload.push([ "journalcomments[]", submissionId.toString() ]);
  3281. if (null != shoutIds && 0 !== shoutIds.length) for (const submissionId of shoutIds) payload.push([ "shouts[]", submissionId.toString() ]);
  3282. if (null != favoriteIds && 0 !== favoriteIds.length) for (const submissionId of favoriteIds) payload.push([ "favorites[]", submissionId.toString() ]);
  3283. if (null != journalIds && 0 !== journalIds.length) for (const submissionId of journalIds) payload.push([ "journals[]", submissionId.toString() ]);
  3284. if (0 !== payload.length) return yield FuraffinityRequests.postHTML(NewMessages.hardLink, payload, semaphore); else Logger.logError("No messages to remove");
  3285. }));
  3286. }
  3287. class Message {
  3288. constructor(semaphore) {
  3289. this._semaphore = semaphore;
  3290. this.NewSubmissions = new NewSubmissions(this._semaphore);
  3291. this.NewMessages = new NewMessages(this._semaphore);
  3292. }
  3293. static get hardActions() {
  3294. return {
  3295. remove: "remove_checked",
  3296. nuke: "nuke_notifications"
  3297. };
  3298. }
  3299. }
  3300. var AccountInformation_awaiter = function(thisArg, _arguments, P, generator) {
  3301. return new (P || (P = Promise))((function(resolve, reject) {
  3302. function fulfilled(value) {
  3303. try {
  3304. step(generator.next(value));
  3305. } catch (e) {
  3306. reject(e);
  3307. }
  3308. }
  3309. function rejected(value) {
  3310. try {
  3311. step(generator.throw(value));
  3312. } catch (e) {
  3313. reject(e);
  3314. }
  3315. }
  3316. function step(result) {
  3317. result.done ? resolve(result.value) : function adopt(value) {
  3318. return value instanceof P ? value : new P((function(resolve) {
  3319. resolve(value);
  3320. }));
  3321. }(result.value).then(fulfilled, rejected);
  3322. }
  3323. step((generator = generator.apply(thisArg, _arguments || [])).next());
  3324. }));
  3325. };
  3326. class AccountInformation {
  3327. constructor(semaphore) {
  3328. this._semaphore = semaphore;
  3329. }
  3330. static get hardLinks() {
  3331. return {
  3332. settings: FuraffinityRequests.fullUrl + "/controls/settings/",
  3333. siteSettings: FuraffinityRequests.fullUrl + "/controls/site-settings/",
  3334. userSettings: FuraffinityRequests.fullUrl + "/controls/user-settings/"
  3335. };
  3336. }
  3337. getSettingsPage(action_1) {
  3338. return AccountInformation_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  3339. return yield WaitAndCallAction.callFunctionAsync(FuraffinityRequests.getHTML, [ AccountInformation.hardLinks.settings, this._semaphore ], action, delay);
  3340. }));
  3341. }
  3342. getSiteSettingsPage(action_1) {
  3343. return AccountInformation_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  3344. return yield WaitAndCallAction.callFunctionAsync(FuraffinityRequests.getHTML, [ AccountInformation.hardLinks.siteSettings, this._semaphore ], action, delay);
  3345. }));
  3346. }
  3347. getUserSettingsPage(action_1) {
  3348. return AccountInformation_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  3349. return yield WaitAndCallAction.callFunctionAsync(FuraffinityRequests.getHTML, [ AccountInformation.hardLinks.userSettings, this._semaphore ], action, delay);
  3350. }));
  3351. }
  3352. }
  3353. var UserProfile_awaiter = function(thisArg, _arguments, P, generator) {
  3354. return new (P || (P = Promise))((function(resolve, reject) {
  3355. function fulfilled(value) {
  3356. try {
  3357. step(generator.next(value));
  3358. } catch (e) {
  3359. reject(e);
  3360. }
  3361. }
  3362. function rejected(value) {
  3363. try {
  3364. step(generator.throw(value));
  3365. } catch (e) {
  3366. reject(e);
  3367. }
  3368. }
  3369. function step(result) {
  3370. result.done ? resolve(result.value) : function adopt(value) {
  3371. return value instanceof P ? value : new P((function(resolve) {
  3372. resolve(value);
  3373. }));
  3374. }(result.value).then(fulfilled, rejected);
  3375. }
  3376. step((generator = generator.apply(thisArg, _arguments || [])).next());
  3377. }));
  3378. };
  3379. class UserProfile {
  3380. constructor(semaphore) {
  3381. this._semaphore = semaphore;
  3382. }
  3383. static get hardLinks() {
  3384. return {
  3385. profile: FuraffinityRequests.fullUrl + "/controls/profile/",
  3386. profilebanner: FuraffinityRequests.fullUrl + "/controls/profilebanner/",
  3387. contacts: FuraffinityRequests.fullUrl + "/controls/contacts/",
  3388. avatar: FuraffinityRequests.fullUrl + "/controls/avatar/"
  3389. };
  3390. }
  3391. getProfilePage(action_1) {
  3392. return UserProfile_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  3393. return yield WaitAndCallAction.callFunctionAsync(FuraffinityRequests.getHTML, [ UserProfile.hardLinks.profile, this._semaphore ], action, delay);
  3394. }));
  3395. }
  3396. getProfilebannerPage(action_1) {
  3397. return UserProfile_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  3398. return yield WaitAndCallAction.callFunctionAsync(FuraffinityRequests.getHTML, [ UserProfile.hardLinks.profilebanner, this._semaphore ], action, delay);
  3399. }));
  3400. }
  3401. getContactsPage(action_1) {
  3402. return UserProfile_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  3403. return yield WaitAndCallAction.callFunctionAsync(FuraffinityRequests.getHTML, [ UserProfile.hardLinks.contacts, this._semaphore ], action, delay);
  3404. }));
  3405. }
  3406. getAvatarPage(action_1) {
  3407. return UserProfile_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  3408. return yield WaitAndCallAction.callFunctionAsync(FuraffinityRequests.getHTML, [ UserProfile.hardLinks.avatar, this._semaphore ], action, delay);
  3409. }));
  3410. }
  3411. }
  3412. var ManageContent_awaiter = function(thisArg, _arguments, P, generator) {
  3413. return new (P || (P = Promise))((function(resolve, reject) {
  3414. function fulfilled(value) {
  3415. try {
  3416. step(generator.next(value));
  3417. } catch (e) {
  3418. reject(e);
  3419. }
  3420. }
  3421. function rejected(value) {
  3422. try {
  3423. step(generator.throw(value));
  3424. } catch (e) {
  3425. reject(e);
  3426. }
  3427. }
  3428. function step(result) {
  3429. result.done ? resolve(result.value) : function adopt(value) {
  3430. return value instanceof P ? value : new P((function(resolve) {
  3431. resolve(value);
  3432. }));
  3433. }(result.value).then(fulfilled, rejected);
  3434. }
  3435. step((generator = generator.apply(thisArg, _arguments || [])).next());
  3436. }));
  3437. };
  3438. class ManageContent {
  3439. constructor(semaphore) {
  3440. this._semaphore = semaphore;
  3441. }
  3442. static get hardLinks() {
  3443. return {
  3444. submissions: FuraffinityRequests.fullUrl + "/controls/submissions/",
  3445. folders: FuraffinityRequests.fullUrl + "/controls/folders/submissions/",
  3446. journals: FuraffinityRequests.fullUrl + "/controls/journal/",
  3447. favorites: FuraffinityRequests.fullUrl + "/controls/favorites/",
  3448. buddylist: FuraffinityRequests.fullUrl + "/controls/buddylist/",
  3449. shouts: FuraffinityRequests.fullUrl + "/controls/shouts/",
  3450. badges: FuraffinityRequests.fullUrl + "/controls/badges/"
  3451. };
  3452. }
  3453. getFoldersPages(action_1) {
  3454. return ManageContent_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  3455. return yield WaitAndCallAction.callFunctionAsync(FuraffinityRequests.getHTML, [ ManageContent.hardLinks.folders, this._semaphore ], action, delay);
  3456. }));
  3457. }
  3458. getAllWatchesPages(action_1) {
  3459. return ManageContent_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  3460. return yield WaitAndCallAction.callFunctionAsync(getContentAllWatchesPagesLocal, [ this._semaphore ], action, delay);
  3461. }));
  3462. }
  3463. getWatchesPage(pageNumber_1, action_1) {
  3464. return ManageContent_awaiter(this, arguments, void 0, (function*(pageNumber, action, delay = 100) {
  3465. pageNumber = convertToNumber(pageNumber);
  3466. return yield WaitAndCallAction.callFunctionAsync(getWatchesPageLocal, [ pageNumber, this._semaphore ], action, delay);
  3467. }));
  3468. }
  3469. }
  3470. function getContentAllWatchesPagesLocal(semaphore) {
  3471. return ManageContent_awaiter(this, void 0, void 0, (function*() {
  3472. let usersDoc = yield FuraffinityRequests.getHTML(ManageContent.hardLinks.buddylist + "x", semaphore);
  3473. const columnPage = null == usersDoc ? void 0 : usersDoc.getElementById("columnpage"), sectionBody = null == columnPage ? void 0 : columnPage.querySelector('div[class="section-body"'), pages = null == sectionBody ? void 0 : sectionBody.querySelectorAll(":scope > a"), userPageDocs = [];
  3474. if (null != pages) for (let i = 1; i <= pages.length; i++) {
  3475. usersDoc = yield getWatchesPageLocal(i, semaphore);
  3476. if (usersDoc) userPageDocs.push(usersDoc);
  3477. }
  3478. return userPageDocs;
  3479. }));
  3480. }
  3481. function getWatchesPageLocal(pageNumber, semaphore) {
  3482. return ManageContent_awaiter(this, void 0, void 0, (function*() {
  3483. if (null == pageNumber || pageNumber <= 0) {
  3484. Logger.logWarning("No page number given. Using default 1 instead.");
  3485. pageNumber = 1;
  3486. }
  3487. return yield FuraffinityRequests.getHTML(ManageContent.hardLinks.buddylist + pageNumber, semaphore);
  3488. }));
  3489. }
  3490. var Security_awaiter = function(thisArg, _arguments, P, generator) {
  3491. return new (P || (P = Promise))((function(resolve, reject) {
  3492. function fulfilled(value) {
  3493. try {
  3494. step(generator.next(value));
  3495. } catch (e) {
  3496. reject(e);
  3497. }
  3498. }
  3499. function rejected(value) {
  3500. try {
  3501. step(generator.throw(value));
  3502. } catch (e) {
  3503. reject(e);
  3504. }
  3505. }
  3506. function step(result) {
  3507. result.done ? resolve(result.value) : function adopt(value) {
  3508. return value instanceof P ? value : new P((function(resolve) {
  3509. resolve(value);
  3510. }));
  3511. }(result.value).then(fulfilled, rejected);
  3512. }
  3513. step((generator = generator.apply(thisArg, _arguments || [])).next());
  3514. }));
  3515. };
  3516. class Security {
  3517. constructor(semaphore) {
  3518. this._semaphore = semaphore;
  3519. }
  3520. static get hardLinks() {
  3521. return {
  3522. sessions: FuraffinityRequests.fullUrl + "/controls/sessions/logins/",
  3523. logs: FuraffinityRequests.fullUrl + "/controls/logs/",
  3524. labels: FuraffinityRequests.fullUrl + "/controls/labels/"
  3525. };
  3526. }
  3527. getSessionsPage(action_1) {
  3528. return Security_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  3529. return yield WaitAndCallAction.callFunctionAsync(FuraffinityRequests.getHTML, [ Security.hardLinks.sessions, this._semaphore ], action, delay);
  3530. }));
  3531. }
  3532. getLogsPage(action_1) {
  3533. return Security_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  3534. return yield WaitAndCallAction.callFunctionAsync(FuraffinityRequests.getHTML, [ Security.hardLinks.logs, this._semaphore ], action, delay);
  3535. }));
  3536. }
  3537. getLabelsPage(action_1) {
  3538. return Security_awaiter(this, arguments, void 0, (function*(action, delay = 100) {
  3539. return yield WaitAndCallAction.callFunctionAsync(FuraffinityRequests.getHTML, [ Security.hardLinks.labels, this._semaphore ], action, delay);
  3540. }));
  3541. }
  3542. }
  3543. class PersonalUserRequests {
  3544. constructor(semaphore) {
  3545. this._semaphore = semaphore;
  3546. this.MessageRequests = new Message(this._semaphore);
  3547. this.AccountInformation = new AccountInformation(this._semaphore);
  3548. this.UserProfile = new UserProfile(this._semaphore);
  3549. this.ManageContent = new ManageContent(this._semaphore);
  3550. this.Security = new Security(this._semaphore);
  3551. }
  3552. }
  3553. var SubmissionRequests_awaiter = function(thisArg, _arguments, P, generator) {
  3554. return new (P || (P = Promise))((function(resolve, reject) {
  3555. function fulfilled(value) {
  3556. try {
  3557. step(generator.next(value));
  3558. } catch (e) {
  3559. reject(e);
  3560. }
  3561. }
  3562. function rejected(value) {
  3563. try {
  3564. step(generator.throw(value));
  3565. } catch (e) {
  3566. reject(e);
  3567. }
  3568. }
  3569. function step(result) {
  3570. result.done ? resolve(result.value) : function adopt(value) {
  3571. return value instanceof P ? value : new P((function(resolve) {
  3572. resolve(value);
  3573. }));
  3574. }(result.value).then(fulfilled, rejected);
  3575. }
  3576. step((generator = generator.apply(thisArg, _arguments || [])).next());
  3577. }));
  3578. };
  3579. class SubmissionRequests {
  3580. constructor(semaphore) {
  3581. this._semaphore = semaphore;
  3582. }
  3583. static get hardLinks() {
  3584. return {
  3585. view: FuraffinityRequests.fullUrl + "/view/",
  3586. fav: FuraffinityRequests.fullUrl + "/fav/",
  3587. unfav: FuraffinityRequests.fullUrl + "/unfav/",
  3588. journal: FuraffinityRequests.fullUrl + "/journal/"
  3589. };
  3590. }
  3591. getSubmissionPage(submissionId_1, action_1) {
  3592. return SubmissionRequests_awaiter(this, arguments, void 0, (function*(submissionId, action, delay = 100) {
  3593. return yield WaitAndCallAction.callFunctionAsync(getSubmissionPageLocal, [ submissionId, this._semaphore ], action, delay);
  3594. }));
  3595. }
  3596. favSubmission(submissionId_1, favKey_1, action_1) {
  3597. return SubmissionRequests_awaiter(this, arguments, void 0, (function*(submissionId, favKey, action, delay = 100) {
  3598. return yield WaitAndCallAction.callFunctionAsync(favSubmissionLocal, [ submissionId, favKey, this._semaphore ], action, delay);
  3599. }));
  3600. }
  3601. unfavSubmission(submissionId_1, unfavKey_1, action_1) {
  3602. return SubmissionRequests_awaiter(this, arguments, void 0, (function*(submissionId, unfavKey, action, delay = 100) {
  3603. return yield WaitAndCallAction.callFunctionAsync(unfavSubmissionLocal, [ submissionId, unfavKey, this._semaphore ], action, delay);
  3604. }));
  3605. }
  3606. getJournalPage(journalId_1, action_1) {
  3607. return SubmissionRequests_awaiter(this, arguments, void 0, (function*(journalId, action, delay = 100) {
  3608. return yield WaitAndCallAction.callFunctionAsync(getJournalPageLocal, [ journalId, this._semaphore ], action, delay);
  3609. }));
  3610. }
  3611. }
  3612. function getSubmissionPageLocal(submissionId, semaphore) {
  3613. return SubmissionRequests_awaiter(this, void 0, void 0, (function*() {
  3614. if (null == submissionId || "" === submissionId || -1 === submissionId) {
  3615. Logger.logError("No submissionId given");
  3616. return;
  3617. }
  3618. const url = SubmissionRequests.hardLinks.view + submissionId;
  3619. return yield FuraffinityRequests.getHTML(url, semaphore);
  3620. }));
  3621. }
  3622. function favSubmissionLocal(submissionId, favKey, semaphore) {
  3623. return SubmissionRequests_awaiter(this, void 0, void 0, (function*() {
  3624. var _a, _b;
  3625. if (null == submissionId || "" === submissionId || -1 === submissionId) {
  3626. Logger.logError("No submissionId given");
  3627. return;
  3628. }
  3629. if (null == favKey || "" === favKey || -1 === favKey) {
  3630. Logger.logError("No favKey given");
  3631. return;
  3632. }
  3633. const url = SubmissionRequests.hardLinks.fav + submissionId + "?key=" + favKey, resultDoc = yield FuraffinityRequests.getHTML(url, semaphore);
  3634. if (null != resultDoc) try {
  3635. const standardpage = resultDoc.getElementById("standardpage");
  3636. if (standardpage) {
  3637. const blocked = standardpage.querySelector('div[class="redirect-message"]');
  3638. if (null !== (_b = null === (_a = null == blocked ? void 0 : blocked.textContent) || void 0 === _a ? void 0 : _a.includes("blocked")) && void 0 !== _b ? _b : false) return;
  3639. }
  3640. return getFavKeyLocal(resultDoc);
  3641. } catch (_c) {}
  3642. }));
  3643. }
  3644. function unfavSubmissionLocal(submissionId, unfavKey, semaphore) {
  3645. return SubmissionRequests_awaiter(this, void 0, void 0, (function*() {
  3646. if (null == submissionId || "" === submissionId || -1 === submissionId) {
  3647. Logger.logError("No submissionId given");
  3648. return;
  3649. }
  3650. if (null == unfavKey || "" === unfavKey || -1 === unfavKey) {
  3651. Logger.logError("No unfavKey given");
  3652. return;
  3653. }
  3654. const url = SubmissionRequests.hardLinks.unfav + submissionId + "?key=" + unfavKey, resultDoc = yield FuraffinityRequests.getHTML(url, semaphore);
  3655. if (resultDoc) {
  3656. return getFavKeyLocal(resultDoc);
  3657. }
  3658. }));
  3659. }
  3660. function getJournalPageLocal(journalId, semaphore) {
  3661. return SubmissionRequests_awaiter(this, void 0, void 0, (function*() {
  3662. if (null == journalId || "" === journalId || -1 === journalId) {
  3663. Logger.logError("No journalId given");
  3664. return;
  3665. }
  3666. const url = SubmissionRequests.hardLinks.journal + journalId;
  3667. return yield FuraffinityRequests.getHTML(url, semaphore);
  3668. }));
  3669. }
  3670. function getFavKeyLocal(doc) {
  3671. var _a, _b, _c;
  3672. const columnPage = doc.getElementById("columnpage"), navbar = null == columnPage ? void 0 : columnPage.querySelector('div[class*="favorite-nav"'), buttons = null == navbar ? void 0 : navbar.querySelectorAll('a[class*="button"][href]');
  3673. if (!buttons || 0 === buttons.length) return;
  3674. let favButton;
  3675. for (const button of Array.from(buttons)) if (null !== (_b = null === (_a = null == button ? void 0 : button.textContent) || void 0 === _a ? void 0 : _a.toLowerCase().includes("fav")) && void 0 !== _b ? _b : false) favButton = button;
  3676. if (null != favButton) {
  3677. return null === (_c = favButton.getAttribute("href")) || void 0 === _c ? void 0 : _c.split("?key=")[1];
  3678. }
  3679. }
  3680. var FuraffinityRequests_awaiter = function(thisArg, _arguments, P, generator) {
  3681. return new (P || (P = Promise))((function(resolve, reject) {
  3682. function fulfilled(value) {
  3683. try {
  3684. step(generator.next(value));
  3685. } catch (e) {
  3686. reject(e);
  3687. }
  3688. }
  3689. function rejected(value) {
  3690. try {
  3691. step(generator.throw(value));
  3692. } catch (e) {
  3693. reject(e);
  3694. }
  3695. }
  3696. function step(result) {
  3697. result.done ? resolve(result.value) : function adopt(value) {
  3698. return value instanceof P ? value : new P((function(resolve) {
  3699. resolve(value);
  3700. }));
  3701. }(result.value).then(fulfilled, rejected);
  3702. }
  3703. step((generator = generator.apply(thisArg, _arguments || [])).next());
  3704. }));
  3705. };
  3706. class FuraffinityRequests {
  3707. constructor(maxAmountRequests = 2) {
  3708. this._semaphore = new Semaphore(maxAmountRequests);
  3709. this.UserRequests = new UserRequests(this._semaphore);
  3710. this.PersonalUserRequests = new PersonalUserRequests(this._semaphore);
  3711. this.SubmissionRequests = new SubmissionRequests(this._semaphore);
  3712. }
  3713. set maxAmountRequests(value) {
  3714. if (this._semaphore.maxConcurrency !== value) this._semaphore.maxConcurrency = value;
  3715. }
  3716. get maxAmountRequests() {
  3717. return this._semaphore.maxConcurrency;
  3718. }
  3719. static set useHttps(value) {
  3720. if (FuraffinityRequests._useHttps !== value) {
  3721. FuraffinityRequests._useHttps = value;
  3722. if (value) FuraffinityRequests._httpsString = "https://"; else FuraffinityRequests._httpsString = "http://";
  3723. }
  3724. }
  3725. static get useHttps() {
  3726. return FuraffinityRequests._useHttps;
  3727. }
  3728. static get fullUrl() {
  3729. return FuraffinityRequests._httpsString + FuraffinityRequests._domain;
  3730. }
  3731. static getHTML(url_1, semaphore_1, action_1) {
  3732. return FuraffinityRequests_awaiter(this, arguments, void 0, (function*(url, semaphore, action, delay = 100) {
  3733. if (null != url && "" !== url) return yield WaitAndCallAction.callFunctionAsync(getHTMLLocal, [ url, semaphore ], action, delay); else Logger.logError("No url given");
  3734. }));
  3735. }
  3736. static postHTML(url_1, payload_1, semaphore_1, action_1) {
  3737. return FuraffinityRequests_awaiter(this, arguments, void 0, (function*(url, payload, semaphore, action, delay = 100) {
  3738. if (null != url && "" !== url) return yield WaitAndCallAction.callFunctionAsync(postHTMLLocal, [ url, payload, semaphore ], action, delay); else Logger.logError("No url given");
  3739. }));
  3740. }
  3741. }
  3742. FuraffinityRequests.logLevel = 1;
  3743. FuraffinityRequests.Types = {
  3744. BrowseOptions,
  3745. SearchOptions
  3746. };
  3747. FuraffinityRequests._useHttps = true;
  3748. FuraffinityRequests._httpsString = "https://";
  3749. FuraffinityRequests._domain = "www.furaffinity.net";
  3750. function getHTMLLocal(url, semaphore) {
  3751. return FuraffinityRequests_awaiter(this, void 0, void 0, (function*() {
  3752. Logger.logInfo(`Requesting '${url}'`);
  3753. const semaphoreActive = null != semaphore && semaphore.maxConcurrency > 0;
  3754. if (semaphoreActive) yield semaphore.acquire();
  3755. try {
  3756. const response = yield fetch(url), html = yield response.text(), parser = new DOMParser;
  3757. return parser.parseFromString(html, "text/html");
  3758. } catch (error) {
  3759. Logger.logError(error);
  3760. } finally {
  3761. if (semaphoreActive) semaphore.release();
  3762. }
  3763. }));
  3764. }
  3765. function postHTMLLocal(url, payload, semaphore) {
  3766. return FuraffinityRequests_awaiter(this, void 0, void 0, (function*() {
  3767. const semaphoreActive = null != semaphore && semaphore.maxConcurrency > 0;
  3768. if (semaphoreActive) yield semaphore.acquire();
  3769. try {
  3770. const response = yield fetch(url, {
  3771. method: "POST",
  3772. body: new URLSearchParams(payload).toString(),
  3773. headers: {
  3774. "Content-Type": "application/x-www-form-urlencoded"
  3775. }
  3776. });
  3777. if (!response.ok) {
  3778. Logger.logError(`HTTP error! Status: ${response.status}`);
  3779. return;
  3780. }
  3781. const responseData = yield response.text();
  3782. try {
  3783. const parser = new DOMParser;
  3784. return parser.parseFromString(responseData, "text/html");
  3785. } catch (_a) {
  3786. Logger.logError(`Failed to parse response data as HTML: ${responseData}`);
  3787. }
  3788. } catch (error) {
  3789. Logger.logError(error);
  3790. } finally {
  3791. if (semaphoreActive) semaphore.release();
  3792. }
  3793. }));
  3794. }
  3795. Object.defineProperties(window, {
  3796. FARequestHelper: {
  3797. get: () => FuraffinityRequests
  3798. }
  3799. });
  3800. })();