Skip to content

Обращение к API бэкенда в команде ls -r #37

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 1, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
126 changes: 84 additions & 42 deletions src/core/Классы/ВерсииOneScript.os
Original file line number Diff line number Diff line change
Expand Up @@ -216,59 +216,23 @@
//
Функция ПолучитьСписокДоступныхКУстановкеВерсий() Экспорт

ДоступныеВерсии = Новый ТаблицаЗначений;
ДоступныеВерсии.Колонки.Добавить("Алиас");
ДоступныеВерсии.Колонки.Добавить("Путь");

АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт();

Таймаут = 10;
Соединение = Новый HTTPСоединение(
АдресСайтаОСкрипт,
ПараметрыOVM.АдресСайтаОСкрипт(),
,
,
,
,
Таймаут
);
Запрос = Новый HTTPЗапрос("downloads");

Ответ = Соединение.Получить(Запрос);
HTTP_OK = 200;
Если Ответ.КодСостояния <> HTTP_OK Тогда
ВызватьИсключение Ответ.КодСостояния;
КонецЕсли;

ТелоСтраницы = Ответ.ПолучитьТелоКакСтроку();

РегулярноеВыражение = Новый РегулярноеВыражение(
"<a href=""(\/downloads\/[^""]+)"">(" + ПараметрыOVM.МаскаНомераВерсии() + ")<");
ИндексГруппыАдрес = 1;
ИндексГруппыВерсия = 2;

Совпадения = РегулярноеВыражение.НайтиСовпадения(ТелоСтраницы);
Для Каждого СовпадениеРегулярногоВыражения Из Совпадения Цикл
ГруппаАдрес = СовпадениеРегулярногоВыражения.Группы[ИндексГруппыАдрес];
ГруппаВерсия = СовпадениеРегулярногоВыражения.Группы[ИндексГруппыВерсия];

// TODO: Убрать после решения https://github.com/EvilBeaver/OneScript/issues/667
Если ГруппаВерсия.Значение = "1.0.9" Тогда
Продолжить;
КонецЕсли;

ДоступнаяВерсия = ДоступныеВерсии.Добавить();
ДоступнаяВерсия.Алиас = ГруппаВерсия.Значение;
ДоступнаяВерсия.Путь = АдресСайтаОСкрипт + ГруппаАдрес.Значение;
КонецЦикла;

Итератор = ДопустимыеАлиасы().Ключи().Итератор();

Пока Итератор.ЕстьСледующий() Цикл
ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, Итератор.Следующий(), "Путь");
КонецЦикла;
ДоступныеВерсии = ТаблицаДоступныхВерсий();

Если Не ПолучитьВерсииПоAPI(Соединение, ДоступныеВерсии) Тогда
ПолучитьВерсииРазборомHTML(Соединение, ДоступныеВерсии);
КонецЕсли;

Возврат ДоступныеВерсии;

КонецФункции

// <Описание функции>
Expand Down Expand Up @@ -356,6 +320,82 @@

КонецФункции

Функция ТаблицаДоступныхВерсий()
ДоступныеВерсии = Новый ТаблицаЗначений;
ДоступныеВерсии.Колонки.Добавить("Алиас");
ДоступныеВерсии.Колонки.Добавить("Путь");

Возврат ДоступныеВерсии;
КонецФункции

Функция ПолучитьВерсииПоAPI(Знач Соединение, Знач ДоступныеВерсии)
Запрос = Новый HTTPЗапрос("api/archive");
Ответ = Соединение.Получить(Запрос);
HTTP_OK = 200;
Если Ответ.КодСостояния <> HTTP_OK Тогда
Возврат Ложь;
КонецЕсли;

ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());

АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт();
МассивВерсий = ПрочитатьJSON(ЧтениеJSON, Ложь);
Для Каждого ОписаниеВерсии Из МассивВерсий Цикл
ДоступнаяВерсия = ДоступныеВерсии.Добавить();
ДоступнаяВерсия.Алиас = ОписаниеВерсии.presentation;
ДоступнаяВерсия.Путь = АдресСайтаОСкрипт + ОписаниеВерсии.link;
КонецЦикла;

Итератор = ДопустимыеАлиасы().Ключи().Итератор();

Пока Итератор.ЕстьСледующий() Цикл
ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, Итератор.Следующий(), "Путь");
КонецЦикла;

Возврат Истина;
КонецФункции

Процедура ПолучитьВерсииРазборомHTML(Знач Соединение, Знач ДоступныеВерсии)
Запрос = Новый HTTPЗапрос("downloads");

Ответ = Соединение.Получить(Запрос);
HTTP_OK = 200;
Если Ответ.КодСостояния <> HTTP_OK Тогда
ВызватьИсключение Ответ.КодСостояния;
КонецЕсли;

ТелоСтраницы = Ответ.ПолучитьТелоКакСтроку();

РегулярноеВыражение = Новый РегулярноеВыражение(
"<a href=""(\/downloads\/[^""]+)"">(" + ПараметрыOVM.МаскаНомераВерсии() + ")<");
ИндексГруппыАдрес = 1;
ИндексГруппыВерсия = 2;

АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт();
Совпадения = РегулярноеВыражение.НайтиСовпадения(ТелоСтраницы);
Для Каждого СовпадениеРегулярногоВыражения Из Совпадения Цикл
ГруппаАдрес = СовпадениеРегулярногоВыражения.Группы[ИндексГруппыАдрес];
ГруппаВерсия = СовпадениеРегулярногоВыражения.Группы[ИндексГруппыВерсия];

// TODO: Убрать после решения https://github.com/EvilBeaver/OneScript/issues/667
Если ГруппаВерсия.Значение = "1.0.9" Тогда
Продолжить;
КонецЕсли;

ДоступнаяВерсия = ДоступныеВерсии.Добавить();
ДоступнаяВерсия.Алиас = ГруппаВерсия.Значение;
ДоступнаяВерсия.Путь = АдресСайтаОСкрипт + ГруппаАдрес.Значение;
КонецЦикла;

Итератор = ДопустимыеАлиасы().Ключи().Итератор();

Пока Итератор.ЕстьСледующий() Цикл
ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, Итератор.Следующий(), "Путь");
КонецЦикла;

КонецПроцедуры

Процедура ОбеспечитьСтрокуВерсииПоАлиасу(ТаблицаВерсий, Алиас, ИмяРеквизитаПуть = "ПутьСервер")

СтрокаВерсии = ТаблицаВерсий.Найти(Алиас, "Алиас");
Expand All @@ -365,6 +405,8 @@
СтрокаВерсии.Алиас = Алиас;
КонецЕсли;

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не совсем понятно, что надо добавлять. И можно ли на это заложиться уже сейчас, чтобы не делать две версии овм под новую структуру сайта?

Copy link
Member Author

@EvilBeaver EvilBeaver Apr 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сейчас в качестве урла для метаверсий в выхлопе команды ls -r пишется просто /downloads, а в новой версии будет работать линк /downloads/lts и /downoads/preview.

Но если сейчас это написать в ovm то эти линки приведут на 404

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Что, наверное, не страшно, т.к. по этим линкам все равно вряд ли кто-то ходит...

// TODO После запуска нового фронта тут надо будет добавлять токен версии, т.к.
// в новом фронте у мета-версий есть своя страничка с документацией.
СтрокаВерсии[ИмяРеквизитаПуть] = ПараметрыOVM.ПолныйАдресККаталогуДистрибутивов();

КонецПроцедуры
Expand Down