mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-01-26 05:37:27 +02:00
NC: Доработка синхронизации
This commit is contained in:
parent
0db9edfb0a
commit
63f0ffab6b
3
docs/en/data/Neocities/SynchronizeFolders.json
Normal file
3
docs/en/data/Neocities/SynchronizeFolders.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"Token": "7419cd51de4037f7..."
|
||||
}
|
6
docs/en/examples/Neocities/SynchronizeFolders.txt
Normal file
6
docs/en/examples/Neocities/SynchronizeFolders.txt
Normal file
@ -0,0 +1,6 @@
|
||||
Token = "7419cd51de4037f7...";
|
||||
|
||||
LocalFolder = "C:\test_site";
|
||||
RemoteFolder = "test";
|
||||
|
||||
Result = OPI_Neocities.SynchronizeFolders(Token, LocalFolder, RemoteFolder);
|
3
docs/ru/data/Neocities/СинхронизироватьКаталоги.json
Normal file
3
docs/ru/data/Neocities/СинхронизироватьКаталоги.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"Токен": "7419cd51de4037f7..."
|
||||
}
|
6
docs/ru/examples/Neocities/СинхронизироватьКаталоги.txt
Normal file
6
docs/ru/examples/Neocities/СинхронизироватьКаталоги.txt
Normal file
@ -0,0 +1,6 @@
|
||||
Токен = "7419cd51de4037f7...";
|
||||
|
||||
ЛокальныйКаталог = "C:\test_site";
|
||||
УдаленныйКаталог = "test";
|
||||
|
||||
Результат = OPI_Neocities.СинхронизироватьКаталоги(Токен, ЛокальныйКаталог, УдаленныйКаталог);
|
File diff suppressed because it is too large
Load Diff
@ -267,83 +267,34 @@ EndFunction
|
||||
// RemoteFolder - String - Remote receiver catalog. Root by default - remote
|
||||
//
|
||||
// Returns:
|
||||
// Map Of KeyAndValue - Serialized JSON response from Neocities
|
||||
// Structure of KeyAndValue - synchronization error information
|
||||
Function SynchronizeFolders(Val Token, Val LocalFolder, Val RemoteFolder = "") Export
|
||||
|
||||
OPI_TypeConversion.GetLine(LocalFolder);
|
||||
OPI_TypeConversion.GetLine(RemoteFolder);
|
||||
|
||||
Message("Start synchronization...");
|
||||
|
||||
If ValueIsFilled(RemoteFolder) Then
|
||||
RemoteFolder = ?(StrEndsWith(RemoteFolder, "/"), RemoteFolder, RemoteFolder + "/");
|
||||
EndIf;
|
||||
|
||||
LocalFolder = StrReplace(LocalFolder, "\", "/");
|
||||
LocalFolder = ?(StrEndsWith(LocalFolder, "/"), LocalFolder, LocalFolder + "/");
|
||||
|
||||
RemoteFiles = GetFilesList(Token, RemoteFolder);
|
||||
LocalFiles = FindFiles(LocalFolder, "*", True);
|
||||
|
||||
If Not RemoteFiles["result"] = "success" Then
|
||||
Return RemoteFiles;
|
||||
EndIf;
|
||||
|
||||
LocalPaths = New Map;
|
||||
LocalFolders = New Map;
|
||||
ArrayOfDeletions = New Array;
|
||||
LocalPaths = New Map;
|
||||
LocalSubfolders = New Map;
|
||||
|
||||
For Each LocalFile In LocalFiles Do
|
||||
GetLocalPathsSets(LocalFolder, RemoteFolder, LocalPaths, LocalSubfolders);
|
||||
|
||||
CurrentAbsPath = LocalFile.FullName;
|
||||
CurrentRelPath = Right(CurrentAbsPath, StrLen(CurrentAbsPath) - StrLen(LocalFolder));
|
||||
CurrentRelPath = RemoteFolder + CurrentRelPath;
|
||||
ArrayOfDeletions = GetDeletedFiles(RemoteFiles, LocalPaths, LocalSubfolders);
|
||||
Result = MakeSynchronization(Token, ArrayOfDeletions, LocalPaths);
|
||||
|
||||
CurrentRelPath = StrReplace(CurrentRelPath, "\", "/");
|
||||
|
||||
If LocalFile.IsDirectory() Then
|
||||
LocalFolders.Insert(CurrentRelPath, CurrentAbsPath);
|
||||
Else
|
||||
LocalPaths.Insert(CurrentRelPath, CurrentAbsPath);
|
||||
EndIf;
|
||||
|
||||
EndDo;
|
||||
|
||||
For Each RemoteFile In RemoteFiles["files"] Do
|
||||
|
||||
PathOfRemote = RemoteFile["path"];
|
||||
|
||||
If RemoteFile["is_directory"] Then
|
||||
ExistingRemote = LocalFolders[PathOfRemote];
|
||||
Else
|
||||
ExistingRemote = LocalPaths[PathOfRemote];
|
||||
EndIf;
|
||||
|
||||
If ExistingRemote = Undefined Then
|
||||
ArrayOfDeletions.Add(PathOfRemote);
|
||||
EndIf;
|
||||
|
||||
EndDo;
|
||||
|
||||
If Not ArrayOfDeletions.Count() = 0 Then
|
||||
Response = OPI_Neocities.DeleteSelectedFiles(Token, ArrayOfDeletions);
|
||||
|
||||
If Not Response["result"] = "success" Then
|
||||
Return Response;
|
||||
Else
|
||||
DeletingMessage = StrTemplate("Removed %1 unnecessary files", String(ArrayOfDeletions.Count()));
|
||||
Message(DeletingMessage);
|
||||
EndIf;
|
||||
|
||||
EndIf;
|
||||
|
||||
For Each LocalPath In LocalPaths Do
|
||||
|
||||
Response = OPI_Neocities.UploadFile(Token, LocalPath.Key, LocalPath.Value);
|
||||
|
||||
Message(LocalPath.Key + Chars.LF + Response["message"] + Chars.LF);
|
||||
|
||||
EndDo;
|
||||
|
||||
Return OPI_Neocities.GetSiteData(Token);
|
||||
//@skip-check constructor-function-return-section
|
||||
Return Result;
|
||||
|
||||
EndFunction
|
||||
|
||||
@ -363,4 +314,100 @@ Function CreateRequestHeaders(Val Token)
|
||||
|
||||
EndFunction
|
||||
|
||||
Function GetDeletedFiles(RemoteFiles, LocalPaths, LocalSubfolders)
|
||||
|
||||
ArrayOfDeletions = New Array;
|
||||
|
||||
For Each RemoteFile In RemoteFiles["files"] Do
|
||||
|
||||
PathOfRemote = RemoteFile["path"];
|
||||
|
||||
If RemoteFile["is_directory"] Then
|
||||
ExistingRemote = LocalSubfolders[PathOfRemote];
|
||||
Else
|
||||
ExistingRemote = LocalPaths[PathOfRemote];
|
||||
EndIf;
|
||||
|
||||
If ExistingRemote = Undefined Then
|
||||
ArrayOfDeletions.Add(PathOfRemote);
|
||||
EndIf;
|
||||
|
||||
EndDo;
|
||||
|
||||
Return ArrayOfDeletions;
|
||||
|
||||
EndFunction
|
||||
|
||||
//@skip-check module-unused-local-variable
|
||||
Function MakeSynchronization(Token, ArrayOfDeletions, LocalPaths)
|
||||
|
||||
ErrorsArray = New Array;
|
||||
|
||||
If Not ArrayOfDeletions.Count() = 0 Then
|
||||
|
||||
Response = OPI_Neocities.DeleteSelectedFiles(Token, ArrayOfDeletions);
|
||||
|
||||
If Not Response["result"] = "success" Then
|
||||
ErrorsArray.Add(Response);
|
||||
Else
|
||||
|
||||
DeletingMessage = StrTemplate("Removed %1 unnecessary files", String(ArrayOfDeletions.Count()));
|
||||
Message(DeletingMessage);
|
||||
|
||||
EndIf;
|
||||
|
||||
EndIf;
|
||||
|
||||
Total = OPI_Tools.NumberToString(LocalPaths.Count());
|
||||
Counter = 0;
|
||||
|
||||
For Each LocalPath In LocalPaths Do
|
||||
|
||||
Response = OPI_Neocities.UploadFile(Token, LocalPath.Key, LocalPath.Value);
|
||||
|
||||
If Not Response["result"] = "success" Then
|
||||
|
||||
ErrorsArray.Add(Response);
|
||||
|
||||
Else
|
||||
|
||||
Progress = "[" + OPI_Tools.NumberToString(Counter) + "/" + Total + "] ";
|
||||
Message(Progress + LocalPath.Key + Chars.LF + Response["message"] + Chars.LF);
|
||||
|
||||
EndIf;
|
||||
|
||||
|
||||
Counter = Counter + 1;
|
||||
|
||||
EndDo;
|
||||
|
||||
Return New Structure("errors,items", ErrorsArray.Count(), ErrorsArray);
|
||||
|
||||
EndFunction
|
||||
|
||||
Procedure GetLocalPathsSets(LocalFolder, RemoteFolder, LocalPaths, LocalSubfolders)
|
||||
|
||||
LocalFolder = StrReplace(LocalFolder, "\", "/");
|
||||
LocalFolder = ?(StrEndsWith(LocalFolder, "/"), LocalFolder, LocalFolder + "/");
|
||||
|
||||
LocalFiles = FindFiles(LocalFolder, "*", True);
|
||||
|
||||
For Each LocalFile In LocalFiles Do
|
||||
|
||||
CurrentAbsPath = LocalFile.FullName;
|
||||
CurrentRelPath = Right(CurrentAbsPath, StrLen(CurrentAbsPath) - StrLen(LocalFolder));
|
||||
CurrentRelPath = RemoteFolder + CurrentRelPath;
|
||||
|
||||
CurrentRelPath = StrReplace(CurrentRelPath, "\", "/");
|
||||
|
||||
If LocalFile.IsDirectory() Then
|
||||
LocalSubfolders.Insert(CurrentRelPath, CurrentAbsPath);
|
||||
Else
|
||||
LocalPaths.Insert(CurrentRelPath, CurrentAbsPath);
|
||||
EndIf;
|
||||
|
||||
EndDo;
|
||||
|
||||
EndProcedure
|
||||
|
||||
#EndRegion
|
||||
|
@ -3048,6 +3048,7 @@ Procedure NC_FilesManagment() Export
|
||||
Neocities_UploadFiles(TestParameters);
|
||||
Neocities_GetFilesList(TestParameters);
|
||||
Neocities_DeleteSelectedFiles(TestParameters);
|
||||
Neocities_SynchronizeFolders(TestParameters);
|
||||
|
||||
EndProcedure
|
||||
|
||||
@ -4060,6 +4061,13 @@ Procedure Check_NCFolderFiles(Val Result, Val Count)
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure Check_NCSync(Val Result)
|
||||
|
||||
OPI_TestDataRetrieval.ExpectsThat(Result["errors"]).Равно(0);
|
||||
OPI_TestDataRetrieval.ExpectsThat(Result["items"].Count()).Равно(0);
|
||||
|
||||
EndProcedure
|
||||
|
||||
#EndRegion
|
||||
|
||||
#Region AtomicTests
|
||||
@ -13225,6 +13233,23 @@ Procedure Neocities_GetToken(FunctionParameters)
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure Neocities_SynchronizeFolders(FunctionParameters)
|
||||
|
||||
Token = FunctionParameters["NC_Token"];
|
||||
|
||||
LocalFolder = "C:\test_site";
|
||||
RemoteFolder = "test";
|
||||
|
||||
Result = OPI_Neocities.SynchronizeFolders(Token, LocalFolder, RemoteFolder);
|
||||
|
||||
// END
|
||||
|
||||
OPI_TestDataRetrieval.WriteLog(Result, "SynchronizeFolders", "Neocities");
|
||||
|
||||
Check_NCSync(Result);
|
||||
|
||||
EndProcedure
|
||||
|
||||
#EndRegion
|
||||
|
||||
#EndRegion
|
||||
|
@ -267,83 +267,34 @@ EndFunction
|
||||
// RemoteFolder - String - Remote receiver catalog. Root by default - remote
|
||||
//
|
||||
// Returns:
|
||||
// Map Of KeyAndValue - Serialized JSON response from Neocities
|
||||
// Structure of KeyAndValue - synchronization error information
|
||||
Function SynchronizeFolders(Val Token, Val LocalFolder, Val RemoteFolder = "") Export
|
||||
|
||||
OPI_TypeConversion.GetLine(LocalFolder);
|
||||
OPI_TypeConversion.GetLine(RemoteFolder);
|
||||
|
||||
// !OInt Message("Start synchronization...");
|
||||
|
||||
If ValueIsFilled(RemoteFolder) Then
|
||||
RemoteFolder = ?(StrEndsWith(RemoteFolder, "/"), RemoteFolder, RemoteFolder + "/");
|
||||
EndIf;
|
||||
|
||||
LocalFolder = StrReplace(LocalFolder, "\", "/");
|
||||
LocalFolder = ?(StrEndsWith(LocalFolder, "/"), LocalFolder, LocalFolder + "/");
|
||||
|
||||
RemoteFiles = GetFilesList(Token, RemoteFolder);
|
||||
LocalFiles = FindFiles(LocalFolder, "*", True);
|
||||
|
||||
If Not RemoteFiles["result"] = "success" Then
|
||||
Return RemoteFiles;
|
||||
EndIf;
|
||||
|
||||
LocalPaths = New Map;
|
||||
LocalFolders = New Map;
|
||||
ArrayOfDeletions = New Array;
|
||||
LocalPaths = New Map;
|
||||
LocalSubfolders = New Map;
|
||||
|
||||
For Each LocalFile In LocalFiles Do
|
||||
GetLocalPathsSets(LocalFolder, RemoteFolder, LocalPaths, LocalSubfolders);
|
||||
|
||||
CurrentAbsPath = LocalFile.FullName;
|
||||
CurrentRelPath = Right(CurrentAbsPath, StrLen(CurrentAbsPath) - StrLen(LocalFolder));
|
||||
CurrentRelPath = RemoteFolder + CurrentRelPath;
|
||||
ArrayOfDeletions = GetDeletedFiles(RemoteFiles, LocalPaths, LocalSubfolders);
|
||||
Result = MakeSynchronization(Token, ArrayOfDeletions, LocalPaths);
|
||||
|
||||
CurrentRelPath = StrReplace(CurrentRelPath, "\", "/");
|
||||
|
||||
If LocalFile.IsDirectory() Then
|
||||
LocalFolders.Insert(CurrentRelPath, CurrentAbsPath);
|
||||
Else
|
||||
LocalPaths.Insert(CurrentRelPath, CurrentAbsPath);
|
||||
EndIf;
|
||||
|
||||
EndDo;
|
||||
|
||||
For Each RemoteFile In RemoteFiles["files"] Do
|
||||
|
||||
PathOfRemote = RemoteFile["path"];
|
||||
|
||||
If RemoteFile["is_directory"] Then
|
||||
ExistingRemote = LocalFolders[PathOfRemote];
|
||||
Else
|
||||
ExistingRemote = LocalPaths[PathOfRemote];
|
||||
EndIf;
|
||||
|
||||
If ExistingRemote = Undefined Then
|
||||
ArrayOfDeletions.Add(PathOfRemote);
|
||||
EndIf;
|
||||
|
||||
EndDo;
|
||||
|
||||
If Not ArrayOfDeletions.Count() = 0 Then
|
||||
Response = OPI_Neocities.DeleteSelectedFiles(Token, ArrayOfDeletions);
|
||||
|
||||
If Not Response["result"] = "success" Then
|
||||
Return Response;
|
||||
Else
|
||||
DeletingMessage = StrTemplate("Removed %1 unnecessary files", String(ArrayOfDeletions.Count()));
|
||||
// !OInt Message(DeletingMessage);
|
||||
EndIf;
|
||||
|
||||
EndIf;
|
||||
|
||||
For Each LocalPath In LocalPaths Do
|
||||
|
||||
Response = OPI_Neocities.UploadFile(Token, LocalPath.Key, LocalPath.Value);
|
||||
|
||||
// !OInt Message(LocalPath.Key + Chars.LF + Response["message"] + Chars.LF);
|
||||
|
||||
EndDo;
|
||||
|
||||
Return OPI_Neocities.GetSiteData(Token);
|
||||
//@skip-check constructor-function-return-section
|
||||
Return Result;
|
||||
|
||||
EndFunction
|
||||
|
||||
@ -363,4 +314,100 @@ Function CreateRequestHeaders(Val Token)
|
||||
|
||||
EndFunction
|
||||
|
||||
Function GetDeletedFiles(RemoteFiles, LocalPaths, LocalSubfolders)
|
||||
|
||||
ArrayOfDeletions = New Array;
|
||||
|
||||
For Each RemoteFile In RemoteFiles["files"] Do
|
||||
|
||||
PathOfRemote = RemoteFile["path"];
|
||||
|
||||
If RemoteFile["is_directory"] Then
|
||||
ExistingRemote = LocalSubfolders[PathOfRemote];
|
||||
Else
|
||||
ExistingRemote = LocalPaths[PathOfRemote];
|
||||
EndIf;
|
||||
|
||||
If ExistingRemote = Undefined Then
|
||||
ArrayOfDeletions.Add(PathOfRemote);
|
||||
EndIf;
|
||||
|
||||
EndDo;
|
||||
|
||||
Return ArrayOfDeletions;
|
||||
|
||||
EndFunction
|
||||
|
||||
//@skip-check module-unused-local-variable
|
||||
Function MakeSynchronization(Token, ArrayOfDeletions, LocalPaths)
|
||||
|
||||
ErrorsArray = New Array;
|
||||
|
||||
If Not ArrayOfDeletions.Count() = 0 Then
|
||||
|
||||
Response = OPI_Neocities.DeleteSelectedFiles(Token, ArrayOfDeletions);
|
||||
|
||||
If Not Response["result"] = "success" Then
|
||||
ErrorsArray.Add(Response);
|
||||
Else
|
||||
|
||||
DeletingMessage = StrTemplate("Removed %1 unnecessary files", String(ArrayOfDeletions.Count()));
|
||||
// !OInt Message(DeletingMessage);
|
||||
|
||||
EndIf;
|
||||
|
||||
EndIf;
|
||||
|
||||
Total = OPI_Tools.NumberToString(LocalPaths.Count());
|
||||
Counter = 0;
|
||||
|
||||
For Each LocalPath In LocalPaths Do
|
||||
|
||||
Response = OPI_Neocities.UploadFile(Token, LocalPath.Key, LocalPath.Value);
|
||||
|
||||
If Not Response["result"] = "success" Then
|
||||
|
||||
ErrorsArray.Add(Response);
|
||||
|
||||
Else
|
||||
|
||||
Progress = "[" + OPI_Tools.NumberToString(Counter) + "/" + Total + "] ";
|
||||
// !OInt Message(Progress + LocalPath.Key + Chars.LF + Response["message"] + Chars.LF);
|
||||
|
||||
EndIf;
|
||||
|
||||
|
||||
Counter = Counter + 1;
|
||||
|
||||
EndDo;
|
||||
|
||||
Return New Structure("errors,items", ErrorsArray.Count(), ErrorsArray);
|
||||
|
||||
EndFunction
|
||||
|
||||
Procedure GetLocalPathsSets(LocalFolder, RemoteFolder, LocalPaths, LocalSubfolders)
|
||||
|
||||
LocalFolder = StrReplace(LocalFolder, "\", "/");
|
||||
LocalFolder = ?(StrEndsWith(LocalFolder, "/"), LocalFolder, LocalFolder + "/");
|
||||
|
||||
LocalFiles = FindFiles(LocalFolder, "*", True);
|
||||
|
||||
For Each LocalFile In LocalFiles Do
|
||||
|
||||
CurrentAbsPath = LocalFile.FullName;
|
||||
CurrentRelPath = Right(CurrentAbsPath, StrLen(CurrentAbsPath) - StrLen(LocalFolder));
|
||||
CurrentRelPath = RemoteFolder + CurrentRelPath;
|
||||
|
||||
CurrentRelPath = StrReplace(CurrentRelPath, "\", "/");
|
||||
|
||||
If LocalFile.IsDirectory() Then
|
||||
LocalSubfolders.Insert(CurrentRelPath, CurrentAbsPath);
|
||||
Else
|
||||
LocalPaths.Insert(CurrentRelPath, CurrentAbsPath);
|
||||
EndIf;
|
||||
|
||||
EndDo;
|
||||
|
||||
EndProcedure
|
||||
|
||||
#EndRegion
|
||||
|
@ -3048,6 +3048,7 @@ Procedure NC_FilesManagment() Export
|
||||
Neocities_UploadFiles(TestParameters);
|
||||
Neocities_GetFilesList(TestParameters);
|
||||
Neocities_DeleteSelectedFiles(TestParameters);
|
||||
Neocities_SynchronizeFolders(TestParameters);
|
||||
|
||||
EndProcedure
|
||||
|
||||
@ -4060,6 +4061,13 @@ Procedure Check_NCFolderFiles(Val Result, Val Count)
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure Check_NCSync(Val Result)
|
||||
|
||||
OPI_TestDataRetrieval.ExpectsThat(Result["errors"]).Равно(0);
|
||||
OPI_TestDataRetrieval.ExpectsThat(Result["items"].Count()).Равно(0);
|
||||
|
||||
EndProcedure
|
||||
|
||||
#EndRegion
|
||||
|
||||
#Region AtomicTests
|
||||
@ -13225,6 +13233,23 @@ Procedure Neocities_GetToken(FunctionParameters)
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure Neocities_SynchronizeFolders(FunctionParameters)
|
||||
|
||||
Token = FunctionParameters["NC_Token"];
|
||||
|
||||
LocalFolder = "C:\test_site";
|
||||
RemoteFolder = "test";
|
||||
|
||||
Result = OPI_Neocities.SynchronizeFolders(Token, LocalFolder, RemoteFolder);
|
||||
|
||||
// END
|
||||
|
||||
OPI_TestDataRetrieval.WriteLog(Result, "SynchronizeFolders", "Neocities");
|
||||
|
||||
Check_NCSync(Result);
|
||||
|
||||
EndProcedure
|
||||
|
||||
#EndRegion
|
||||
|
||||
#EndRegion
|
||||
|
@ -267,83 +267,34 @@
|
||||
// УдаленныйКаталог - Строка - Удаленный каталог приемника. Корень, если не заполнено - remote
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Neocities
|
||||
// Структура Из КлючИЗначение - информация об ошибках синхронизации
|
||||
Функция СинхронизироватьКаталоги(Знач Токен, Знач ЛокальныйКаталог, Знач УдаленныйКаталог = "") Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ЛокальныйКаталог);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(УдаленныйКаталог);
|
||||
|
||||
Сообщить("Начало синхронизации...");
|
||||
|
||||
Если ЗначениеЗаполнено(УдаленныйКаталог) Тогда
|
||||
УдаленныйКаталог = ?(СтрЗаканчиваетсяНа(УдаленныйКаталог, "/"), УдаленныйКаталог, УдаленныйКаталог + "/");
|
||||
КонецЕсли;
|
||||
|
||||
ЛокальныйКаталог = СтрЗаменить(ЛокальныйКаталог, "\", "/");
|
||||
ЛокальныйКаталог = ?(СтрЗаканчиваетсяНа(ЛокальныйКаталог, "/"), ЛокальныйКаталог, ЛокальныйКаталог + "/");
|
||||
|
||||
УдаленныеФайлы = ПолучитьСписокФайлов(Токен, УдаленныйКаталог);
|
||||
ЛокальныеФайлы = НайтиФайлы(ЛокальныйКаталог, "*", Истина);
|
||||
|
||||
Если Не УдаленныеФайлы["result"] = "success" Тогда
|
||||
Возврат УдаленныеФайлы;
|
||||
КонецЕсли;
|
||||
|
||||
ЛокальныеПути = Новый Соответствие;
|
||||
ЛокальныеКаталоги = Новый Соответствие;
|
||||
МассивУдаляемых = Новый Массив;
|
||||
ЛокальныеПути = Новый Соответствие;
|
||||
ЛокальныеПодкаталоги = Новый Соответствие;
|
||||
|
||||
Для Каждого ЛокальныйФайл Из ЛокальныеФайлы Цикл
|
||||
ПолучитьНаборыЛокальныхПутей(ЛокальныйКаталог, УдаленныйКаталог, ЛокальныеПути, ЛокальныеПодкаталоги);
|
||||
|
||||
ТекущийАбсПуть = ЛокальныйФайл.ПолноеИмя;
|
||||
ТекущийОтнПуть = Прав(ТекущийАбсПуть, СтрДлина(ТекущийАбсПуть) - СтрДлина(ЛокальныйКаталог));
|
||||
ТекущийОтнПуть = УдаленныйКаталог + ТекущийОтнПуть;
|
||||
МассивУдаляемых = ПолучитьУдаляемыеФайлы(УдаленныеФайлы, ЛокальныеПути, ЛокальныеПодкаталоги);
|
||||
Результат = ВыполнитьСинхронизацию(Токен, МассивУдаляемых, ЛокальныеПути);
|
||||
|
||||
ТекущийОтнПуть = СтрЗаменить(ТекущийОтнПуть, "\", "/");
|
||||
|
||||
Если ЛокальныйФайл.ЭтоКаталог() Тогда
|
||||
ЛокальныеКаталоги.Вставить(ТекущийОтнПуть, ТекущийАбсПуть);
|
||||
Иначе
|
||||
ЛокальныеПути.Вставить(ТекущийОтнПуть, ТекущийАбсПуть);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого УдаленныйФайл Из УдаленныеФайлы["files"] Цикл
|
||||
|
||||
ПутьУдаленного = УдаленныйФайл["path"];
|
||||
|
||||
Если УдаленныйФайл["is_directory"] Тогда
|
||||
СуществующийУдаленный = ЛокальныеКаталоги[ПутьУдаленного];
|
||||
Иначе
|
||||
СуществующийУдаленный = ЛокальныеПути[ПутьУдаленного];
|
||||
КонецЕсли;
|
||||
|
||||
Если СуществующийУдаленный = Неопределено Тогда
|
||||
МассивУдаляемых.Добавить(ПутьУдаленного);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если Не МассивУдаляемых.Количество() = 0 Тогда
|
||||
Ответ = OPI_Neocities.УдалитьВыбранныеФайлы(Токен, МассивУдаляемых);
|
||||
|
||||
Если Не Ответ["result"] = "success" Тогда
|
||||
Возврат Ответ;
|
||||
Иначе
|
||||
СообщениеУдаления = СтрШаблон("Удалено %1 лишних файлов", Строка(МассивУдаляемых.Количество()));
|
||||
Сообщить(СообщениеУдаления);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого ЛокальныйПуть Из ЛокальныеПути Цикл
|
||||
|
||||
Ответ = OPI_Neocities.ЗагрузитьФайл(Токен, ЛокальныйПуть.Ключ, ЛокальныйПуть.Значение);
|
||||
|
||||
Сообщить(ЛокальныйПуть.Ключ + Символы.ПС + Ответ["message"] + Символы.ПС);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат OPI_Neocities.ПолучитьДанныеОСайте(Токен);
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
@ -363,4 +314,100 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьУдаляемыеФайлы(УдаленныеФайлы, ЛокальныеПути, ЛокальныеПодкаталоги)
|
||||
|
||||
МассивУдаляемых = Новый Массив;
|
||||
|
||||
Для Каждого УдаленныйФайл Из УдаленныеФайлы["files"] Цикл
|
||||
|
||||
ПутьУдаленного = УдаленныйФайл["path"];
|
||||
|
||||
Если УдаленныйФайл["is_directory"] Тогда
|
||||
СуществующийУдаленный = ЛокальныеПодкаталоги[ПутьУдаленного];
|
||||
Иначе
|
||||
СуществующийУдаленный = ЛокальныеПути[ПутьУдаленного];
|
||||
КонецЕсли;
|
||||
|
||||
Если СуществующийУдаленный = Неопределено Тогда
|
||||
МассивУдаляемых.Добавить(ПутьУдаленного);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат МассивУдаляемых;
|
||||
|
||||
КонецФункции
|
||||
|
||||
//@skip-check module-unused-local-variable
|
||||
Функция ВыполнитьСинхронизацию(Токен, МассивУдаляемых, ЛокальныеПути)
|
||||
|
||||
МассивОшибок = Новый Массив;
|
||||
|
||||
Если Не МассивУдаляемых.Количество() = 0 Тогда
|
||||
|
||||
Ответ = OPI_Neocities.УдалитьВыбранныеФайлы(Токен, МассивУдаляемых);
|
||||
|
||||
Если Не Ответ["result"] = "success" Тогда
|
||||
МассивОшибок.Добавить(Ответ);
|
||||
Иначе
|
||||
|
||||
СообщениеУдаления = СтрШаблон("Удалено %1 лишних файлов", Строка(МассивУдаляемых.Количество()));
|
||||
Сообщить(СообщениеУдаления);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Всего = OPI_Инструменты.ЧислоВСтроку(ЛокальныеПути.Количество());
|
||||
Счетчик = 0;
|
||||
|
||||
Для Каждого ЛокальныйПуть Из ЛокальныеПути Цикл
|
||||
|
||||
Ответ = OPI_Neocities.ЗагрузитьФайл(Токен, ЛокальныйПуть.Ключ, ЛокальныйПуть.Значение);
|
||||
|
||||
Если Не Ответ["result"] = "success" Тогда
|
||||
|
||||
МассивОшибок.Добавить(Ответ);
|
||||
|
||||
Иначе
|
||||
|
||||
Прогресс = "[" + OPI_Инструменты.ЧислоВСтроку(Счетчик) + "/" + Всего + "] ";
|
||||
Сообщить(Прогресс + ЛокальныйПуть.Ключ + Символы.ПС + Ответ["message"] + Символы.ПС);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Счетчик = Счетчик + 1;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Новый Структура("errors,items", МассивОшибок.Количество(), МассивОшибок);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ПолучитьНаборыЛокальныхПутей(ЛокальныйКаталог, УдаленныйКаталог, ЛокальныеПути, ЛокальныеПодкаталоги)
|
||||
|
||||
ЛокальныйКаталог = СтрЗаменить(ЛокальныйКаталог, "\", "/");
|
||||
ЛокальныйКаталог = ?(СтрЗаканчиваетсяНа(ЛокальныйКаталог, "/"), ЛокальныйКаталог, ЛокальныйКаталог + "/");
|
||||
|
||||
ЛокальныеФайлы = НайтиФайлы(ЛокальныйКаталог, "*", Истина);
|
||||
|
||||
Для Каждого ЛокальныйФайл Из ЛокальныеФайлы Цикл
|
||||
|
||||
ТекущийАбсПуть = ЛокальныйФайл.ПолноеИмя;
|
||||
ТекущийОтнПуть = Прав(ТекущийАбсПуть, СтрДлина(ТекущийАбсПуть) - СтрДлина(ЛокальныйКаталог));
|
||||
ТекущийОтнПуть = УдаленныйКаталог + ТекущийОтнПуть;
|
||||
|
||||
ТекущийОтнПуть = СтрЗаменить(ТекущийОтнПуть, "\", "/");
|
||||
|
||||
Если ЛокальныйФайл.ЭтоКаталог() Тогда
|
||||
ЛокальныеПодкаталоги.Вставить(ТекущийОтнПуть, ТекущийАбсПуть);
|
||||
Иначе
|
||||
ЛокальныеПути.Вставить(ТекущийОтнПуть, ТекущийАбсПуть);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -3048,6 +3048,7 @@
|
||||
Neocities_ЗагрузитьФайлы(ПараметрыТеста);
|
||||
Neocities_ПолучитьСписокФайлов(ПараметрыТеста);
|
||||
Neocities_УдалитьВыбранныеФайлы(ПараметрыТеста);
|
||||
Neocities_СинхронизироватьКаталоги(ПараметрыТеста);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@ -4060,6 +4061,13 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Проверка_НССинхронизация(Знач Результат)
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["errors"]).Равно(0);
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["items"].Количество()).Равно(0);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область АтомарныеТесты
|
||||
@ -13225,6 +13233,23 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Neocities_СинхронизироватьКаталоги(ПараметрыФункции)
|
||||
|
||||
Токен = ПараметрыФункции["NC_Token"];
|
||||
|
||||
ЛокальныйКаталог = "C:\test_site";
|
||||
УдаленныйКаталог = "test";
|
||||
|
||||
Результат = OPI_Neocities.СинхронизироватьКаталоги(Токен, ЛокальныйКаталог, УдаленныйКаталог);
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СинхронизироватьКаталоги", "Neocities");
|
||||
|
||||
Проверка_НССинхронизация(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -267,83 +267,34 @@
|
||||
// УдаленныйКаталог - Строка - Удаленный каталог приемника. Корень, если не заполнено - remote
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Neocities
|
||||
// Структура Из КлючИЗначение - информация об ошибках синхронизации
|
||||
Функция СинхронизироватьКаталоги(Знач Токен, Знач ЛокальныйКаталог, Знач УдаленныйКаталог = "") Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ЛокальныйКаталог);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(УдаленныйКаталог);
|
||||
|
||||
// !OInt Сообщить("Начало синхронизации...");
|
||||
|
||||
Если ЗначениеЗаполнено(УдаленныйКаталог) Тогда
|
||||
УдаленныйКаталог = ?(СтрЗаканчиваетсяНа(УдаленныйКаталог, "/"), УдаленныйКаталог, УдаленныйКаталог + "/");
|
||||
КонецЕсли;
|
||||
|
||||
ЛокальныйКаталог = СтрЗаменить(ЛокальныйКаталог, "\", "/");
|
||||
ЛокальныйКаталог = ?(СтрЗаканчиваетсяНа(ЛокальныйКаталог, "/"), ЛокальныйКаталог, ЛокальныйКаталог + "/");
|
||||
|
||||
УдаленныеФайлы = ПолучитьСписокФайлов(Токен, УдаленныйКаталог);
|
||||
ЛокальныеФайлы = НайтиФайлы(ЛокальныйКаталог, "*", Истина);
|
||||
|
||||
Если Не УдаленныеФайлы["result"] = "success" Тогда
|
||||
Возврат УдаленныеФайлы;
|
||||
КонецЕсли;
|
||||
|
||||
ЛокальныеПути = Новый Соответствие;
|
||||
ЛокальныеКаталоги = Новый Соответствие;
|
||||
МассивУдаляемых = Новый Массив;
|
||||
ЛокальныеПути = Новый Соответствие;
|
||||
ЛокальныеПодкаталоги = Новый Соответствие;
|
||||
|
||||
Для Каждого ЛокальныйФайл Из ЛокальныеФайлы Цикл
|
||||
ПолучитьНаборыЛокальныхПутей(ЛокальныйКаталог, УдаленныйКаталог, ЛокальныеПути, ЛокальныеПодкаталоги);
|
||||
|
||||
ТекущийАбсПуть = ЛокальныйФайл.ПолноеИмя;
|
||||
ТекущийОтнПуть = Прав(ТекущийАбсПуть, СтрДлина(ТекущийАбсПуть) - СтрДлина(ЛокальныйКаталог));
|
||||
ТекущийОтнПуть = УдаленныйКаталог + ТекущийОтнПуть;
|
||||
МассивУдаляемых = ПолучитьУдаляемыеФайлы(УдаленныеФайлы, ЛокальныеПути, ЛокальныеПодкаталоги);
|
||||
Результат = ВыполнитьСинхронизацию(Токен, МассивУдаляемых, ЛокальныеПути);
|
||||
|
||||
ТекущийОтнПуть = СтрЗаменить(ТекущийОтнПуть, "\", "/");
|
||||
|
||||
Если ЛокальныйФайл.ЭтоКаталог() Тогда
|
||||
ЛокальныеКаталоги.Вставить(ТекущийОтнПуть, ТекущийАбсПуть);
|
||||
Иначе
|
||||
ЛокальныеПути.Вставить(ТекущийОтнПуть, ТекущийАбсПуть);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого УдаленныйФайл Из УдаленныеФайлы["files"] Цикл
|
||||
|
||||
ПутьУдаленного = УдаленныйФайл["path"];
|
||||
|
||||
Если УдаленныйФайл["is_directory"] Тогда
|
||||
СуществующийУдаленный = ЛокальныеКаталоги[ПутьУдаленного];
|
||||
Иначе
|
||||
СуществующийУдаленный = ЛокальныеПути[ПутьУдаленного];
|
||||
КонецЕсли;
|
||||
|
||||
Если СуществующийУдаленный = Неопределено Тогда
|
||||
МассивУдаляемых.Добавить(ПутьУдаленного);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если Не МассивУдаляемых.Количество() = 0 Тогда
|
||||
Ответ = OPI_Neocities.УдалитьВыбранныеФайлы(Токен, МассивУдаляемых);
|
||||
|
||||
Если Не Ответ["result"] = "success" Тогда
|
||||
Возврат Ответ;
|
||||
Иначе
|
||||
СообщениеУдаления = СтрШаблон("Удалено %1 лишних файлов", Строка(МассивУдаляемых.Количество()));
|
||||
// !OInt Сообщить(СообщениеУдаления);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого ЛокальныйПуть Из ЛокальныеПути Цикл
|
||||
|
||||
Ответ = OPI_Neocities.ЗагрузитьФайл(Токен, ЛокальныйПуть.Ключ, ЛокальныйПуть.Значение);
|
||||
|
||||
// !OInt Сообщить(ЛокальныйПуть.Ключ + Символы.ПС + Ответ["message"] + Символы.ПС);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат OPI_Neocities.ПолучитьДанныеОСайте(Токен);
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
@ -363,4 +314,100 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьУдаляемыеФайлы(УдаленныеФайлы, ЛокальныеПути, ЛокальныеПодкаталоги)
|
||||
|
||||
МассивУдаляемых = Новый Массив;
|
||||
|
||||
Для Каждого УдаленныйФайл Из УдаленныеФайлы["files"] Цикл
|
||||
|
||||
ПутьУдаленного = УдаленныйФайл["path"];
|
||||
|
||||
Если УдаленныйФайл["is_directory"] Тогда
|
||||
СуществующийУдаленный = ЛокальныеПодкаталоги[ПутьУдаленного];
|
||||
Иначе
|
||||
СуществующийУдаленный = ЛокальныеПути[ПутьУдаленного];
|
||||
КонецЕсли;
|
||||
|
||||
Если СуществующийУдаленный = Неопределено Тогда
|
||||
МассивУдаляемых.Добавить(ПутьУдаленного);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат МассивУдаляемых;
|
||||
|
||||
КонецФункции
|
||||
|
||||
//@skip-check module-unused-local-variable
|
||||
Функция ВыполнитьСинхронизацию(Токен, МассивУдаляемых, ЛокальныеПути)
|
||||
|
||||
МассивОшибок = Новый Массив;
|
||||
|
||||
Если Не МассивУдаляемых.Количество() = 0 Тогда
|
||||
|
||||
Ответ = OPI_Neocities.УдалитьВыбранныеФайлы(Токен, МассивУдаляемых);
|
||||
|
||||
Если Не Ответ["result"] = "success" Тогда
|
||||
МассивОшибок.Добавить(Ответ);
|
||||
Иначе
|
||||
|
||||
СообщениеУдаления = СтрШаблон("Удалено %1 лишних файлов", Строка(МассивУдаляемых.Количество()));
|
||||
// !OInt Сообщить(СообщениеУдаления);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Всего = OPI_Инструменты.ЧислоВСтроку(ЛокальныеПути.Количество());
|
||||
Счетчик = 0;
|
||||
|
||||
Для Каждого ЛокальныйПуть Из ЛокальныеПути Цикл
|
||||
|
||||
Ответ = OPI_Neocities.ЗагрузитьФайл(Токен, ЛокальныйПуть.Ключ, ЛокальныйПуть.Значение);
|
||||
|
||||
Если Не Ответ["result"] = "success" Тогда
|
||||
|
||||
МассивОшибок.Добавить(Ответ);
|
||||
|
||||
Иначе
|
||||
|
||||
Прогресс = "[" + OPI_Инструменты.ЧислоВСтроку(Счетчик) + "/" + Всего + "] ";
|
||||
// !OInt Сообщить(Прогресс + ЛокальныйПуть.Ключ + Символы.ПС + Ответ["message"] + Символы.ПС);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Счетчик = Счетчик + 1;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Новый Структура("errors,items", МассивОшибок.Количество(), МассивОшибок);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ПолучитьНаборыЛокальныхПутей(ЛокальныйКаталог, УдаленныйКаталог, ЛокальныеПути, ЛокальныеПодкаталоги)
|
||||
|
||||
ЛокальныйКаталог = СтрЗаменить(ЛокальныйКаталог, "\", "/");
|
||||
ЛокальныйКаталог = ?(СтрЗаканчиваетсяНа(ЛокальныйКаталог, "/"), ЛокальныйКаталог, ЛокальныйКаталог + "/");
|
||||
|
||||
ЛокальныеФайлы = НайтиФайлы(ЛокальныйКаталог, "*", Истина);
|
||||
|
||||
Для Каждого ЛокальныйФайл Из ЛокальныеФайлы Цикл
|
||||
|
||||
ТекущийАбсПуть = ЛокальныйФайл.ПолноеИмя;
|
||||
ТекущийОтнПуть = Прав(ТекущийАбсПуть, СтрДлина(ТекущийАбсПуть) - СтрДлина(ЛокальныйКаталог));
|
||||
ТекущийОтнПуть = УдаленныйКаталог + ТекущийОтнПуть;
|
||||
|
||||
ТекущийОтнПуть = СтрЗаменить(ТекущийОтнПуть, "\", "/");
|
||||
|
||||
Если ЛокальныйФайл.ЭтоКаталог() Тогда
|
||||
ЛокальныеПодкаталоги.Вставить(ТекущийОтнПуть, ТекущийАбсПуть);
|
||||
Иначе
|
||||
ЛокальныеПути.Вставить(ТекущийОтнПуть, ТекущийАбсПуть);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -3048,6 +3048,7 @@
|
||||
Neocities_ЗагрузитьФайлы(ПараметрыТеста);
|
||||
Neocities_ПолучитьСписокФайлов(ПараметрыТеста);
|
||||
Neocities_УдалитьВыбранныеФайлы(ПараметрыТеста);
|
||||
Neocities_СинхронизироватьКаталоги(ПараметрыТеста);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@ -4060,6 +4061,13 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Проверка_НССинхронизация(Знач Результат)
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["errors"]).Равно(0);
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["items"].Количество()).Равно(0);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область АтомарныеТесты
|
||||
@ -13225,6 +13233,23 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Neocities_СинхронизироватьКаталоги(ПараметрыФункции)
|
||||
|
||||
Токен = ПараметрыФункции["NC_Token"];
|
||||
|
||||
ЛокальныйКаталог = "C:\test_site";
|
||||
УдаленныйКаталог = "test";
|
||||
|
||||
Результат = OPI_Neocities.СинхронизироватьКаталоги(Токен, ЛокальныйКаталог, УдаленныйКаталог);
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СинхронизироватьКаталоги", "Neocities");
|
||||
|
||||
Проверка_НССинхронизация(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
Loading…
x
Reference in New Issue
Block a user