|
216 | 216 | //
|
217 | 217 | Функция ПолучитьСписокДоступныхКУстановкеВерсий() Экспорт
|
218 | 218 |
|
219 |
| - ДоступныеВерсии = Новый ТаблицаЗначений; |
220 |
| - ДоступныеВерсии.Колонки.Добавить("Алиас"); |
221 |
| - ДоступныеВерсии.Колонки.Добавить("Путь"); |
222 |
| - |
223 |
| - АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт(); |
224 |
| - |
225 | 219 | Таймаут = 10;
|
226 | 220 | Соединение = Новый HTTPСоединение(
|
227 |
| - АдресСайтаОСкрипт, |
| 221 | + ПараметрыOVM.АдресСайтаОСкрипт(), |
228 | 222 | ,
|
229 | 223 | ,
|
230 | 224 | ,
|
231 | 225 | ,
|
232 | 226 | Таймаут
|
233 | 227 | );
|
234 |
| - Запрос = Новый HTTPЗапрос("downloads"); |
235 |
| - |
236 |
| - Ответ = Соединение.Получить(Запрос); |
237 |
| - HTTP_OK = 200; |
238 |
| - Если Ответ.КодСостояния <> HTTP_OK Тогда |
239 |
| - ВызватьИсключение Ответ.КодСостояния; |
240 |
| - КонецЕсли; |
241 |
| - |
242 |
| - ТелоСтраницы = Ответ.ПолучитьТелоКакСтроку(); |
243 |
| - |
244 |
| - РегулярноеВыражение = Новый РегулярноеВыражение( |
245 |
| - "<a href=""(\/downloads\/[^""]+)"">(" + ПараметрыOVM.МаскаНомераВерсии() + ")<"); |
246 |
| - ИндексГруппыАдрес = 1; |
247 |
| - ИндексГруппыВерсия = 2; |
248 |
| - |
249 |
| - Совпадения = РегулярноеВыражение.НайтиСовпадения(ТелоСтраницы); |
250 |
| - Для Каждого СовпадениеРегулярногоВыражения Из Совпадения Цикл |
251 |
| - ГруппаАдрес = СовпадениеРегулярногоВыражения.Группы[ИндексГруппыАдрес]; |
252 |
| - ГруппаВерсия = СовпадениеРегулярногоВыражения.Группы[ИндексГруппыВерсия]; |
253 |
| - |
254 |
| - // TODO: Убрать после решения https://github.com/EvilBeaver/OneScript/issues/667 |
255 |
| - Если ГруппаВерсия.Значение = "1.0.9" Тогда |
256 |
| - Продолжить; |
257 |
| - КонецЕсли; |
258 |
| - |
259 |
| - ДоступнаяВерсия = ДоступныеВерсии.Добавить(); |
260 |
| - ДоступнаяВерсия.Алиас = ГруппаВерсия.Значение; |
261 |
| - ДоступнаяВерсия.Путь = АдресСайтаОСкрипт + ГруппаАдрес.Значение; |
262 |
| - КонецЦикла; |
263 | 228 |
|
264 |
| - Итератор = ДопустимыеАлиасы().Ключи().Итератор(); |
265 |
| - |
266 |
| - Пока Итератор.ЕстьСледующий() Цикл |
267 |
| - ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, Итератор.Следующий(), "Путь"); |
268 |
| - КонецЦикла; |
| 229 | + ДоступныеВерсии = ТаблицаДоступныхВерсий(); |
269 | 230 |
|
| 231 | + Если Не ПолучитьВерсииПоAPI(Соединение, ДоступныеВерсии) Тогда |
| 232 | + ПолучитьВерсииРазборомHTML(Соединение, ДоступныеВерсии); |
| 233 | + КонецЕсли; |
| 234 | + |
270 | 235 | Возврат ДоступныеВерсии;
|
271 |
| - |
272 | 236 | КонецФункции
|
273 | 237 |
|
274 | 238 | // <Описание функции>
|
|
356 | 320 |
|
357 | 321 | КонецФункции
|
358 | 322 |
|
| 323 | +Функция ТаблицаДоступныхВерсий() |
| 324 | + ДоступныеВерсии = Новый ТаблицаЗначений; |
| 325 | + ДоступныеВерсии.Колонки.Добавить("Алиас"); |
| 326 | + ДоступныеВерсии.Колонки.Добавить("Путь"); |
| 327 | + |
| 328 | + Возврат ДоступныеВерсии; |
| 329 | +КонецФункции |
| 330 | + |
| 331 | +Функция ПолучитьВерсииПоAPI(Знач Соединение, Знач ДоступныеВерсии) |
| 332 | + Запрос = Новый HTTPЗапрос("api/archive"); |
| 333 | + Ответ = Соединение.Получить(Запрос); |
| 334 | + HTTP_OK = 200; |
| 335 | + Если Ответ.КодСостояния <> HTTP_OK Тогда |
| 336 | + Возврат Ложь; |
| 337 | + КонецЕсли; |
| 338 | + |
| 339 | + ЧтениеJSON = Новый ЧтениеJSON(); |
| 340 | + ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); |
| 341 | + |
| 342 | + АдресСайтаОСкрипт = ПараметрыOVM.АдресСайтаОСкрипт(); |
| 343 | + МассивВерсий = ПрочитатьJSON(ЧтениеJSON, Ложь); |
| 344 | + Для Каждого ОписаниеВерсии Из МассивВерсий Цикл |
| 345 | + ДоступнаяВерсия = ДоступныеВерсии.Добавить(); |
| 346 | + ДоступнаяВерсия.Алиас = ОписаниеВерсии.presentation; |
| 347 | + ДоступнаяВерсия.Путь = АдресСайтаОСкрипт + ОписаниеВерсии.link; |
| 348 | + КонецЦикла; |
| 349 | + |
| 350 | + Итератор = ДопустимыеАлиасы().Ключи().Итератор(); |
| 351 | + |
| 352 | + Пока Итератор.ЕстьСледующий() Цикл |
| 353 | + ОбеспечитьСтрокуВерсииПоАлиасу(ДоступныеВерсии, Итератор.Следующий(), "Путь"); |
| 354 | + КонецЦикла; |
| 355 | + |
| 356 | + Возврат Истина; |
| 357 | +КонецФункции |
| 358 | + |
| 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 | + |
359 | 399 | Процедура ОбеспечитьСтрокуВерсииПоАлиасу(ТаблицаВерсий, Алиас, ИмяРеквизитаПуть = "ПутьСервер")
|
360 | 400 |
|
361 | 401 | СтрокаВерсии = ТаблицаВерсий.Найти(Алиас, "Алиас");
|
|
365 | 405 | СтрокаВерсии.Алиас = Алиас;
|
366 | 406 | КонецЕсли;
|
367 | 407 |
|
| 408 | + // TODO После запуска нового фронта тут надо будет добавлять токен версии, т.к. |
| 409 | + // в новом фронте у мета-версий есть своя страничка с документацией. |
368 | 410 | СтрокаВерсии[ИмяРеквизитаПуть] = ПараметрыOVM.ПолныйАдресККаталогуДистрибутивов();
|
369 | 411 |
|
370 | 412 | КонецПроцедуры
|
|
0 commit comments