From f28e5ea9263e31005ee6cf245e33b25afd5052e4 Mon Sep 17 00:00:00 2001 From: Patrick McDermott Date: Wed, 25 Aug 2021 17:46:48 -0400 Subject: lib/gajim/settings-*: New scripts bin/sqlite3-git-* were more general-purpose scripts in the vcsh dotfiles repository. These scripts are specific for Gajim and use sqlite3 and jq to clean settings.sqlite. --- diff --git a/.gitconfig.d/gajim b/.gitconfig.d/gajim index 6d62db5..18b8164 100644 --- a/.gitconfig.d/gajim +++ b/.gitconfig.d/gajim @@ -1,3 +1,3 @@ [filter "settings.sqlite"] - clean = ~/bin/sqlite3-git-clean - smudge = ~/bin/sqlite3-git-smudge + clean = ~/lib/gajim/settings-clean + smudge = ~/lib/gajim/settings-smudge diff --git a/.gitignore.d/gajim b/.gitignore.d/gajim index 59d8310..b0b7b6c 100644 --- a/.gitignore.d/gajim +++ b/.gitignore.d/gajim @@ -5,6 +5,9 @@ !/.config/ !/.config/gajim/ !/.config/gajim/settings.sqlite +!/lib/ +!/lib/gajim/ +!/lib/gajim/* # Include Git attributes, config, and excludes files !/.gitattributes.d/ diff --git a/lib/gajim/settings-clean b/lib/gajim/settings-clean new file mode 100755 index 0000000..c906ff6 --- /dev/null +++ b/lib/gajim/settings-clean @@ -0,0 +1,75 @@ +#!/bin/sh + +set -eu + +input_to_db() +{ + local input= + local db= + + input="$(mktemp)" || return 1 + cat - 1>"${input}" || { rm -f "${input}"; return 1; } + if file "${input}" | grep -Fq SQLite; then + # Input still a database: use it directly. + db="${input}" + else + # Input already dumped to SQL: enter it into temporary database. + db="$(mktemp)" || { rm -f "${input}"; return 1; } + sqlite3 "${db}" 0<"${input}" || { rm -f "${input}"; return 1; } + rm -f "${input}" || { rm -f "${db}"; return 1; } + fi + + printf '%s' "${db}" + return 0 +} + +clean() +{ + local db="${1}" + shift 1 + + sqlite3 "${db}" "UPDATE account_settings SET $(: \ + )settings = edit(settings, \"${0}-sub-account-settings\");" || \ + return 1 + + return 0 +} + +db_to_sql() +{ + local db="${1}" + shift 1 + + sqlite3 "${db}" '.dump' || return 1 + + return 0 +} + +usage() +{ + printf 'Usage: %s [.= ...]\n' "${0}" + + return 0 +} + +main() +{ + local arg= + local db= + + for arg in "${@}"; do + case "${arg}" in + ?*.?*=?*);; + *) usage 1>&2; return 1;; + esac + done + + db="$(input_to_db)" || return 1 + clean "${db}" || { rm -f "${db}"; return 1; } + db_to_sql "${db}" || { rm -f "${db}"; return 1; } + rm -f "${db}" || return 1 + + return 0 +} + +main "${@}" diff --git a/lib/gajim/settings-clean-sub-account-settings b/lib/gajim/settings-clean-sub-account-settings new file mode 100755 index 0000000..43e9ca9 --- /dev/null +++ b/lib/gajim/settings-clean-sub-account-settings @@ -0,0 +1,8 @@ +#!/bin/sh + +set -eu + +clean="$(jq \ + 'del(.contact[], .group_chat[]) | .account.opened_chat_controls = ""' \ + "${1}" | sed -n '1h; 1!H; ${ g; s/,\n */, /g; s/\n *//g; p; };')" +printf '%s' "${clean}" 1>"${1}" diff --git a/lib/gajim/settings-smudge b/lib/gajim/settings-smudge new file mode 100755 index 0000000..db1221b --- /dev/null +++ b/lib/gajim/settings-smudge @@ -0,0 +1,36 @@ +#!/bin/sh + +set -eu + +sql_to_db() +{ + local db= + + db="$(mktemp)" || return 1 # Create new empty DB. + sqlite3 "${db}" || { rm -f "${db}"; return 1; } # Fill DB from stdin. + cat "${db}" || { rm -f "${db}"; return 1; } # Output DB. + rm -f "${db}" || return 1 # Clean up. + + return 0 +} + +usage() +{ + printf 'Usage: %s\n' "${0}" + + return 0 +} + +main() +{ + if [ ${#} -ne 0 ]; then + usage 1>&2 + return 1 + fi + + sql_to_db || return 1 + + return 0 +} + +main "${@}" -- cgit v0.9.1