From 629f50e09778abaafe392bd2ecbe603b2c7d4ad7 Mon Sep 17 00:00:00 2001 From: Htylol Date: Mon, 28 Oct 2024 01:43:16 +0500 Subject: [PATCH] Fixed bugs --- data_from_portwine/scripts/functions_helper | 70 +++++++++++++-------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 1714b2a..047aff7 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -850,7 +850,7 @@ debug_timer () { # Параллельное создание базы по времени после завершения приложения search_desktop_file () { local desktop_file desktop_file_new line1 line2 line3 line4 count_line i - local EXEC_DESKTOP TIME_TOTAL BROKEN_LINE FILE_SHA256SUM_ARRAY FILE_SHA256SUM_FOUND FILE_SHA256SUM_NOT_FOUND + local EXEC_DESKTOP TIME_TOTAL BROKEN_LINE FILE_SHA256SUM_ARRAY FILE_SHA256SUM_FOUND FILE_SHA256SUM_NOT_FOUND SKIP_REPAIR if [[ -z $FILE_SHA256SUM ]] ; then read -r -a FILE_SHA256SUM_ARRAY < <(sha256sum "$portwine_exe") FILE_SHA256SUM=${FILE_SHA256SUM_ARRAY[0]} @@ -881,7 +881,6 @@ search_desktop_file () { if [[ ${line2[1]} != "$FILE_SHA256SUM" ]] \ && [[ ${line2[0]} == "${portwine_exe// /#@_@#}" ]] ; then FILE_SHA256SUM_NOT_FOUND=1 - break fi done < "$PORT_WINE_TMP_PATH/statistics" if [[ $portwine_exe == "${EXEC_DESKTOP//\"/}" ]] ; then @@ -897,9 +896,9 @@ search_desktop_file () { ## TODO: ремонтирует devel пр с entry point потом можно будет это дропнуть if [[ $FILE_SHA256SUM_NOT_FOUND == 1 ]] && [[ ${#line2[1]} != "64" ]] ; then - while IFS=" " read -r -a line4 ; do - if [[ ${#line4[1]} == "64" ]] - then echo "${line4[*]}" + while IFS=" " read -r -a line3 ; do + if [[ ${#line3[1]} == "64" ]] + then echo "${line3[*]}" fi done < "$PORT_WINE_TMP_PATH/statistics" > "$PORT_WINE_TMP_PATH/statistics_repair" try_remove_file "$PORT_WINE_TMP_PATH/statistics" @@ -909,9 +908,9 @@ search_desktop_file () { # Ремонт, если есть пустые строки и непонятные строки без .exe, .bat, .msi, .reg if [[ $BROKEN_LINE == 1 ]] ; then - while IFS=" " read -r -a line3 ; do - if [[ -n ${line3[0]} ]] && [[ ${line3[0]} =~ (.[Bb][Aa][Tt]$|.[Ee][Xx][Ee]$|.[Mm][Ss][Ii]$|.[Rr][Ee][Gg]$) ]] - then echo "${line3[*]}" + while IFS=" " read -r -a line4 ; do + if [[ -n ${line4[0]} ]] && [[ ${line4[0]} =~ (.[Bb][Aa][Tt]$|.[Ee][Xx][Ee]$|.[Mm][Ss][Ii]$|.[Rr][Ee][Gg]$) ]] + then echo "${line4[*]}" fi done < "$PORT_WINE_TMP_PATH/statistics" > "$PORT_WINE_TMP_PATH/statistics_repair" try_remove_file "$PORT_WINE_TMP_PATH/statistics" @@ -938,10 +937,10 @@ search_desktop_file () { fi export TIME_CURRENT=${line2[2]} - # Проверка новых десктоп файлов, чтобы их можно было сортировать первыми при первом создании в главном меню + # Проверка новых десктоп файлов, чтобы их можно было сортировать первыми при первом создании в главном меню + ремонт if [[ $PW_NEW_DESKTOP == 1 ]] && [[ ${line2[3]} != NEW_DESKTOP ]] ; then if [[ $FILE_SHA256SUM_FOUND == 1 ]] ; then - sed -i "s|${line2[1]} \(.*\) OLD_DESKTOP|${line2[1]} \1 NEW_DESKTOP|" "$PORT_WINE_TMP_PATH/statistics" + sed -i "s|${line2[1]} \(.*\) ${line2[3]}|${line2[1]} \1 NEW_DESKTOP|" "$PORT_WINE_TMP_PATH/statistics" else echo "${portwine_exe// /#@_@#} $FILE_SHA256SUM $TIME_CURRENT NEW_DESKTOP" >> "$PORT_WINE_TMP_PATH/statistics" fi @@ -958,28 +957,47 @@ search_desktop_file () { # Когда только запустили приложение первый раз echo "${portwine_exe// /#@_@#} $FILE_SHA256SUM $TIME_TOTAL OLD_DESKTOP" >> "$PORT_WINE_TMP_PATH/statistics" fi - # Здесь добавляются новые линии для статистики по аналогии, к примеру ${line2[4]} - # L4 важен, чтобы не было путаницы из-за sed, то что используется \(.*\), для ${line2[5]} это будет L5 и т.д. count_line=4 + # Здесь добавляются новые линии для статистики if [[ -z ${line2[4]} ]] ; then - line2[4]=0 - sed -i "s|$FILE_SHA256SUM \(.*\)|$FILE_SHA256SUM \1 L4-${line2[4]}|" "$PORT_WINE_TMP_PATH/statistics" + SKIP_REPAIR=1 + sed -i "s|$FILE_SHA256SUM \(.*\)|$FILE_SHA256SUM \1 L4-1|" "$PORT_WINE_TMP_PATH/statistics" else - line2[4]=${line2[4]//L4-/} - NUMBER_OF_STARTS=$(( line2[4] + 1 )) - (( count_line ++ )) + # ремонт, если L4 по каким-то причинам сломался + if [[ ${line2[4]} =~ ^L4 ]] ; then + local NUMBER_OF_STARTS=$(( ${line2[4]//L4-/} + 1 )) + else + SKIP_REPAIR=1 + sed -i "s|$FILE_SHA256SUM \(.*\) ${line2[4]}|$FILE_SHA256SUM \1 L4-1|" "$PORT_WINE_TMP_PATH/statistics" + fi fi - # сюда L5 + (( count_line ++ )) - # Ремонт, если количество элементов массива по каким-то причина больше, чем должно быть - if [[ -n ${line2["$count_line"]} ]] ; then - for i in $(seq $count_line ${#line2[@]}) ; do - unset 'line2[$i]' - done - sed -i "s|${portwine_exe// /#@_@#} $FILE_SHA256SUM \(.*\)|${line2[*]}|" "$PORT_WINE_TMP_PATH/statistics" +# Пример для L5 +# if [[ -z ${line2[5]} ]] ; then +# SKIP_REPAIR=1 +# sed -i "s|$FILE_SHA256SUM \(.*\)|$FILE_SHA256SUM \1 L5-1|" "$PORT_WINE_TMP_PATH/statistics" +# else +# if [[ ${line2[5]} =~ ^L5 ]] ; then +# local ЗДЕСЬ_НОВАЯ_ПЕРЕМЕННАЯ=$(( ${line2[5]//L5-/} + 1 )) +# else +# SKIP_REPAIR=1 +# sed -i "s|$FILE_SHA256SUM \(.*\) ${line2[5]}|$FILE_SHA256SUM \1 L5-1|" "$PORT_WINE_TMP_PATH/statistics" +# fi +# fi +# (( count_line ++ )) + + if [[ $SKIP_REPAIR != 1 ]] ; then + # Ремонт, если количество элементов массива по каким-то причина больше, чем должно быть + if [[ -n ${line2["$count_line"]} ]] ; then + for i in $(seq $count_line ${#line2[@]}) ; do + unset 'line2[$i]' + done + sed -i "s|${portwine_exe// /#@_@#} $FILE_SHA256SUM \(.*\)|${line2[*]}|" "$PORT_WINE_TMP_PATH/statistics" + fi + # Сюда все sedы от L4, L5 и т.д. (после всех ремонтов) + sed -i "s|$FILE_SHA256SUM \(.*\) L4-${line2[4]}|$FILE_SHA256SUM \1 L4-$NUMBER_OF_STARTS|" "$PORT_WINE_TMP_PATH/statistics" fi - # Сюда все sedы от L4, L5 и т.д. (после всех ремонтов) - sed -i "s|$FILE_SHA256SUM \(.*\) L4-${line2[4]}|$FILE_SHA256SUM \1 L4-$NUMBER_OF_STARTS|" "$PORT_WINE_TMP_PATH/statistics" fi }