146 lines
3.3 KiB
Crystal
146 lines
3.3 KiB
Crystal
|
|
require "json"
|
|
require "./src/project.cr"
|
|
|
|
require "option_parser"
|
|
|
|
require "./altsrc/common.cr"
|
|
require "./altsrc/main.cr"
|
|
|
|
new_storage_dir = "./new-storage"
|
|
old_storage_dir = "./old-storage"
|
|
user_id = 1001
|
|
|
|
OptionParser.parse do |parser|
|
|
parser.on "-n new-storage-directory",
|
|
"--new-directory storage-directory",
|
|
"The new directory where to put converted files." do |opt|
|
|
new_storage_dir = opt
|
|
end
|
|
|
|
parser.on "-u user-id",
|
|
"--user-id user-id",
|
|
"User id of the author of all lists." do |opt|
|
|
user_id = opt.to_i
|
|
end
|
|
parser.on "-o old-storage-directory",
|
|
"--old-storage-directory directory",
|
|
"Old storage directory, to convert." do |opt|
|
|
old_storage_dir = opt
|
|
end
|
|
|
|
parser.on "-h", "--help", "Show this help" do
|
|
puts parser
|
|
puts "Default values are:"
|
|
pp! new_storage_dir
|
|
pp! old_storage_dir
|
|
pp! user_id
|
|
exit 0
|
|
end
|
|
end
|
|
|
|
# 1. get the old list of projects
|
|
old_storage = Project.all old_storage_dir
|
|
|
|
# PROJECT: JSON.mapping({
|
|
# PROJECT: id: String,
|
|
# PROJECT: name: String,
|
|
# PROJECT: columns: Array(Column),
|
|
# PROJECT: tasks: Array(Task),
|
|
# PROJECT: })
|
|
|
|
# TASKS: JSON.mapping({
|
|
# TASKS: id: String,
|
|
# TASKS: author: Int32,
|
|
# TASKS: title: String,
|
|
# TASKS: description: String,
|
|
# TASKS: column: String,
|
|
# TASKS: assigned_to: Int32?,
|
|
# TASKS: color: {
|
|
# TASKS: type: String,
|
|
# TASKS: default: "dark"
|
|
# TASKS: }
|
|
# TASKS: })
|
|
|
|
# 2. create the new storage
|
|
new_storage = TodoD::Storage.new new_storage_dir
|
|
|
|
|
|
# 3. for each project (old name for "list")
|
|
# 3.1. get list properties
|
|
# 3.2. get tasks, create new tasks and store them
|
|
# 3.3. create and store the new list
|
|
|
|
class User
|
|
property uid : Int32 = 1001
|
|
end
|
|
|
|
|
|
|
|
old_storage.each do |old_project|
|
|
puts ""
|
|
puts ""
|
|
puts ""
|
|
puts "projet #{old_project.name}"
|
|
|
|
# 3.1. get list properties
|
|
extra_properties = Hash(String, JSON::Any).new
|
|
# columns = JSON.parse(old_project.columns.to_json)
|
|
columns = Array(Hash(String, String)).new
|
|
old_project.columns.each do |col|
|
|
column = { "id" => col.id, "title" => col.name }
|
|
columns << column
|
|
puts "column :"
|
|
pp! column
|
|
end
|
|
|
|
extra_properties["columns"] = JSON.parse(columns.to_json)
|
|
|
|
|
|
# 3.2. get tasks, create new tasks and store them
|
|
tasks = Array(TodoD::Task).new
|
|
|
|
old_project.tasks.each do |t|
|
|
# pp! t
|
|
|
|
# 1. get informations about the task
|
|
# 2. create a task in the new format
|
|
|
|
task_extra_properties = Hash(String, JSON::Any).new
|
|
task_extra_properties["column"] = JSON.parse(t.column.to_json)
|
|
|
|
# change the default color of the task, to match the new default list background color
|
|
if t.color == "dark"
|
|
task_extra_properties["backgroundColor"] = JSON.parse("white".to_json)
|
|
else
|
|
task_extra_properties["backgroundColor"] = JSON.parse(t.color.to_json)
|
|
end
|
|
task_extra_properties["assigneeId"] = JSON.parse(t.assigned_to.to_json)
|
|
|
|
newtask = ::TodoD::Task.new old_project.id, t.title, t.author,
|
|
description: (t.description || ""),
|
|
assigned_to: t.assigned_to,
|
|
extra_properties: task_extra_properties
|
|
|
|
# pp! newtask
|
|
|
|
# 3. store the new task
|
|
tasks << newtask
|
|
new_storage.tasks << newtask
|
|
end
|
|
|
|
# finally, create the list with all the parameters
|
|
|
|
u = User.new
|
|
u.uid = user_id
|
|
list = TodoD::List.new old_project.name, u, extra_properties
|
|
list.id = old_project.id
|
|
list.tasks = tasks.map &.id
|
|
|
|
# puts ""
|
|
pp! list
|
|
|
|
# finally, store the new list
|
|
new_storage.lists << list
|
|
end
|