You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
263 lines
13 KiB
263 lines
13 KiB
#!/bin/sh
|
|
#
|
|
# A script to perform R14.0.0 XDG compliance updates.
|
|
# This script should be needed to run only once.
|
|
|
|
# TODO: Do we need to trap whether the user is running this script while
|
|
# in a Trinity session? Most files can be updated "live" but some can't,
|
|
# such as kdeglobals.
|
|
|
|
# Allow forced execution of this script regardless of the kdeglobals setting.
|
|
if [ "$1" = "force" ]; then
|
|
FORCE="true"
|
|
fi
|
|
|
|
# TODO: As the user should not be logged into a Trinity session when running
|
|
# this script, or an administrator might run this script remotely, the
|
|
# $TDEHOME variable probably is not set or knowable from within this script.
|
|
# We presume $HOME/.trinity, but should provide a way to pass a command line
|
|
# parameter to change that location.
|
|
PROFILE_DIR="$HOME/.trinity"
|
|
|
|
# TODO: How to handle environments where files/directories are locked
|
|
# administratively and can't be updated. The nominal validation checks
|
|
# in this script provide some notice but no direct remedy.
|
|
|
|
Wait_For_Response () {
|
|
unset response
|
|
# -r Backslash does not act as an escape character.
|
|
# -p Display "PROMPT" without a trailing newline, before attempting to read any input.
|
|
while true; do
|
|
read -r -p "$1 (y/n): " yn
|
|
case $yn in
|
|
[Yy]* ) response=y; break;;
|
|
[Nn]* ) response=n; break;;
|
|
* ) echo "Please answer yes (y/Y) or no (n/N).";;
|
|
esac
|
|
done
|
|
}
|
|
|
|
Proceed_From_Response () {
|
|
if [ "$response" = "n" -o "$response" = "N" ]; then
|
|
echo "Exiting."
|
|
echo
|
|
exit 0
|
|
else
|
|
echo "Continuing."
|
|
echo
|
|
fi
|
|
}
|
|
|
|
Display_Message () {
|
|
if [ "$DISPLAY" != "" ]; then
|
|
echo -e "$MESSAGE" | xmessage -center -file - > /dev/null 2>/dev/null
|
|
else
|
|
echo -e "$MESSAGE"
|
|
fi
|
|
}
|
|
|
|
Message_Prefix () {
|
|
if [ "$DISPLAY" != "" ]; then
|
|
echo -n "[r14-xdg-update] "
|
|
fi
|
|
}
|
|
|
|
# Do not update when $TDEHOME is a sym link to another profile directory. Trinity should have
|
|
# full reign within its own profile directory (limited to administrative locking), but the error
|
|
# check is a conservative approach.
|
|
TDEHOME_LINK="`readlink \"$PROFILE_DIR\"`"
|
|
if [ "$TDEHOME_LINK" != "" ]; then
|
|
# Force this entry to ensure the updates eventually are performed should the user copy the
|
|
# original kdeglobals file into a new Trinity profile.
|
|
$TDEDIR/bin/kwriteconfig --file kdeglobals --group "R14 XDG Updates" --key Updated --type bool 'false'
|
|
# Are we in X? Display an X dialog explaining breakage.
|
|
if [ "$DISPLAY" != "" ]; then
|
|
echo "[r14-xdg-update] Warning! The profile directory $PROFILE_DIR is a" 1>&2
|
|
echo "[r14-xdg-update] sym link to $TDEHOME_LINK!" 1>&2
|
|
echo "[r14-xdg-update] R14 updates will not be performed because Trinity needs its own separate profile directory." 1>&2
|
|
echo "[r14-xdg-update] Without R14 updates some Trinity apps will fail to function correctly." 1>&2
|
|
fi
|
|
MESSAGE="Oops! The profile directory $PROFILE_DIR is a sym link to $TDEHOME_LINK.\n\nTrinity R14 XDG compliance updates will not be performed because\nTrinity needs its own separate profile directory.\n\nWithout R14 XDG compliance updates, some Trinity apps will fail to\nfunction properly.\n\nFailures include the following:\n\n* Many left-side icon lists will not populate,\n such as the Panel and Konqueror configuration dialogs.\n\n* User-defined keyboard shortcuts fail (khotkeysrc).\n System defined shortcuts remain functional.\n\n* User-defined app preferences fail (profilerc).\n\n* Konqueror navigation/sidebar panel won't open.\n\n* User-defined konqueror service menus, kicker customization,\n konqueror sidebar, Recent Documents list fail.\n\nPossible remedies:\n\n* If necessary contact your system administrator.\n\n* Break the sym link to allow Trinity to create a fresh Trinity profile.\n\n* Use the migratekde3 script to migrate a KDE3 profile to Trinity."
|
|
# Are we in X? Display an X dialog explaining breakage.
|
|
if [ "$DISPLAY" != "" ]; then
|
|
echo -e "$MESSAGE" | xmessage -center -file - -buttons Continue,Quit > /dev/null 2>/dev/null
|
|
if [ "$?" = "102" ]; then
|
|
# User select the Quit button: quit this script.
|
|
unset PROFILE_DIR
|
|
unset TDEHOME_LINK
|
|
exit 1
|
|
fi
|
|
else
|
|
echo
|
|
echo -e "$MESSAGE"
|
|
echo
|
|
Wait_For_Response "Break the sym link now and migrate the $TDEHOME_LINK profile to a new Trinity profile?"
|
|
Proceed_From_Response
|
|
unlink "$HOME/.trinity" 2>/dev/null
|
|
if [ "`readlink \"$HOME/.trinity\"`" != "" ]; then
|
|
echo "Unable to break the sym link. Check your file and directory privileges. Quitting."
|
|
unset PROFILE_DIR
|
|
unset TDEHOME_LINK
|
|
exit 1
|
|
else
|
|
sh $TDEDIR/bin/migratekde3
|
|
echo
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
R14_UPDATED="`$TDEDIR/bin/kreadconfig --file kdeglobals --group "R14 XDG Updates" --key Updated`"
|
|
if [ "$R14_UPDATED" != "true" ] || [ "$FORCE" = "true" ]; then
|
|
Message_Prefix
|
|
echo -e "Performing a profile update for Trinity release R14 XDG compliance."
|
|
Message_Prefix
|
|
echo -e "Updating *.desktop files."
|
|
find "$PROFILE_DIR" -name "*.desktop" -exec sed -i 's|X-KDE-|X-TDE-|g' {} \; 2>/dev/null
|
|
find "$PROFILE_DIR" -name "*.desktop" -exec sed -i 's|KDE\;|TDE\;|g' {} \; 2>/dev/null
|
|
find "$HOME/.local" -name "*.desktop" -exec sed -i 's|X-KDE-|X-TDE-|g' {} \; 2>/dev/null
|
|
find "$HOME/.local" -name "*.desktop" -exec sed -i 's|KDE\;|TDE\;|g' {} \; 2>/dev/null
|
|
Message_Prefix
|
|
echo -e "Updating references of $TDEDIR/share/applications/kde to share/applications/tde."
|
|
# Exclude KMail mail files --- we don't want to touch those files.
|
|
find "$PROFILE_DIR" -path "$PROFILE_DIR/share/apps/kmail/mail" -prune -o -type f -exec sed -i "s|$TDEDIR/share/applications/kde|$TDEDIR/share/applications/tde|g" {} \; 2>/dev/null
|
|
|
|
# Preserve keyboard shortcuts and input actions.
|
|
Message_Prefix
|
|
echo -e "Updating user-defined keyboard shortcuts in khotkeysrc."
|
|
sed -i 's|CommandURL=kde-|CommandURL=tde-|g' "$PROFILE_DIR/share/config/khotkeysrc" 2>/dev/null
|
|
sed -i 's|K Menu - kde-|TDE Menu - tde-|g' "$PROFILE_DIR/share/config/khotkeysrc" 2>/dev/null
|
|
sed -i 's|Name=K Menu|Name=TDE Menu|g' "$PROFILE_DIR/share/config/khotkeysrc" 2>/dev/null
|
|
sed -i 's|in KDE stands|in TDE stands|g' "$PROFILE_DIR/share/config/khotkeysrc" 2>/dev/null
|
|
sed -i 's| use KDE| use TDE|g' "$PROFILE_DIR/share/config/khotkeysrc" 2>/dev/null
|
|
Message_Prefix
|
|
echo -e "Updating some text strings in khotkeysrc."
|
|
sed -i 's|Go to KDE Website|Go to TDE Website|g' "$PROFILE_DIR/share/config/khotkeysrc" 2>/dev/null
|
|
sed -i 's|www\.kde\.org|www\.trinitydesktop\.org|g' "$PROFILE_DIR/share/config/khotkeysrc" 2>/dev/null
|
|
sed -i 's|KDE3\.1|TDE|g' "$PROFILE_DIR/share/config/khotkeysrc" 2>/dev/null
|
|
sed -i 's|kde32b1|trinity2b1|g' "$PROFILE_DIR/share/config/khotkeysrc" 2>/dev/null
|
|
sed -i 's|kde321|trinity21|g' "$PROFILE_DIR/share/config/khotkeysrc" 2>/dev/null
|
|
# Fix the some of the same text strings in kglobalshortcutsrc.
|
|
Message_Prefix
|
|
echo -e "Updating some text strings in kglobalshortcutsrc."
|
|
sed -i 's|Go to KDE Website|Go to TDE Website|g' "$PROFILE_DIR/share/config/kglobalshortcutsrc" 2>/dev/null
|
|
sed -i 's|www\.kde\.org|www\.trinitydesktop\.org|g' "$PROFILE_DIR/share/config/kglobalshortcutsrc" 2>/dev/null
|
|
sed -i 's|KDE3\.1|TDE|g' "$PROFILE_DIR/share/config/kglobalshortcutsrc" 2>/dev/null
|
|
|
|
# Preserve app preferences.
|
|
Message_Prefix
|
|
echo -e "Updating user-defined app preferences in profilerc."
|
|
sed -i 's|Application=kde-|Application=tde-|g' "$PROFILE_DIR/share/config/profilerc" 2>/dev/null
|
|
|
|
# Preserve kicker/panel icons.
|
|
Message_Prefix
|
|
echo -e "Updating kicker/panel customizations in kickerrc."
|
|
sed -i 's|StorageId\[\$e\]=kde-|StorageId\[\$e\]=tde-|g' "$PROFILE_DIR/share/config/kickerrc" 2>/dev/null
|
|
|
|
# Preserve Quick Launch icons.
|
|
# There should only be one configuration file, but old KDE3 remnant files might exist ofr users who
|
|
# migrated from KDE3. We don't care about those files, but we still need to update the correct configuration file.
|
|
QUICK_LAUNCH_CONFIG="`grep launcher_panelapplet $PROFILE_DIR/share/config/kickerrc | awk -F = '{print $2}'`"
|
|
if [ "$QUICK_LAUNCH_CONFIG" != "" ]; then
|
|
Message_Prefix
|
|
echo -e "Updating Quick Launch applet."
|
|
sed -i 's|,kde-|,tde-|g' "$PROFILE_DIR/share/config/$QUICK_LAUNCH_CONFIG" 2>/dev/null
|
|
fi
|
|
|
|
# Update sym link files in $HOME/.trinity/Autostart.
|
|
( cd "$PROFILE_DIR/Autostart"
|
|
Message_Prefix
|
|
echo "Updating Autostart files."
|
|
for i in `find . -type l`; do
|
|
LINK="`readlink $i`"
|
|
LINK_PATH="`dirname $LINK`"
|
|
LINK_NAME="`basename $LINK`"
|
|
if [ -n "`echo $LINK_PATH | grep \"$TDEDIR/share/applications/kde\"`" ]; then
|
|
NEW_LINK_PATH="`echo $LINK_PATH | sed 's|/share/applications/kde|/share/applications/tde|'`"
|
|
fi
|
|
unlink $i
|
|
ln -sf $NEW_LINK_PATH/$LINK_NAME $LINK_NAME
|
|
if [ "$?" != "0" ]; then
|
|
Message_Prefix
|
|
echo "There was an error with creating a new sym link for $LINK." 1>&2
|
|
fi
|
|
done
|
|
)
|
|
|
|
# Update the user's customized menu.
|
|
if [ -r $HOME/.config/menus/applications-kmenuedit.menu ]; then
|
|
sed -i 's|<Filename>kde-|<Filename>tde-|g' $HOME/.config/menus/applications-kmenuedit.menu
|
|
fi
|
|
|
|
# Perform some nominal update validations.
|
|
# This test includes *.desktop files in the profile Autostart directory.
|
|
R14_UPDATE_TEST1="`find \"$PROFILE_DIR\" -name \"*.desktop\" -exec grep \"X-KDE\" {} \; 2>/dev/null`"
|
|
if [ "$R14_UPDATE_TEST1" != "" ]; then
|
|
MESSAGE="Some Trinity profile R14 XDG compliance updates failed.\n\n(Check *.desktop files for 'X-KDE'.)"
|
|
Display_Message "$MESSAGE"
|
|
fi
|
|
R14_UPDATE_TEST2="`find \"$PROFILE_DIR\" -name \"*.desktop\" -exec grep -q \"KDE;\" {} \; 2>/dev/null`"
|
|
if [ "$R14_UPDATE_TEST2" != "" ]; then
|
|
MESSAGE="Some Trinity profile R14 XDG compliance updates failed.\n\n(Check *.desktop files for 'KDE;'.)"
|
|
Display_Message "$MESSAGE"
|
|
fi
|
|
R14_UPDATE_TEST3="`find \"$PROFILE_DIR\" \"$PROFILE_DIR/share/apps/kmail/mail\" -prune -o -type f -exec grep -q \"$TDEDIR/share/applications/kde\" {} \; 2>/dev/null`"
|
|
if [ "$R14_UPDATE_TEST3" != "" ]; then
|
|
MESSAGE="Some Trinity profile R14 XDG compliance updates failed.\n\n(Check files for '$TDEDIR/share/applications/kde'.)"
|
|
Display_Message "$MESSAGE"
|
|
fi
|
|
R14_UPDATE_TEST4="`grep -q \"CommandURL=kde-\" \"$PROFILE_DIR/share/config/khotkeysrc\" 2>/dev/null`"
|
|
if [ "$R14_UPDATE_TEST4" != "" ]; then
|
|
MESSAGE="Some Trinity profile R14 XDG compliance updates failed.\n\n(Check khotkeysrc for 'CommandURL=kde-'.)"
|
|
Display_Message "$MESSAGE"
|
|
fi
|
|
R14_UPDATE_TEST5="`grep -q \"K Menu - kde-\" \"$PROFILE_DIR/share/config/khotkeysrc\" 2>/dev/null`"
|
|
if [ "$R14_UPDATE_TEST5" != "" ]; then
|
|
MESSAGE="Some Trinity profile R14 XDG compliance updates failed.\n\n(Check khotkeysrc for 'K Menu - kde-'.)"
|
|
Display_Message "$MESSAGE"
|
|
fi
|
|
R14_UPDATE_TEST6="`grep -q \"Application=kde-\" \"$PROFILE_DIR/share/config/profilerc\" 2>/dev/null`"
|
|
if [ "$R14_UPDATE_TEST6" != "" ]; then
|
|
MESSAGE="Some Trinity profile R14 XDG compliance updates failed.\n\n(Check profilerc for 'Application=kde-'.)"
|
|
Display_Message "$MESSAGE"
|
|
fi
|
|
R14_UPDATE_TEST7="`grep -q \"StorageId\[\$e\]=kde-\" \"$PROFILE_DIR/share/config/kickerrc\" 2>/dev/null`"
|
|
if [ "$R14_UPDATE_TEST7" != "" ]; then
|
|
MESSAGE="Some Trinity profile R14 XDG compliance updates failed.\n\n(Check kickerrc for 'StorageId[$e]=kde-'.)"
|
|
Display_Message "$MESSAGE"
|
|
fi
|
|
if [ "$QUICK_LAUNCH_CONFIG" != "" ]; then
|
|
R14_UPDATE_TEST8="`grep -q \"kde-\" \"$PROFILE_DIR/share/config/$QUICK_LAUNCH_CONFIG\" 2>/dev/null`"
|
|
if [ "$R14_UPDATE_TEST8" != "" ]; then
|
|
MESSAGE="Some Trinity profile R14 XDG compliance updates failed.\n\n(Check $QUICK_LAUNCH_CONFIG for 'kde-'.)"
|
|
Display_Message "$MESSAGE"
|
|
fi
|
|
fi
|
|
if [ -r $HOME/.config/menus/applications-kmenuedit.menu ]; then
|
|
R14_UPDATE_TEST9="`grep -q \"<Filename>kde-\" \"$HOME/.config/menus/applications-kmenuedit.menu\" 2>/dev/null`"
|
|
if [ "$R14_UPDATE_TEST9" != "" ]; then
|
|
MESSAGE="Some Trinity profile R14 XDG compliance updates failed.\n\n(Check applications-kmenuedit.menu for '<Filename>kde-'.)"
|
|
Display_Message "$MESSAGE"
|
|
fi
|
|
fi
|
|
if [ "$R14_UPDATE_TEST1" = "" ] && [ "$R14_UPDATE_TEST2" = "" ] && [ "$R14_UPDATE_TEST3" = "" ] \
|
|
&& [ "$R14_UPDATE_TEST4" = "" ] && [ "$R14_UPDATE_TEST5" = "" ] && [ "$R14_UPDATE_TEST6" = "" ] \
|
|
&& [ "$R14_UPDATE_TEST7" = "" ] && [ "$R14_UPDATE_TEST8" = "" ] && [ "$R14_UPDATE_TEST9" = "" ]; then
|
|
$TDEDIR/bin/kwriteconfig --file kdeglobals --group "R14 XDG Updates" --key Updated --type bool 'true'
|
|
else
|
|
$TDEDIR/bin/kwriteconfig --file kdeglobals --group "R14 XDG Updates" --key Updated --type bool 'false'
|
|
fi
|
|
else
|
|
echo "This script has been run at least once previously. To run manually pass the 'force' parameter."
|
|
fi
|
|
|
|
unset PROFILE_DIR
|
|
unset R14_UPDATED
|
|
unset TDEHOME_LINK
|
|
unset R14_UPDATE_TEST1
|
|
unset R14_UPDATE_TEST2
|
|
unset R14_UPDATE_TEST3
|
|
unset R14_UPDATE_TEST4
|
|
unset R14_UPDATE_TEST5
|
|
unset R14_UPDATE_TEST6
|
|
exit 0
|