diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 2ec7ff7f..f13ec638 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -7513,6 +7513,82 @@ EOF restart_pp } +pw_create_prefix_backup_cli () { + PW_PREFIX_NAME="$1" + PW_PREFIX_TO_BACKUP="$2" + + unset PW_SANDBOX_HOME_PATH + pw_init_runtime + if check_flatpak; then + TMP_ALL_PATH="" + else + TMP_ALL_PATH="LD_LIBRARY_PATH=\"${PW_LD_LIBRARY_PATH}\"" + fi + + chmod -R u+w "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}" + + echo "#!/usr/bin/env bash + ${TMP_ALL_PATH} mksquashfs \"${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}\" \ + \"${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack.part\" -comp zstd \ + || rm -f \"${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack.part\" + " > "${PORT_WINE_TMP_PATH}/pp_pfx_backup.sh" + + chmod u+x "${PORT_WINE_TMP_PATH}/pp_pfx_backup.sh" + + ${pw_runtime} ${PW_TERM} "${PORT_WINE_TMP_PATH}/pp_pfx_backup.sh" + + try_remove_file "${PORT_WINE_TMP_PATH}/pp_pfx_backup.sh" + + if [[ -f "${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack.part" ]]; then + mv -f "${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack.part" \ + "${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack" + return 0 + else + return 1 + fi +} + +pw_unpack_prefix_cli () { + PW_BACKUP_FILE="$1" + + unset PW_SANDBOX_HOME_PATH + pw_init_runtime + + if check_flatpak; then + TMP_ALL_PATH="" + else + TMP_ALL_PATH="LD_LIBRARY_PATH=\"${PW_LD_LIBRARY_PATH}\"" + fi + + if check_selinux; then + NO_XATTRS_NEED="-no-xattrs" + else + NO_XATTRS_NEED="" + fi + + PW_PREFIX_NAME=$(basename "${PW_BACKUP_FILE^^}" .PPACK) + + echo "#!/usr/bin/env bash + ${TMP_ALL_PATH} unsquashfs $NO_XATTRS_NEED -f -d \ + \"${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}\" \"$PW_BACKUP_FILE\" \ + || echo \"ERROR\" > \"${PORT_WINE_TMP_PATH}/pp_pfx_unpack_error\" + " > "${PORT_WINE_TMP_PATH}/pp_pfx_unpack.sh" + + chmod u+x "${PORT_WINE_TMP_PATH}/pp_pfx_unpack.sh" + ${pw_runtime} ${PW_TERM} "${PORT_WINE_TMP_PATH}/pp_pfx_unpack.sh" + + if grep "ERROR" "${PORT_WINE_TMP_PATH}/pp_pfx_unpack_error" &>/dev/null; then + try_remove_file "${PORT_WINE_TMP_PATH}/pp_pfx_unpack_error" + try_remove_file "${PORT_WINE_TMP_PATH}/pp_pfx_unpack.sh" + return 1 + else + try_remove_file "${PORT_WINE_TMP_PATH}/pp_pfx_unpack.sh" + return 0 + fi +} + + + pw_autoinstall_from_db () { export PW_USER_TEMP="${PORT_WINE_TMP_PATH}" export PW_USE_GAMEMODE=0 diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index 4bffa0e0..d38aa8d6 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -498,6 +498,16 @@ $(echo $files_from_autoinstall | awk '{for (i = 1; i <= NF; i++) {if (i % 10 == edit_db_from_gui $keys_all exit 0 ;; + --backup-prefix) + # portproton --backup-prefix + pw_create_prefix_backup_cli "$2" "$3" + exit $? + ;; + --restore-prefix) + # portproton --restore-prefix + pw_unpack_prefix_cli "$2" + exit $? + ;; esac ### GUI ###