Account subscriptions manager for the Brazen user scripts framework
Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://update.greatest.deepsurf.us/scripts/424516/1847310/Brazen%20Framework%20-%20Subscriptions%20Loader.js
// ==UserScript==
// @name Brazen Framework - Subscriptions Loader
// @namespace brazenvoid
// @version 1.0.3
// @author brazenvoid
// @license GPL-3.0-only
// @description Account subscriptions manager for the Brazen user scripts framework
// ==/UserScript==
class BrazenSubscriptionsLoader
{
/**
* @callback SubscriptionLoaderGetPageCountCallback
* @param {JQuery} page
* @return {number}
*/
/**
* @callback SubscriptionLoaderGetPageUrlCallback
* @param {string} baseUrl
* @param {number} pageNo
* @return {string}
*/
/**
* @callback SubscriptionLoaderProgressReportingCallback
* @param {string} status
*/
/**
* @callback SubscriptionLoaderSubscriptionsGatheredCallback
* @param {string[]} subscriptions
*/
/**
* @typedef {{url: string, getPageCount: SubscriptionLoaderGetPageCountCallback, getPageUrl: SubscriptionLoaderGetPageUrlCallback,
* subscriptionNameSelector: string, subscriptionsCountSelector: string}} SubscriptionLoaderConfig
*/
/**
* @param {SubscriptionLoaderProgressReportingCallback} onProgressUpdate
* @param {SubscriptionLoaderSubscriptionsGatheredCallback} onSubscriptionsGathered
*/
constructor (onProgressUpdate, onSubscriptionsGathered)
{
/**
* @type {number}
* @private
*/
this._configIterator = 0
/**
* @type {SubscriptionLoaderConfig[]}
* @private
*/
this._configs = []
/**
* @type {SubscriptionLoaderProgressReportingCallback}
* @private
*/
this._onProgressUpdate = onProgressUpdate
/**
* @type {SubscriptionLoaderSubscriptionsGatheredCallback}
* @private
*/
this._onSubscriptionsGathered = onSubscriptionsGathered
/**
* @type {JQuery}
* @private
*/
this._sandbox = null
/**
* @type {SubscriptionLoaderConfig}
* @private
*/
this._selectedConfig = {}
/**
* @type {*[]}
* @private
*/
this._subscriptions = []
}
/**
* Loads and records subscriptions by page
* @param {number} maxPage
* @param {number} pageNo
* @private
*/
_loadSubscriptionsPage (pageNo, maxPage)
{
this._sandbox.empty().load(this._selectedConfig.getPageUrl(this._selectedConfig.url, pageNo), () => {
this._sandbox.find(this._selectedConfig.subscriptionNameSelector).each((index, element) => {
this._subscriptions.push($(element).text().trim())
})
this._onProgressUpdate('Gathering subscriptions - ' + Math.ceil(((pageNo / maxPage) * 100)) + '% Complete')
pageNo++
if (pageNo <= maxPage) {
this._loadSubscriptionsPage(pageNo, maxPage)
} else {
this._configIterator++
if (this._configIterator < this._configs.length) {
this._processSubscriptions()
} else {
this._sandbox.remove()
this._onProgressUpdate('Loaded ' + this._subscriptions.length + ' subscriptions. Reload?')
this._onSubscriptionsGathered(this._subscriptions)
this._configIterator = 0
this._subscriptions = []
}
}
})
}
/**
* @private
*/
_processSubscriptions ()
{
this._selectedConfig = this._configs[this._configIterator]
this._sandbox.empty().load(this._selectedConfig.url + ' ' + this._selectedConfig.subscriptionsCountSelector, () => {
this._loadSubscriptionsPage(1, Math.ceil(this._selectedConfig.getPageCount(this._sandbox)))
})
}
/**
* @param {SubscriptionLoaderConfig} config
* @returns {BrazenSubscriptionsLoader}
*/
addConfig (config)
{
this._configs.push(config)
return this
}
run ()
{
this._onProgressUpdate('Gathering subscriptions - 0% Complete')
this._sandbox = $('<div id="brazen-subscriptions-loader-sandbox" hidden/>').appendTo('body')
this._processSubscriptions()
}
}