From 7f71a05b88934a57c98a1bf9765efc23e67fb32a Mon Sep 17 00:00:00 2001
From: Felix Eckhofer <felix@eckhofer.com>
Date: Thu, 26 Dec 2024 13:33:45 +0100
Subject: [PATCH] Fix import logic from filedrop

---
 app/jobs/pretalx/import_job.rb | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/app/jobs/pretalx/import_job.rb b/app/jobs/pretalx/import_job.rb
index 268289b..ff75c19 100644
--- a/app/jobs/pretalx/import_job.rb
+++ b/app/jobs/pretalx/import_job.rb
@@ -147,13 +147,13 @@ module Pretalx
       # Add or update comments
       data["comments"]&.each do |comment_data|
         session.filedrop_comments.find_or_initialize_by(body: comment_data['body']).tap do |comment|
-          comment.orig_created = comment_data['created']
+          comment.orig_created = parse_datetime_or_nil(comment_data['meta']['created'])
           comment.save!
         end
       end
 
       existing_files = session.filedrop_files.pluck(:name, :checksum)
-      new_files = data['filedrop_files']&.pluck('name', 'hash') || []
+      new_files = data['files']&.map { |d| [d['name'], d.dig('meta', 'hash')] } || []
 
       # Remove files not in the JSON file
       (existing_files - new_files).each do |name, checksum|
@@ -164,11 +164,17 @@ module Pretalx
       data['files']&.each do |file_data|
         session.filedrop_files.find_or_initialize_by(name: file_data['name'], checksum: file_data['meta']['hash']).tap do |file|
           file.size = file_data['meta']['size']
-          file.orig_created = file_data['meta']['created']
+          file.orig_created = parse_datetime_or_nil(file_data['meta']['created'])
           file.download(filedrop_config['url'] + file_data['url']) unless filedrop_config.fetch('skip_downloads', false)
           file.save
         end
       end
     end
+
+    def parse_datetime_or_nil(datetime_string)
+      DateTime.iso8601(datetime_string)
+    rescue
+      nil
+    end
   end
 end
-- 
GitLab