goofy_History update

- async support added
- added a buffer zone in localStorage for storing sent tracks
- added a delay between sending tracks
This commit is contained in:
amd64fox
2025-01-18 09:18:19 +03:00
parent 42e40ddd25
commit 0658ccba4d

View File

@@ -1,20 +1,68 @@
const unique = new Set();
// max track buffer for localStorage
// when the limit is reached, old tracks will be removed from the beginning, and new ones will be added to the end
const MAX_TRACKS = 1000;
function goofyHistory(e, urlForm, idBox) {
// max delay between switching tracks (ms)
const MAX_DELAY = 1000;
const uri = e?.item?.uri;
function debounce(func, wait) {
let timeout;
return function executedFunction(...args) {
const later = () => {
clearTimeout(timeout);
func(...args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}
if (uri && uri.includes('spotify:track:') && !unique.has(uri)) {
const loadTracksFromStorage = () => {
try {
const savedTracks = localStorage.getItem('sentSpotifyTracks');
return new Set(savedTracks ? JSON.parse(savedTracks) : []);
} catch (error) {
console.error('Error loading tracks from localStorage:', error);
return new Set();
}
};
unique.add(uri);
const saveTracksToStorage = (tracks) => {
try {
let tracksArray = [...tracks];
fetch(urlForm, {
if (tracksArray.length > MAX_TRACKS) {
tracksArray = tracksArray.slice(-MAX_TRACKS);
}
localStorage.setItem('sentSpotifyTracks', JSON.stringify(tracksArray));
} catch (error) {
console.error('Error saving tracks to localStorage:', error);
}
};
const unique = loadTracksFromStorage();
async function sendToGoogleForm(uri, urlForm, idBox) {
try {
await fetch(urlForm, {
"headers": {
"content-type": "application/x-www-form-urlencoded",
},
"body": "entry." + idBox + "=" + uri,
"method": "POST",
"mode": "no-cors",
}).catch(error => console.error('error sending uri to google form:', error));
});
saveTracksToStorage(unique);
} catch (error) {
console.error('Error sending uri to google form:', error);
}
}
const goofyHistory = debounce(async (e, urlForm, idBox) => {
const uri = e?.item?.uri;
if (uri && uri.includes('spotify:track:') && !unique.has(uri)) {
unique.add(uri);
await sendToGoogleForm(uri, urlForm, idBox);
}
}, MAX_DELAY);