function idAndType(obj){ let data = obj.dateInfo.split('T') let keyData = data[1].split('.')[0].split(':') let uniqueKey = keyData[1] + keyData[2] let id = obj.author + uniqueKey //type : post, video, images if (obj.videoSrc){ obj.type = "video" id += ".video" }else if(obj.imgSrc){ obj.type = "image" id += ".image" }else { obj.type = "post" id += ".post" } obj.caption = id } export async function loadPostData(){ //liste des utilisateurice const usernamesRes = await fetch('/DATA/peopleData.json'); const pData = await usernamesRes.json(); //console.log("USERS :", pData); const res = await fetch("https://pouet.drags-nerds.net/api/v1/timelines/public?local=true&limit=40"); if (!res.ok) throw new Error(`Server responded with ${res.status} ${res.statusText}`); const pouets = await res.json(); //console.log("POUETS :" , pouets); const filtered = pouets.filter(p => pData.some(user => p.account.username === user.name || p.reblog?.account.username === user.name)); console.log("FILTERED :" , filtered); //création des dossiers const files = {}; for (const user of pData) { files[user.name] = []; } //console.log(files) //récupérationn des descriptions/bio const description = {}; for (const user of pData){ const pouet = filtered.find(p => p.account.username === user.name); if(pouet?.account.note){ let data = pouet.account.note.split('
').filter(e => e) let bio = ""; for (let line of data){ bio += line + '\n' } description[user.name] = bio } else { description[user.name] = 'NO DESCRIPTION' } } //formattage des posts for (const pouet of filtered){ let selectedPouet; //si reblog chercher post origine if(pouet.reblog){ selectedPouet = pouet.reblog; } else { selectedPouet = pouet; } //console.log(selectedPouet); const username = selectedPouet.account.username; const displayName = selectedPouet.account.display_name; let date = selectedPouet.created_at; let entry; //ignorer réponses if (selectedPouet.in_reply_to_account_id) { continue; } //ignorer audio dans cette section if (selectedPouet.media_attachments?.length > 0 &&selectedPouet.media_attachments[0].type.includes('audio')){ continue } // on commence par le texte du post entry = { type: "", caption : "", content : selectedPouet.content, imgSrc : null, videoSrc : null, author : displayName, dateInfo : date, like : selectedPouet.favourites_count, isSelected: false } if (selectedPouet.media_attachments?.length > 0){ if (selectedPouet.media_attachments[0].type.includes('video')){ entry.videoSrc = selectedPouet.media_attachments[0].url } else if (selectedPouet.media_attachments[0].type.includes('image')){ entry.imgSrc = selectedPouet.media_attachments[0].url } } //create id for title and unique name idAndType(entry); //console.log(entry); //add to folder files[username].push(entry); } //tri des post const dragContent = pData.filter(user => user.folder === 0).map(user => ( { type: "folder", caption: user.name + '.info', children: files[user.name], description: description[user.name], isSelected: false })); const nerdContent = pData.filter(user => user.folder === 1).map(user => ( { type: "folder", caption: user.name + '.info', children: files[user.name], description: description[user.name], isSelected: false })); const otherContent = pData.filter(user => user.folder === 2).flatMap(user => files[user.name]); //dossier final const sortedContent = [ { type: "folder", caption : "Artistes Drags", description:"Pour en savoir plus sur nos artistes drags, c'est par ici !", children: dragContent, isSelected: false }, { type: "folder", caption : "Artistes Nerds", description:"Pour en savoir plus sur nos artistes nerds, c'est par là !", children: nerdContent, isSelected: false }, { type: "folder", caption : "Autres contenus", description:"Dans cette section, on place pleins de contenu, en vrac, \n sur nous, nos copaines, des trucs qu'on trouve cool, etc.", children: otherContent, isSelected: false } ]; return sortedContent; }