mirror of
https://github.com/FrankerFaceZ/FrankerFaceZ.git
synced 2025-08-07 23:00:54 +00:00
Attempt at fixing caching issues with Apollo for the stream up-time display, as well as adding a re-usable function for grabbing data from Apollo.
This commit is contained in:
parent
863eafd32f
commit
d2b4dcbce4
2 changed files with 62 additions and 15 deletions
|
@ -60,20 +60,8 @@ export default class Metadata extends Module {
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
const socket = this.resolve('socket'),
|
const socket = this.resolve('socket'),
|
||||||
query = this.resolve('site.apollo').getQuery('ChannelPage_ChannelInfoBar_User'),
|
apollo = this.resolve('site.apollo'),
|
||||||
result = query && query.lastResult,
|
created_at = apollo.getFromQuery('ChannelPage_ChannelInfoBar_User', 'data.user.stream.createdAt');
|
||||||
created_at = result && get('data.user.stream.createdAt', result);
|
|
||||||
|
|
||||||
if ( ! query )
|
|
||||||
return {};
|
|
||||||
|
|
||||||
if ( created_at === undefined && ! query._ffz_refetched ) {
|
|
||||||
query._ffz_refetched = true;
|
|
||||||
if ( result )
|
|
||||||
result.stale = true;
|
|
||||||
query.refetch();
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! created_at )
|
if ( ! created_at )
|
||||||
return {};
|
return {};
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
import Module from 'utilities/module';
|
import Module from 'utilities/module';
|
||||||
import {has} from 'utilities/object';
|
import {has, get} from 'utilities/object';
|
||||||
|
|
||||||
export default class Apollo extends Module {
|
export default class Apollo extends Module {
|
||||||
constructor(...args) {
|
constructor(...args) {
|
||||||
|
@ -264,6 +264,65 @@ export default class Apollo extends Module {
|
||||||
return query && query.observableQuery;
|
return query && query.observableQuery;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ensureQuery(operation, predicate, delay = 500, retry_wait = 120000) {
|
||||||
|
const query = this.getQuery(operation);
|
||||||
|
|
||||||
|
if ( query ) {
|
||||||
|
const result = query.lastResult;
|
||||||
|
let passed;
|
||||||
|
if ( ! result )
|
||||||
|
passed = false;
|
||||||
|
else if ( result.loading )
|
||||||
|
passed = true;
|
||||||
|
else if ( typeof predicate === 'function' )
|
||||||
|
passed = predicate(result);
|
||||||
|
else
|
||||||
|
passed = get(predicate, result) !== undefined;
|
||||||
|
|
||||||
|
if ( ! passed && Date.now() - (query._ffz_last_retry || 0) >= retry_wait ) {
|
||||||
|
query._ffz_last_retry = Date.now();
|
||||||
|
if ( delay === 0 )
|
||||||
|
query.refetch();
|
||||||
|
else if ( delay > 0 )
|
||||||
|
setTimeout(() => query.refetch(), delay);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
getFromQuery(operation, predicate, delay = 500, retry_wait = 120000) {
|
||||||
|
const query = this.getQuery(operation),
|
||||||
|
result = query && query.lastResult;
|
||||||
|
|
||||||
|
if ( ! query )
|
||||||
|
return undefined;
|
||||||
|
|
||||||
|
let out;
|
||||||
|
|
||||||
|
if ( result ) {
|
||||||
|
if ( typeof predicate === 'function' )
|
||||||
|
out = predicate(result);
|
||||||
|
else
|
||||||
|
out = get(predicate, result)
|
||||||
|
|
||||||
|
if ( result.loading )
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( out === undefined && Date.now() - (query._ffz_last_retry || 0) >= retry_wait ) {
|
||||||
|
query._ffz_last_retry = Date.now();
|
||||||
|
if ( delay === 0 )
|
||||||
|
query.refetch();
|
||||||
|
else if ( delay > 0 )
|
||||||
|
setTimeout(() => query.refetch(), delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue