mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-06-06 23:46:28 +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
|
// RemoteFolder - String - Remote receiver catalog. Root by default - remote
|
||||||
//
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
// Map Of KeyAndValue - Serialized JSON response from Neocities
|
// Structure of KeyAndValue - synchronization error information
|
||||||
Function SynchronizeFolders(Val Token, Val LocalFolder, Val RemoteFolder = "") Export
|
Function SynchronizeFolders(Val Token, Val LocalFolder, Val RemoteFolder = "") Export
|
||||||
|
|
||||||
OPI_TypeConversion.GetLine(LocalFolder);
|
OPI_TypeConversion.GetLine(LocalFolder);
|
||||||
OPI_TypeConversion.GetLine(RemoteFolder);
|
OPI_TypeConversion.GetLine(RemoteFolder);
|
||||||
|
|
||||||
|
Message("Start synchronization...");
|
||||||
|
|
||||||
If ValueIsFilled(RemoteFolder) Then
|
If ValueIsFilled(RemoteFolder) Then
|
||||||
RemoteFolder = ?(StrEndsWith(RemoteFolder, "/"), RemoteFolder, RemoteFolder + "/");
|
RemoteFolder = ?(StrEndsWith(RemoteFolder, "/"), RemoteFolder, RemoteFolder + "/");
|
||||||
EndIf;
|
EndIf;
|
||||||
|
|
||||||
LocalFolder = StrReplace(LocalFolder, "\", "/");
|
|
||||||
LocalFolder = ?(StrEndsWith(LocalFolder, "/"), LocalFolder, LocalFolder + "/");
|
|
||||||
|
|
||||||
RemoteFiles = GetFilesList(Token, RemoteFolder);
|
RemoteFiles = GetFilesList(Token, RemoteFolder);
|
||||||
LocalFiles = FindFiles(LocalFolder, "*", True);
|
|
||||||
|
|
||||||
If Not RemoteFiles["result"] = "success" Then
|
If Not RemoteFiles["result"] = "success" Then
|
||||||
Return RemoteFiles;
|
Return RemoteFiles;
|
||||||
EndIf;
|
EndIf;
|
||||||
|
|
||||||
LocalPaths = New Map;
|
LocalPaths = New Map;
|
||||||
LocalFolders = New Map;
|
LocalSubfolders = New Map;
|
||||||
ArrayOfDeletions = New Array;
|
|
||||||
|
|
||||||
For Each LocalFile In LocalFiles Do
|
GetLocalPathsSets(LocalFolder, RemoteFolder, LocalPaths, LocalSubfolders);
|
||||||
|
|
||||||
CurrentAbsPath = LocalFile.FullName;
|
ArrayOfDeletions = GetDeletedFiles(RemoteFiles, LocalPaths, LocalSubfolders);
|
||||||
CurrentRelPath = Right(CurrentAbsPath, StrLen(CurrentAbsPath) - StrLen(LocalFolder));
|
Result = MakeSynchronization(Token, ArrayOfDeletions, LocalPaths);
|
||||||
CurrentRelPath = RemoteFolder + CurrentRelPath;
|
|
||||||
|
|
||||||
CurrentRelPath = StrReplace(CurrentRelPath, "\", "/");
|
//@skip-check constructor-function-return-section
|
||||||
|
Return Result;
|
||||||
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);
|
|
||||||
|
|
||||||
EndFunction
|
EndFunction
|
||||||
|
|
||||||
@ -363,4 +314,100 @@ Function CreateRequestHeaders(Val Token)
|
|||||||
|
|
||||||
EndFunction
|
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
|
#EndRegion
|
||||||
|
@ -3048,6 +3048,7 @@ Procedure NC_FilesManagment() Export
|
|||||||
Neocities_UploadFiles(TestParameters);
|
Neocities_UploadFiles(TestParameters);
|
||||||
Neocities_GetFilesList(TestParameters);
|
Neocities_GetFilesList(TestParameters);
|
||||||
Neocities_DeleteSelectedFiles(TestParameters);
|
Neocities_DeleteSelectedFiles(TestParameters);
|
||||||
|
Neocities_SynchronizeFolders(TestParameters);
|
||||||
|
|
||||||
EndProcedure
|
EndProcedure
|
||||||
|
|
||||||
@ -4060,6 +4061,13 @@ Procedure Check_NCFolderFiles(Val Result, Val Count)
|
|||||||
|
|
||||||
EndProcedure
|
EndProcedure
|
||||||
|
|
||||||
|
Procedure Check_NCSync(Val Result)
|
||||||
|
|
||||||
|
OPI_TestDataRetrieval.ExpectsThat(Result["errors"]).Равно(0);
|
||||||
|
OPI_TestDataRetrieval.ExpectsThat(Result["items"].Count()).Равно(0);
|
||||||
|
|
||||||
|
EndProcedure
|
||||||
|
|
||||||
#EndRegion
|
#EndRegion
|
||||||
|
|
||||||
#Region AtomicTests
|
#Region AtomicTests
|
||||||
@ -13225,6 +13233,23 @@ Procedure Neocities_GetToken(FunctionParameters)
|
|||||||
|
|
||||||
EndProcedure
|
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
|
||||||
|
|
||||||
#EndRegion
|
#EndRegion
|
||||||
|
@ -267,83 +267,34 @@ EndFunction
|
|||||||
// RemoteFolder - String - Remote receiver catalog. Root by default - remote
|
// RemoteFolder - String - Remote receiver catalog. Root by default - remote
|
||||||
//
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
// Map Of KeyAndValue - Serialized JSON response from Neocities
|
// Structure of KeyAndValue - synchronization error information
|
||||||
Function SynchronizeFolders(Val Token, Val LocalFolder, Val RemoteFolder = "") Export
|
Function SynchronizeFolders(Val Token, Val LocalFolder, Val RemoteFolder = "") Export
|
||||||
|
|
||||||
OPI_TypeConversion.GetLine(LocalFolder);
|
OPI_TypeConversion.GetLine(LocalFolder);
|
||||||
OPI_TypeConversion.GetLine(RemoteFolder);
|
OPI_TypeConversion.GetLine(RemoteFolder);
|
||||||
|
|
||||||
|
// !OInt Message("Start synchronization...");
|
||||||
|
|
||||||
If ValueIsFilled(RemoteFolder) Then
|
If ValueIsFilled(RemoteFolder) Then
|
||||||
RemoteFolder = ?(StrEndsWith(RemoteFolder, "/"), RemoteFolder, RemoteFolder + "/");
|
RemoteFolder = ?(StrEndsWith(RemoteFolder, "/"), RemoteFolder, RemoteFolder + "/");
|
||||||
EndIf;
|
EndIf;
|
||||||
|
|
||||||
LocalFolder = StrReplace(LocalFolder, "\", "/");
|
|
||||||
LocalFolder = ?(StrEndsWith(LocalFolder, "/"), LocalFolder, LocalFolder + "/");
|
|
||||||
|
|
||||||
RemoteFiles = GetFilesList(Token, RemoteFolder);
|
RemoteFiles = GetFilesList(Token, RemoteFolder);
|
||||||
LocalFiles = FindFiles(LocalFolder, "*", True);
|
|
||||||
|
|
||||||
If Not RemoteFiles["result"] = "success" Then
|
If Not RemoteFiles["result"] = "success" Then
|
||||||
Return RemoteFiles;
|
Return RemoteFiles;
|
||||||
EndIf;
|
EndIf;
|
||||||
|
|
||||||
LocalPaths = New Map;
|
LocalPaths = New Map;
|
||||||
LocalFolders = New Map;
|
LocalSubfolders = New Map;
|
||||||
ArrayOfDeletions = New Array;
|
|
||||||
|
|
||||||
For Each LocalFile In LocalFiles Do
|
GetLocalPathsSets(LocalFolder, RemoteFolder, LocalPaths, LocalSubfolders);
|
||||||
|
|
||||||
CurrentAbsPath = LocalFile.FullName;
|
ArrayOfDeletions = GetDeletedFiles(RemoteFiles, LocalPaths, LocalSubfolders);
|
||||||
CurrentRelPath = Right(CurrentAbsPath, StrLen(CurrentAbsPath) - StrLen(LocalFolder));
|
Result = MakeSynchronization(Token, ArrayOfDeletions, LocalPaths);
|
||||||
CurrentRelPath = RemoteFolder + CurrentRelPath;
|
|
||||||
|
|
||||||
CurrentRelPath = StrReplace(CurrentRelPath, "\", "/");
|
//@skip-check constructor-function-return-section
|
||||||
|
Return Result;
|
||||||
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);
|
|
||||||
|
|
||||||
EndFunction
|
EndFunction
|
||||||
|
|
||||||
@ -363,4 +314,100 @@ Function CreateRequestHeaders(Val Token)
|
|||||||
|
|
||||||
EndFunction
|
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
|
#EndRegion
|
||||||
|
@ -3048,6 +3048,7 @@ Procedure NC_FilesManagment() Export
|
|||||||
Neocities_UploadFiles(TestParameters);
|
Neocities_UploadFiles(TestParameters);
|
||||||
Neocities_GetFilesList(TestParameters);
|
Neocities_GetFilesList(TestParameters);
|
||||||
Neocities_DeleteSelectedFiles(TestParameters);
|
Neocities_DeleteSelectedFiles(TestParameters);
|
||||||
|
Neocities_SynchronizeFolders(TestParameters);
|
||||||
|
|
||||||
EndProcedure
|
EndProcedure
|
||||||
|
|
||||||
@ -4060,6 +4061,13 @@ Procedure Check_NCFolderFiles(Val Result, Val Count)
|
|||||||
|
|
||||||
EndProcedure
|
EndProcedure
|
||||||
|
|
||||||
|
Procedure Check_NCSync(Val Result)
|
||||||
|
|
||||||
|
OPI_TestDataRetrieval.ExpectsThat(Result["errors"]).Равно(0);
|
||||||
|
OPI_TestDataRetrieval.ExpectsThat(Result["items"].Count()).Равно(0);
|
||||||
|
|
||||||
|
EndProcedure
|
||||||
|
|
||||||
#EndRegion
|
#EndRegion
|
||||||
|
|
||||||
#Region AtomicTests
|
#Region AtomicTests
|
||||||
@ -13225,6 +13233,23 @@ Procedure Neocities_GetToken(FunctionParameters)
|
|||||||
|
|
||||||
EndProcedure
|
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
|
||||||
|
|
||||||
#EndRegion
|
#EndRegion
|
||||||
|
@ -267,83 +267,34 @@
|
|||||||
// УдаленныйКаталог - Строка - Удаленный каталог приемника. Корень, если не заполнено - remote
|
// УдаленныйКаталог - Строка - Удаленный каталог приемника. Корень, если не заполнено - remote
|
||||||
//
|
//
|
||||||
// Возвращаемое значение:
|
// Возвращаемое значение:
|
||||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Neocities
|
// Структура Из КлючИЗначение - информация об ошибках синхронизации
|
||||||
Функция СинхронизироватьКаталоги(Знач Токен, Знач ЛокальныйКаталог, Знач УдаленныйКаталог = "") Экспорт
|
Функция СинхронизироватьКаталоги(Знач Токен, Знач ЛокальныйКаталог, Знач УдаленныйКаталог = "") Экспорт
|
||||||
|
|
||||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ЛокальныйКаталог);
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ЛокальныйКаталог);
|
||||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(УдаленныйКаталог);
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(УдаленныйКаталог);
|
||||||
|
|
||||||
|
Сообщить("Начало синхронизации...");
|
||||||
|
|
||||||
Если ЗначениеЗаполнено(УдаленныйКаталог) Тогда
|
Если ЗначениеЗаполнено(УдаленныйКаталог) Тогда
|
||||||
УдаленныйКаталог = ?(СтрЗаканчиваетсяНа(УдаленныйКаталог, "/"), УдаленныйКаталог, УдаленныйКаталог + "/");
|
УдаленныйКаталог = ?(СтрЗаканчиваетсяНа(УдаленныйКаталог, "/"), УдаленныйКаталог, УдаленныйКаталог + "/");
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
ЛокальныйКаталог = СтрЗаменить(ЛокальныйКаталог, "\", "/");
|
|
||||||
ЛокальныйКаталог = ?(СтрЗаканчиваетсяНа(ЛокальныйКаталог, "/"), ЛокальныйКаталог, ЛокальныйКаталог + "/");
|
|
||||||
|
|
||||||
УдаленныеФайлы = ПолучитьСписокФайлов(Токен, УдаленныйКаталог);
|
УдаленныеФайлы = ПолучитьСписокФайлов(Токен, УдаленныйКаталог);
|
||||||
ЛокальныеФайлы = НайтиФайлы(ЛокальныйКаталог, "*", Истина);
|
|
||||||
|
|
||||||
Если Не УдаленныеФайлы["result"] = "success" Тогда
|
Если Не УдаленныеФайлы["result"] = "success" Тогда
|
||||||
Возврат УдаленныеФайлы;
|
Возврат УдаленныеФайлы;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
ЛокальныеПути = Новый Соответствие;
|
ЛокальныеПути = Новый Соответствие;
|
||||||
ЛокальныеКаталоги = Новый Соответствие;
|
ЛокальныеПодкаталоги = Новый Соответствие;
|
||||||
МассивУдаляемых = Новый Массив;
|
|
||||||
|
|
||||||
Для Каждого ЛокальныйФайл Из ЛокальныеФайлы Цикл
|
ПолучитьНаборыЛокальныхПутей(ЛокальныйКаталог, УдаленныйКаталог, ЛокальныеПути, ЛокальныеПодкаталоги);
|
||||||
|
|
||||||
ТекущийАбсПуть = ЛокальныйФайл.ПолноеИмя;
|
МассивУдаляемых = ПолучитьУдаляемыеФайлы(УдаленныеФайлы, ЛокальныеПути, ЛокальныеПодкаталоги);
|
||||||
ТекущийОтнПуть = Прав(ТекущийАбсПуть, СтрДлина(ТекущийАбсПуть) - СтрДлина(ЛокальныйКаталог));
|
Результат = ВыполнитьСинхронизацию(Токен, МассивУдаляемых, ЛокальныеПути);
|
||||||
ТекущийОтнПуть = УдаленныйКаталог + ТекущийОтнПуть;
|
|
||||||
|
|
||||||
ТекущийОтнПуть = СтрЗаменить(ТекущийОтнПуть, "\", "/");
|
//@skip-check constructor-function-return-section
|
||||||
|
Возврат Результат;
|
||||||
Если ЛокальныйФайл.ЭтоКаталог() Тогда
|
|
||||||
ЛокальныеКаталоги.Вставить(ТекущийОтнПуть, ТекущийАбсПуть);
|
|
||||||
Иначе
|
|
||||||
ЛокальныеПути.Вставить(ТекущийОтнПуть, ТекущийАбсПуть);
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
КонецЦикла;
|
|
||||||
|
|
||||||
Для Каждого УдаленныйФайл Из УдаленныеФайлы["files"] Цикл
|
|
||||||
|
|
||||||
ПутьУдаленного = УдаленныйФайл["path"];
|
|
||||||
|
|
||||||
Если УдаленныйФайл["is_directory"] Тогда
|
|
||||||
СуществующийУдаленный = ЛокальныеКаталоги[ПутьУдаленного];
|
|
||||||
Иначе
|
|
||||||
СуществующийУдаленный = ЛокальныеПути[ПутьУдаленного];
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
Если СуществующийУдаленный = Неопределено Тогда
|
|
||||||
МассивУдаляемых.Добавить(ПутьУдаленного);
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
КонецЦикла;
|
|
||||||
|
|
||||||
Если Не МассивУдаляемых.Количество() = 0 Тогда
|
|
||||||
Ответ = OPI_Neocities.УдалитьВыбранныеФайлы(Токен, МассивУдаляемых);
|
|
||||||
|
|
||||||
Если Не Ответ["result"] = "success" Тогда
|
|
||||||
Возврат Ответ;
|
|
||||||
Иначе
|
|
||||||
СообщениеУдаления = СтрШаблон("Удалено %1 лишних файлов", Строка(МассивУдаляемых.Количество()));
|
|
||||||
Сообщить(СообщениеУдаления);
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
Для Каждого ЛокальныйПуть Из ЛокальныеПути Цикл
|
|
||||||
|
|
||||||
Ответ = OPI_Neocities.ЗагрузитьФайл(Токен, ЛокальныйПуть.Ключ, ЛокальныйПуть.Значение);
|
|
||||||
|
|
||||||
Сообщить(ЛокальныйПуть.Ключ + Символы.ПС + Ответ["message"] + Символы.ПС);
|
|
||||||
|
|
||||||
КонецЦикла;
|
|
||||||
|
|
||||||
Возврат OPI_Neocities.ПолучитьДанныеОСайте(Токен);
|
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
@ -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_ПолучитьСписокФайлов(ПараметрыТеста);
|
||||||
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
|
// УдаленныйКаталог - Строка - Удаленный каталог приемника. Корень, если не заполнено - remote
|
||||||
//
|
//
|
||||||
// Возвращаемое значение:
|
// Возвращаемое значение:
|
||||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Neocities
|
// Структура Из КлючИЗначение - информация об ошибках синхронизации
|
||||||
Функция СинхронизироватьКаталоги(Знач Токен, Знач ЛокальныйКаталог, Знач УдаленныйКаталог = "") Экспорт
|
Функция СинхронизироватьКаталоги(Знач Токен, Знач ЛокальныйКаталог, Знач УдаленныйКаталог = "") Экспорт
|
||||||
|
|
||||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ЛокальныйКаталог);
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ЛокальныйКаталог);
|
||||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(УдаленныйКаталог);
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(УдаленныйКаталог);
|
||||||
|
|
||||||
|
// !OInt Сообщить("Начало синхронизации...");
|
||||||
|
|
||||||
Если ЗначениеЗаполнено(УдаленныйКаталог) Тогда
|
Если ЗначениеЗаполнено(УдаленныйКаталог) Тогда
|
||||||
УдаленныйКаталог = ?(СтрЗаканчиваетсяНа(УдаленныйКаталог, "/"), УдаленныйКаталог, УдаленныйКаталог + "/");
|
УдаленныйКаталог = ?(СтрЗаканчиваетсяНа(УдаленныйКаталог, "/"), УдаленныйКаталог, УдаленныйКаталог + "/");
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
ЛокальныйКаталог = СтрЗаменить(ЛокальныйКаталог, "\", "/");
|
|
||||||
ЛокальныйКаталог = ?(СтрЗаканчиваетсяНа(ЛокальныйКаталог, "/"), ЛокальныйКаталог, ЛокальныйКаталог + "/");
|
|
||||||
|
|
||||||
УдаленныеФайлы = ПолучитьСписокФайлов(Токен, УдаленныйКаталог);
|
УдаленныеФайлы = ПолучитьСписокФайлов(Токен, УдаленныйКаталог);
|
||||||
ЛокальныеФайлы = НайтиФайлы(ЛокальныйКаталог, "*", Истина);
|
|
||||||
|
|
||||||
Если Не УдаленныеФайлы["result"] = "success" Тогда
|
Если Не УдаленныеФайлы["result"] = "success" Тогда
|
||||||
Возврат УдаленныеФайлы;
|
Возврат УдаленныеФайлы;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
ЛокальныеПути = Новый Соответствие;
|
ЛокальныеПути = Новый Соответствие;
|
||||||
ЛокальныеКаталоги = Новый Соответствие;
|
ЛокальныеПодкаталоги = Новый Соответствие;
|
||||||
МассивУдаляемых = Новый Массив;
|
|
||||||
|
|
||||||
Для Каждого ЛокальныйФайл Из ЛокальныеФайлы Цикл
|
ПолучитьНаборыЛокальныхПутей(ЛокальныйКаталог, УдаленныйКаталог, ЛокальныеПути, ЛокальныеПодкаталоги);
|
||||||
|
|
||||||
ТекущийАбсПуть = ЛокальныйФайл.ПолноеИмя;
|
МассивУдаляемых = ПолучитьУдаляемыеФайлы(УдаленныеФайлы, ЛокальныеПути, ЛокальныеПодкаталоги);
|
||||||
ТекущийОтнПуть = Прав(ТекущийАбсПуть, СтрДлина(ТекущийАбсПуть) - СтрДлина(ЛокальныйКаталог));
|
Результат = ВыполнитьСинхронизацию(Токен, МассивУдаляемых, ЛокальныеПути);
|
||||||
ТекущийОтнПуть = УдаленныйКаталог + ТекущийОтнПуть;
|
|
||||||
|
|
||||||
ТекущийОтнПуть = СтрЗаменить(ТекущийОтнПуть, "\", "/");
|
//@skip-check constructor-function-return-section
|
||||||
|
Возврат Результат;
|
||||||
Если ЛокальныйФайл.ЭтоКаталог() Тогда
|
|
||||||
ЛокальныеКаталоги.Вставить(ТекущийОтнПуть, ТекущийАбсПуть);
|
|
||||||
Иначе
|
|
||||||
ЛокальныеПути.Вставить(ТекущийОтнПуть, ТекущийАбсПуть);
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
КонецЦикла;
|
|
||||||
|
|
||||||
Для Каждого УдаленныйФайл Из УдаленныеФайлы["files"] Цикл
|
|
||||||
|
|
||||||
ПутьУдаленного = УдаленныйФайл["path"];
|
|
||||||
|
|
||||||
Если УдаленныйФайл["is_directory"] Тогда
|
|
||||||
СуществующийУдаленный = ЛокальныеКаталоги[ПутьУдаленного];
|
|
||||||
Иначе
|
|
||||||
СуществующийУдаленный = ЛокальныеПути[ПутьУдаленного];
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
Если СуществующийУдаленный = Неопределено Тогда
|
|
||||||
МассивУдаляемых.Добавить(ПутьУдаленного);
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
КонецЦикла;
|
|
||||||
|
|
||||||
Если Не МассивУдаляемых.Количество() = 0 Тогда
|
|
||||||
Ответ = OPI_Neocities.УдалитьВыбранныеФайлы(Токен, МассивУдаляемых);
|
|
||||||
|
|
||||||
Если Не Ответ["result"] = "success" Тогда
|
|
||||||
Возврат Ответ;
|
|
||||||
Иначе
|
|
||||||
СообщениеУдаления = СтрШаблон("Удалено %1 лишних файлов", Строка(МассивУдаляемых.Количество()));
|
|
||||||
// !OInt Сообщить(СообщениеУдаления);
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
Для Каждого ЛокальныйПуть Из ЛокальныеПути Цикл
|
|
||||||
|
|
||||||
Ответ = OPI_Neocities.ЗагрузитьФайл(Токен, ЛокальныйПуть.Ключ, ЛокальныйПуть.Значение);
|
|
||||||
|
|
||||||
// !OInt Сообщить(ЛокальныйПуть.Ключ + Символы.ПС + Ответ["message"] + Символы.ПС);
|
|
||||||
|
|
||||||
КонецЦикла;
|
|
||||||
|
|
||||||
Возврат OPI_Neocities.ПолучитьДанныеОСайте(Токен);
|
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
@ -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_ПолучитьСписокФайлов(ПараметрыТеста);
|
||||||
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