From f2c1ab77d3ca113acd3b4815ac538ba49001150b Mon Sep 17 00:00:00 2001
From: rubin <rubinserhiy@gmail.com>
Date: Sat, 28 Jan 2023 15:32:37 +0300
Subject: [PATCH] update module autoupdate & bump version 28.01.2023

---
 TruckHUD.lua | 119 +++++++++++++++++++++++++++------------------------
 changelog    |   6 ++-
 version      |   2 +-
 3 files changed, 70 insertions(+), 57 deletions(-)

diff --git a/TruckHUD.lua b/TruckHUD.lua
index 825c8af..20cc4c6 100644
--- a/TruckHUD.lua
+++ b/TruckHUD.lua
@@ -1,6 +1,6 @@
 script_name("TruckHUD")
 script_author("Serhiy_Rubin")
-script_version("27.01.2023.1")
+script_version("28.01.2023")
 
 local inicfg = require "inicfg"
 local dlstatus = require("moonloader").download_status
@@ -4274,31 +4274,33 @@ script_update = {
     version_url = "http://git.deadpoo.net/rubin/TruckHUD/raw/branch/master/version",
     script_url = "http://git.deadpoo.net/rubin/TruckHUD/raw/branch/master/TruckHUD.lua",
     changelog_url = "http://git.deadpoo.net/rubin/TruckHUD/raw/branch/master/changelog",
-    address_ini = "rubin-mods-updates.ini",
+    address_ini = string.format("rubin-mods-updates\\%s.ini", thisScript().name),
     main = function()
-        local name = thisScript().name
+        if not doesDirectoryExist("moonloader\\config\\rubin-mods-updates") then
+            createDirectory("moonloader\\config\\rubin-mods-updates")
+        end
         local ini = inicfg.load({
-            [name] = {
+            settings = {
                 check_update = true,
                 auto_update = true,
                 server_version = ""
             }
         }, script_update.address_ini)
-        ini[name].version_url = script_update.version_url
-        ini[name].script_url = script_update.script_url
-        ini[name].changelog_url = script_update.changelog_url
-        ini[name].version = thisScript().version
-        ini[name].script_name = thisScript().name
+        ini.settings.version_url = script_update.version_url
+        ini.settings.script_url = script_update.script_url
+        ini.settings.changelog_url = script_update.changelog_url
+        ini.settings.version = thisScript().version
+        ini.settings.script_name = thisScript().name
         local command = (thisScript().name:gsub(" ", "").."-update"):lower()
         sampRegisterChatCommand(command, script_update.command)
-        if ini[name].check_update or ini[name].auto_update then
+        if ini.settings.check_update or ini.settings.auto_update then
             local fpath = os.tmpname()
             local result, text = pcall(openURL, script_update.version_url, fpath)
             if result then
-                ini[name].server_version = text
+                ini.settings.server_version = text
                 if text ~= "" and not string.find(text, thisScript().version) then
                     addChatMessage( string.format("Вышла новая версия '%s'. Текущая: '%s'", text, thisScript().version) )
-                    if ini[name].auto_update then
+                    if ini.settings.auto_update then
                         addChatMessage( string.format("Автообновление скрипта включено. Процесс запущен!") )
                         script_update.command()
                     else
@@ -4337,8 +4339,8 @@ script_update = {
         end)
     end,
     menu = {
-        text = {},
         dialog = {},
+        ini = {},
         init = function()
             if not sampIsChatCommandDefined("rubin-mods") then
                 sampAddChatMessage("{667dff}[RUBIN MODS]{FFFFFF} Управление обновлениями скриптов: /rubin-mods", 0xFFFFFFFF)
@@ -4347,7 +4349,7 @@ script_update = {
                     wait(0)
                     local result, button, list, input = sampHasDialogRespond(2160)
                     if result and button == 1 then
-                        if script_update.menu.text[list+1] ~= nil and script_update.menu.dialog[list+1] ~= nil then
+                        if script_update.menu.ini[list+1] ~= nil and script_update.menu.dialog[list+1] ~= nil then
                             script_update.menu.dialog[list+1](script_update.menu.ini[list+1])
                         end
                     end
@@ -4369,20 +4371,28 @@ script_update = {
             end
         end,
         show = function()
-            script_update.menu.text = {}
             script_update.menu.dialog = {}
             script_update.menu.ini = {}
-            local ini = inicfg.load({}, script_update.address_ini)
-            for k,v in pairs(ini) do
-                script_update.menu.ini[#script_update.menu.ini+1] = v
-                script_update.menu.text[#script_update.menu.text+1] = string.format("%s\t%s%s", k, (v.version == v.server_version and "{59fc30}" or "{ff0000}"),v.version)
-                script_update.menu.dialog[#script_update.menu.dialog+1] = function(data)
-                   script_update.menu2.show(data)
-                end
-            end
             local text = ""
-            for i = 1, #script_update.menu.text do
-                text = text..script_update.menu.text[i].."\n"
+            if doesDirectoryExist("moonloader\\config\\rubin-mods-updates") then
+                local FileHandle, FileName = findFirstFile("moonloader\\config\\rubin-mods-updates\\*")
+                while FileName ~= nil do
+                    if FileName ~= nil and FileName ~= ".." and FileName ~= "." and FileName:find("%.ini") then
+                        local address = string.format("moonloader\\config\\rubin-mods-updates\\%s", FileName)
+                        if doesFileExist(address) then
+                            local ini = inicfg.load({}, address)
+                            script_update.menu.ini[#script_update.menu.ini+1] = address
+                            text = string.format("%s%s\n", text, string.format("%s\t%s%s", ini.settings.script_name, (ini.settings.version == ini.settings.server_version and "{59fc30}" or "{ff0000}"),ini.settings.version))
+                            script_update.menu.dialog[#script_update.menu.dialog+1] = function(data)
+                               script_update.menu2.show(data)
+                            end
+                        end
+                    end
+                    FileName = findNextFile(FileHandle)
+                end
+                findClose(FileHandle)
+            else
+                text = "Не найдена директория:\t\n    moonloader\\config\\rubin-mods-updates\t"
             end
             sampShowDialog(2160,"Обновление скриптов: Rubin Mods","Скрипт\tВерсия\n"..text,"Выбрать","Закрыть",5)
         end
@@ -4395,45 +4405,44 @@ script_update = {
             script_update.menu2.data = data
             script_update.menu2.text = {}
             script_update.menu2.dialog = {}
-            local ini = inicfg.load({}, script_update.address_ini)
-            local k = data.script_name
-            script_update.menu2.text[#script_update.menu2.text+1] = string.format("Автообновление %s", (ini[k].auto_update and "{59fc30}ON" or "{ff0000}OFF"))
-            script_update.menu2.dialog[#script_update.menu2.dialog+1] = function()
-                ini[k].auto_update = not ini[k].auto_update
-                inicfg.save(ini, script_update.address_ini)
-                script_update.menu2.show(data)
-            end
-            if not ini[k].auto_update then
-                script_update.menu2.text[#script_update.menu2.text+1] = string.format("Проверять обновления %s", (ini[k].check_update and "{59fc30}ON" or "{ff0000}OFF"))
+            if doesFileExist(data) then
+                local ini = inicfg.load({}, data)
+                script_update.menu2.text[#script_update.menu2.text+1] = string.format("Автообновление %s", (ini.settings.auto_update and "{59fc30}ON" or "{ff0000}OFF"))
                 script_update.menu2.dialog[#script_update.menu2.dialog+1] = function()
-                    ini[k].check_update = not ini[k].check_update
-                    inicfg.save(ini, script_update.address_ini)
+                    ini.settings.auto_update = not ini.settings.auto_update
+                    inicfg.save(ini, data)
                     script_update.menu2.show(data)
                 end
+                if not ini.settings.auto_update then
+                    script_update.menu2.text[#script_update.menu2.text+1] = string.format("Проверять обновления %s", (ini.settings.check_update and "{59fc30}ON" or "{ff0000}OFF"))
+                    script_update.menu2.dialog[#script_update.menu2.dialog+1] = function()
+                        ini.settings.check_update = not ini.settings.check_update
+                        inicfg.save(ini, data)
+                        script_update.menu2.show(data)
+                    end
+                end
+                script_update.menu2.text[#script_update.menu2.text+1] = string.format("Последние изменения")
+                script_update.menu2.dialog[#script_update.menu2.dialog+1] = function()
+                    script_update.changelog(ini.settings.changelog_url, ini.settings.script_name)
+                end
+                script_update.menu2.text[#script_update.menu2.text+1] = string.format("Удалить из списка")
+                script_update.menu2.dialog[#script_update.menu2.dialog+1] = function()
+                    os.remove(data)
+                    script_update.menu.show()
+                end
+                local text = ""
+                for i = 1, #script_update.menu2.text do
+                    text = text..script_update.menu2.text[i].."\n"
+                end
+                sampShowDialog(2162,"Настройки обновления для "..ini.settings.script_name,text,"Выбрать","Назад",2)
             end
-            script_update.menu2.text[#script_update.menu2.text+1] = string.format("Последние изменения")
-            script_update.menu2.dialog[#script_update.menu2.dialog+1] = function()
-                script_update.changelog(ini[k].changelog_url)
-            end
-            script_update.menu2.text[#script_update.menu2.text+1] = string.format("Удалить из списка")
-            script_update.menu2.dialog[#script_update.menu2.dialog+1] = function()
-                ini[k] = nil
-                inicfg.save(ini, script_update.address_ini)
-                script_update.menu.show()
-            end
-
-            local text = ""
-            for i = 1, #script_update.menu2.text do
-                text = text..script_update.menu2.text[i].."\n"
-            end
-            sampShowDialog(2162,"Настройки обновления для "..data.script_name,text,"Выбрать","Назад",2)
         end
     },
-    changelog = function(url, data)
+    changelog = function(url, name)
         local fpath = os.tmpname()
         local result, text = pcall(openURL, url, fpath)
         if result then
-            sampShowDialog(2161,"Changelog - "..thisScript().name,text,"Выбрать","Назад",4)
+            sampShowDialog(2161,"Changelog - "..name,text,"Выбрать","Назад",4)
         end
     end
 }
diff --git a/changelog b/changelog
index 5482748..05fb81c 100644
--- a/changelog
+++ b/changelog
@@ -12,4 +12,8 @@
 Версия от 27.01.2023
 
 Скрипт переведён на UTF-8
-Добавлена проверка версии скрипта /truck users
\ No newline at end of file
+Добавлена проверка версии скрипта /truck users
+
+Версия от 28.01.2023
+
+Обновлен модуль /rubin-mods
\ No newline at end of file
diff --git a/version b/version
index 5972838..3ada7f6 100644
--- a/version
+++ b/version
@@ -1 +1 @@
-27.01.2023.1
\ No newline at end of file
+28.01.2023
\ No newline at end of file