Package: openttd
Version: 0.6.3-1
Severity: important
Tags: patch

Preconditions: package is installed, but additional required data files are not
Expected behavior: a dialog should pop up explaining that the data files are not
                   installed. Optimally, a gksudo or policykit-enabled dialog
                   would prompt the user for its location and install them.
Actual behavior: if the data files are not installed, OpenTTD dies silently
                 (i.e. there is absolutely no feedback to the user after 
clicking
                 on the menu item). In order to copy the data files, one has to
                 do so manually, with the additional hurdle of having to copy
                 them into /usr/share/games, i.e. a non-user-writable zone.

I propose the attached patch, a shell script that would replace "openttd" as
the command to be executed by the OpenTTD menu item. It checks that the data
and music files have been installed. If they haven't, it offers to install them,
using gksudo for the copy and Zenity for the GUI prompts. It has been checked
to work with both bash and dash. The script uses gettext, and if there is
interest I'm willing to submit a Spanish translation.

-- System Information:
Debian Release: 5.0
  APT prefers jaunty-updates
  APT policy: (500, 'jaunty-updates'), (500, 'jaunty-security'), (500, 'jaunty')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.28-11-generic (SMP w/4 CPU cores)
Locale: LANG=es_ES.UTF-8, LC_CTYPE=es_ES.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages openttd depends on:
ii  debconf [debcon 1.5.26ubuntu3            Debian configuration management sy
ii  libc6           2.9-4ubuntu6             GNU C Library: Shared libraries
ii  libfontconfig1  2.6.0-1ubuntu12          generic font configuration library
ii  libfreetype6    2.3.9-4ubuntu0.1         FreeType 2 font engine, shared lib
ii  libgcc1         1:4.3.3-5ubuntu4         GCC support library
ii  libpng12-0      1.2.27-2ubuntu2          PNG library - runtime
ii  libsdl1.2debian 1.2.13-4ubuntu3          Simple DirectMedia Layer
ii  libstdc++6      4.3.3-5ubuntu4           The GNU Standard C++ Library v3
ii  zlib1g          1:1.2.3.3.dfsg-12ubuntu2 compression library - runtime

openttd recommends no packages.

Versions of packages openttd suggests:
ii  freepats                20060219-1       Free patch set for MIDI audio synt
ii  timidity                2.13.2-20ubuntu3 Software sound renderer (MIDI sequ

-- debconf information:
* openttd/datafiles:
#!/bin/sh
. gettext.sh
TEXTDOMAIN=openttd-start
export TEXTDOMAIN

TARGET_LOCATION="/usr/share/games/openttd/"
DATA_FILES="data/sample.cat data/trg1r.grf data/trgcr.grf data/trghr.grf data/trgir.grf data/trgtr.grf"
MUSIC_FILES="gm/gm_tt00.gm gm/gm_tt01.gm gm/gm_tt02.gm gm/gm_tt03.gm gm/gm_tt04.gm \
             gm/gm_tt05.gm gm/gm_tt06.gm gm/gm_tt07.gm gm/gm_tt08.gm gm/gm_tt09.gm \
             gm/gm_tt10.gm gm/gm_tt11.gm gm/gm_tt12.gm gm/gm_tt13.gm gm/gm_tt14.gm \
             gm/gm_tt15.gm gm/gm_tt16.gm gm/gm_tt17.gm gm/gm_tt18.gm gm/gm_tt19.gm \
             gm/gm_tt20.gm gm/gm_tt21.gm"
IGNORE_MUSIC_FILE=~/.openttd/skip_music_install
MISSING_DATA=""
MISSING_MUSIC=""

# Arguments:
#   $1: folder to look at
#   $2: list of files to find at $1
#   $3: name of the variable to append the list of missing files to
find_missing_files()
{
	for file in $2 ; do
		if [ ! -f "$1/$file" ] ; then
			eval $3="\"\${$3} $file\""
		fi
	done
}

# Arguments:
#   $1: files to find
find_ttdx_folder()
{
	until [ -n "${TTDX_FOLDER}" ]; do
		# Prompt for the location of the data files
		TTDX_FOLDER=$(zenity --file-selection --directory --title "$(gettext 'Choose the folder containing your Transport Tycoon installation')")
		if [ -z "${TTDX_FOLDER}" ] ; then
			# User cancelled - abort
			exit 1
		fi
		FILES_NOT_FOUND=""
		find_missing_files "${TTDX_FOLDER}" "$1" FILES_NOT_FOUND
		if [ -n "${FILES_NOT_FOUND}" ] ; then
			# Invalid folder - does not have all files
			TTDX_FOLDER=""
			zenity --error --title "$(gettext 'Invalid folder selected')" --text "$(gettext 'The folder you selected does not contain all the required files.')\n\n$(gettext 'Please choose a folder containing an original Transport Tycoon Deluxe installation.')"
			continue
		fi
	done
}

# Arguments:
#    $1: files to install
install_files()
{
	if ! gksu --description "$(gettext 'OpenTTD data files installer')" true ; then
		# User cancelled or authentication failed - abort
		exit 1
	fi
	for file in $1; do
		gksu --description "$(gettext 'OpenTTD data files installer')" -- install -m644 -D "$TTDX_FOLDER/$file" "${TARGET_LOCATION}/$file"
	done
}

find_missing_files "${TARGET_LOCATION}" "${DATA_FILES}" MISSING_DATA
find_missing_files "${TARGET_LOCATION}" "${MUSIC_FILES}" MISSING_MUSIC

if [ -n "${MISSING_DATA}" ] ; then
	if zenity --question --title "$(gettext 'Missing data files')" --text "$(gettext 'In order to start, OpenTTD requires some data files from an original Transport Tycoon Deluxe installation.') $(gettext 'Do you want to install these files now? (you will need administrative rights)')"
	then
		find_ttdx_folder "${DATA_FILES}"
		# Valid folder containing all the files - copy to target
		install_files "${DATA_FILES}"
	else
		# User cancelled - don't even try starting up
		exit 1
	fi
fi

if [ -n "${MISSING_MUSIC}" -a ! -f "${IGNORE_MUSIC_FILE}" ] ; then
	if zenity --question --title "$(gettext 'Missing music files')" --text "$(gettext 'You can also install the music files from your original Transport Tycoon Deluxe installation. However, these files are not required to play OpenTTD. If you choose not to install the music files, you will not be asked again.')\n\n$(gettext 'Do you want to install these files now? (you will need administrative rights)')"
	then
		find_ttdx_folder "${MUSIC_FILES}"
		# Valid folder containing all the files - copy to target
		install_files "${MUSIC_FILES}"
	else
		mkdir -p $(dirname "${IGNORE_MUSIC_FILE}")
		touch "${IGNORE_MUSIC_FILE}"
		zenity --info --title "$(gettext 'Skipping music files')" --text "$(gettext 'You have selected not to install the music files. If you ever want to install them, delete the following file and restart OpenTTD:')\n\n${IGNORE_MUSIC_FILE}"
	fi
fi

openttd

Reply via email to