96 lines
2.6 KiB
Ruby
96 lines
2.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require_relative "./socialcast_message.rb"
|
|
require_relative "./socialcast_user.rb"
|
|
require "set"
|
|
require File.expand_path(File.dirname(__FILE__) + "/../base.rb")
|
|
|
|
class ImportScripts::Socialcast < ImportScripts::Base
|
|
MESSAGES_DIR = "output/messages"
|
|
USERS_DIR = "output/users"
|
|
|
|
def initialize
|
|
super
|
|
@system_user = Discourse.system_user
|
|
end
|
|
|
|
def execute
|
|
puts "", "Importing Socialcast Users..."
|
|
import_users
|
|
puts "", "Importing Socialcast Messages..."
|
|
import_messages
|
|
EmailToken.delete_all
|
|
puts "", "Done"
|
|
end
|
|
|
|
def import_messages
|
|
topics = 0
|
|
imported = 0
|
|
total = count_files(MESSAGES_DIR)
|
|
Dir.foreach(MESSAGES_DIR) do |filename|
|
|
next if filename == (".") || filename == ("..")
|
|
topics += 1
|
|
message_json = File.read MESSAGES_DIR + "/" + filename
|
|
message = SocialcastMessage.new(message_json)
|
|
next unless message.title
|
|
created_topic = import_topic message.topic
|
|
import_posts message.replies, created_topic.topic_id if created_topic
|
|
imported += 1
|
|
print_status topics, total
|
|
end
|
|
puts "", "Imported #{imported} topics. Skipped #{total - imported}."
|
|
end
|
|
|
|
def import_users
|
|
users = 0
|
|
total = count_files(USERS_DIR)
|
|
Dir.foreach(USERS_DIR) do |filename|
|
|
next if filename == (".") || filename == ("..")
|
|
user_json = File.read USERS_DIR + "/" + filename
|
|
user = SocialcastUser.new(user_json).user
|
|
create_user user, user[:id]
|
|
users += 1
|
|
print_status users, total
|
|
end
|
|
end
|
|
|
|
def count_files(path)
|
|
Dir.foreach(path).select { |f| f != "." && f != ".." }.count
|
|
end
|
|
|
|
def import_topic(topic)
|
|
post = nil
|
|
if post_id = post_id_from_imported_post_id(topic[:id])
|
|
post = Post.find(post_id) # already imported this topic
|
|
else
|
|
topic[:user_id] = user_id_from_imported_user_id(topic[:author_id]) || -1
|
|
|
|
post = create_post(topic, topic[:id])
|
|
|
|
unless post.is_a?(Post)
|
|
puts "Error creating topic #{topic[:id]}. Skipping."
|
|
puts post.inspect
|
|
end
|
|
end
|
|
|
|
post
|
|
end
|
|
|
|
def import_posts(posts, topic_id)
|
|
posts.each { |post| import_post post, topic_id }
|
|
end
|
|
|
|
def import_post(post, topic_id)
|
|
return if post_id_from_imported_post_id(post[:id]) # already imported
|
|
post[:topic_id] = topic_id
|
|
post[:user_id] = user_id_from_imported_user_id(post[:author_id]) || -1
|
|
new_post = create_post post, post[:id]
|
|
unless new_post.is_a?(Post)
|
|
puts "Error creating post #{post[:id]}. Skipping."
|
|
puts new_post.inspect
|
|
end
|
|
end
|
|
end
|
|
|
|
ImportScripts::Socialcast.new.perform if __FILE__ == $0
|