anki-update
This commit is contained in:
parent
d18717f7e3
commit
eb22176b2a
|
|
@ -1,5 +1,8 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
anki_connect="localhost:8765"
|
||||||
afield="sent_a"
|
afield="sent_a"
|
||||||
aext="ogg"
|
aext="ogg"
|
||||||
ifield="img"
|
ifield="img"
|
||||||
|
|
@ -11,25 +14,16 @@ rfield="sent_r"
|
||||||
lock="$TMPDIR/ankiupdatelock"
|
lock="$TMPDIR/ankiupdatelock"
|
||||||
|
|
||||||
log() {
|
log() {
|
||||||
notify-send "$1"
|
notify-send "anki-update: $1"
|
||||||
printf "\e[33m%s\e[0m\n" "$1"
|
printf "\e[33m%s\e[0m\n" "$1"
|
||||||
}
|
}
|
||||||
|
fail() {
|
||||||
#####
|
log "$1"
|
||||||
|
bell
|
||||||
if ! [ -e "$lock" ] && [ "$1" != "-s" ]; then
|
exit 1
|
||||||
log 'recording started'
|
}
|
||||||
record-audio \
|
|
||||||
-af silenceremove=1:0:-50dB \
|
|
||||||
"$TMPDIR/aud-$$.$aext" &
|
|
||||||
echo "$$,$!" > "$lock"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
#####
|
|
||||||
|
|
||||||
anki() {
|
anki() {
|
||||||
curl -s localhost:8765 -X POST -d "$(printf '{"action":"%s","version":6,"params":%s}' "$1" "$2")"
|
curl -s "$anki_connect" -X POST -d "$(printf '{"action":"%s","version":6,"params":%s}' "$1" "$2")"
|
||||||
}
|
}
|
||||||
stop_record() {
|
stop_record() {
|
||||||
kill "$pid2"
|
kill "$pid2"
|
||||||
|
|
@ -41,13 +35,14 @@ screenshot() {
|
||||||
tag="$(xprop -id "$window" | sed -n 's/^WM_NAME(STRING) = "\(.*\)"$/\1/p' | tr ' ' _)"
|
tag="$(xprop -id "$window" | sed -n 's/^WM_NAME(STRING) = "\(.*\)"$/\1/p' | tr ' ' _)"
|
||||||
echo "* tag: $tag"
|
echo "* tag: $tag"
|
||||||
}
|
}
|
||||||
get_note() {
|
get_latest() {
|
||||||
id="$(anki findNotes '{"query":"added:1"}' | jq .result[-1])"
|
id="$(anki findNotes '{"query":"added:1"}')" || fail "anki connect unreachable"
|
||||||
|
id="$(echo "$id" | jq .result[-1])"
|
||||||
if [ "$id" = "null" ]; then
|
if [ "$id" = "null" ]; then
|
||||||
log "no note to update"
|
fail "no note to update"
|
||||||
bell
|
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
|
get_note_field() {
|
||||||
note="$(anki notesInfo "$(printf '{"notes":[%d]}' "$id")")"
|
note="$(anki notesInfo "$(printf '{"notes":[%d]}' "$id")")"
|
||||||
old_sent="$(echo "$note" | jq -r .result[0].fields.['"'"$sfield"'"'].value)"
|
old_sent="$(echo "$note" | jq -r .result[0].fields.['"'"$sfield"'"'].value)"
|
||||||
echo "* old sentence: $old_sent"
|
echo "* old sentence: $old_sent"
|
||||||
|
|
@ -65,41 +60,14 @@ get_reading() {
|
||||||
echo "* clipboard: $sent"
|
echo "* clipboard: $sent"
|
||||||
case "$sent" in
|
case "$sent" in
|
||||||
*"$old_term"*) ;;
|
*"$old_term"*) ;;
|
||||||
*) log "clipboard does not contain term"; bell; exit 1 ;;
|
*) fail "clipboard does not contain term" ;;
|
||||||
esac
|
esac
|
||||||
reading="$(furigana "$sent")"
|
reading="$(furigana "$sent")"
|
||||||
sent="$(echo $sent | a="$old_term" pyp -b 's=os.environ["a"]' 'x.replace(s, "<b>%s</b>"%s)')"
|
sent="$(echo $sent | a="$old_term" pyp -b 's=os.environ["a"]' 'x.replace(s, "<b>%s</b>"%s)')"
|
||||||
echo "* new sentence: $sent"
|
echo "* new sentence: $sent"
|
||||||
echo "* reading: $sent"
|
echo "* reading: $sent"
|
||||||
}
|
}
|
||||||
|
update() {
|
||||||
if [ "$1" = "-s" ]; then
|
|
||||||
image="$TMPDIR/img-$$.$iext"
|
|
||||||
trap "rm '$image'" EXIT
|
|
||||||
|
|
||||||
screenshot
|
|
||||||
get_note
|
|
||||||
get_name
|
|
||||||
get_reading
|
|
||||||
else
|
|
||||||
IFS=, read pid1 pid2 < "$lock"
|
|
||||||
audio="$TMPDIR/aud-$pid1.$aext"
|
|
||||||
image="$TMPDIR/img-$pid1.$iext"
|
|
||||||
trap "rm '$audio' '$image' '$lock'" EXIT
|
|
||||||
|
|
||||||
log "stopping recording"
|
|
||||||
stop_record
|
|
||||||
screenshot
|
|
||||||
get_note
|
|
||||||
get_name
|
|
||||||
get_reading
|
|
||||||
|
|
||||||
append="$(printf ', "audio":{
|
|
||||||
"filename":"%s",
|
|
||||||
"path":"%s",
|
|
||||||
"fields":["%s"]
|
|
||||||
}' "$aname" "$audio" "$afield")"
|
|
||||||
fi
|
|
||||||
anki updateNote "$(printf '{"note":{
|
anki updateNote "$(printf '{"note":{
|
||||||
"id":%d,
|
"id":%d,
|
||||||
"tags":"%s",
|
"tags":"%s",
|
||||||
|
|
@ -109,5 +77,49 @@ anki updateNote "$(printf '{"note":{
|
||||||
"path":"%s",
|
"path":"%s",
|
||||||
"fields":["%s"]
|
"fields":["%s"]
|
||||||
}%s
|
}%s
|
||||||
}}' "$id" "$tag" "$sfield" "$sent" "$rfield" "$reading" "$iname" "$image" "$ifield" "$append")"
|
}}' "$id" "$tag" "$sfield" "$sent" "$rfield" "$reading" "$iname" "$image" "$ifield" "$1")"
|
||||||
log "updated note $id"
|
log "updated note $id"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$1" = "-s" ]; then
|
||||||
|
image="$TMPDIR/img-$$.$iext"
|
||||||
|
trap "rm '$image'" EXIT
|
||||||
|
|
||||||
|
get_latest
|
||||||
|
screenshot
|
||||||
|
get_note_field
|
||||||
|
get_name
|
||||||
|
get_reading
|
||||||
|
update
|
||||||
|
elif [ "$1" = "-x" ]; then
|
||||||
|
[ -e "$lock" ] || fail "not running"
|
||||||
|
IFS=, read pid1 pid2 id < "$lock"
|
||||||
|
kill "$pid2"
|
||||||
|
audio="$TMPDIR/aud-$pid1.$aext"
|
||||||
|
rm "$audio" "$lock"
|
||||||
|
log "cancelled anki update"
|
||||||
|
elif ! [ -e "$lock" ]; then
|
||||||
|
get_latest
|
||||||
|
log 'recording started'
|
||||||
|
record-audio \
|
||||||
|
-af silenceremove=1:0:-50dB \
|
||||||
|
"$TMPDIR/aud-$$.$aext" &
|
||||||
|
echo "$$,$!,$id" > "$lock"
|
||||||
|
else
|
||||||
|
IFS=, read pid1 pid2 id < "$lock"
|
||||||
|
audio="$TMPDIR/aud-$pid1.$aext"
|
||||||
|
image="$TMPDIR/img-$pid1.$iext"
|
||||||
|
trap "rm '$audio' '$image' '$lock'" EXIT
|
||||||
|
|
||||||
|
log "stopping recording"
|
||||||
|
stop_record
|
||||||
|
screenshot
|
||||||
|
get_note_field
|
||||||
|
get_name
|
||||||
|
get_reading
|
||||||
|
update "$(printf ', "audio":{
|
||||||
|
"filename":"%s",
|
||||||
|
"path":"%s",
|
||||||
|
"fields":["%s"]
|
||||||
|
}' "$aname" "$audio" "$afield")"
|
||||||
|
fi
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue