|
22 | 22 |
|
23 | 23 | ДопустимыеАлиасы = Новый КартаСоответствие; |
24 | 24 |
|
25 | | - ДопустимыеАлиасы.Вставить("lts", Версия("lts", Ложь)); |
26 | | - ДопустимыеАлиасы.Вставить("stable", Версия("latest", Ложь)); |
27 | | - ДопустимыеАлиасы.Вставить("dev", Версия("night-build", Истина)); |
| 25 | + ДопустимыеАлиасы.Вставить("lts", Версия("lts")); |
| 26 | + ДопустимыеАлиасы.Вставить("stable", Версия("latest")); |
| 27 | + ДопустимыеАлиасы.Вставить("dev", Версия("night-build")); |
28 | 28 |
|
29 | | - ДопустимыеАлиасы.Вставить("preview", Версия("preview", Истина)); |
30 | | - ДопустимыеАлиасы.Вставить("lts-dev", Версия("latest-dev", Ложь)); |
| 29 | + ДопустимыеАлиасы.Вставить("preview", Версия("preview")); |
| 30 | + ДопустимыеАлиасы.Вставить("lts-dev", Версия("latest-dev")); |
31 | 31 |
|
32 | 32 | КонецЕсли; |
33 | 33 |
|
34 | 34 | Возврат ДопустимыеАлиасы; |
35 | 35 |
|
36 | 36 | КонецФункции |
37 | 37 |
|
38 | | -Функция Версия(Метка, ЭтоВерсия2) |
| 38 | +Функция Версия(Метка) |
39 | 39 |
|
40 | 40 | Результат = Новый Структура; |
41 | 41 |
|
42 | 42 | Результат.Вставить("Метка", Метка); |
43 | | - Результат.Вставить("ЭтоВерсия2", ЭтоВерсия2); |
44 | 43 |
|
45 | 44 | Возврат Результат; |
46 | 45 |
|
|
226 | 225 | Таймаут |
227 | 226 | ); |
228 | 227 |
|
229 | | - ДоступныеВерсии = ТаблицаДоступныхВерсий(); |
| 228 | + Возврат ПолучитьВерсииПоAPI(Соединение); |
230 | 229 |
|
231 | | - Если Не ПолучитьВерсииПоAPI(Соединение, ДоступныеВерсии) Тогда |
232 | | - ПолучитьВерсииРазборомHTML(Соединение, ДоступныеВерсии); |
| 230 | +КонецФункции |
| 231 | + |
| 232 | +// Возвращает таблицу файлов конкретной версии |
| 233 | +// |
| 234 | +// Параметры: |
| 235 | +// НомерВерсии - Строка - версия для которой получаем файлы. |
| 236 | +// |
| 237 | +// Возвращаемое значение: |
| 238 | +// ТаблицаЗначений - Вид,ИмяФайла,Архитектура,Ссылка |
| 239 | +// Вид: vsix,exe,zip,fdd,scd-win,scd-lin,osx-x64,osx-arm64 |
| 240 | +// ИмяФайла: имя файла |
| 241 | +// Архитектура: x64,x86 |
| 242 | +// Ссылка: прямая ссылка на данный файл |
| 243 | +// См. также: |
| 244 | +// https://oscript.io/api/archive/ - список всех токенов |
| 245 | +// https://oscript.io/api/archive/<токен версии> - данная таблица |
| 246 | +// |
| 247 | +Функция ПолучитьДоступныеВидыДистрибутивовВерсии(Знач НомерВерсии) Экспорт |
| 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 | + ); |
233 | 293 | КонецЕсли; |
| 294 | + |
| 295 | + ТаблицаРезультата = Новый ТаблицаЗначений(); |
| 296 | + ТаблицаРезультата.Колонки.Добавить("Вид"); |
| 297 | + ТаблицаРезультата.Колонки.Добавить("ИмяФайла"); |
| 298 | + ТаблицаРезультата.Колонки.Добавить("Архитектура"); |
| 299 | + ТаблицаРезультата.Колонки.Добавить("Ссылка"); |
| 300 | + |
| 301 | + ЧтениеJSON = Новый ЧтениеJSON(); |
| 302 | + ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); |
234 | 303 |
|
235 | | - Возврат ДоступныеВерсии; |
| 304 | + МассивФайлов = ПрочитатьJSON(ЧтениеJSON, Ложь); |
| 305 | + Для Каждого ОписаниеФайла Из МассивФайлов Цикл |
| 306 | + СтрокаТаблицы = ТаблицаРезультата.Добавить(); |
| 307 | + СтрокаТаблицы.Вид = ОписаниеФайла.id; |
| 308 | + СтрокаТаблицы.ИмяФайла = ОписаниеФайла.filename; |
| 309 | + СтрокаТаблицы.Архитектура = ОписаниеФайла.arch; |
| 310 | + СтрокаТаблицы.Ссылка = ОписаниеФайла.link; |
| 311 | + КонецЦикла; |
| 312 | + |
| 313 | + Возврат ТаблицаРезультата; |
| 314 | + |
236 | 315 | КонецФункции |
237 | 316 |
|
238 | 317 | // <Описание функции> |
|
320 | 399 |
|
321 | 400 | КонецФункции |
322 | 401 |
|
323 | | -Функция ТаблицаДоступныхВерсий() |
324 | | - ДоступныеВерсии = Новый ТаблицаЗначений; |
325 | | - ДоступныеВерсии.Колонки.Добавить("Алиас"); |
326 | | - ДоступныеВерсии.Колонки.Добавить("Путь"); |
327 | | - |
328 | | - Возврат ДоступныеВерсии; |
329 | | -КонецФункции |
330 | | - |
331 | | -Функция ПолучитьВерсииПоAPI(Знач Соединение, Знач ДоступныеВерсии) |
| 402 | +Функция ПолучитьВерсииПоAPI(Знач Соединение) |
332 | 403 | Запрос = Новый HTTPЗапрос("api/archive"); |
333 | 404 | Ответ = Соединение.Получить(Запрос); |
334 | 405 | HTTP_OK = 200; |
335 | 406 | Если Ответ.КодСостояния <> HTTP_OK Тогда |
336 | | - Возврат Ложь; |
| 407 | + ВызватьИсключение СтрШаблон("Не удалось получить список версий с сайта. Код ошибки: %1", Ответ.КодСостояния); |
337 | 408 | КонецЕсли; |
338 | 409 |
|
339 | 410 | ЧтениеJSON = Новый ЧтениеJSON(); |
340 | 411 | ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); |
341 | 412 |
|
| 413 | + ДоступныеВерсии = Новый ТаблицаЗначений; |
| 414 | + ДоступныеВерсии.Колонки.Добавить("Алиас"); |
| 415 | + ДоступныеВерсии.Колонки.Добавить("Путь"); |
| 416 | + |
342 | 417 | АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт(); |
343 | 418 | МассивВерсий = ПрочитатьJSON(ЧтениеJSON, Ложь); |
344 | 419 | Для Каждого ОписаниеВерсии Из МассивВерсий Цикл |
|
353 | 428 | ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, Итератор.Следующий(), "Путь"); |
354 | 429 | КонецЦикла; |
355 | 430 |
|
356 | | - Возврат Истина; |
| 431 | + Возврат ДоступныеВерсии; |
357 | 432 | КонецФункции |
358 | 433 |
|
359 | | -Процедура ПолучитьВерсииРазборомHTML(Знач Соединение, Знач ДоступныеВерсии) |
360 | | - Запрос = Новый HTTPЗапрос("downloads"); |
361 | | - |
362 | | - Ответ = Соединение.Получить(Запрос); |
363 | | - HTTP_OK = 200; |
364 | | - Если Ответ.КодСостояния <> HTTP_OK Тогда |
365 | | - ВызватьИсключение Ответ.КодСостояния; |
366 | | - КонецЕсли; |
367 | | - |
368 | | - ТелоСтраницы = Ответ.ПолучитьТелоКакСтроку(); |
369 | | - |
370 | | - РегулярноеВыражение = Новый РегулярноеВыражение( |
371 | | - "<a href=""(\/downloads\/[^""]+)"">(" + ПараметрыOVM.МаскаНомераВерсии() + ")<"); |
372 | | - ИндексГруппыАдрес = 1; |
373 | | - ИндексГруппыВерсия = 2; |
374 | | - |
375 | | - АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт(); |
376 | | - Совпадения = РегулярноеВыражение.НайтиСовпадения(ТелоСтраницы); |
377 | | - Для Каждого СовпадениеРегулярногоВыражения Из Совпадения Цикл |
378 | | - ГруппаАдрес = СовпадениеРегулярногоВыражения.Группы[ИндексГруппыАдрес]; |
379 | | - ГруппаВерсия = СовпадениеРегулярногоВыражения.Группы[ИндексГруппыВерсия]; |
380 | | - |
381 | | - // TODO: Убрать после решения https://github.com/EvilBeaver/OneScript/issues/667 |
382 | | - Если ГруппаВерсия.Значение = "1.0.9" Тогда |
383 | | - Продолжить; |
384 | | - КонецЕсли; |
385 | | - |
386 | | - ДоступнаяВерсия = ДоступныеВерсии.Добавить(); |
387 | | - ДоступнаяВерсия.Алиас = ГруппаВерсия.Значение; |
388 | | - ДоступнаяВерсия.Путь = АдресСайтаОСкрипт + ГруппаАдрес.Значение; |
389 | | - КонецЦикла; |
390 | | - |
391 | | - Итератор = ДопустимыеАлиасы().Ключи().Итератор(); |
392 | | - |
393 | | - Пока Итератор.ЕстьСледующий() Цикл |
394 | | - ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, Итератор.Следующий(), "Путь"); |
395 | | - КонецЦикла; |
396 | | - |
397 | | -КонецПроцедуры |
398 | | - |
399 | 434 | Процедура ОбеспечитьСтрокуВерсииПоАлиасу(ТаблицаВерсий, Алиас, ИмяРеквизитаПуть = "ПутьСервер") |
400 | 435 |
|
401 | 436 | СтрокаВерсии = ТаблицаВерсий.Найти(Алиас, "Алиас"); |
|
0 commit comments