-
Notifications
You must be signed in to change notification settings - Fork 50
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #141 from bia-technologies/feature/pause
Реализация кроссплатформеной паузы
- Loading branch information
Showing
16 changed files
with
477 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
//©///////////////////////////////////////////////////////////////////////////©// | ||
// | ||
// Copyright 2021-2023 BIA-Technologies Limited Liability Company | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
// | ||
//©///////////////////////////////////////////////////////////////////////////©// | ||
|
||
#Область ПрограммныйИнтерфейс | ||
|
||
// Возвращает внешнюю компоненту, реализующую паузу | ||
// | ||
// Возвращаемое значение: | ||
// ВнешнийОбъект | ||
Функция Пауза() Экспорт | ||
|
||
Возврат СоздатьКомпоненту(ОписаниеКомпонентыПауза()); | ||
|
||
КонецФункции | ||
|
||
#КонецОбласти | ||
|
||
#Область СлужебныйПрограммныйИнтерфейс | ||
|
||
// Создает внешнюю компоненту по описанию | ||
// | ||
// Параметры: | ||
// ОписаниеКомпоненты - см. ОписаниеКомпоненты | ||
// | ||
// Возвращаемое значение: | ||
// ВнешнийОбъект | ||
Функция СоздатьКомпоненту(ОписаниеКомпоненты) Экспорт | ||
|
||
Если ПодключитьКомпоненту(ОписаниеКомпоненты.ИмяМакета, ОписаниеКомпоненты.ИмяКомпоненты, Истина) Тогда | ||
Возврат Новый (ОписаниеКомпоненты.ИмяКласса); | ||
Иначе | ||
ВызватьИсключение "Не удалось подключить внешнюю компоненту " + ОписаниеКомпоненты.ИмяКласса; | ||
КонецЕсли; | ||
|
||
КонецФункции | ||
|
||
// Подключает внещнюю компоненту из макета | ||
// | ||
// Параметры: | ||
// ИмяМакета - Строка - Имя макета, в котором хранится компонента | ||
// ИмяКомпоненты - Строка - Имя компоненты | ||
// Кэшировать - Булево - Кэшировать создание компоненты | ||
// | ||
// Возвращаемое значение: | ||
// Булево - Успешность подключения | ||
Функция ПодключитьКомпоненту(ИмяМакета, ИмяКомпоненты, Кэшировать) Экспорт | ||
|
||
Если Кэшировать Тогда | ||
Возврат ЮТПовторногоИспользования.ПодключитьКомпоненту(ИмяМакета, ИмяКомпоненты); | ||
КонецЕсли; | ||
|
||
Возврат ПодключитьВнешнююКомпоненту(ИмяМакета, ИмяКомпоненты, ТипВнешнейКомпоненты.Native); | ||
|
||
КонецФункции | ||
|
||
// Описание компоненты реализующей паузу. | ||
// | ||
// Возвращаемое значение: | ||
// см. ОписаниеКомпоненты | ||
Функция ОписаниеКомпонентыПауза() Экспорт | ||
|
||
Возврат ОписаниеКомпоненты("ОбщийМакет.ЮТYaxUnitAddIn", "YaxUnitAddin", "Sleep"); | ||
|
||
КонецФункции | ||
|
||
// Описание внешней компоненты. | ||
// | ||
// Параметры: | ||
// ИмяМакета - Строка - Имя макета, в котором хранится компонента | ||
// ИмяКомпоненты - Строка -Имя компоненты | ||
// ИмяКласса - Строка - Имя класса, по которому создается компонента | ||
// | ||
// Возвращаемое значение: | ||
// ФиксированнаяСтруктура - Описание компоненты: | ||
// * ИмяМакета - Строка - Имя макета, в котором хранится компонента | ||
// * ИмяКомпоненты - Строка -Имя компоненты | ||
// * ИмяКласса - Строка - Имя класса | ||
Функция ОписаниеКомпоненты(ИмяМакета, ИмяКомпоненты, ИмяКласса) Экспорт | ||
|
||
Описание = Новый Структура; | ||
Описание.Вставить("ИмяМакета", ИмяМакета); | ||
Описание.Вставить("ИмяКомпоненты", ИмяКомпоненты); | ||
Описание.Вставить("ИмяКласса", СтрШаблон("AddIn.%1.%2", ИмяКомпоненты, ИмяКласса)); | ||
|
||
Возврат Новый ФиксированнаяСтруктура(Описание); | ||
|
||
КонецФункции | ||
|
||
#КонецОбласти |
11 changes: 11 additions & 0 deletions
11
exts/yaxunit/src/CommonModules/ЮТКомпоненты/ЮТКомпоненты.mdo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="76e16534-934b-43af-9f91-4a2849ed5f35"> | ||
<name>ЮТКомпоненты</name> | ||
<synonym> | ||
<key>ru</key> | ||
<value>Компоненты</value> | ||
</synonym> | ||
<clientManagedApplication>true</clientManagedApplication> | ||
<server>true</server> | ||
<clientOrdinaryApplication>true</clientOrdinaryApplication> | ||
</mdclass:CommonModule> |
108 changes: 108 additions & 0 deletions
108
exts/yaxunit/src/CommonModules/ЮТКомпонентыВызовСервера/Module.bsl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
//©///////////////////////////////////////////////////////////////////////////©// | ||
// | ||
// Copyright 2021-2023 BIA-Technologies Limited Liability Company | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
// | ||
//©///////////////////////////////////////////////////////////////////////////©// | ||
|
||
#Область СлужебныйПрограммныйИнтерфейс | ||
|
||
Функция ФайлКомпоненты(Знач ИмяМакета, Знач ОперационнаяСистема, Знач Архитектура) Экспорт | ||
|
||
Данные = ЮТОбщийВызовСервера.Макет(ИмяМакета); | ||
ЧтениеАрхива = Новый ЧтениеZipФайла(); | ||
ЧтениеАрхива.Открыть(Данные.ОткрытьПотокДляЧтения()); | ||
|
||
ИмяФайлаКомпоненты = ИмяФайлаКомпоненты(ЧтениеАрхива, ОперационнаяСистема, Архитектура); | ||
|
||
Если ИмяФайлаКомпоненты = Неопределено Тогда | ||
ВызватьИсключение "Компонента не поддерживает клиентское окружение"; | ||
КонецЕсли; | ||
|
||
Данные = ДвоичныеДанныеЭлемента(ЧтениеАрхива, ИмяФайлаКомпоненты); | ||
|
||
Возврат Новый ФиксированнаяСтруктура("ИмяФайла, Данные", ИмяФайлаКомпоненты, Данные); | ||
|
||
КонецФункции | ||
|
||
#КонецОбласти | ||
|
||
#Область СлужебныеПроцедурыИФункции | ||
|
||
Функция ИмяФайлаКомпоненты(ЧтениеАрхива, ОперационнаяСистема, Архитектура) | ||
|
||
Данные = ДвоичныеДанныеЭлемента(ЧтениеАрхива, "MANIFEST.XML"); | ||
|
||
Если Данные = Неопределено Тогда | ||
ВызватьИсключение "Архив компоненты не содержит манифеста"; | ||
КонецЕсли; | ||
|
||
ЧтениеXML = Новый ЧтениеXML(); | ||
ЧтениеXML.ОткрытьПоток(Данные.ОткрытьПотокДляЧтения()); | ||
|
||
ИмяФайлаКомпоненты = Неопределено; | ||
|
||
Пока ЧтениеXML.Прочитать() Цикл | ||
|
||
Если ЭтоПодходящийУзел(ЧтениеXML, ОперационнаяСистема, Архитектура) Тогда | ||
ИмяФайлаКомпоненты = ЧтениеXML.ЗначениеАтрибута("path"); | ||
Прервать; | ||
КонецЕсли; | ||
|
||
КонецЦикла; | ||
|
||
ЧтениеXML.Закрыть(); | ||
|
||
Возврат ИмяФайлаКомпоненты; | ||
|
||
КонецФункции | ||
|
||
Функция ЭтоПодходящийУзел(ЧтениеXML, ОперационнаяСистема, Архитектура) | ||
|
||
Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента ИЛИ СтрСравнить(ЧтениеXML.Имя, "component") <> 0 Тогда | ||
Возврат Ложь; | ||
КонецЕсли; | ||
|
||
ОперационнаяСистемаУзла = ЧтениеXML.ЗначениеАтрибута("os"); | ||
АрхитектураУзла = ЧтениеXML.ЗначениеАтрибута("arch"); | ||
|
||
Возврат ОперационнаяСистема = ОперационнаяСистемаУзла И Архитектура = АрхитектураУзла; | ||
|
||
КонецФункции | ||
|
||
Функция ДвоичныеДанныеЭлемента(ЧтениеАрхива, ИмяФайла) | ||
|
||
ЭлементФайла = Неопределено; | ||
|
||
Для Каждого Элемент Из ЧтениеАрхива.Элементы Цикл | ||
Если СтрСравнить(Элемент.ПолноеИмя, ИмяФайла) = 0 Тогда | ||
ЭлементФайла = Элемент; | ||
КонецЕсли; | ||
КонецЦикла; | ||
|
||
Если ЭлементФайла = Неопределено Тогда | ||
Возврат Неопределено; | ||
КонецЕсли; | ||
|
||
ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); | ||
ЧтениеАрхива.Извлечь(ЭлементФайла, ИмяВременногоФайла, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); | ||
|
||
Данные = Новый ДвоичныеДанные(ЮТФайлы.ОбъединитьПути(ИмяВременногоФайла, ИмяФайла)); | ||
УдалитьФайлы(ИмяВременногоФайла); | ||
|
||
Возврат Данные; | ||
|
||
КонецФункции | ||
|
||
#КонецОбласти |
10 changes: 10 additions & 0 deletions
10
exts/yaxunit/src/CommonModules/ЮТКомпонентыВызовСервера/ЮТКомпонентыВызовСервера.mdo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="20617de9-dab7-4587-a43a-4330e51bbc64"> | ||
<name>ЮТКомпонентыВызовСервера</name> | ||
<synonym> | ||
<key>ru</key> | ||
<value>Компоненты вызов сервера</value> | ||
</synonym> | ||
<server>true</server> | ||
<serverCall>true</serverCall> | ||
</mdclass:CommonModule> |
113 changes: 113 additions & 0 deletions
113
exts/yaxunit/src/CommonModules/ЮТКомпонентыКлиент/Module.bsl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
//©///////////////////////////////////////////////////////////////////////////©// | ||
// | ||
// Copyright 2021-2023 BIA-Technologies Limited Liability Company | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
// | ||
//©///////////////////////////////////////////////////////////////////////////©// | ||
|
||
#Область СлужебныйПрограммныйИнтерфейс | ||
|
||
Функция ТихаяУстановкаКомпонент() Экспорт | ||
|
||
Успешно = Истина; | ||
#Если Клиент И НЕ ВебКлиент Тогда | ||
|
||
Компоненты = ЮТОбщий.ЗначениеВМассиве(ЮТКомпоненты.ОписаниеКомпонентыПауза()); | ||
|
||
Для Каждого Компонента Из Компоненты Цикл | ||
ТихаяУстановкаВнешнейКомпоненты(Компонента.ИмяМакета); | ||
КонецЦикла; | ||
#КонецЕсли | ||
|
||
Возврат Успешно; | ||
|
||
КонецФункции | ||
|
||
#КонецОбласти | ||
|
||
#Область СлужебныеПроцедурыИФункции | ||
|
||
Процедура ТихаяУстановкаВнешнейКомпоненты(ИмяМакета) | ||
|
||
Информация = Новый СистемнаяИнформация(); | ||
ОперационнаяСистема = Неопределено; | ||
Архитектура = Неопределено; | ||
|
||
Linux = "Linux"; | ||
Windows = "Windows"; | ||
MacOS = "MacOS"; | ||
x86 = "i386"; | ||
x64 = "x86_64"; | ||
|
||
ТипКлиентскойПлатформы = Информация.ТипПлатформы; | ||
|
||
Если ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86 Тогда | ||
ОперационнаяСистема = Linux; | ||
Архитектура = x86; | ||
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86_64 Тогда | ||
ОперационнаяСистема = Linux; | ||
Архитектура = x64; | ||
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86 Тогда | ||
ОперационнаяСистема = Windows; | ||
Архитектура = x86; | ||
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86_64 Тогда | ||
ОперационнаяСистема = Windows; | ||
Архитектура = x64; | ||
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86 Тогда | ||
ОперационнаяСистема = MacOS; | ||
Архитектура = x86; | ||
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86_64 Тогда | ||
ОперационнаяСистема = MacOS; | ||
Архитектура = x64; | ||
Иначе | ||
ВызватьИсключение "Неподдерживаемый тип платформы"; | ||
КонецЕсли; | ||
|
||
ДанныеФайла = ЮТКомпонентыВызовСервера.ФайлКомпоненты(ИмяМакета, ОперационнаяСистема, Архитектура); | ||
|
||
Путь = РабочийКаталогДанныхПользователя(); | ||
КорневойКаталог = ЮТФайлы.ОбъединитьПути(Путь, "..", "..", ".."); | ||
|
||
КаталогКомпонент = ЮТФайлы.ОбъединитьПути(КорневойКаталог, "ExtCompT"); | ||
ФайлРеестра = ЮТФайлы.ОбъединитьПути(КаталогКомпонент, "registry.xml"); | ||
ФайлКомпоненты = ЮТФайлы.ОбъединитьПути(КаталогКомпонент, ДанныеФайла.ИмяФайла); | ||
|
||
ДанныеФайла.Данные.Записать(ФайлКомпоненты); | ||
ЗаписатьВРеестр(ФайлРеестра, ДанныеФайла.ИмяФайла); | ||
|
||
КонецПроцедуры | ||
|
||
Процедура ЗаписатьВРеестр(ФайлРеестра, ИмяФайла) | ||
|
||
Данные = Новый ДвоичныеДанные(ФайлРеестра); | ||
Текст = ПолучитьСтрокуИзДвоичныхДанных(Данные); | ||
|
||
Если СтрНайти(Текст, "<component") = 0 Тогда // Файл пустой | ||
Текст = СтрШаблон("<?xml version=""1.0"" encoding=""UTF-8""?> | ||
|<registry xmlns=""http://v8.1c.ru/8.2/addin/registry""> | ||
| <component path=""%1"" type=""native""/> | ||
|</registry>", ИмяФайла); | ||
ИначеЕсли СтрНайти(Текст, СтрШаблон("path=""%1""", ИмяФайла)) <> 0 Тогда // Компонента уже зарегистрированна | ||
Возврат; | ||
Иначе // Добавляем компоненту | ||
Запись = СтрШаблон(" <component path=""%1"" type=""native""/>", ИмяФайла); | ||
Текст = СтрЗаменить(Текст, "</registry>", Запись + Символы.ПС + "</registry>"); | ||
КонецЕсли; | ||
|
||
Данные = ПолучитьДвоичныеДанныеИзСтроки(Текст, КодировкаТекста.UTF8, Истина); | ||
Данные.Записать(ФайлРеестра); | ||
|
||
КонецПроцедуры | ||
|
||
#КонецОбласти |
10 changes: 10 additions & 0 deletions
10
exts/yaxunit/src/CommonModules/ЮТКомпонентыКлиент/ЮТКомпонентыКлиент.mdo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="fde2e089-b73c-4596-b283-959c570ff45d"> | ||
<name>ЮТКомпонентыКлиент</name> | ||
<synonym> | ||
<key>ru</key> | ||
<value>Компоненты клиент</value> | ||
</synonym> | ||
<clientManagedApplication>true</clientManagedApplication> | ||
<clientOrdinaryApplication>true</clientOrdinaryApplication> | ||
</mdclass:CommonModule> |
Oops, something went wrong.