Furaffinity-Request-Helper

Library to simplify requests to Furaffinity

This script should not be not be installed directly. It is a library for other scripts to include with the meta directive // @require https://update.greatest.deepsurf.us/scripts/483952/1549453/Furaffinity-Request-Helper.js

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