From ded62bd9ac9ff404de21684ffe8ab3c80a2cd9f5 Mon Sep 17 00:00:00 2001 From: Sergey Palcheh Date: Wed, 3 Dec 2025 12:43:49 +0600 Subject: [PATCH] the description of the prepared prefix has been corrected --- winehelper | 43 +++++++++++++++++++++++-------------------- winehelper_gui.py | 40 ++++++++++++++++++++++++++++------------ 2 files changed, 51 insertions(+), 32 deletions(-) diff --git a/winehelper b/winehelper index 00dc272..e3f706a 100755 --- a/winehelper +++ b/winehelper @@ -1865,46 +1865,49 @@ select_prepared_prefix() { local in_prefix_section=false local current_description="" + local current_prefix_name="" while IFS= read -r line; do - if [[ "$line" =~ ^#####[[:space:]]PREFIX[[:space:]]#####$ ]]; then + if [[ "$line" =~ ^#####[[:space:]]PREFIX[[:space:]]#####$ ]] ; then in_prefix_section=true continue - elif [[ "$line" =~ ^#####.* ]]; then - if [[ "$in_prefix_section" == true ]] && [[ -n "$current_description" ]]; then - descriptions+=("$(echo -e "$current_description" | sed 's/\\n$//')") - current_description="" - fi + elif [[ "$line" =~ ^#####.* ]] ; then in_prefix_section=false fi - if [[ "$in_prefix_section" == true ]]; then - if [[ "$line" =~ ^[a-f0-9]{64} ]]; then - [[ -n "$current_description" ]] && descriptions+=("$(echo -e "$current_description" | sed 's/\\n$//')") + if [[ "$in_prefix_section" == true ]] ; then + if [[ "$line" =~ ^[a-f0-9]{64} ]] ; then + # Если у нас есть имя предыдущего префикса, добавляем его описание + if [[ -n "$current_prefix_name" ]] ; then + descriptions+=("$(echo -e "${current_description}" | sed 's/\\n$//')") + fi current_description="" local filename filename=$(echo "$line" | awk '{print $2}') - local prefix_name=${filename%.tar.xz} + current_prefix_name=${filename%.tar.xz} - if [[ "$arch" == "win32" ]]; then - if [[ "$prefix_name" == *"_x86_"* ]] || [[ "$prefix_name" == *"_i586_"* ]]; then - options+=("$prefix_name") - fi - elif [[ "$arch" == "win64" ]]; then - if [[ "$prefix_name" == *"_x64_"* ]] || [[ "$prefix_name" == *"_amd64_"* ]]; then - options+=("$prefix_name") - fi + if [[ "$arch" == "win32" ]] && ([[ "$current_prefix_name" == *"_x86_"* ]] || [[ "$current_prefix_name" == *"_i586_"* ]]) ; then + options+=("$current_prefix_name") + elif [[ "$arch" == "win64" ]] && ([[ "$current_prefix_name" == *"_x64_"* ]] || [[ "$current_prefix_name" == *"_amd64_"* ]]) ; then + options+=("$current_prefix_name") + else + # Если архитектура не совпадает, сбрасываем имя, чтобы не добавлять описание + current_prefix_name="" fi - elif [[ "$line" =~ ^#[[:space:]] ]]; then + elif [[ "$line" =~ ^#[[:space:]] ]] ; then local comment_line=${line:2} # Удаляем '# ' current_description+="$comment_line\n" fi fi done < "$sha256_file" + # Добавляем описание для самого последнего префикса в файле + if [[ -n "$current_prefix_name" ]] ; then + descriptions+=("$(echo -e "${current_description}" | sed 's/\\n$//')") + fi echo print_info "Выберите тип создаваемого префикса:" - for i in "${!options[@]}"; do + for i in "${!options[@]}" ; do printf "\n\E[36m %s) %s \e[0m\n" "$((i+1))" "${options[$i]}" [[ -n "${descriptions[$i]}" ]] && printf " \E[33m%s\e[0m\n" "$(echo -e "${descriptions[$i]}" | sed 's/^/ /g')" done diff --git a/winehelper_gui.py b/winehelper_gui.py index 1e39863..abc00a6 100644 --- a/winehelper_gui.py +++ b/winehelper_gui.py @@ -1503,23 +1503,39 @@ class CreatePrefixDialog(QDialog): continue if re.match(r'^[a-f0-9]{64}', line): - current_prefix_name = line.split(maxsplit=1)[1].replace('.tar.xz', '') + # Если у нас есть имя и описание для предыдущего префикса, добавляем его + if current_prefix_name and current_description: + arch_for_prev_prefix = None + if "_x86_" in current_prefix_name or "_i586_" in current_prefix_name: + arch_for_prev_prefix = 'win32' + elif "_x64_" in current_prefix_name or "_amd64_" in current_prefix_name: + arch_for_prev_prefix = 'win64' - arch = None - if "_x86_" in current_prefix_name or "_i586_" in current_prefix_name: - arch = 'win32' - elif "_x64_" in current_prefix_name or "_amd64_" in current_prefix_name: - arch = 'win64' - - if arch: - description = current_description.strip().replace('\\n', '\n') if current_description else "Рекомендуемый набор библиотек" - self.prepared_prefixes[arch].append((current_prefix_name, description)) + if arch_for_prev_prefix: + description_to_add = current_description.strip().replace('\\n', '\n') + self.prepared_prefixes[arch_for_prev_prefix].append((current_prefix_name, description_to_add)) + # Сбрасываем описание для нового префикса current_description = "" - current_prefix_name = None + + # Получаем имя нового префикса + current_prefix_name = line.split(maxsplit=1)[1].replace('.tar.xz', '') if len(line.split(maxsplit=1)) > 1 else None elif line.startswith('# '): - current_description += line[2:] + "\\n" + # Накапливаем описание + comment_line = line[2:].strip() + if current_description: + current_description += "\n" + comment_line + else: + current_description = comment_line + + # После цикла добавляем описание для самого последнего префикса, если оно есть + if current_prefix_name and current_description: + arch = None + if "_x86_" in current_prefix_name or "_i586_" in current_prefix_name: arch = 'win32' + elif "_x64_" in current_prefix_name or "_amd64_" in current_prefix_name: arch = 'win64' + if arch: + self.prepared_prefixes[arch].append((current_prefix_name, current_description.strip().replace('\\n', '\n'))) except IOError as e: QMessageBox.warning(self, "Ошибка", f"Не удалось прочитать файл с описаниями префиксов: {e}")