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_SYNC_KEY = 'fb_tracker_ai_settings_sync';
|
||||
const AI_AVAILABILITY_AUTO_REFRESH_INTERVAL_MS = 30 * 1000;
|
||||
const aiSettingsCache = {
|
||||
data: null,
|
||||
timestamp: 0,
|
||||
pending: null
|
||||
};
|
||||
const aiAvailabilitySubscribers = new Set();
|
||||
const aiAvailabilityRefreshSubscribers = new Set();
|
||||
let aiSettingsBroadcastChannel = null;
|
||||
let aiAvailabilityAutoRefreshInitialized = false;
|
||||
const MODERATION_SETTINGS_CACHE_TTL = 5 * 60 * 1000;
|
||||
const moderationSettingsCache = {
|
||||
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() {
|
||||
if (aiSettingsBroadcastChannel || typeof BroadcastChannel !== 'function') {
|
||||
return aiSettingsBroadcastChannel;
|
||||
@@ -6941,6 +6978,22 @@ async function addAICommentButton(container, postElement) {
|
||||
|
||||
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 note = getAdditionalNote();
|
||||
const hasNote = note.trim().length > 0;
|
||||
|
||||
Reference in New Issue
Block a user