#! /bin/bash function main() { set -e set -u local from_addr="$1" local to_addr="$2" log migrating $from_addr to $to_addr for list in $(get_lists "$from_addr"); do migrate_tasks "$from_addr" "$to_addr" "$list" done } function log() { echo "> $@" >&2 } function CURL() { curl "$@" 2> /dev/null } function get_lists() { local addr="$1" CURL "$addr/ajax.php?loadLists" \ | jq -r .list[].id } function migrate_tasks() { local from_addr="$1" local to_addr="$2" local from_list="$3" local to_list=$(lookup_list "$from_addr" "$from_list" "$to_addr") local has_tasks="$(list_tasks "$to_addr" "$to_list" | base64 --decode | jq .title)" for task in $(list_tasks "$from_addr" "$from_list"); do add_task "$to_addr" "$to_list" "$task" "$has_tasks" done } function lookup_list() { local from_addr="$1" local from_list="$2" local to_addr="$3" local name=$(CURL "$from_addr/ajax.php?loadLists" \ | jq -c .list[] \ | grep "\"$from_list\"" \ | jq -r .name) if ! CURL "$to_addr/ajax.php?loadLists" \ | jq -c .list[] \ | grep "\"$name\"" \ | jq -r .id \ | grep .; then CURL \ -X POST \ "$to_addr/ajax.php?addList" \ --data-urlencode "name=$name" \ | jq -r .list[0].id fi } function list_tasks() { local addr="$1" local list="$2" CURL "$addr/ajax.php?loadTasks&list=$list&compl=1" \ | jq -c .list[] | while read -r task; do printf "%s }\n" "${task%\}}" | base64 | tr -d ' ' | tr -d '\n' echo "" done } function add_task() { local addr="$1" local list="$2" local task="$(echo -n "$3" | base64 --decode | jq "del(.id, .listId)")" local has_tasks="$4" local title="$(echo "$task" | jq -r .title)" local tags="$(echo "$task" | jq -r .tags)" if echo "$has_tasks" | grep "\"$title\"" > /dev/null; then return fi log migrating title=$title local id="$(CURL \ -X POST \ "$addr/ajax.php?newTask" \ --data-urlencode "list=$list" \ --data-urlencode "title=$title /$tags/" \ 2> /dev/null \ | jq -r .list[0].id )" if echo "$task" | jq -r .compl | grep 1 > /dev/null; then CURL \ -X POST \ "$addr/ajax.php?completeTask=$id" \ -d "id=$id" \ -d "compl=1" \ > /dev/null fi if echo "$task" | jq -r .noteText | grep . > /dev/null; then local text="$(printf "$task" | jq -r .noteText)" CURL \ -X POST \ "$addr/ajax.php?editNote=$id" \ -d "id=$id" \ --data-urlencode "note=$text" \ > /dev/null fi } if [ "$0" == "$BASH_SOURCE" ]; then time main "$@" fi