103 lines
2.6 KiB
Ruby
103 lines
2.6 KiB
Ruby
|
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 == '.' or 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
|
||
|
if created_topic
|
||
|
import_posts message.replies, created_topic.topic_id
|
||
|
end
|
||
|
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 == '.' or 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
|
||
|
topic[:category] = 'Socialcast Import'
|
||
|
|
||
|
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 do |post|
|
||
|
import_post post, topic_id
|
||
|
end
|
||
|
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
|
||
|
|
||
|
if __FILE__==$0
|
||
|
ImportScripts::Socialcast.new.perform
|
||
|
end
|