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() {
|
||||
const socket = this.resolve('socket'),
|
||||
query = this.resolve('site.apollo').getQuery('ChannelPage_ChannelInfoBar_User'),
|
||||
result = query && query.lastResult,
|
||||
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 {};
|
||||
}
|
||||
apollo = this.resolve('site.apollo'),
|
||||
created_at = apollo.getFromQuery('ChannelPage_ChannelInfoBar_User', 'data.user.stream.createdAt');
|
||||
|
||||
if ( ! created_at )
|
||||
return {};
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
// ============================================================================
|
||||
|
||||
import Module from 'utilities/module';
|
||||
import {has} from 'utilities/object';
|
||||
import {has, get} from 'utilities/object';
|
||||
|
||||
export default class Apollo extends Module {
|
||||
constructor(...args) {
|
||||
|
@ -264,6 +264,65 @@ export default class Apollo extends Module {
|
|||
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