|
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