120 lines
2.8 KiB
Bash
Executable File
120 lines
2.8 KiB
Bash
Executable File
#! /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" | b64decode | 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" | b64decode | 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
|
|
}
|
|
|
|
function b64decode() {
|
|
if printf "" | base64 --decode 2> /dev/null; then
|
|
base64 --decode
|
|
else
|
|
base64 -d
|
|
fi
|
|
}
|
|
|
|
if [ "$0" == "$BASH_SOURCE" ]; then
|
|
echo bash migrate.sh 192.168.0.86:44112 localhost:38809
|
|
time main "$@"
|
|
fi
|