Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ unpack/
bin/
db.db
js.json
autumn-data/
autumn-data/
.vscode\launch.json
DataBase/
2 changes: 1 addition & 1 deletion .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"args": [],
"cwd": "${workspaceRoot}",
"env": {},
"runtimeExecutable": "/Users/untru/.local/share/ovm/current/bin/oscript",
"runtimeExecutable": null,
"runtimeArgs": [],
"debugPort": 2801
}
Expand Down
4 changes: 2 additions & 2 deletions autumn-properties.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
"FILE_MAX_SIZE": 30000000,
"data": {
"ИсточникиДанных": {
"ТипКоннектора": "КоннекторSQLite",
"СтрокаСоединения": "FullUri=db.db"
"ТипКоннектора": "КоннекторJSON",
"СтрокаСоединения": "./DataBase"
}
},
"logos": {
Expand Down
499 changes: 478 additions & 21 deletions js.json

Large diffs are not rendered by default.

17 changes: 11 additions & 6 deletions src/controller/Классы/КомандаКлавиатура.os
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
&Пластилин
Перем МенеджерПубликаций;

&ЛогПубликация
Перем Лог;

&Желудь
&Прозвище("Команда")
Процедура ПриСозданииОбъекта()
Expand All @@ -21,29 +24,31 @@

Процедура Обработать(Сообщение) Экспорт

Сообщить(OPI_Инструменты.JSONСтрокой(Сообщение, , Ложь, Ложь));
Лог.Отладка(OPI_Инструменты.JSONСтрокой(Сообщение, , Ложь, Ложь));
НомерСообщения = Сообщение["update_id"];

СообщениеНажатиеКнопки = Сообщение["callback_query"]["message"];
ЧатИД = СообщениеНажатиеКнопки["chat"]["id"];
ПользовательИД = СообщениеНажатиеКнопки["from"]["id"];
ИДПользователя = СообщениеНажатиеКнопки["from"]["id"];

Клавиши = СообщениеНажатиеКнопки["reply_markup"]["inline_keyboard"];

КнопкаНовая = Клавиши[Клавиши.ВГраница()][0]["callback_data"];

ИнформацияОФайле = МенеджерПубликаций.ИнформацияОФайлеПоИдентификатору(СтрЗаменить(КнопкаНовая, "NEW_", ""));
ИнформацияОФайле = МенеджерПубликаций.ИнформацияОФайлеПоИдентификатору(Число(СтрЗаменить(КнопкаНовая, "NEW_", "")));
НажатаяКнопка = Сообщение["callback_query"]["data"];

ДвоичныеДанные = OPI_Telegram.СкачатьФайл(Токен, ИнформацияОФайле.ИДФайла);

ДанныеДляРазбораФайла = МенеджерПубликаций.НовыйДанныеДляРазбораФайла();
Если КнопкаНовая = НажатаяКнопка Тогда
Если КнопкаНовая <> НажатаяКнопка Тогда
ИнформацияОПубликации = МенеджерПубликаций.ИнформацияОПубликацииПоИдентификатору(Число(НажатаяКнопка));
ДанныеДляРазбораФайла.Обновление = Истина;
ДанныеДляРазбораФайла.ИДПубликации = ИнформацияОПубликации.ИДПубликации;
КонецЕсли;

ДанныеДляРазбораФайла.ПользовательИД = ПользовательИД;
ДанныеДляРазбораФайла.ИДПубликации = НомерСообщения;
ДанныеДляРазбораФайла.ИДПользователя = ИДПользователя;
ДанныеДляРазбораФайла.НомерСеанса = НомерСообщения;
ДанныеДляРазбораФайла.ДвоичныеДанные = ДвоичныеДанные;
ДанныеДляРазбораФайла.ИДФайла = ИнформацияОФайле.ИДФайла;
ДанныеДляРазбораФайла.ИмяФайла = ИнформацияОФайле.ИмяФайла;
Expand Down
8 changes: 4 additions & 4 deletions src/controller/Классы/КомандаФайл.os
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
Процедура Обработать(Сообщение) Экспорт

ЧатИД = Сообщение["message"]["chat"]["id"];
ПользовательИД = Сообщение["message"]["from"]["id"];
ИДПользователя = Сообщение["message"]["from"]["id"];
ИмяФайла = Сообщение["message"]["document"]["file_name"];
ИДФайла = Сообщение["message"]["document"]["file_id"];

Expand All @@ -39,7 +39,7 @@
КонецПопытки;

ОтправляемыйФайл = МенеджерПубликаций.НовыйОтправляемыйФайл();
ОтправляемыйФайл.ПользовательИД = ПользовательИД;
ОтправляемыйФайл.ИДПользователя = ИДПользователя;
ОтправляемыйФайл.ИмяФайла = ИмяФайла;
ОтправляемыйФайл.ИДФайла = ИДФайла;
МенеджерПубликаций.СохранитьИнформациюОФайле(ОтправляемыйФайл);
Expand All @@ -59,9 +59,9 @@
НомерСообщения = Сообщение["update_id"];

ДанныеДляРазбораФайла = МенеджерПубликаций.НовыйДанныеДляРазбораФайла();
ДанныеДляРазбораФайла.ПользовательИД = ПользовательИД;
ДанныеДляРазбораФайла.ИДПользователя = ИДПользователя;
ДанныеДляРазбораФайла.ИмяФайла = ИмяФайла;
ДанныеДляРазбораФайла.ИДПубликации = НомерСообщения;
ДанныеДляРазбораФайла.НомерСеанса = НомерСообщения;
ДанныеДляРазбораФайла.ДвоичныеДанные = ДвоичныеДанные;
ДанныеДляРазбораФайла.ИДФайла = ИДФайла;
ДанныеДляРазбораФайла.Обновление = Ложь;
Expand Down
1 change: 1 addition & 0 deletions src/controller/Классы/ТелеграммБот.os
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

&Деталька("TELEGRAMM.TOKEN")
Перем Токен;

&Пластилин
Перем Поделка;

Expand Down
36 changes: 16 additions & 20 deletions src/core/Классы/Декомпилятор.os
Original file line number Diff line number Diff line change
@@ -1,37 +1,33 @@
#Использовать 1commands

&Деталька("UNPACK")
Перем СпособРазбора; //py, exe
Перем СпособРазбора; //Метод, разбирать через exe или через pythot, варианты exe, py

&ЛогПубликация
Перем Лог;

&Пластилин
Перем КомандаЗапуска;

&Желудь
Процедура ПриСозданииОбъекта()

КонецПроцедуры

Процедура РазобратьФайл(ПутьКФайлу, ПапкаРазбора) Экспорт

// Команда = Новый Команда;

// Если СпособРазбора = "py" Тогда
// ИсполняющийСкрипт = ТекущийКаталог() + "/src/v8unpack/v8u.py";
// Команда.УстановитьКоманду("python3");
// Команда.ДобавитьПараметр(ИсполняющийСкрипт);
// Иначе
// Команда.УстановитьКоманду("src/v8unpack/v8unpack.exe");
// Команда.ДобавитьПараметр("-E");
// КонецЕсли;

КомандаЗапуска.ДобавитьПараметр(КомандаЗапуска.ОбернутьВКавычки(ПутьКФайлу));
КомандаЗапуска.ДобавитьПараметр(ПапкаРазбора);

КодВозврата = КомандаЗапуска.Исполнить();
Лог.Отладка(КомандаЗапуска.ПолучитьВывод());
Команда = Новый Команда;

Если СпособРазбора = "py" Тогда
ИсполняющийСкрипт = ТекущийКаталог() + "/src/v8unpack/v8u.py";
Команда.УстановитьКоманду("python3");
Команда.ДобавитьПараметр(ИсполняющийСкрипт);
Иначе
Команда.УстановитьКоманду("src/v8unpack/v8unpack.exe");
Команда.ДобавитьПараметр("-E");
КонецЕсли;
Команда.ДобавитьПараметр(Команда.ОбернутьВКавычки(ПутьКФайлу));
Команда.ДобавитьПараметр(ПапкаРазбора);

КодВозврата = Команда.Исполнить();
Лог.Отладка(Команда.ПолучитьВывод());
Лог.Отладка(КодВозврата);

КонецПроцедуры
Expand Down
37 changes: 26 additions & 11 deletions src/core/Классы/МенеджерПубликаций.os
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
&Пластилин
Перем ХранилищеСущностейИсторияФайлов;

&ЛогПубликация
Перем Лог;

&Желудь
Процедура ПриСозданииОбъекта()

Expand All @@ -30,17 +33,20 @@
//
Функция ОбработатьФайл(ДанныеДляРазбораФайла) Экспорт

Каталог = "unpack/" + ДанныеДляРазбораФайла.ИДПубликации;
КаталогИсходник = "bin/" + ДанныеДляРазбораФайла.ИДПубликации;
Каталог = "unpack/" + ДанныеДляРазбораФайла.НомерСеанса;
КаталогИсходник = "bin/" + ДанныеДляРазбораФайла.НомерСеанса;
СоздатьКаталог(Каталог);
СоздатьКаталог(КаталогИсходник);
ПутьКФайлу = СтрШаблон("%1/%2", КаталогИсходник, ДанныеДляРазбораФайла.ИмяФайла);

Сообщить("Записываем файл");
Лог.Информация("Записываем файл");
ДанныеДляРазбораФайла.ДвоичныеДанные.Записать(ПутьКФайлу);

Лог.Информация("Разбираем файл");
Декомпилятор.РазобратьФайл(ПутьКФайлу, Каталог);
Лог.Информация("Публикуем");
ТекстыМодулей = РаботаСМодулями.ТекстыМодулей(Каталог);
ДанныеПубликации = Опубликовать(ТекстыМодулей, ДанныеДляРазбораФайла);
ДанныеДляРазбораФайла.ИДПубликации = ДанныеПубликации.ИДПубликации;
СохранитьЗаписьОФайле(ДанныеДляРазбораФайла);

УдалитьФайлы(Каталог);
Expand All @@ -63,7 +69,7 @@
ИдентификаторИДФайла = ИнформацияОФайлеПоИД(ОтправляемыйФайл.ИДФайла);

ПрошлыеПубликации = Новый Соответствие;
Сущности = НайтиЗаписьОФайле(ОтправляемыйФайл.ПользовательИД, ОтправляемыйФайл.ИмяФайла);
Сущности = НайтиЗаписьОФайле(ОтправляемыйФайл.ИДПользователя, ОтправляемыйФайл.ИмяФайла);
Если Сущности.Количество() Тогда

Для Каждого Сущность Из Сущности Цикл
Expand All @@ -81,7 +87,7 @@
Функция НовыйОтправляемыйФайл() Экспорт

Результат = Новый Структура();
Результат.Вставить("ПользовательИД");
Результат.Вставить("ИДПользователя");
Результат.Вставить("ИмяФайла");
Результат.Вставить("ИДФайла");
Возврат Результат;
Expand All @@ -91,8 +97,9 @@
Функция НовыйДанныеДляРазбораФайла() Экспорт

Результат = Новый Структура();
Результат.Вставить("ПользовательИД");
Результат.Вставить("ИДПользователя");
Результат.Вставить("ИмяФайла");
Результат.Вставить("НомерСеанса");
Результат.Вставить("ИДПубликации");
Результат.Вставить("ДвоичныеДанные");
Результат.Вставить("Обновление");
Expand All @@ -112,7 +119,7 @@
Продолжить;
КонецЕсли;

Ссылки = Публикатор.Значение.Опубликовать(ТекстыМодулей);
Ссылки = Публикатор.Значение.Опубликовать(ТекстыМодулей, ДанныеДляРазбораФайла);
ТекстыОтправки = Новый Массив;
Если Ссылки.Количество() Тогда
Для Каждого Ссылка Из Ссылки Цикл
Expand All @@ -137,10 +144,10 @@

КонецПроцедуры

Функция НайтиЗаписьОФайле(ПользовательИД, ИмяФайла)
Функция НайтиЗаписьОФайле(ИДПользователя, ИмяФайла)

Отбор = Новый Соответствие;
Отбор.Вставить("ПользовательИД", ПользовательИД);
Отбор.Вставить("ИДПользователя", ИДПользователя);
Отбор.Вставить("ИмяФайла", ИмяФайла);
Сущности = МенеджерСущностей.Получить(Тип("ИсторияПубликаций"), Отбор);
Возврат Сущности;
Expand All @@ -156,6 +163,14 @@

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

Функция ИнформацияОПубликацииПоИдентификатору(Идентификатор) Экспорт

Отбор = Новый Соответствие;
Отбор.Вставить("Идентификатор", Идентификатор);
Сущность = МенеджерСущностей.ПолучитьОдно(Тип("ИсторияПубликаций"), Отбор);
Возврат Сущность;

КонецФункции
Функция ИнформацияОФайлеПоИД(ИДФайла) Экспорт

Отбор = Новый Соответствие;
Expand All @@ -168,7 +183,7 @@
Процедура СохранитьЗаписьОФайле(ДанныеФайла)

ИсторияПубликаций = ХранилищеСущностейИсторияПубликаций.СоздатьЭлемент();
ИсторияПубликаций.ПользовательИД = ДанныеФайла.ПользовательИД;
ИсторияПубликаций.ИДПользователя = ДанныеФайла.ИДПользователя;
ИсторияПубликаций.ИмяФайла = ДанныеФайла.ИмяФайла;
ИсторияПубликаций.ДатаОтправки = ТекущаяДата();
ИсторияПубликаций.ИДПубликации = ДанныеФайла.ИДПубликации;
Expand Down
7 changes: 5 additions & 2 deletions src/core/Классы/ПарамертыРазбора.os
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@
КонецПроцедуры

&Завязь(Тип = "Строка")
Функция КомандаЗапуска(&Деталька(Значение = "UNPACK", ЗначениеПоУмолчанию = "") КомандаЗапуска) Экспорт
&Характер("Компанейский")
Функция КомандаЗапускаДекомпилятора(&Деталька(Значение = "UNPACK", ЗначениеПоУмолчанию = "py")
КомандаЗапускаДекомпилятора) Экспорт

Команда = Новый Команда;

Если КомандаЗапуска = "py" Тогда
Если КомандаЗапускаДекомпилятора = "py" Тогда
ИсполняющийСкрипт = ТекущийКаталог() + "/src/v8unpack/v8u.py";
Команда.УстановитьКоманду("python3");
Команда.ДобавитьПараметр(ИсполняющийСкрипт);
Expand Down
24 changes: 20 additions & 4 deletions src/core/Классы/ПубликаторGist.os
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

КонецПроцедуры

Функция Опубликовать(ТекстыМодулей) Экспорт
Функция Опубликовать(ТекстыМодулей, ДанныеДляРазбораФайла) Экспорт

Ссылки = Новый Соответствие();
АдресРесурса = АдресРесурса();
Expand All @@ -31,8 +31,15 @@
Тело.Вставить("public", Ложь);
Тело.Вставить("description", "Gist создан из 1С " + ТекущаяДата());

Ответ = КоннекторHTTP.Post(АдресРесурса,, Тело, Новый Структура("Заголовки", Заголовки));
Если Ответ.КодСостояния = 201 Тогда
Если ДанныеДляРазбораФайла.Обновление Тогда
Ответ = КоннекторHTTP.Patch(СтрШаблон("%1/%2", АдресРесурса, ДанныеДляРазбораФайла.ИДПубликации),
ОбъектВJson(Тело), Новый Структура("Заголовки", Заголовки)
);
Иначе
Ответ = КоннекторHTTP.Post(АдресРесурса,, Тело, Новый Структура("Заголовки", Заголовки));
КонецЕсли;

Если КодСостоянияУспешный(Ответ.КодСостояния) Тогда
ОтветJson = Ответ.Json();
КонецЕсли;

Expand All @@ -49,7 +56,7 @@
Тело.Вставить("description", "Gist создан из 1С " + ТекущаяДата());

Ответ = КоннекторHTTP.Patch(АдресРесурса, ОбъектВJson(Тело), Новый Структура("Заголовки", Заголовки));
Если Ответ.КодСостояния = 200 Тогда
Если КодСостоянияУспешный(Ответ.КодСостояния) Тогда
ОтветJson = Ответ.Json();
Ссылки.Вставить(ОтветJson["id"], ОтветJson["html_url"] + "#file-contents-md");
КонецЕсли;
Expand Down Expand Up @@ -89,3 +96,12 @@

КонецПроцедуры

Функция КодСостоянияУспешный(КодСостояния)

КодыОтвета = Новый Массив;
КодыОтвета.Добавить(200);
КодыОтвета.Добавить(201);

Возврат КодыОтвета.Найти(КодСостояния) <> Неопределено;

КонецФункции
2 changes: 1 addition & 1 deletion src/core/Классы/ПубликаторPaste1C.os
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

КонецПроцедуры

Функция Опубликовать(ТекстыМодулей) Экспорт
Функция Опубликовать(ТекстыМодулей, ДанныеДляРазбораФайла) Экспорт
//TODO Продумать удобный способ работы с paste1c, главная проблема в том что
//разные модули будут публиковаться по разным ссылкам, что не удобно для анализа
Ссылки = Новый Массив;
Expand Down
4 changes: 2 additions & 2 deletions src/data/Классы/ИсторияПубликаций.os
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
&Колонка(Тип = "Целое") // Хранит целочисленные значения
Перем Идентификатор Экспорт; // Имя колонки в базе - `Идентификатор`

&Колонка(Тип = "Строка")
Перем ПользовательИД Экспорт; // Колонка `ПользовательИД`
&Колонка(Тип = "Целое")
Перем ИДПользователя Экспорт; // Колонка `ИДПользователя`

&Колонка(Тип = "Строка")
Перем ИмяФайла Экспорт; // Колонка `ИмяФайла`
Expand Down
Loading