Mi ci è voluto un po’ per analizzare questo, ma penso di aver trovato la causa. Penso che abbia a che fare con questo codice:
def fetch_uploads(params:, guardian:)
return [] if !SiteSetting.chat_allow_uploads
guardian.user.uploads.where(id: params.upload_ids) # Nello specifico, qui
end
Quando viene creato un nuovo messaggio di chat, questo viene chiamato per recuperare gli upload da allegare al messaggio. Forse per garantire la proprietà, il metodo passa attraverso l’utente del Guardian per recuperare gli upload in modo da consentire solo gli upload appartenenti a quell’utente.
Il problema è che gli upload vengono deduplicati, come si vede qui:
# abbiamo già quell'upload?
@upload = Upload.find_by(sha1: sha1)
# ...
# restituisci l'upload precedente, se presente
if @upload
add_metadata!
UserUpload.find_or_create_by!(user_id: user_id, upload_id: @upload.id) if user_id
return @upload
end
Penso che una possibile soluzione sarebbe passare attraverso gli UserUpload invece di considerare solo gli upload appartenenti all’utente. UserUpload collega gli upload a più utenti, il che sembra essere ciò di cui abbiamo bisogno. Non sono ancora sicuro al 100% su come farlo correttamente; si sta facendo tardi, quindi vado a dormire, ma se nessun altro lo risolve, tornerò più tardi per provare a lavorare su una PR. ![]()