Skip to content

Commit

Permalink
Рефакторинг больших методов
Browse files Browse the repository at this point in the history
  • Loading branch information
Bayselonarrend committed Apr 17, 2024
1 parent 32cd019 commit 007f342
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 107 deletions.
1 change: 0 additions & 1 deletion OPI/src/CommonModules/OPI_Slack/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@

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


#КонецОбласти

#Область РаботаСЧатами
Expand Down
177 changes: 97 additions & 80 deletions OPI/src/CommonModules/OPI_Twitter/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -346,109 +346,126 @@

OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);

MediaKey = "media_key";
ProcessingInfo = "processing_info";
MIS = "media_id_string";
Command = "command";
ВидЗапроса = "POST";
Единица = 1024;
Количество = 4;

СоответствиеMIME = Новый Соответствие;
СоответствиеMIME.Вставить("tweet_image", "image/jpeg");
СоответствиеMIME.Вставить("tweet_video", "video/mp4");
СоответствиеMIME.Вставить("tweet_gif" , "image/gif");

ВидЗапроса = "POST";
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
URL = "https://upload.twitter.com/1.1/media/upload.json";
Размер = Файл.Размер();


Если Тип = "tweet_image" Тогда

Поля = Новый Структура;
Поля.Вставить("media_data" , Base64Строка(Файл));
Поля.Вставить("media_category", Тип);

Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL);

Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL);
Ответ = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);

Иначе

РазмерЧасти = Количество * Единица * Единица;
МассивЧтения = РазделитьДвоичныеДанные(Файл, РазмерЧасти);
Ответ = ЗагрузитьМедиаЧастями(Файл, Тип, ВидЗапроса, URL, Параметры_);

Поля = Новый Структура;
Поля.Вставить(Command , "INIT");
Поля.Вставить("total_bytes" , OPI_Инструменты.ЧислоВСтроку(Размер));
Поля.Вставить("media_type" , СоответствиеMIME.Получить(Тип));
Поля.Вставить("media_category" , Тип);
КонецЕсли;

Возврат Ответ;

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

Функция ЗагрузитьМедиаЧастями(Знач Файл, Знач Тип, Знач ВидЗапроса, Знач URL, Параметры)

Единица = 1024;
Количество = 4;
MediaKey = "media_key";
MIS = "media_id_string";
Command = "command";
Размер = Файл.Размер();

СоответствиеMIME = Новый Соответствие;
СоответствиеMIME.Вставить("tweet_image", "image/jpeg");
СоответствиеMIME.Вставить("tweet_video", "video/mp4");
СоответствиеMIME.Вставить("tweet_gif" , "image/gif");

РазмерЧасти = Количество * Единица * Единица;
МассивЧтения = РазделитьДвоичныеДанные(Файл, РазмерЧасти);

Поля = Новый Структура;
Поля.Вставить(Command , "INIT");
Поля.Вставить("total_bytes" , OPI_Инструменты.ЧислоВСтроку(Размер));
Поля.Вставить("media_type" , СоответствиеMIME.Получить(Тип));
Поля.Вставить("media_category" , Тип);

Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, ВидЗапроса, URL);

ОтветИнициализации = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
KeyИнициализации = ОтветИнициализации[MediaKey];
IDИнициализации = ОтветИнициализации[MIS];

Если Не ЗначениеЗаполнено(KeyИнициализации) Или Не ЗначениеЗаполнено(IDИнициализации) Тогда
Возврат ОтветИнициализации;
КонецЕсли;

Счетчик = 0;

Для Каждого Часть Из МассивЧтения Цикл

Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, ВидЗапроса, URL);
Поля = Новый Структура;
Поля.Вставить(Command , "APPEND");
Поля.Вставить("media_key" , KeyИнициализации);
Поля.Вставить("segment_index" , OPI_Инструменты.ЧислоВСтроку(Счетчик));
Поля.Вставить("media" , Часть);

ОтветИнициализации = OPI_Инструменты.Post(URL, Поля, Авторизация, Ложь);
KeyИнициализации = ОтветИнициализации[MediaKey];
IDИнициализации = ОтветИнициализации[MIS];
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Новый Структура, ВидЗапроса, URL);

Если Не ЗначениеЗаполнено(KeyИнициализации) Или Не ЗначениеЗаполнено(IDИнициализации) Тогда
Возврат ОтветИнициализации;
КонецЕсли;
OPI_Инструменты.PostMultipart(URL, Поля, , , Авторизация);

Счетчик = 0;
Счетчик = Счетчик + 1;

Для Каждого Часть Из МассивЧтения Цикл
Поля = Новый Структура;
Поля.Вставить(Command , "APPEND");
Поля.Вставить("media_key" , KeyИнициализации);
Поля.Вставить("segment_index" , OPI_Инструменты.ЧислоВСтроку(Счетчик));
Поля.Вставить("media" , Часть);

Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Новый Структура, ВидЗапроса, URL);
OPI_Инструменты.PostMultipart(URL, Поля, , , Авторизация);
КонецЦикла;

Поля = Новый Структура;
Поля.Вставить(Command , "FINALIZE");
Поля.Вставить("media_id", IDИнициализации);

СтатусОбработки = ПолучитьСтатусОбработки(Параметры, Поля, URL);
Если Не ТипЗнч(СтатусОбработки) = Тип("Строка") Тогда
Возврат СтатусОбработки;
КонецЕсли;

Счетчик = Счетчик + 1;
КонецЦикла;

Поля = Новый Структура;
Поля.Вставить(Command , "FINALIZE");
Поля.Вставить("media_id", IDИнициализации);

СтатусОбработки = ПолучитьСтатусОбработки(Параметры_, Поля, URL);

Если Не ТипЗнч(СтатусОбработки) = Тип("Строка") Тогда
Возврат СтатусОбработки;
КонецЕсли;

Поля = Новый Структура;
Ответ = ОжидатьЗавершенияОбработки(СтатусОбработки, IDИнициализации, URL, Параметры);

Возврат Ответ;

Поля.Вставить(Command , "STATUS");
Поля.Вставить("media_id", IDИнициализации);
КонецФункции

Пока Строка(СтатусОбработки) = "pending" Или Строка(СтатусОбработки) = "in_progress" Цикл

Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Поля, "GET", URL);
Ответ = OPI_Инструменты.Get(URL, Поля, Авторизация);
Информация = Ответ[ProcessingInfo];
Функция ОжидатьЗавершенияОбработки(Знач СтатусОбработки, Знач IDИнициализации, Знач URL, Знач Параметры)

Если Не ЗначениеЗаполнено(Информация) Тогда
Возврат Ответ;
КонецЕсли;

СтатусОбработки = Информация["state"];

Если Не ЗначениеЗаполнено(СтатусОбработки) Тогда
Возврат Ответ;
КонецЕсли;

КонецЦикла;

Если СтатусОбработки = "failed" Тогда
ВызватьИсключение "Твиттер не смог обработать загруженное вами видео";
ProcessingInfo = "processing_info";
Command = "command";
Поля = Новый Структура;

Поля.Вставить(Command , "STATUS");
Поля.Вставить("media_id", IDИнициализации);

Пока Строка(СтатусОбработки) = "pending" Или Строка(СтатусОбработки) = "in_progress" Цикл

Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, "GET", URL);
Ответ = OPI_Инструменты.Get(URL, Поля, Авторизация);
Информация = Ответ[ProcessingInfo];

Если Не ЗначениеЗаполнено(Информация) Тогда
Возврат Ответ;
КонецЕсли;

КонецЕсли;
СтатусОбработки = Информация["state"];

Если Не ЗначениеЗаполнено(СтатусОбработки) Тогда
Возврат Ответ;
КонецЕсли;

КонецЦикла;

Если СтатусОбработки = "failed" Тогда
ВызватьИсключение "Твиттер не смог обработать загруженное вами видео";
КонецЕсли;

Возврат Ответ;

Expand Down
64 changes: 38 additions & 26 deletions OPI/src/CommonModules/OPI_VK/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -1840,54 +1840,66 @@
OPI_ПреобразованиеТипов.ПолучитьБулево(Основная);
OPI_ПреобразованиеТипов.ПолучитьБулево(Скрытая);

Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
PhotoID = "photo_id";
Параметры_ = ПолучитьСтандартныеПараметры(Параметры);
Ответ = ДобавитьПараметрКартинки(Картинка, ИДПодборки, Параметры_);

Если ЗначениеЗаполнено(Ответ) Тогда
Возврат Ответ;
КонецЕсли;

Параметры_.Вставить("title" , Название);
Параметры_.Вставить("main_album" , ?(Основная, 1, 0));
Параметры_.Вставить("is_hidden" , ?(Скрытая, 1, 0));

Если ЗначениеЗаполнено(ИДПодборки) Тогда
Параметры_.Вставить("album_id", ИДПодборки);
Метод = "editAlbum";
Иначе
Метод = "addAlbum";
КонецЕсли;

Ответ = OPI_Инструменты.Get("api.vk.com/method/market." + Метод, Параметры_);

Возврат Ответ;

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

Функция ДобавитьПараметрКартинки(Знач Картинка, Знач ИДПодборки, Параметры)

PhotoID = "photo_id";

Если ЗначениеЗаполнено(Картинка) Тогда

ИДФото = ПолучитьИДКартинки(Картинка, Параметры_, "Товар");
ИДФото = ПолучитьИДКартинки(Картинка, Параметры, "Товар");

Если Не ТипЗнч(ИДФото) = Тип("Строка") Тогда
Возврат ИДФото;
КонецЕсли;
Если Не ТипЗнч(ИДФото) = Тип("Строка") Тогда
Возврат ИДФото;
КонецЕсли;

Параметры_.Вставить(PhotoID, ИДФото);
Параметры.Вставить(PhotoID, ИДФото);

Иначе

Если ЗначениеЗаполнено(ИДПодборки) Тогда

Подборки = ПолучитьМассивПодборок(ИДПодборки, Параметры_);
Подборки = ПолучитьМассивПодборок(ИДПодборки, Параметры);

Если Не ТипЗнч(Подборки) = Тип("Массив") Тогда
Возврат Подборки;
КонецЕсли;
Если Не ТипЗнч(Подборки) = Тип("Массив") Тогда
Возврат Подборки;
КонецЕсли;

Если Не Подборки.Количество() = 0 Тогда
ИДФото = Подборки[0]["photo"]["id"];
OPI_ПреобразованиеТипов.ПолучитьСтроку(ИДФото);
Параметры_.Вставить(PhotoID, ИДФото);
Параметры.Вставить(PhotoID, ИДФото);
КонецЕсли;

КонецЕсли;

КонецЕсли;

Параметры_.Вставить("title" , Название);
Параметры_.Вставить("main_album" , ?(Основная, 1, 0));
Параметры_.Вставить("is_hidden" , ?(Скрытая, 1, 0));
Возврат "";

Если ЗначениеЗаполнено(ИДПодборки) Тогда
Параметры_.Вставить("album_id", ИДПодборки);
Метод = "editAlbum";
Иначе
Метод = "addAlbum";
КонецЕсли;

Ответ = OPI_Инструменты.Get("api.vk.com/method/market." + Метод, Параметры_);

Возврат Ответ;

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

Процедура ЗаполнитьПараметрыЗагрузкиФото(Знач Метод, Знач Ответ, Параметры)
Expand Down

0 comments on commit 007f342

Please sign in to comment.