summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick McDermott <patrick.mcdermott@libiquity.com>2021-08-25 17:46:48 (EDT)
committer Patrick McDermott <patrick.mcdermott@libiquity.com>2021-08-25 19:17:18 (EDT)
commitf28e5ea9263e31005ee6cf245e33b25afd5052e4 (patch)
tree0208ac00e7490f19bd9fe3ad547fc6f0d585822d
parent1dc221b4b8fd408642b6f85d5736afb41557e5e4 (diff)
downloadgajim-f28e5ea9263e31005ee6cf245e33b25afd5052e4.zip
gajim-f28e5ea9263e31005ee6cf245e33b25afd5052e4.tar.gz
gajim-f28e5ea9263e31005ee6cf245e33b25afd5052e4.tar.bz2
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.
-rw-r--r--.gitconfig.d/gajim4
-rw-r--r--.gitignore.d/gajim3
-rwxr-xr-xlib/gajim/settings-clean75
-rwxr-xr-xlib/gajim/settings-clean-sub-account-settings8
-rwxr-xr-xlib/gajim/settings-smudge36
5 files changed, 124 insertions, 2 deletions
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 [<table>.<column>=<value> ...]\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 "${@}"