diff options
Diffstat (limited to 'debian/thunderbird-wrapper.sh')
-rwxr-xr-x | debian/thunderbird-wrapper.sh | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/debian/thunderbird-wrapper.sh b/debian/thunderbird-wrapper.sh new file mode 100755 index 0000000000..b3f7c2e7b7 --- /dev/null +++ b/debian/thunderbird-wrapper.sh @@ -0,0 +1,270 @@ +#!/bin/bash +# vim: autoindent tabstop=4 shiftwidth=4 expandtab softtabstop=4 filetype=sh textwidth=76 +# +# File: +# /usr/bin/thunderbird +# +# Purpose: +# This is a wrapper script for starting the thunderbird binary with taking +# care of the searching for an old user Icedove profile folder and adopting +# the folder into the new place if possible. +# +# Environment: +# The Icedove binary was using the profile folder '${HOME}/.icedove'. The +# Mozilla default for the Thunderbird binary is '${HOME}/.thunderbird'. +# The script will looking for the old profile folder and will symlink the +# folder '${HOME}/.thunderbird' to the profile folder '${HOME}/.icedove'. +# +# Copyright: +# Licensed under the terms of GPLv2+. + +#set -x + +TB_HELPER=${TB_HELPER:-"/usr/lib/thunderbird/thunderbird-wrapper-helper.sh"} +# sourcing external variables and helper functions +# hide the sourcing for http://www.shellcheck.net/ +# shellcheck source=/dev/null +. "${TB_HELPER}" +if [ $? -ne 0 ]; then + echo "sourcing ${TB_HELPER} failed - giving up." + exit 1 +fi + +# some global variables +MOZ_APP_NAME=thunderbird +MOZ_APP_LAUNCHER=$(command -v "$0") +MOZ_LIBDIR=/usr/lib/${MOZ_APP_NAME} +ID_PROFILE_FOLDER=${HOME}/.icedove +TB_PROFILE_FOLDER=${HOME}/.thunderbird +TB_GDB_DEFAULT_OPTS=${TB_GDB_DEFAULT_OPTS:-"-ex \"handle SIG38 nostop\" -ex \"handle SIGPIPE nostop\""} + +export TB_HELP=0 +export TB_FAIL=0 +export FORCE_MIMEAPPS_MIGRATE=0 +export TB_VERBOSE=0 +unset DEBUG +unset DEBUGGER + +# set MOZ_APP_LAUNCHER for gnome-session +export MOZ_APP_LAUNCHER + +# let Thunderbird detect the system dictionaries +export DICPATH=/usr/share/hunspell + +declare -a TB_ARGS=() + +for ARG in "$@"; do + case "${ARG}" in + --fixmime) + FIXMIME=1 + FORCE_MIMEAPPS_MIGRATE=1 + ;; + -g) + DEBUGGER=1 + DEBUG=1 + ;; +# -d) +# USER_DEBUGGER=$2 +# DEBUG=1 +# shift +# ;; + --help) + TB_HELP=1 + ;; + --show-backup) + SHOW_BACKUP=1 + ;; + --verbose) + output_info "[[ ... using verbose mode ... ]]" + TB_VERBOSE=1 + ;; + '?') + usage >&2 + exit 1 + ;; + # Every other argument is needed to get down to the TB starting call. + *) + TB_ARGS+=("${ARG}") + ;; + esac + shift +done + +# sanity check +if [ "$DEBUGGER" != "" ] && [ "$USER_DEBUGGER" != "" ]; then + output_info "You can't use option '-g and '-d' at the same time!" + usage + exit 1 +fi + +# If '--help' was called show usage() and exit immediately without other +# helpers can be called. +if [ "${TB_HELP}" = "1" ]; then + usage + exit 0 +fi + +# The user is forcing to do the MIME fixing (again). If called a used +# profile(s) folder ~/.thunderbird will be also reworked. That's not the +# case if the user is starting this wrapper for a first time and only a +# folder ~/.thunderbird is existing! +if [ "${FIXMIME}" = "1" ]; then + do_fix_mimetypes_rdf + do_migrate_old_icedove_desktop + do_collect_backup_files + exit 0 +fi + +if [ "${SHOW_BACKUP}" = "1" ]; then + do_collect_backup_files + exit 0 +fi + +############################################################################# +# User Thunderbird Profile Adoptions # +# # +# The users Icedove/Thunderbird profile(s) doesn't need to be modified in a # +# different and complicated way. We simply need to ensure that the # +# Thunderbird binary is finding the existing profiles in the folder # +# $(HOME)/.thunderbird folder or a valid symlink pointing to the profiles. # +# # +# To "migrate" an old existing Icedove profile we can simply do a symlink # +# from $(HOME)/.thunderbird --> $(HOME)/.icedove . # +# # +# Afterwards do some changes to the file mimeTypes.rdf within every # +# profile. Also we can modify existing *icedove*.desktop entries in the # +# files. # +# # +# $(HOME)/.config/mimeapps.list # +# $(HOME)/.local/share/applications/mimeapps.list # +# # +############################################################################# + +# First try the default case for modification, there is only a folder +# ${ID_PROFILE_FOLDER} and we can symlink to this. +if { [ -d "${ID_PROFILE_FOLDER}" ] || [ -L "${ID_PROFILE_FOLDER}" ]; } && \ + { [ ! -d "${TB_PROFILE_FOLDER}" ] && [ ! -L "${TB_PROFILE_FOLDER}" ]; }; then + output_debug "found folder '${ID_PROFILE_FOLDER}'" + output_debug "not found folder or symlink '${TB_PROFILE_FOLDER}'" + output_debug "Start Thunderbird profile adoptions, please be patient!" + + # open a pop-up window with a message about starting migration + do_inform_migration_start + + # do the symlinking + do_thunderbird2icedove_symlink + + # fixing mimeTypes.rdf which may have registered the iceweasel binary + # as browser, instead of x-www-browser + do_fix_mimetypes_rdf + + # Fix local mimeapp.list and *.desktop entries + do_migrate_old_icedove_desktop + + # we are finished + output_info "Thunderbird Profile adoptions done." + do_collect_backup_files +fi + +# We found both profile folder, and .thunderbird is a symlink, +# we need to check if .thunderbird is symlinked to .icedove +if { [ -d "${ID_PROFILE_FOLDER}" ] && [ -L "${TB_PROFILE_FOLDER}" ]; } && \ + [ "$(readlink -e "${TB_PROFILE_FOLDER}")" = "${ID_PROFILE_FOLDER}" ];then + + output_debug "Found folder ${ID_PROFILE_FOLDER}, found a symlink ${TB_PROFILE_FOLDER} pointing to ${ID_PROFILE_FOLDER}" + + # Check if we need to do some migration, the linking could be existing + # before we switched back to Thunderbird. + if [ ! -f "${TB_PROFILE_FOLDER}/.migrated" ]; then + # Fixing mimeTypes.rdf which may have registered the iceweasel binary + # as browser, instead of x-www-browser + do_fix_mimetypes_rdf + + # Fix local mimeapp.list and *.desktop entries + do_migrate_old_icedove_desktop + fi + +# ... or the opposite if .icedove is symlinked to .thunderbird +elif { [ -d "${TB_PROFILE_FOLDER}" ] && [ -L "${ID_PROFILE_FOLDER}" ]; } && \ + [ "$(readlink -e "${ID_PROFILE_FOLDER}")" = "${TB_PROFILE_FOLDER}" ];then + + output_debug "Found folder ${TB_PROFILE_FOLDER}, found a symlink ${ID_PROFILE_FOLDER} pointing to ${TB_PROFILE_FOLDER}" + output_debug "You may want to remove the symlink ${ID_PROFILE_FOLDER}? It's probably not needed anymore." + + # Check if we need to do some migration ... + if [ ! -f "${TB_PROFILE_FOLDER}/.migrated" ]; then + # Fixing mimeTypes.rdf which may have registered the iceweasel binary + # as browser, instead of x-www-browser + do_fix_mimetypes_rdf + + # Fix local mimeapps.list and *.desktop entries + do_migrate_old_icedove_desktop + fi + +# We found both profile folder, but they are not linked to each other! This +# is a state we can't solve on our own !!! The user needs to interact and +# has probably an old or otherwise used Thunderbird installation. Which one +# is the correct one to use? +elif { [ -d "${ID_PROFILE_FOLDER}" ] || [ -L "${ID_PROFILE_FOLDER}" ]; } && \ + { [ -d "${TB_PROFILE_FOLDER}" ] || [ -L "${TB_PROFILE_FOLDER}" ]; } && \ + [ "$(readlink -e "${TB_PROFILE_FOLDER}")" != "$(readlink -e "${ID_PROFILE_FOLDER}")" ]; then + + for CHECK in ${ID_PROFILE_FOLDER} ${TB_PROFILE_FOLDER}; do + FILE_CHECK=$(readlink -e "${CHECK}") + if [ "${FILE_CHECK}" != "" ] && [ -L "${CHECK}" ]; then + output_debug "Found symlink '${CHECK}' pointing to '${FILE_CHECK}'." + elif [ "${FILE_CHECK}" != "" ] && [ -d "${CHECK}" ]; then + output_debug "Found folder '${FILE_CHECK}'." + else + output_debug "${CHECK} is probably a symlink pointing to a non existing target, at least not to ${ID_PROFILE_FOLDER}." + logger -i -p warning -s "$0: [profile migration] ${CHECK} is probably a symlink pointing to a non existing target, at least not to ${ID_PROFILE_FOLDER}." + fi + done + + output_debug "There are already the folders or symlinks '${TB_PROFILE_FOLDER}' and '${ID_PROFILE_FOLDER}'" + output_debug "which not pointing to each other, will do nothing as don't know which folder to use." + output_debug "Please investigate by yourself! Maybe you will find additional information in '/usr/share/doc/thunderbird/README.Debian.gz'." + logger -i -p warning -s "$0: [profile migration] Couldn't migrate Icedove into Thunderbird profile due existing or symlinked folder '${TB_PROFILE_FOLDER}'!" + + # display a graphical advice if possible + do_thunderbird2icedove_error_out + +fi + +if [ "${TB_FAIL}" = 1 ]; then + output_info "An error happened while trying to migrate the old Icedove profile folder '${ID_PROFILE_FOLDER}'." + output_info "Please take a look into the syslog file!" + exit 1 +fi + +# If we are here we going simply further by starting Thunderbird. + +if [ "${DEBUG}" = "" ]; then + TB_ARGS_LINE=$(echo "${TB_ARGS[@]}" | sed "s/'/\"/g") + output_debug "call '${MOZ_LIBDIR}/${MOZ_APP_NAME} ${TB_ARGS_LINE}'" + exec "${MOZ_LIBDIR}"/"${MOZ_APP_NAME}" "${TB_ARGS[@]}" +else + # User has selected GDB? + if [ "${DEBUGGER}" = "1" ]; then + # checking for GDB + if [ -f /usr/bin/gdb ]; then + if dpkg-query -W -f='${Version}' thunderbird-dbgsym &>/dev/null ; then + output_info "Starting Thunderbird with GDB ..." + TB_ARGS_LINE="/usr/bin/gdb ${TB_GDB_DEFAULT_OPTS} -ex run ${MOZ_LIBDIR}/${MOZ_APP_NAME}$(printf ' %q' "${TB_ARGS[@]}")" + output_info "LANG= ${TB_ARGS_LINE}" + LANG='' eval "exec ${TB_ARGS_LINE}" + else + output_info "No package 'thunderbird-dbgsym' installed! Please install first and restart." + output_info "More information how to adjust your sources.list to being able installing" + output_info "dbgsym packages in generally can be found here:" + output_info "https://wiki.debian.org/HowToGetABacktrace#Installing_the_debugging_symbols" + exit 1 + fi + else + output_info "No package 'gdb' installed! Please install first and try again." + exit 1 + fi + fi +fi + +exit 0 |