1
0
mirror of https://git.sr.ht/~cadence/bibliogram synced 2024-11-22 08:07:30 +00:00

Preserve history error kind

This commit is contained in:
Cadence Ember 2021-01-30 19:40:20 +13:00
parent 2419fbf08b
commit 5ed035a432
No known key found for this signature in database
GPG Key ID: BC1C2C61CF521B17
2 changed files with 11 additions and 9 deletions

View File

@ -91,7 +91,7 @@ function fetchUserFromHTML(username) {
if (history.store.has("user")) { if (history.store.has("user")) {
const entry = history.store.get("user") const entry = history.store.get("user")
if (!entry.lastRequestSuccessful && Date.now() < entry.lastRequestAt + blockedCacheConfig.time) { if (!entry.lastRequestSuccessful && Date.now() < entry.lastRequestAt + blockedCacheConfig.time) {
return Promise.reject(constants.symbols.RATE_LIMITED) return Promise.reject(entry.kind || constants.symbols.RATE_LIMITED)
} }
} }
} }
@ -148,7 +148,7 @@ function fetchUserFromHTML(username) {
} }
}).catch(error => { }).catch(error => {
if (error === constants.symbols.INSTAGRAM_DEMANDS_LOGIN || error === constants.symbols.RATE_LIMITED) { if (error === constants.symbols.INSTAGRAM_DEMANDS_LOGIN || error === constants.symbols.RATE_LIMITED) {
history.report("user", false) history.report("user", false, error)
} }
throw error throw error
}) })
@ -230,7 +230,7 @@ function fetchUserFromCombined(userID, username) {
return {user, quotaUsed} return {user, quotaUsed}
}).catch(error => { }).catch(error => {
if (error === constants.symbols.RATE_LIMITED) { if (error === constants.symbols.RATE_LIMITED) {
history.report("reel", false) history.report("reel", false, error)
} }
throw error throw error
}) })
@ -277,7 +277,7 @@ function fetchTimelinePage(userID, after) {
if (history.store.has("timeline")) { if (history.store.has("timeline")) {
const entry = history.store.get("timeline") const entry = history.store.get("timeline")
if (!entry.lastRequestSuccessful && Date.now() < entry.lastRequestAt + blockedCacheConfig.time) { if (!entry.lastRequestSuccessful && Date.now() < entry.lastRequestAt + blockedCacheConfig.time) {
return Promise.reject(constants.symbols.RATE_LIMITED) return Promise.reject(entry.kind || constants.symbols.RATE_LIMITED)
} }
} }
} }
@ -305,7 +305,7 @@ function fetchTimelinePage(userID, after) {
return timeline return timeline
}).catch(error => { }).catch(error => {
if (error === constants.symbols.RATE_LIMITED || error === constants.symbols.INSTAGRAM_BLOCK_TYPE_DECEMBER) { if (error === constants.symbols.RATE_LIMITED || error === constants.symbols.INSTAGRAM_BLOCK_TYPE_DECEMBER) {
history.report("timeline", false) history.report("timeline", false, error)
} }
throw error throw error
}) })
@ -337,7 +337,7 @@ function fetchIGTVPage(userID, after) {
return timeline return timeline
}).catch(error => { }).catch(error => {
if (error === constants.symbols.RATE_LIMITED || error === constants.symbols.INSTAGRAM_BLOCK_TYPE_DECEMBER) { if (error === constants.symbols.RATE_LIMITED || error === constants.symbols.INSTAGRAM_BLOCK_TYPE_DECEMBER) {
history.report("igtv", false) history.report("igtv", false, error)
} }
throw error throw error
}) })
@ -441,7 +441,7 @@ function fetchShortcodeData(shortcode) {
} }
}).catch(error => { }).catch(error => {
if (error === constants.symbols.RATE_LIMITED || error === constants.symbols.INSTAGRAM_BLOCK_TYPE_DECEMBER) { if (error === constants.symbols.RATE_LIMITED || error === constants.symbols.INSTAGRAM_BLOCK_TYPE_DECEMBER) {
history.report("post", false) history.report("post", false, error)
} }
throw error throw error
}) })

View File

@ -7,7 +7,7 @@ class RequestHistory {
*/ */
constructor(tracked) { constructor(tracked) {
this.tracked = new Set(tracked) this.tracked = new Set(tracked)
/** @type {Map<string, {lastRequestAt: number | null, lastRequestSuccessful: boolean | null}>} */ /** @type {Map<string, {lastRequestAt: number | null, lastRequestSuccessful: boolean | null, kind?: any}>} */
this.store = new Map() this.store = new Map()
for (const key of tracked) { for (const key of tracked) {
this.store.set(key, { this.store.set(key, {
@ -20,12 +20,14 @@ class RequestHistory {
/** /**
* @param {string} key * @param {string} key
* @param {boolean} success * @param {boolean} success
* @param {any} [kind]
*/ */
report(key, success) { report(key, success, kind) {
if (!this.tracked.has(key)) throw new Error(`Trying to report key ${key}, but is not tracked`) if (!this.tracked.has(key)) throw new Error(`Trying to report key ${key}, but is not tracked`)
const entry = this.store.get(key) const entry = this.store.get(key)
entry.lastRequestAt = Date.now() entry.lastRequestAt = Date.now()
entry.lastRequestSuccessful = success entry.lastRequestSuccessful = success
entry.kind = kind
if (constants.caching.db_request_history) { if (constants.caching.db_request_history) {
db.prepare("INSERT INTO RequestHistory (type, success, timestamp) VALUES (?, ?, ?)").run(key, +entry.lastRequestSuccessful, entry.lastRequestAt) db.prepare("INSERT INTO RequestHistory (type, success, timestamp) VALUES (?, ?, ?)").run(key, +entry.lastRequestSuccessful, entry.lastRequestAt)
} }