@ -131,6 +131,8 @@ su_run () {
}
}
##### CHECK DEPENDENCIES #####
##### CHECK DEPENDENCIES #####
# fonts-ttf-ms
if ! rpm -q {i586-,}{wine,glibc-core,libstdc++6,glibc-pthread,glibc-nss,libOSMesa,\
if ! rpm -q {i586-,}{wine,glibc-core,libstdc++6,glibc-pthread,glibc-nss,libOSMesa,\
libnss-mdns,libunixODBC2,ocl-icd,libfreetype,libfontconfig1,libgnutls30,libGL,\
libnss-mdns,libunixODBC2,ocl-icd,libfreetype,libfontconfig1,libgnutls30,libGL,\
libEGL,xorg-dri-swrast,xorg-dri-intel,xorg-dri-radeon,libvulkan1,libcups} 1>/dev/null
libEGL,xorg-dri-swrast,xorg-dri-intel,xorg-dri-radeon,libvulkan1,libcups} 1>/dev/null
@ -865,14 +867,14 @@ check_prefix_var () {
else
else
fatal "Неверный выбор."
fatal "Неверный выбор."
fi
fi
print_info "Выбран префикс: $WINEPREFIX"
fi
fi
if echo "$WINEPREFIX" | grep -qv '/' ; then
if echo "$WINEPREFIX" | grep -qv '/' ; then
export WINEPREFIX="$WH_PREFIXES_DIR/$WINEPREFIX"
export WINEPREFIX="$WH_PREFIXES_DIR/$WINEPREFIX"
fi
fi
export PREFIX_NAME="$(basename "$WINEPREFIX")"
export PREFIX_NAME="$(basename "$WINEPREFIX")"
print_info "Выбран префикс: $PREFIX_NAME"
return 0
return 0
}
}
@ -1216,25 +1218,18 @@ run_autoinstall () {
}
}
remove_prefix() {
remove_prefix() {
local prefix_name ="$1"
export WINEPREFIX ="$1"
local prefix_path="$WH_PREFIXES_DIR/$prefix_name"
if [[ -z "$WINEPREFIX" ]]
then print_error "Н е указано имя префикса для удаления!"
if [[ -z "$prefix_name" ]]; then
print_error "Н е указано имя префикса для удаления."
echo "Использование: $SCRIPT_NAME remove-prefix [имя_пр е фикс а ]"
echo "Доступные префиксы:"
ls -1 "$WH_PREFIXES_DIR"
return 1
fi
fi
check_prefix_var
if [[ ! -d "$prefix_path" ]]; then
if [[ ! -d "$WINEPREFIX" ]]
print_error "Префикс "$prefix_name" не найден. "
then fatal "Префикса \"$PREFIX_NAME\" не существует! "
return 1
fi
fi
if [[ ! $2 =~ --force|-y ]] ; then
if [[ ! $2 =~ --force|-y ]] ; then
echo "======================================================"
echo "======================================================"
print_warning "Вы собираетесь удалить префикс "$prefix_name "."
print_warning "Вы собираетесь удалить префикс "$PREFIX_NAME "."
echo "Это приведёт к:"
echo "Это приведёт к:"
echo " - Полному удалению всех данных префикса"
echo " - Полному удалению всех данных префикса"
echo " - Удалению всех программ, установленных в этом префиксе"
echo " - Удалению всех программ, установленных в этом префиксе"
@ -1247,13 +1242,12 @@ remove_prefix() {
return 0
return 0
fi
fi
fi
fi
try_remove_dir "$prefix_path"
if [[ $? -eq 0 ]] ; then
if try_remove_dir "$WINEPREFIX" ; then
print_ok "Префикс "$prefix_name " успешно удален."
print_ok "Префикс "$PREFIX_NAME " успешно удален."
for desktop_file in "$WH_MENU_DIR"/*.desktop; do
for desktop_file in "$WH_MENU_DIR"/*.desktop; do
if grep -q "$prefix_path " "$desktop_file"; then
if grep -q "$WINEPREFIX " "$desktop_file"; then
desktop_name=$(basename "$desktop_file")
desktop_name=$(basename "$desktop_file")
remove_desktop "${desktop_name%.*}"
remove_desktop "${desktop_name%.*}"
fi
fi
@ -1261,7 +1255,7 @@ remove_prefix() {
return 0
return 0
else
else
print_error "Н е удалось удалить префикс "$prefix_name "."
print_error "Н е удалось удалить префикс "$PREFIX_NAME "."
return 1
return 1
fi
fi
}
}
@ -1363,6 +1357,7 @@ backup_prefix() {
print_info "Создание squashfs архива..."
print_info "Создание squashfs архива..."
if mksquashfs "$temp_backup_dir" "$backup_dest_path" -comp zstd ; then
if mksquashfs "$temp_backup_dir" "$backup_dest_path" -comp zstd ; then
echo -e "\n# PREFIX_NAME=$PREFIX_NAME" >> "$backup_dest_path"
print_ok "Архив префикса $PREFIX_NAME успешно создан по пути:\n$backup_dest_path"
print_ok "Архив префикса $PREFIX_NAME успешно создан по пути:\n$backup_dest_path"
else
else
print_error "Н е удалось создать архив префикса $PREFIX_NAME."
print_error "Н е удалось создать архив префикса $PREFIX_NAME."
@ -1377,22 +1372,31 @@ backup_prefix() {
restore_prefix() {
restore_prefix() {
local backup_archive_path="$1"
local backup_archive_path="$1"
local temp_extract_dir
local temp_extract_dir prefix_name
if [[ -z "$backup_archive_path" ]] ; then
if [[ -z "$backup_archive_path" ]] ; then
read -e -p "Укажите путь к архиву резервной копии (/путь/к/архиву.whpack): " backup_archive_path
read -e -p "Укажите путь к архиву резервной копии (/путь/к/архиву.whpack): " backup_archive_path
backup_archive_path=$(echo "$backup_archive_path" | sed "s/'//g; s/\"//g")
if [[ -z "$backup_archive_path" ]] ; then
if [[ -z "$backup_archive_path" ]] ; then
fatal "Путь к архиву не указан. Восстановление отменено."
fatal "Путь к архиву не указан. Восстановление отменено."
fi
fi
fi
fi
backup_archive_path=$(echo "$backup_archive_path" | sed "s/'//g; s/\"//g")
if [[ ! -f "$backup_archive_path" ]]
if [[ ! -f "$backup_archive_path" ]]
then fatal "Файл архива не найден: $backup_archive_path"
then fatal "Файл архива не найден: $backup_archive_path"
fi
fi
print_info "Восстановление из резервной копии: $backup_archive_path"
print_info "Восстановление из резервной копии: $backup_archive_path"
prefix_name="$(tail -n1 "$backup_archive_path" | sed -e 's/.*PREFIX_NAME=//')"
if [[ -d "$WH_PREFIXES_DIR/$prefix_name" ]] ; then
fatal "Префикс $prefix_name уже существует!
Удалите е г о , если действительно желаете восстановить префикс заново.
Команда для удаления: $SCRIPT_NAME remove-prefix $prefix_name"
fi
temp_extract_dir="$WH_TMP_DIR/restore_$(basename "$backup_archive_path" .whpack)"
temp_extract_dir="$WH_TMP_DIR/restore_$(basename "$backup_archive_path" .whpack)"
create_new_dir "$temp_extract_dir"
create_new_dir "$temp_extract_dir"
@ -1405,19 +1409,12 @@ restore_prefix() {
fi
fi
if [[ -d "$temp_extract_dir/prefixes" ]] ; then
if [[ -d "$temp_extract_dir/prefixes" ]] ; then
local prefix_name prefix_dir
local prefix_name
prefix_name="$(ls -1 "$temp_extract_dir/prefixes")"
prefix_name="$(ls -1 "$temp_extract_dir/prefixes")"
prefix_dir="$temp_extract_dir/prefixes/$prefix_name"
local prefix_dir="$temp_extract_dir/prefixes/$prefix_name"
print_info "Восстановление префикса: $prefix_name"
print_info "Восстановление префикса: $prefix_name"
if [[ -d "$WH_PREFIXES_DIR/$prefix_name" ]] ; then
try_remove_dir "$temp_extract_dir"
fatal "Префикс $prefix_name уже существует!
Удалите е г о если действительно желаете востановить префикс заново.
Команда для удаления: $SCRIPT_NAME remove-prefix $prefix_name"
fi
if [[ -d "$temp_extract_dir/dist" ]] ; then
if [[ -d "$temp_extract_dir/dist" ]] ; then
print_info "Восстановление версий WINE"
print_info "Восстановление версий WINE"
if cp -fr "$temp_extract_dir/dist"/* "$WH_DIST_DIR/"
if cp -fr "$temp_extract_dir/dist"/* "$WH_DIST_DIR/"
@ -1467,7 +1464,7 @@ wh_info () {
echo "Использование: $SCRIPT_NAME [команда]
echo "Использование: $SCRIPT_NAME [команда]
Команды:
Команды:
install list список возможных установочных скриптов
install list список возможных установочных скриптов
install [скрипт] запустить скрипт установки программы
install [скрипт] запустить скрипт установки программы
install [скрипт] --clear-pfx не использовать готовый префикс для установки ПО
install [скрипт] --clear-pfx не использовать готовый префикс для установки ПО
@ -1497,7 +1494,14 @@ if [[ -d "$HOME/.local/share/$SCRIPT_NAME" ]] \
then try_force_link_dir "$HOME/.local/share/$SCRIPT_NAME" "$HOME/.winehelper"
then try_force_link_dir "$HOME/.local/share/$SCRIPT_NAME" "$HOME/.winehelper"
fi
fi
case "${1,,}" i n
if [[ -n "$1" ]] ; the n
arg1="$1"
shift
else
arg1="--help"
fi
case "$arg1" in
--version) rpm -qi "$SCRIPT_NAME" ; exit 0 ;;
--version) rpm -qi "$SCRIPT_NAME" ; exit 0 ;;
--help) wh_info ; exit 0 ;;
--help) wh_info ; exit 0 ;;
killall) kill_wine ;;
killall) kill_wine ;;
@ -1505,20 +1509,19 @@ case "${1,,}" in
winereg|regedit) prepair_wine ; wine_run "regedit" ;;
winereg|regedit) prepair_wine ; wine_run "regedit" ;;
winefile|explorer) prepair_wine ; wine_run "winefile" ;;
winefile|explorer) prepair_wine ; wine_run "winefile" ;;
wineconsole|cmd) prepair_wine ; wine_run "wineconsole" ;;
wineconsole|cmd) prepair_wine ; wine_run "wineconsole" ;;
winetricks) shift ; prepair_wine ; "$WINETRICKS" -q "$@" ;;
winetricks) prepair_wine ; "$WINETRICKS" -q "$@" ;;
desktop) shift ; create_desktop "$@" ; exit 0 ;;
desktop) create_desktop "$@" ; exit 0 ;;
install|-i) shift ; run_autoinstall "$@" ;;
install|-i) run_autoinstall "$@" ;;
installed) shift ; check_installed_programs "$1" ;;
installed) check_installed_programs "$1" ;;
run|-r) shift ; run_installed_programs "$1" ;;
run|-r) run_installed_programs "$1" ;;
backup-prefix) shift ; backup_prefix "$@" ;;
backup-prefix) backup_prefix "$@" ;;
restore-prefix) shift ; restore_prefix "$@" ;;
restore-prefix) restore_prefix "$@" ;;
remove-all) shift ; remove_winehelper "$@" ;;
remove-all) remove_winehelper "$@" ;;
remove-prefix) shift ; remove_prefix "$@" ;;
remove-prefix) remove_prefix "$@" ;;
*)
*)
if [[ -f "$1" ]] ; then
if [[ -f "$arg 1" ]] ; then
WIN_FILE_EXEC="$(readlink -f "$1")"
WIN_FILE_EXEC="$(readlink -f "$arg 1")"
WIN_FILE_NAME="$(basename "$WIN_FILE_EXEC ")"
WIN_FILE_NAME="$(basename "$arg1 ")"
shift
case "${WIN_FILE_NAME,,}" in
case "${WIN_FILE_NAME,,}" in
*.exe) prepair_wine ; wine_run $WINE_WIN_START "$WIN_FILE_EXEC" "$@" ;;
*.exe) prepair_wine ; wine_run $WINE_WIN_START "$WIN_FILE_EXEC" "$@" ;;
*.msi) prepair_wine ; wine_run msiexec /i "$WIN_FILE_EXEC" "$@" ;;
*.msi) prepair_wine ; wine_run msiexec /i "$WIN_FILE_EXEC" "$@" ;;
@ -1526,8 +1529,9 @@ case "${1,,}" in
*) fatal "Тип файла не поддерживается." ;;
*) fatal "Тип файла не поддерживается." ;;
esac
esac
else
else
print_error "Команды $arg1 не существует."
wh_info
wh_info
exit 1
exit 1
fi
fi
;;
;;
esac
esac