مرحباً، أود الإبلاغ عن مشكلة وجدتها عند تحميل الملفات أو الصور في رسائل الدردشة المباشرة.
عندما يقوم المستخدم أ بتحميل الملف أ في منشور أو دردشة، فإنه يعمل بشكل جيد ويتم تسجيل الملف بشكل صحيح.
ولكن عندما يقوم المستخدم ب بتنزيل الملف أ ثم يحاول تحميله مرة أخرى في دردشة أخرى:
إذا أرسل المستخدم ب الملف بدون نص، فإنه يحصل على خطأ:
الرسالة قصيرة جدًا، يجب أن يكون لها حد أدنى من حرف واحد.
إذا أرسل المستخدم ب الملف مع نص، يتم إرسال النص فقط - المرفق مفقود.
ومع ذلك، إذا قام المستخدم أ بإعادة تحميل نفس الملف مرة أخرى، فإنه يعمل بشكل جيد ويتم تضمين الملف في الرسالة.
سؤالي:
هل هذا هو السلوك المقصود، حيث يمكن فقط للمُحمِّل الأصلي إعادة استخدام ملف تم تحميله؟ أم يجب أن يتمكن المستخدمون الآخرون أيضًا من تحميل وإرسال نفس الملف في الدردشة؟
لقد استغرقت بعض الوقت للبحث في هذا، ولكن أعتقد أنني وجدت السبب. أعتقد أن الأمر يتعلق بـ هذا الكود:
def fetch_uploads(params:, guardian:)
return [] if !SiteSetting.chat_allow_uploads
guardian.user.uploads.where(id: params.upload_ids) # بالتحديد، هنا
end
عند إنشاء رسالة دردشة جديدة، يتم استدعاء هذا لجلب الملفات المرفوعة لإرفاقها بالرسالة. ربما لضمان الملكية، تمر الطريقة عبر مستخدم Guardian لجلب الملفات المرفوعة للسماح فقط بالملفات المرفوعة التي تخص هذا المستخدم.
المشكلة هي أن الملفات المرفوعة يتم إزالة التكرار منها، كما هو موضح هنا:
# هل لدينا بالفعل هذا الملف المرفوع؟
@upload = Upload.find_by(sha1: sha1)
# ...
# إرجاع الملف المرفوع السابق إن وجد
if @upload
add_metadata!
UserUpload.find_or_create_by!(user_id: user_id, upload_id: @upload.id) if user_id
return @upload
end
أعتقد أن الحل الممكن سيكون المرور عبر UserUploads بدلاً من مجرد النظر إلى الملفات المرفوعة التي تخص المستخدم. يربط UserUpload الملفات المرفوعة بعدة مستخدمين، وهو ما يبدو أننا نحتاجه. لست متأكدًا بنسبة 100٪ بعد من كيفية القيام بذلك بشكل صحيح؛ لقد تأخر الوقت، لذا سأذهب للنوم، ولكن إذا لم يقم شخص آخر بإصلاحه، فسأحاول العودة لاحقًا والعمل على طلب سحب.
أرى أن بعض الاختبارات قد فشلت، ولكنها ليست اختبارات قمت بتعديلها. كنت أواجه مشاكل في تشغيل الاختبارات في هذه الملفات محليًا أيضًا - لقد حصلت على نفس أخطاء المفتاح المكرر التي أراها هنا… لست متأكدًا مما إذا كنت أنا من كسرت شيئًا ما أو ما إذا كانت الاختبارات متقلبة في بعض الأحيان…