1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-08-10 22:41:43 +02:00

FTP: Очистка директории

This commit is contained in:
Anton Titovets
2025-08-01 12:19:58 +03:00
parent 80e27f8a25
commit 499413df0b
9 changed files with 119 additions and 31 deletions

View File

@@ -1,9 +1,9 @@
"MAIN ---"
linux-vdso.so.1 (0x00007fff7e1fc000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000731559200000)
libc.so.6 => /lib64/libc.so.6 (0x0000731558e00000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000731558a00000)
/lib64/ld-linux-x86-64.so.2 (0x0000731559800000)
linux-vdso.so.1 (0x00007ffe740fb000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007e7f2e600000)
libc.so.6 => /lib64/libc.so.6 (0x00007e7f2e200000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007e7f2de00000)
/lib64/ld-linux-x86-64.so.2 (0x00007e7f2ec00000)
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.3.4

View File

@@ -112,8 +112,6 @@ impl FtpClient {
FtpClient::Insecure(stream) => stream.mkdir(path),
};
sleep(Duration::from_millis(100));
match result {
Ok(_) => json!({"result": true}).to_string(),
Err(e) => format_json_error(&e.to_string())

View File

@@ -8,6 +8,7 @@ use addin1c::{name, Variant};
use serde_json::json;
use serde::{Deserialize, Serialize};
use std::sync::{Arc, Mutex, MutexGuard};
use std::thread::sleep;
use std::time::Duration;
use crate::core::getset;
@@ -59,7 +60,7 @@ pub fn get_params_amount(num: usize) -> usize {
// Вызовы должны быть обернуты в Box::new
pub fn cal_func(obj: &mut AddIn, num: usize, params: &mut [Variant]) -> Box<dyn getset::ValueType> {
match num {
let result: Box<dyn getset::ValueType> = match num {
0 => Box::new(obj.initialize()),
1 => Box::new(obj.close_connection()),
@@ -163,7 +164,11 @@ pub fn cal_func(obj: &mut AddIn, num: usize, params: &mut [Variant]) -> Box<dyn
12 => Box::new(obj.get_configurations()),
13 => Box::new(obj.is_tls()),
_ => Box::new(false), // Неверный номер команды
}
};
sleep(Duration::from_millis(150));
result
}

Binary file not shown.

Binary file not shown.

View File

@@ -407,23 +407,23 @@
// Соответствие Из КлючИЗначение - Результат обработки
Функция УдалитьДиректорию(Знач Соединение, Знач Путь) Экспорт
ЗакрыватьСоединение = ПроверитьСоздатьСоединение(Соединение);
Возврат ОчиститьУдалитьДиректорию(Соединение, Путь, Истина);
Если Не ЭтоКоннектор(Соединение) Тогда
Возврат Соединение;
Иначе
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
Результат = УдалитьДиректориюРекурсивно(Соединение, Путь);
КонецЕсли;
Если ЗакрыватьСоединение Тогда
Результат.Вставить("close_connection", ЗакрытьСоединение(Соединение));
КонецЕсли;
Возврат Результат;
КонецФункции
// Очистить директорию
// Очищает выбранную директорию
//
// Параметры:
// Соединение - Произвольный - Существующее соединение или конфигурация соединения - conn
// Путь - Строка - Путь к очищаемой директории - path
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Результат обработки
Функция ОчиститьДиректорию(Знач Соединение, Знач Путь) Экспорт
Возврат ОчиститьУдалитьДиректорию(Соединение, Путь, Ложь);
КонецФункции
#КонецОбласти
@@ -625,7 +625,28 @@
КонецФункции
Функция УдалитьДиректориюРекурсивно(Знач Соединение, Знач Путь, МассивУдаленных = Неопределено)
Функция ОчиститьУдалитьДиректорию(Знач Соединение, Знач Путь, Знач УдалятьТекущую)
ЗакрыватьСоединение = ПроверитьСоздатьСоединение(Соединение);
Если Не ЭтоКоннектор(Соединение) Тогда
Возврат Соединение;
Иначе
OPI_ПреобразованиеТипов.ПолучитьСтроку(Путь);
Результат = УдалитьДиректориюРекурсивно(Соединение, Путь, УдалятьТекущую);
КонецЕсли;
Если ЗакрыватьСоединение Тогда
Результат.Вставить("close_connection", ЗакрытьСоединение(Соединение));
КонецЕсли;
Возврат Результат;
КонецФункции
Функция УдалитьДиректориюРекурсивно(Знач Соединение, Знач Путь, Знач УдалятьТекущую = Истина, МассивУдаленных = Неопределено)
Если МассивУдаленных = Неопределено Тогда
МассивУдаленных = Новый Массив;
@@ -642,7 +663,7 @@
ПутьЭлемента = Элемент["path"];
Если Элемент["is_directory"] Тогда
Удаление = УдалитьДиректориюРекурсивно(Соединение, ПутьЭлемента, МассивУдаленных);
Удаление = УдалитьДиректориюРекурсивно(Соединение, ПутьЭлемента, УдалятьТекущую, МассивУдаленных);
Иначе
Удаление = УдалитьФайл(Соединение, ПутьЭлемента);
КонецЕсли;
@@ -653,8 +674,13 @@
КонецЦикла;
КонецЕсли;
Результат = Соединение.RemoveDirectory(Путь);
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
Если Не Основной Или УдалятьТекущую Тогда
Результат = Соединение.RemoveDirectory(Путь);
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
Иначе
Результат = Новый Соответствие;
Результат.Вставить("result", Истина);
КонецЕсли;
Если Основной Тогда
Результат.Вставить("deleted_elements", МассивУдаленных);

View File

@@ -2890,9 +2890,10 @@
МассивВариантов = OPI_ПолучениеДанныхТестов.ПолучитьВариантыПараметровFTP();
Для Каждого ПараметрыТеста Из МассивВариантов Цикл
FTP_ПолучитьСписокОбъектов(ПараметрыТеста);
FTP_ОчиститьДиректорию(ПараметрыТеста);
FTP_СоздатьДиректорию(ПараметрыТеста);
FTP_ПолучитьСписокОбъектов(ПараметрыТеста);
FTP_УдалитьДиректорию(ПараметрыТеста);
КонецЦикла;
@@ -25313,7 +25314,7 @@
OPI_ПолучениеДанныхТестов.Проверка_Равенство(Результат["bytes"] , КартинкаДД.Размер());
OPI_ПолучениеДанныхТестов.Проверка_Равенство(Результат2["bytes"], КартинкаДД.Размер());
Для Н = 1 По 20 Цикл
Для Н = 1 По 7 Цикл
Результат = OPI_FTP.ЗагрузитьФайл(Соединение, Картинка, "new_dir/pic_from_disk.png");
Результат2 = OPI_FTP.ЗагрузитьФайл(Соединение, КартинкаДД, "pic_from_binary.png");
@@ -25466,6 +25467,64 @@
КонецПроцедуры
Процедура FTP_ОчиститьДиректорию(ПараметрыФункции)
Хост = ПараметрыФункции["FTP_IP"];
Порт = ПараметрыФункции["FTP_Port"];
Логин = ПараметрыФункции["FTP_User"];
Пароль = ПараметрыФункции["FTP_Password"];
ИспользоватьПрокси = Истина;
FTPS = Истина;
НастройкиПрокси = Неопределено;
НастройкиTls = Неопределено; // FTPS
ИспользоватьПрокси = ПараметрыФункции["Proxy"]; // SKIP
FTPS = ПараметрыФункции["TLS"]; // SKIP
НастройкиFTP = OPI_FTP.ПолучитьНастройкиСоединения(Хост, Порт, Логин, Пароль);
Если ИспользоватьПрокси Тогда
ТипПрокси = ПараметрыФункции["Proxy_Type"]; // http, socks5, socks4
АдресПрокси = ПараметрыФункции["Proxy_IP"];
ПортПрокси = ПараметрыФункции["Proxy_Port"];
ЛогинПрокси = ПараметрыФункции["Proxy_User"];
ПарольПрокси = ПараметрыФункции["Proxy_Password"];
НастройкиПрокси = OPI_FTP.ПолучитьНастройкиПрокси(АдресПрокси, ПортПрокси, ТипПрокси, ЛогинПрокси, ПарольПрокси);
КонецЕсли;
Если FTPS Тогда
НастройкиTls = OPI_FTP.ПолучитьНастройкиTls(Истина);
КонецЕсли;
Соединение = OPI_FTP.ОткрытьСоединение(НастройкиFTP, НастройкиПрокси, НастройкиTls);
Если OPI_FTP.ЭтоКоннектор(Соединение) Тогда
Результат = OPI_FTP.ОчиститьДиректорию(Соединение, "");
Иначе
Результат = Соединение; // Ошибка соединения
КонецЕсли;
// END
Постфикс = ПараметрыФункции["Postfix"];
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОчиститьДиректорию" + Постфикс, "FTP");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
Результат = OPI_FTP.ПолучитьСписокОбъектов(Соединение, "", Истина);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОчиститьДиректорию (проверка)", "FTP");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
OPI_ПолучениеДанныхТестов.Проверка_Массив(Результат["data"], 0);
КонецПроцедуры
#КонецОбласти
#КонецОбласти