#!/bin/bash
#
# Wipe all Akonadi/Kontact data from a user's KDE4 directories, backing it up to
# a directory in $HOME in the process.
#
# Author: Bryan Gardiner <bog@khumba.net>
#
# Released under the WTFPL (www.wtfpl.net), under no warranty whatsoever.

# Where to put the nuked files.
ROOTDIR_BASE="$(realpath "$HOME")/akonuke-"

# These are all subdirs of $HOME.
KDE_APPS_DIR=".kde4/share/apps"
KDE_CONFIG_DIR=".kde4/share/config"
AKONADI_CONFIG_DIR=".config"
AKONADI_DATA_DIR=".local/share"

# Normally hide moving errors, for non-existant files.
SHOW_NONEXISTANT_FILES=1

#######

NUMBER=0
while [[ -e "$ROOTDIR_BASE$NUMBER" ]]; do
    NUMBER=$(( $NUMBER + 1 ))
done
ROOTDIR="$ROOTDIR_BASE$NUMBER"

echo "Will nuke to $ROOTDIR."
echo

echo "Checking that expected directories exist..."
if [[ ! -d "$HOME/$KDE_APPS_DIR" ]]; then
    echo "~/\$KDE_APPS_DIR does not exist ($HOME/$KDE_APPS_DIR).  Aborting."
    exit 1
fi
if [[ ! -d "$HOME/$KDE_CONFIG_DIR" ]]; then
    echo "~/\$KDE_CONFIG_DIR does not exist ($HOME/$KDE_CONFIG_DIR).  Aborting."
    exit 1
fi

echo
echo "Looks good, proceeding to nuke."
echo "** If you don't see 'All Clear!' below, run echo \$? to get the exit code. **"

echo
echo "- $HOME/$KDE_APPS_DIR"
FROM="$HOME/$KDE_APPS_DIR"
TO="$ROOTDIR/$KDE_APPS_DIR"
cd "$FROM" || exit 2
mkdir -p "$TO"
for OBJ in akregator emailidentities kabc kjots kjotsmigrator kmail2 knotes kontact korganizer kres-migrator nepomuk; do
    ( [[ $SHOW_NONEXISTANT_FILES -ne 0 ]] || [[ -x "$OBJ" ]] ) \
        && mv -v "$OBJ" "$TO/"
done

echo
echo "- $HOME/$KDE_CONFIG_DIR"
FROM="$HOME/$KDE_CONFIG_DIR"
TO="$ROOTDIR/$KDE_CONFIG_DIR"
cd "$FROM" || exit 3
mkdir -p "$TO"
for OBJ in akonadi* akregatorrc emaildefaults emailidentities kaddressbookmigratorrc kaddressbookrc kcmkresourcesrc kio_nepomuksearchrc kjotsmigratorrc kmail2.notifyrc kmail2rc kmail.eventsrc kmail-migratorrc kmailsnippetrc kontactrc kontact_summaryrc korgacrc korganizerrc kres-migratorrc kresources mailtransports nepomukbackuprc nepomukserverrc nepomukstrigirc specialmailcollectionsrc; do
    ( [[ $SHOW_NONEXISTANT_FILES -ne 0 ]] || [[ -x "$OBJ" ]] ) \
        && mv -v "$OBJ" "$TO/"
done

echo
echo "- $HOME/$AKONADI_CONFIG_DIR"
FROM="$HOME/$AKONADI_CONFIG_DIR"
TO="$ROOTDIR/$AKONADI_CONFIG_DIR"
cd "$FROM" || exit 4
mkdir -p "$TO"
for OBJ in akonadi; do
    ( [[ $SHOW_NONEXISTANT_FILES -ne 0 ]] || [[ -x "$OBJ" ]] ) \
        && mv -v "$OBJ" "$TO/"
done

echo
echo "- $HOME/$AKONADI_DATA_DIR"
FROM="$HOME/$AKONADI_DATA_DIR"
TO="$ROOTDIR/$AKONADI_DATA_DIR"
cd "$FROM" || exit 4
mkdir -p "$TO"
for OBJ in akonadi contacts local-mail notes; do
    ( [[ $SHOW_NONEXISTANT_FILES -ne 0 ]] || [[ -x "$OBJ" ]] ) \
        && mv -v "$OBJ" "$TO/"
done

echo
echo "All clear! Good luck."
