//--------------------------------------------------------------------------- void __fastcall TSynchronizeController::SynchronizeInvalid( TObject * /*Sender*/, const UnicodeString Directory, const UnicodeString ErrorStr) { if (FOnSynchronizeInvalid != NULL) { FOnSynchronizeInvalid(this, Directory, ErrorStr); } SynchronizeAbort(false); }
void TSynchronizeController::SynchronizeInvalid( TObject * /*Sender*/, const UnicodeString & Directory, const UnicodeString & ErrorStr) { if (FOnSynchronizeInvalid != nullptr) { FOnSynchronizeInvalid(this, Directory, ErrorStr); } SynchronizeAbort(false); }
//--------------------------------------------------------------------------- void __fastcall TSynchronizeController::SynchronizeChange( TObject * /*Sender*/, const UnicodeString Directory, bool & SubdirsChanged) { try { UnicodeString RemoteDirectory; UnicodeString RootLocalDirectory; RootLocalDirectory = IncludeTrailingBackslash(FSynchronizeParams.LocalDirectory); RemoteDirectory = UnixIncludeTrailingBackslash(FSynchronizeParams.RemoteDirectory); UnicodeString LocalDirectory = IncludeTrailingBackslash(Directory); assert(LocalDirectory.SubString(1, RootLocalDirectory.Length()) == RootLocalDirectory); RemoteDirectory = RemoteDirectory + ToUnixPath(LocalDirectory.SubString(RootLocalDirectory.Length() + 1, LocalDirectory.Length() - RootLocalDirectory.Length())); SynchronizeLog(slChange, FMTLOAD(SYNCHRONIZE_CHANGE, (ExcludeTrailingBackslash(LocalDirectory)))); if (FOnSynchronize != NULL) { // this is completelly wrong as the options structure // can contain non-root specific options in future TSynchronizeOptions * Options = ((LocalDirectory == RootLocalDirectory) ? FOptions : NULL); TSynchronizeChecklist * Checklist = NULL; FOnSynchronize(this, LocalDirectory, RemoteDirectory, FCopyParam, FSynchronizeParams, &Checklist, Options, false); if (Checklist != NULL) { try { if (FLAGSET(FSynchronizeParams.Options, soRecurse)) { SubdirsChanged = false; assert(Checklist != NULL); for (int Index = 0; Index < Checklist->Count; Index++) { const TSynchronizeChecklist::TItem * Item = Checklist->Item[Index]; // note that there may be action saDeleteRemote even if nothing has changed // so this is sub-optimal if (Item->IsDirectory) { if ((Item->Action == TSynchronizeChecklist::saUploadNew) || (Item->Action == TSynchronizeChecklist::saDeleteRemote)) { SubdirsChanged = true; break; } else { assert(false); } } } } else { SubdirsChanged = false; } } __finally { delete Checklist; } } } } catch(Exception & E) { SynchronizeAbort(dynamic_cast<EFatal*>(&E) != NULL); } }
void TSynchronizeController::SynchronizeChange( TObject * /*Sender*/, const UnicodeString & Directory, bool & SubdirsChanged) { try { UnicodeString RemoteDirectory; UnicodeString RootLocalDirectory; RootLocalDirectory = ::IncludeTrailingBackslash(FSynchronizeParams.LocalDirectory); RemoteDirectory = core::UnixIncludeTrailingBackslash(FSynchronizeParams.RemoteDirectory); UnicodeString LocalDirectory = ::IncludeTrailingBackslash(Directory); assert(LocalDirectory.SubString(1, RootLocalDirectory.Length()) == RootLocalDirectory); RemoteDirectory = RemoteDirectory + core::ToUnixPath(LocalDirectory.SubString(RootLocalDirectory.Length() + 1, LocalDirectory.Length() - RootLocalDirectory.Length())); SynchronizeLog(slChange, FMTLOAD(SYNCHRONIZE_CHANGE, ::ExcludeTrailingBackslash(LocalDirectory).c_str())); if (FOnSynchronize != nullptr) { // this is completely wrong as the options structure // can contain non-root specific options in future TSynchronizeOptions * Options = ((LocalDirectory == RootLocalDirectory) ? FOptions : nullptr); TSynchronizeChecklist * Checklist = nullptr; FOnSynchronize(this, LocalDirectory, RemoteDirectory, FCopyParam, FSynchronizeParams, &Checklist, Options, false); if (Checklist != nullptr) { std::unique_ptr<TSynchronizeChecklist> ChecklistPtr(Checklist); (void)ChecklistPtr; if (FLAGSET(FSynchronizeParams.Options, soRecurse)) { SubdirsChanged = false; assert(Checklist != nullptr); for (intptr_t Index = 0; Index < Checklist->GetCount(); ++Index) { const TChecklistItem * Item = Checklist->GetItem(Index); // note that there may be action saDeleteRemote even if nothing has changed // so this is sub-optimal if (Item->IsDirectory) { if ((Item->Action == saUploadNew) || (Item->Action == saDeleteRemote)) { SubdirsChanged = true; break; } else { assert(false); } } } } else { SubdirsChanged = false; } } } } catch (Exception & E) { SynchronizeAbort(NB_STATIC_DOWNCAST(EFatal, &E) != nullptr); } }