|
9 | 9 | &Пластилин
|
10 | 10 | Перем ПараметрыOVM;
|
11 | 11 |
|
| 12 | +&Пластилин |
| 13 | +Перем ПровайдерДистрибутивовВерсии; |
| 14 | + |
12 | 15 | Перем ЭтоWindows;
|
13 | 16 | Перем ДопустимыеАлиасы; // Кеш коллекции допустимых алиасов
|
14 | 17 |
|
|
215 | 218 | //
|
216 | 219 | Функция ПолучитьСписокДоступныхКУстановкеВерсий() Экспорт
|
217 | 220 |
|
218 |
| - Таймаут = 10; |
219 |
| - Соединение = Новый HTTPСоединение( |
220 |
| - ПараметрыOVM.АдресСайтаОСкрипт(), |
221 |
| - , |
222 |
| - , |
223 |
| - , |
224 |
| - , |
225 |
| - Таймаут |
226 |
| - ); |
227 |
| - |
228 |
| - Возврат ПолучитьВерсииПоAPI(Соединение); |
| 221 | + // Запрашиваем сайт |
| 222 | + ДоступныеВерсии = ПровайдерДистрибутивовВерсии.ПолучитьСписокДоступныхКУстановкеВерсий(); |
| 223 | + |
| 224 | + // Дополняем таблицу нашими алиасами |
| 225 | + Итератор = ДопустимыеАлиасы().Ключи().Итератор(); |
| 226 | + |
| 227 | + Пока Итератор.ЕстьСледующий() Цикл |
| 228 | + ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, Итератор.Следующий(), "Путь"); |
| 229 | + КонецЦикла; |
| 230 | + |
| 231 | + Возврат ДоступныеВерсии; |
229 | 232 |
|
230 | 233 | КонецФункции
|
231 | 234 |
|
|
245 | 248 | // https://oscript.io/api/archive/<токен версии> - данная таблица
|
246 | 249 | //
|
247 | 250 | Функция ПолучитьДоступныеВидыДистрибутивовВерсии(Знач НомерВерсии) Экспорт
|
248 |
| - Таймаут = 10; |
249 |
| - Соединение = Новый HTTPСоединение( |
250 |
| - ПараметрыOVM.АдресСайтаОСкрипт(), |
251 |
| - , |
252 |
| - , |
253 |
| - , |
254 |
| - , |
255 |
| - Таймаут |
256 |
| - ); |
257 |
| - |
258 |
| - Запрос = Новый HTTPЗапрос("api/archive?all=true"); |
259 |
| - Ответ = Соединение.Получить(Запрос); |
260 |
| - HTTP_OK = 200; |
261 |
| - Если Ответ.КодСостояния <> HTTP_OK Тогда |
262 |
| - ВызватьИсключение СтрШаблон("Не удалось найти версию %1 на сайте: Статус: %2, Ответ: %3", |
263 |
| - НомерВерсии, |
264 |
| - Ответ.КодСостояния, |
265 |
| - Ответ.ПолучитьТелоКакСтроку() |
266 |
| - ); |
267 |
| - КонецЕсли; |
268 |
| - |
269 |
| - ЧтениеJSON = Новый ЧтениеJSON(); |
270 |
| - ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); |
271 |
| - |
272 |
| - МассивВерсий = ПрочитатьJSON(ЧтениеJSON, Ложь); |
273 |
| - ИскомыйТокенВерсии = Неопределено; |
274 |
| - Для Каждого ОписаниеВерсии Из МассивВерсий Цикл |
275 |
| - Если НомерВерсии = ОписаниеВерсии.presentation Тогда |
276 |
| - ИскомыйТокенВерсии = ОписаниеВерсии.token; |
277 |
| - КонецЕсли; |
278 |
| - КонецЦикла; |
279 |
| - |
280 |
| - Если ИскомыйТокенВерсии = Неопределено Тогда |
281 |
| - ВызватьИсключение СтрШаблон("Не удалось найти версию %1 на сайте.", НомерВерсии); |
282 |
| - КонецЕсли; |
283 |
| - |
284 |
| - Запрос = Новый HTTPЗапрос("api/archive/" + ИскомыйТокенВерсии); |
285 |
| - Ответ = Соединение.Получить(Запрос); |
286 |
| - HTTP_OK = 200; |
287 |
| - Если Ответ.КодСостояния <> HTTP_OK Тогда |
288 |
| - ВызватьИсключение СтрШаблон("Не удалось найти файлы версии %1 на сайте: Статус: %2, Ответ: %3", |
289 |
| - НомерВерсии, |
290 |
| - Ответ.КодСостояния, |
291 |
| - Ответ.ПолучитьТелоКакСтроку() |
292 |
| - ); |
293 |
| - КонецЕсли; |
294 |
| - |
295 |
| - ТаблицаРезультата = Новый ТаблицаЗначений(); |
296 |
| - ТаблицаРезультата.Колонки.Добавить("Вид"); |
297 |
| - ТаблицаРезультата.Колонки.Добавить("ИмяФайла"); |
298 |
| - ТаблицаРезультата.Колонки.Добавить("Архитектура"); |
299 |
| - ТаблицаРезультата.Колонки.Добавить("Ссылка"); |
300 |
| - |
301 |
| - ЧтениеJSON = Новый ЧтениеJSON(); |
302 |
| - ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); |
303 |
| - |
304 |
| - МассивФайлов = ПрочитатьJSON(ЧтениеJSON, Ложь); |
305 |
| - Для Каждого ОписаниеФайла Из МассивФайлов Цикл |
306 |
| - СтрокаТаблицы = ТаблицаРезультата.Добавить(); |
307 |
| - СтрокаТаблицы.Вид = ОписаниеФайла.id; |
308 |
| - СтрокаТаблицы.ИмяФайла = ОписаниеФайла.filename; |
309 |
| - СтрокаТаблицы.Архитектура = ОписаниеФайла.arch; |
310 |
| - СтрокаТаблицы.Ссылка = ОписаниеФайла.link; |
311 |
| - КонецЦикла; |
312 |
| - |
313 |
| - Возврат ТаблицаРезультата; |
314 |
| - |
| 251 | + Возврат ПровайдерДистрибутивовВерсии.ПолучитьДоступныеВидыДистрибутивовВерсии(НомерВерсии); |
315 | 252 | КонецФункции
|
316 | 253 |
|
317 | 254 | // <Описание функции>
|
|
399 | 336 |
|
400 | 337 | КонецФункции
|
401 | 338 |
|
402 |
| -Функция ПолучитьВерсииПоAPI(Знач Соединение) |
403 |
| - Запрос = Новый HTTPЗапрос("api/archive"); |
404 |
| - Ответ = Соединение.Получить(Запрос); |
405 |
| - HTTP_OK = 200; |
406 |
| - Если Ответ.КодСостояния <> HTTP_OK Тогда |
407 |
| - ВызватьИсключение СтрШаблон("Не удалось получить список версий с сайта. Код ошибки: %1", Ответ.КодСостояния); |
408 |
| - КонецЕсли; |
409 |
| - |
410 |
| - ЧтениеJSON = Новый ЧтениеJSON(); |
411 |
| - ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); |
| 339 | +// Регулярное выражение версии по semver |
| 340 | +// |
| 341 | +// Возвращаемое значение: |
| 342 | +// Строка - Регулярное выражение |
| 343 | +// |
| 344 | +Функция МаскаНомераВерсииSemver() Экспорт |
| 345 | + // https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string |
| 346 | + // https://regex101.com/r/vkijKf/1/ |
| 347 | + |
| 348 | + // BSLLS:LineLength-off |
| 349 | + Возврат "^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$"; |
| 350 | + // BSLLS:LineLength-on |
412 | 351 |
|
413 |
| - ДоступныеВерсии = Новый ТаблицаЗначений; |
414 |
| - ДоступныеВерсии.Колонки.Добавить("Алиас"); |
415 |
| - ДоступныеВерсии.Колонки.Добавить("Путь"); |
416 |
| - |
417 |
| - АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт(); |
418 |
| - МассивВерсий = ПрочитатьJSON(ЧтениеJSON, Ложь); |
419 |
| - Для Каждого ОписаниеВерсии Из МассивВерсий Цикл |
420 |
| - ДоступнаяВерсия = ДоступныеВерсии.Добавить(); |
421 |
| - ДоступнаяВерсия.Алиас = ОписаниеВерсии.presentation; |
422 |
| - ДоступнаяВерсия.Путь = АдресСайтаОСкрипт + ОписаниеВерсии.link; |
423 |
| - КонецЦикла; |
424 |
| - |
425 |
| - Итератор = ДопустимыеАлиасы().Ключи().Итератор(); |
426 |
| - |
427 |
| - Пока Итератор.ЕстьСледующий() Цикл |
428 |
| - ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, Итератор.Следующий(), "Путь"); |
429 |
| - КонецЦикла; |
430 |
| - |
431 |
| - Возврат ДоступныеВерсии; |
432 | 352 | КонецФункции
|
433 | 353 |
|
434 | 354 | Процедура ОбеспечитьСтрокуВерсииПоАлиасу(ТаблицаВерсий, Алиас, ИмяРеквизитаПуть = "ПутьСервер")
|
|
0 commit comments