Skip to content

Commit a430978

Browse files
committed
Большой рефакторинг библиотеки
1 parent aa0c1cc commit a430978

7 files changed

+1669
-397
lines changed
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
#Использовать opm
2+
3+
Перем ВнутреннийМенеджерУстановкиПакетов;
4+
Перем ИндексУстановленныхПлагинов;
5+
Перем Лог;
6+
Перем ДоступныйИнтерфейсПлагинов;
7+
Перем КаталогПлагинов;
8+
9+
Процедура УстановитьКаталогПлагинов(Знач ПутьККаталогу) Экспорт
10+
КаталогПлагинов = ПутьККаталогу;
11+
КонецПроцедуры
12+
13+
Процедура ЗагрузитьПлагины() Экспорт
14+
15+
ОбновитьИндексПлагинов();
16+
17+
КонецПроцедуры
18+
19+
Функция ИндексПлагинов() Экспорт
20+
Возврат ИндексУстановленныхПлагинов;
21+
КонецФункции
22+
23+
Процедура ОбновитьИндексПлагинов()
24+
25+
Лог.Отладка("Обновление индекса плагина");
26+
ИндексУстановленныхПлагинов = Новый Соответствие;
27+
28+
КаталогиПлагинов = НайтиФайлы(КаталогПлагинов, ПолучитьМаскуВсеФайлы(), Ложь);
29+
30+
Для каждого Каталоги Из КаталогиПлагинов Цикл
31+
32+
Если Не Каталоги.ЭтоКаталог() Тогда
33+
Продолжить;
34+
КонецЕсли;
35+
36+
ЗагрузитьПлагин(Каталоги.ПолноеИмя);
37+
38+
КонецЦикла;
39+
40+
Лог.Отладка("В индекс плагинов добавлено <%1> плагинов", ИндексУстановленныхПлагинов.Количество());
41+
42+
КонецПроцедуры
43+
44+
Процедура ЗагрузитьПлагин(Знач Путь)
45+
46+
Лог.Отладка("Загружаю плагины из каталога <%1>", Путь);
47+
48+
ФайлМанифеста = Новый Файл(ОбъединитьПути(Путь, "lib.config"));
49+
50+
Если ФайлМанифеста.Существует() Тогда
51+
Лог.Отладка("Обрабатываем по манифесту");
52+
ДобавитьКлассыПлагинов(ФайлМанифеста.ПолноеИмя, Путь);
53+
Иначе
54+
Лог.Отладка("Плагины из каталога <%1> не могут быть загружены - не найден файл <lib.config>", Путь);
55+
КонецЕсли;
56+
57+
КонецПроцедуры
58+
59+
Процедура ДобавитьКлассыПлагинов(Знач Файл, Знач Путь)
60+
61+
Чтение = Новый ЧтениеXML;
62+
Чтение.ОткрытьФайл(Файл);
63+
Чтение.ПерейтиКСодержимому();
64+
65+
Если Чтение.ЛокальноеИмя <> "package-def" Тогда
66+
Чтение.Закрыть();
67+
Возврат;
68+
КонецЕсли;
69+
70+
Пока Чтение.Прочитать() Цикл
71+
72+
Если Чтение.ТипУзла = ТипУзлаXML.Комментарий Тогда
73+
74+
Продолжить;
75+
76+
КонецЕсли;
77+
78+
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
79+
80+
Если Чтение.ЛокальноеИмя = "class" Тогда
81+
ФайлКласса = Новый Файл(ОбъединитьПути(Путь,Чтение.ЗначениеАтрибута("file")));
82+
Если ФайлКласса.Существует()
83+
И ФайлКласса.ЭтоФайл() Тогда
84+
Идентификатор = Чтение.ЗначениеАтрибута("name");
85+
Если Не ПустаяСтрока(Идентификатор) Тогда
86+
ДобавитьПлагинВИндекс(Идентификатор, ФайлКласса.ПолноеИмя);
87+
КонецЕсли;
88+
Иначе
89+
ВызватьИсключение "Не найден файл " + ФайлКласса.ПолноеИмя + ", указанный в манифесте";
90+
КонецЕсли;
91+
92+
Чтение.Прочитать(); // в конец элемента
93+
94+
КонецЕсли;
95+
96+
КонецЕсли;
97+
98+
КонецЦикла;
99+
100+
Чтение.Закрыть();
101+
102+
КонецПроцедуры
103+
104+
Процедура ДобавитьПлагинВИндекс(Знач ИмяКлассаПлагина, Знач ИмяФайлаКласса)
105+
106+
Лог.Отладка("Добавляю плагин <%1> в индекс плагинов", ИмяКлассаПлагина);
107+
108+
ПодключитьСценарий(ИмяФайлаКласса, ИмяКлассаПлагина);
109+
110+
Попытка
111+
НовыйПлагин = Новый ПлагинСинхронизации(ИмяКлассаПлагина, ДоступныйИнтерфейсПлагинов);
112+
Исключение
113+
Лог.Отладка("Ошибка добавления плагина <%1> в индекс плагинов. Класс <%1> не найден", ИмяКлассаПлагина);
114+
Возврат;
115+
КонецПопытки;
116+
117+
ИндексУстановленныхПлагинов.Вставить(НовыйПлагин.Имя(), НовыйПлагин);
118+
119+
КонецПроцедуры
120+
121+
Процедура ПриСозданииОбъекта(Знач ВходящийКаталогПлагинов = Неопределено)
122+
123+
КаталогПлагинов = ВходящийКаталогПлагинов;
124+
125+
КонецПроцедуры
126+
127+
Лог = Логирование.ПолучитьЛог("oscript.app.gitsync.plugins.loader");
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#Использовать reflector
2+
3+
Перем ОбъектИнтерфейс;
4+
5+
Функция Интерфейс() Экспорт
6+
Возврат ОбъектИнтерфейс;
7+
КонецФункции
8+
9+
Функция Реализует(ОбъектПроверки) Экспорт
10+
11+
Рефлектор = Новый РефлекторОбъекта(ОбъектПроверки);
12+
Возврат Рефлектор.РеализуетИнтерфейс(ОбъектИнтерфейс);
13+
14+
КонецФункции
15+
16+
Функция ПолучитьДоступныйИнтерфейсПлагинов()
17+
18+
ДоступныйИнтерфейсПлагинов = Новый ИнтерфейсОбъекта();
19+
20+
// Вызывается в процедуре АктивизироватьПлагины
21+
ДоступныйИнтерфейсПлагинов.П("ПриАктивизации", 1); //
22+
ДоступныйИнтерфейсПлагинов.П("ПриПолученииПараметров", 2); //
23+
24+
// Подписки на регистрацию команд приложения
25+
ДоступныйИнтерфейсПлагинов.П("ПослеРегистрацииКомандПриложения", 1); //
26+
ДоступныйИнтерфейсПлагинов.П("ПриРегистрацииКомандыПриложения", 3); //
27+
ДоступныйИнтерфейсПлагинов.П("ПриВыполненииКоманды", 2); //
28+
ДоступныйИнтерфейсПлагинов.П("ПередВыполнениемКоманды", 3); //
29+
ДоступныйИнтерфейсПлагинов.П("ПослеВыполненияКоманды", 3); //
30+
31+
// Подписки на начало и окончания выполнения
32+
ДоступныйИнтерфейсПлагинов.П("ПередНачаломВыполнения", 4); //
33+
ДоступныйИнтерфейсПлагинов.П("ПослеОкончанияВыполнения", 4);
34+
35+
// Подписки на получение таблицы версий
36+
ДоступныйИнтерфейсПлагинов.П("ПриПолученииТаблицыВерсий", 3);
37+
ДоступныйИнтерфейсПлагинов.П("ПослеПолученияТаблицыВерсий", 2);
38+
39+
// Подписки на получение таблицы пользователей
40+
ДоступныйИнтерфейсПлагинов.П("ПриПолученииТаблицыПользователей", 3);
41+
ДоступныйИнтерфейсПлагинов.П("ПослеПолученияТаблицыПользователей", 2);
42+
43+
// Подписки на обработки строки версии
44+
ДоступныйИнтерфейсПлагинов.П("ПередНачаломЦиклаОбработкиВерсий", 4);
45+
ДоступныйИнтерфейсПлагинов.П("ПередОбработкойВерсииХранилища", 2);
46+
ДоступныйИнтерфейсПлагинов.П("ПриОбработкеВерсииХранилища", 2);
47+
ДоступныйИнтерфейсПлагинов.П("ПослеОбработкиВерсииХранилища", 3);
48+
49+
// Подписки на выполнение коммита
50+
ДоступныйИнтерфейсПлагинов.П("ПередКоммитом", 4);
51+
ДоступныйИнтерфейсПлагинов.П("ПриКоммите", 7);
52+
ДоступныйИнтерфейсПлагинов.П("ПослеКоммита", 2);
53+
54+
// Подписки на начало и окончания выгрузки версии конфигурации
55+
ДоступныйИнтерфейсПлагинов.П("ПередНачаломВыгрузкиВерсииХранилищаКонфигурации", 5); //
56+
ДоступныйИнтерфейсПлагинов.П("ПослеОкончанияВыгрузкиВерсииХранилищаКонфигурации", 5);
57+
58+
// Подписки на загрузку версии конфигурации из хранилища
59+
ДоступныйИнтерфейсПлагинов.П("ПередЗагрузкойВерсииХранилищаКонфигурации", 5); //
60+
ДоступныйИнтерфейсПлагинов.П("ПриЗагрузкеВерсииХранилищаВКонфигурацию", 5);
61+
ДоступныйИнтерфейсПлагинов.П("ПослеЗагрузкиВерсииХранилищаВКонфигурацию", 4); //
62+
63+
// Подписки на выгрузку конфигурации в исходники
64+
ДоступныйИнтерфейсПлагинов.П("ПередВыгрузкойКонфигурациюВИсходники", 6); //
65+
ДоступныйИнтерфейсПлагинов.П("ПриВыгрузкеКонфигурациюВИсходники", 4);
66+
ДоступныйИнтерфейсПлагинов.П("ПослеВыгрузкиКонфигурациюВИсходники", 3); //
67+
68+
// Подписки на очистку каталога рабочей версии
69+
ДоступныйИнтерфейсПлагинов.П("ПередОчисткойКаталогаРабочейКопии", 6); //
70+
ДоступныйИнтерфейсПлагинов.П("ПриОчисткеКаталогаРабочейКопии", 3);
71+
ДоступныйИнтерфейсПлагинов.П("ПослеОчисткиКаталогаРабочейКопии", 2); //
72+
73+
// Подписки на перемещение в каталог рабочей копии
74+
ДоступныйИнтерфейсПлагинов.П("ПередПеремещениемВКаталогРабочейКопии", 6); //
75+
ДоступныйИнтерфейсПлагинов.П("ПриПеремещенииВКаталогРабочейКопии", 5);
76+
ДоступныйИнтерфейсПлагинов.П("ПослеПеремещенияВКаталогРабочейКопии", 4); //
77+
78+
// Подписка на распаковку файлов form.bin
79+
ДоступныйИнтерфейсПлагинов.П("ПриРаспаковкеКонтейнераМетаданных", 3);
80+
ДоступныйИнтерфейсПлагинов.П("ПослеРаспаковкиКонтейнераМетаданных", 2); //
81+
82+
83+
// Работа с выгрузкой в исходники
84+
ДоступныйИнтерфейсПлагинов.П("ПередВыполнениемВыгрузки", 6);
85+
ДоступныйИнтерфейсПлагинов.П("ПриВыполненииВыгрузки", 7);
86+
ДоступныйИнтерфейсПлагинов.П("ПослеВыполненияВыгрузки", 6);
87+
88+
Возврат ДоступныйИнтерфейсПлагинов;
89+
90+
КонецФункции
91+
92+
Процедура ПриСозданииОбъекта()
93+
ОбъектИнтерфейс = ПолучитьДоступныйИнтерфейсПлагинов();
94+
КонецПроцедуры

0 commit comments

Comments
 (0)