Auto-refresh AI limit status in visible tabs
This commit is contained in:
@@ -1018,13 +1018,16 @@ const aiCredentialCache = {
|
|||||||
};
|
};
|
||||||
const AI_SETTINGS_CACHE_TTL = 30 * 1000;
|
const AI_SETTINGS_CACHE_TTL = 30 * 1000;
|
||||||
const AI_SETTINGS_SYNC_KEY = 'fb_tracker_ai_settings_sync';
|
const AI_SETTINGS_SYNC_KEY = 'fb_tracker_ai_settings_sync';
|
||||||
|
const AI_AVAILABILITY_AUTO_REFRESH_INTERVAL_MS = 30 * 1000;
|
||||||
const aiSettingsCache = {
|
const aiSettingsCache = {
|
||||||
data: null,
|
data: null,
|
||||||
timestamp: 0,
|
timestamp: 0,
|
||||||
pending: null
|
pending: null
|
||||||
};
|
};
|
||||||
const aiAvailabilitySubscribers = new Set();
|
const aiAvailabilitySubscribers = new Set();
|
||||||
|
const aiAvailabilityRefreshSubscribers = new Set();
|
||||||
let aiSettingsBroadcastChannel = null;
|
let aiSettingsBroadcastChannel = null;
|
||||||
|
let aiAvailabilityAutoRefreshInitialized = false;
|
||||||
const MODERATION_SETTINGS_CACHE_TTL = 5 * 60 * 1000;
|
const MODERATION_SETTINGS_CACHE_TTL = 5 * 60 * 1000;
|
||||||
const moderationSettingsCache = {
|
const moderationSettingsCache = {
|
||||||
data: null,
|
data: null,
|
||||||
@@ -1154,6 +1157,40 @@ function notifyAIAvailabilitySubscribers() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function notifyAIAvailabilityRefreshSubscribers(options = {}) {
|
||||||
|
aiAvailabilityRefreshSubscribers.forEach((subscriber) => {
|
||||||
|
try {
|
||||||
|
subscriber(options);
|
||||||
|
} catch (error) {
|
||||||
|
console.warn('[FB Tracker] Failed to notify AI availability refresh subscriber:', error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function ensureAIAvailabilityAutoRefresh() {
|
||||||
|
if (aiAvailabilityAutoRefreshInitialized) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
aiAvailabilityAutoRefreshInitialized = true;
|
||||||
|
|
||||||
|
window.addEventListener('focus', () => {
|
||||||
|
notifyAIAvailabilityRefreshSubscribers({ forceRefresh: true, source: 'window-focus' });
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener('visibilitychange', () => {
|
||||||
|
if (document.visibilityState === 'visible') {
|
||||||
|
notifyAIAvailabilityRefreshSubscribers({ forceRefresh: true, source: 'visibility-visible' });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
window.setInterval(() => {
|
||||||
|
if (document.visibilityState !== 'visible') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
notifyAIAvailabilityRefreshSubscribers({ forceRefresh: true, source: 'visible-poll' });
|
||||||
|
}, AI_AVAILABILITY_AUTO_REFRESH_INTERVAL_MS);
|
||||||
|
}
|
||||||
|
|
||||||
function ensureAISettingsBroadcastChannel() {
|
function ensureAISettingsBroadcastChannel() {
|
||||||
if (aiSettingsBroadcastChannel || typeof BroadcastChannel !== 'function') {
|
if (aiSettingsBroadcastChannel || typeof BroadcastChannel !== 'function') {
|
||||||
return aiSettingsBroadcastChannel;
|
return aiSettingsBroadcastChannel;
|
||||||
@@ -6941,6 +6978,22 @@ async function addAICommentButton(container, postElement) {
|
|||||||
|
|
||||||
aiAvailabilitySubscribers.add(handleSharedAISettingsUpdate);
|
aiAvailabilitySubscribers.add(handleSharedAISettingsUpdate);
|
||||||
|
|
||||||
|
const handleAutoRefreshAvailability = ({ forceRefresh = false } = {}) => {
|
||||||
|
if (!wrapper.isConnected) {
|
||||||
|
aiAvailabilitySubscribers.delete(handleSharedAISettingsUpdate);
|
||||||
|
aiAvailabilityRefreshSubscribers.delete(handleAutoRefreshAvailability);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const currentState = button.dataset.aiState || 'idle';
|
||||||
|
if (currentState !== 'idle' || button._aiContext) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
void refreshAvailabilityState(forceRefresh);
|
||||||
|
};
|
||||||
|
|
||||||
|
aiAvailabilityRefreshSubscribers.add(handleAutoRefreshAvailability);
|
||||||
|
ensureAIAvailabilityAutoRefresh();
|
||||||
|
|
||||||
const updateNoteIndicator = () => {
|
const updateNoteIndicator = () => {
|
||||||
const note = getAdditionalNote();
|
const note = getAdditionalNote();
|
||||||
const hasNote = note.trim().length > 0;
|
const hasNote = note.trim().length > 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user