diff --git a/winehelper b/winehelper index 9ac4616..68dc998 100755 --- a/winehelper +++ b/winehelper @@ -351,6 +351,7 @@ var_ld_library_path_update () { return 0 } +##### CREATE DESKTOP FILE ##### create_desktop () { local name_desktop="$1" local exe_file="$2" @@ -382,13 +383,56 @@ create_desktop () { if [[ "$USE_AI_SCRIPTS" == "1" ]] \ && [[ -f "$exe_file" ]] then - grep -e "#!" -e "export" -e "var_" "$WH_AUTOINSTALL_DIR/$AI_SCRIPT" \ + { + echo '#!/usr/bin/env bash' + echo "# cmd_name: $AI_SCRIPT" + } > "$exe_file".whdb + grep -e "info_" -e "#####" -e "export" -e "var_" "$WH_AUTOINSTALL_DIR/$AI_SCRIPT" \ | grep -vE "LAUNCH_PARAMETERS|AUTOINSTALL|WIN_FILE_EXEC|echo" \ - | awk '{$1=$1;print}' > "$exe_file".ppdb + | awk '{$1=$1;print}' >> "$exe_file".whdb print_info "Создан файл настроек для $exe_file" fi } +##### INSTALLED PROGRAMS ##### +check_installed_programs () { + for desktop_file in "$USER_WORK_PATH"/*.desktop ; do + if [[ ! -f "$desktop_file" ]] ; then + print_info "Установленные программы не найдены." + return 1 + fi + EXE_PATH="$(grep "Exec" "$desktop_file" | awk -F'"' '{print $4}')" + case "$1" in + check_only) + if [[ -z $2 ]] ; then + print_error "Нет аргумента для проверки файла запуска!" + print_info "Список установленных программ:" + check_installed_programs + exit 1 + elif [[ "$EXE_PATH" =~ ${2}$ ]] ; then + export EXE_PATH + return 0 + else + fatal "Не найден файл запуска для $2" + fi + ;; + *) + if [[ -f "$EXE_PATH.whdb" ]] ; then + WH_INFO_RU="$(grep "info_ru:" "$EXE_PATH.whdb" | awk -F"info_ru: " '{print $2}')" + printf "\E[36m%s $SCRIPT_NAME run $(basename "$EXE_PATH") - $(basename "$desktop_file") %s\e[0m\n" + echo -e "$WH_INFO_RU\n" + fi + ;; + esac + done +} + +run_installed_programs () { + if check_installed_programs check_only "$1" ; then + /usr/bin/env bash -c "\"$RUN_SCRIPT\" \"$EXE_PATH\"" & + exit 0 + fi +} ##### USED WINED3D LIBRARY ##### init_opengl () { @@ -706,24 +750,24 @@ kill_wine () { init_database () { if [[ -f "$WIN_FILE_EXEC" ]] ; then - PPDB="$(basename "$WIN_FILE_EXEC" .exe)" - if [[ -f "$WIN_FILE_EXEC".ppdb ]] ; then - PPDB_FILE="$WIN_FILE_EXEC".ppdb + WHDB="$(basename "$WIN_FILE_EXEC" .exe)" + if [[ -f "$WIN_FILE_EXEC".whdb ]] ; then + WHDB_FILE="$WIN_FILE_EXEC".whdb else orig_IFS="$IFS" IFS=$'\n' - WH_FIND_DB_FILE="$(grep -ilw "#$PPDB.exe" "$WH_DB_DIR"/* )" + WH_FIND_DB_FILE="$(grep -ilw "#$WHDB.exe" "$WH_DB_DIR"/* )" if [[ $(echo "$WH_FIND_DB_FILE" | wc -l) -gt 1 ]] ; then - print_error "Найдено более одного файла настроек: $PPDB.exe" - PPDB_FILE="$(echo "$WH_FIND_DB_FILE" | head -n1)" + print_error "Найдено более одного файла настроек: $WHDB.exe" + WHDB_FILE="$(echo "$WH_FIND_DB_FILE" | head -n1)" else - PPDB_FILE="$WH_FIND_DB_FILE" + WHDB_FILE="$WH_FIND_DB_FILE" fi IFS="$orig_IFS" fi - if [[ "$PPDB_FILE" ]] ; then - print_info "Используется файл настроек: $PPDB_FILE" - . "$PPDB_FILE" + if [[ "$WHDB_FILE" ]] ; then + print_info "Используется файл настроек: $WHDB_FILE" + . "$WHDB_FILE" else print_warning "Файл настроек не найден. Пропускаем." fi @@ -793,6 +837,8 @@ wh_info () { Команды: install|-i [скрипт установки] если без аргументов, то выводит список возможных установочных скриптов + installed|run список установленных программ + run [программа.exe] запуск программы (отладка) Параметры: --help показать эту справку и выйти @@ -818,6 +864,8 @@ case "${1,,}" in winetricks) shift ; update_winetricks ; prepair_wine ; "$WINETRICKS" -q "$@" ;; desktop) shift ; create_desktop "$@" ; exit 0 ;; install|-i) shift ; run_autoinstall "$1" ;; + installed) shift ; check_installed_programs "$1" ;; + run|-r) shift ; run_installed_programs "$1" ;; *) if [[ -f "$1" ]] ; then WIN_FILE_EXEC="$(readlink -f "$1")"