diff options
author | Daniel Wilhelm <daniel@wili.li> | 2014-04-18 17:29:28 +0200 |
---|---|---|
committer | Daniel Wilhelm <daniel@wili.li> | 2014-04-18 17:29:28 +0200 |
commit | 75c07011b7c4d06acd7b45dabdcd60ab9d80f385 (patch) | |
tree | 8853c3978dd152ef377e652239448b1352320206 /structures.h | |
parent | 5.22 (diff) | |
download | FreeFileSync-75c07011b7c4d06acd7b45dabdcd60ab9d80f385.tar.gz FreeFileSync-75c07011b7c4d06acd7b45dabdcd60ab9d80f385.tar.bz2 FreeFileSync-75c07011b7c4d06acd7b45dabdcd60ab9d80f385.zip |
5.23
Diffstat (limited to 'structures.h')
-rw-r--r-- | structures.h | 406 |
1 files changed, 0 insertions, 406 deletions
diff --git a/structures.h b/structures.h deleted file mode 100644 index fdf36e09..00000000 --- a/structures.h +++ /dev/null @@ -1,406 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved * -// ************************************************************************** - -#ifndef FREEFILESYNC_H_INCLUDED -#define FREEFILESYNC_H_INCLUDED - -#include <vector> -#include <memory> -#include <zen/zstring.h> -#include <zen/assert_static.h> -#include <zen/int64.h> - -namespace zen -{ -enum CompareVariant -{ - CMP_BY_TIME_SIZE, - CMP_BY_CONTENT -}; - -std::wstring getVariantName(CompareVariant var); - -enum SymLinkHandling -{ - SYMLINK_EXCLUDE, - SYMLINK_USE_DIRECTLY, - SYMLINK_FOLLOW_LINK -}; - - -enum class SyncDirection : unsigned char //we need to save space for use in FileSystemObject! -{ - LEFT, - RIGHT, - NONE -}; - - -enum CompareFilesResult -{ - FILE_EQUAL, - FILE_LEFT_SIDE_ONLY, - FILE_RIGHT_SIDE_ONLY, - FILE_LEFT_NEWER, //CMP_BY_TIME_SIZE only! - FILE_RIGHT_NEWER, // - FILE_DIFFERENT, //CMP_BY_CONTENT only! - FILE_DIFFERENT_METADATA, //both sides equal, but different metadata only: short name case, modification time - FILE_CONFLICT -}; -//attention make sure these /|\ \|/ three enums match!!! -enum CompareDirResult -{ - DIR_EQUAL = FILE_EQUAL, - DIR_LEFT_SIDE_ONLY = FILE_LEFT_SIDE_ONLY, - DIR_RIGHT_SIDE_ONLY = FILE_RIGHT_SIDE_ONLY, - DIR_DIFFERENT_METADATA = FILE_DIFFERENT_METADATA //both sides equal, but different metadata only: short name case -}; - -enum CompareSymlinkResult -{ - SYMLINK_EQUAL = FILE_EQUAL, - SYMLINK_LEFT_SIDE_ONLY = FILE_LEFT_SIDE_ONLY, - SYMLINK_RIGHT_SIDE_ONLY = FILE_RIGHT_SIDE_ONLY, - SYMLINK_LEFT_NEWER = FILE_LEFT_NEWER, - SYMLINK_RIGHT_NEWER = FILE_RIGHT_NEWER, - SYMLINK_DIFFERENT = FILE_DIFFERENT, - SYMLINK_DIFFERENT_METADATA = FILE_DIFFERENT_METADATA, //both sides equal, but different metadata only: short name case - SYMLINK_CONFLICT = FILE_CONFLICT -}; - - -std::wstring getSymbol(CompareFilesResult cmpRes); - - -enum SyncOperation -{ - SO_CREATE_NEW_LEFT, - SO_CREATE_NEW_RIGHT, - SO_DELETE_LEFT, - SO_DELETE_RIGHT, - - SO_MOVE_LEFT_SOURCE, //SO_DELETE_LEFT - optimization! - SO_MOVE_LEFT_TARGET, //SO_CREATE_NEW_LEFT - - SO_MOVE_RIGHT_SOURCE, //SO_DELETE_RIGHT - optimization! - SO_MOVE_RIGHT_TARGET, //SO_CREATE_NEW_RIGHT - - SO_OVERWRITE_LEFT, - SO_OVERWRITE_RIGHT, - SO_COPY_METADATA_TO_LEFT, //objects are already equal: transfer metadata only - optimization - SO_COPY_METADATA_TO_RIGHT, // - - SO_DO_NOTHING, //= both sides differ, but nothing will be synced - SO_EQUAL, //= both sides are equal, so nothing will be synced - SO_UNRESOLVED_CONFLICT -}; - -std::wstring getSymbol(SyncOperation op); //method used for exporting .csv file only! - - -struct DirectionSet -{ - DirectionSet() : - exLeftSideOnly (SyncDirection::RIGHT), - exRightSideOnly(SyncDirection::LEFT), - leftNewer (SyncDirection::RIGHT), - rightNewer (SyncDirection::LEFT), - different (SyncDirection::NONE), - conflict (SyncDirection::NONE) {} - - SyncDirection exLeftSideOnly; - SyncDirection exRightSideOnly; - SyncDirection leftNewer; //CMP_BY_TIME_SIZE only! - SyncDirection rightNewer; // - SyncDirection different; //CMP_BY_CONTENT only! - SyncDirection conflict; -}; - -DirectionSet getTwoWayUpdateSet(); - -inline -bool operator==(const DirectionSet& lhs, const DirectionSet& rhs) -{ - return lhs.exLeftSideOnly == rhs.exLeftSideOnly && - lhs.exRightSideOnly == rhs.exRightSideOnly && - lhs.leftNewer == rhs.leftNewer && - lhs.rightNewer == rhs.rightNewer && - lhs.different == rhs.different && - lhs.conflict == rhs.conflict; -} - -struct DirectionConfig //technical representation of sync-config -{ - enum Variant - { - TWOWAY, //use sync-database to determine directions - MIRROR, //predefined - UPDATE, // - CUSTOM //use custom directions - }; - - DirectionConfig() : var(TWOWAY), detectMovedFiles(false) {} - - Variant var; - DirectionSet custom; //custom sync directions - bool detectMovedFiles; //dependent from Variant: e.g. always active for DirectionConfig::TWOWAY! => use functions below for evaluation! -}; - -inline -bool operator==(const DirectionConfig& lhs, const DirectionConfig& rhs) -{ - return lhs.var == rhs.var && - lhs.custom == rhs.custom && - lhs.detectMovedFiles == rhs.detectMovedFiles; - //adapt effectivelyEqual() on changes, too! -} - -bool detectMovedFilesSelectable(const DirectionConfig& cfg); -bool detectMovedFilesEnabled (const DirectionConfig& cfg); - -DirectionSet extractDirections(const DirectionConfig& cfg); //get sync directions: DON'T call for DirectionConfig::TWOWAY! - -std::wstring getVariantName(DirectionConfig::Variant var); - -inline -bool effectivelyEqual(const DirectionConfig& lhs, const DirectionConfig& rhs) -{ - return (lhs.var == DirectionConfig::TWOWAY) == (rhs.var == DirectionConfig::TWOWAY) && //either both two-way or none - (lhs.var == DirectionConfig::TWOWAY || extractDirections(lhs) == extractDirections(rhs)) && - detectMovedFilesEnabled(lhs) == detectMovedFilesEnabled(rhs); -} - - -struct CompConfig -{ - CompConfig() : - compareVar(CMP_BY_TIME_SIZE), - handleSymlinks(SYMLINK_EXCLUDE) {} - - CompareVariant compareVar; - SymLinkHandling handleSymlinks; -}; - -inline -bool operator==(const CompConfig& lhs, const CompConfig& rhs) -{ - return lhs.compareVar == rhs.compareVar && - lhs.handleSymlinks == rhs.handleSymlinks; -} - -inline -bool effectivelyEqual(const CompConfig& lhs, const CompConfig& rhs) { return lhs == rhs; } //no change in behavior - - -enum DeletionPolicy -{ - DELETE_PERMANENTLY, - DELETE_TO_RECYCLER, - DELETE_TO_VERSIONING -}; - -enum VersioningStyle -{ - VER_STYLE_REPLACE, - VER_STYLE_ADD_TIMESTAMP, -}; - -struct SyncConfig -{ - SyncConfig() : - handleDeletion(DELETE_TO_RECYCLER), - versioningStyle(VER_STYLE_REPLACE) {} - - //sync direction settings - DirectionConfig directionCfg; - - DeletionPolicy handleDeletion; //use Recycle, delete permanently or move to user-defined location - //versioning options - VersioningStyle versioningStyle; - Zstring versioningDirectory; - //int versionCountLimit; //max versions per file (DELETE_TO_VERSIONING); < 0 := no limit -}; - - -inline -bool operator==(const SyncConfig& lhs, const SyncConfig& rhs) -{ - return lhs.directionCfg == rhs.directionCfg && - lhs.handleDeletion == rhs.handleDeletion && - lhs.versioningStyle == rhs.versioningStyle && - lhs.versioningDirectory == rhs.versioningDirectory; - //adapt effectivelyEqual() on changes, too! -} - - -inline -bool effectivelyEqual(const SyncConfig& lhs, const SyncConfig& rhs) -{ - return effectivelyEqual(lhs.directionCfg, rhs.directionCfg) && - lhs.handleDeletion == rhs.handleDeletion && - (lhs.handleDeletion != DELETE_TO_VERSIONING || //only compare deletion directory if required! - (lhs.versioningStyle == rhs.versioningStyle && - lhs.versioningDirectory == rhs.versioningDirectory)); -} - - -enum UnitSize -{ - USIZE_NONE, - USIZE_BYTE, - USIZE_KB, - USIZE_MB -}; - -enum UnitTime -{ - UTIME_NONE, - UTIME_TODAY, - // UTIME_THIS_WEEK, - UTIME_THIS_MONTH, - UTIME_THIS_YEAR, - UTIME_LAST_X_DAYS -}; - -struct FilterConfig -{ - FilterConfig(const Zstring& include = Zstr("*"), - const Zstring& exclude = Zstring(), - size_t timeSpanIn = 0, - UnitTime unitTimeSpanIn = UTIME_NONE, - size_t sizeMinIn = 0, - UnitSize unitSizeMinIn = USIZE_NONE, - size_t sizeMaxIn = 0, - UnitSize unitSizeMaxIn = USIZE_NONE) : - includeFilter(include), - excludeFilter(exclude), - timeSpan (timeSpanIn), - unitTimeSpan (unitTimeSpanIn), - sizeMin (sizeMinIn), - unitSizeMin (unitSizeMinIn), - sizeMax (sizeMaxIn), - unitSizeMax (unitSizeMaxIn) {} - - /* - Semantics of HardFilter: - 1. using it creates a NEW folder hierarchy! -> must be considered by <Automatic>-mode! (fortunately it turns out, doing nothing already has perfect semantics :) - 2. it applies equally to both sides => it always matches either both sides or none! => can be used while traversing a single folder! - */ - Zstring includeFilter; - Zstring excludeFilter; - - /* - Semantics of SoftFilter: - 1. It potentially may match only one side => it MUST NOT be applied while traversing a single folder to avoid mismatches - 2. => it is applied after traversing and just marks rows, (NO deletions after comparison are allowed) - 3. => equivalent to a user temporarily (de-)selecting rows -> not relevant for <Automatic>-mode! ;) - */ - size_t timeSpan; - UnitTime unitTimeSpan; - - size_t sizeMin; - UnitSize unitSizeMin; - - size_t sizeMax; - UnitSize unitSizeMax; -}; - -inline -bool operator==(const FilterConfig& lhs, const FilterConfig& rhs) -{ - return lhs.includeFilter == rhs.includeFilter && - lhs.excludeFilter == rhs.excludeFilter && - lhs.timeSpan == rhs.timeSpan && - lhs.unitTimeSpan == rhs.unitTimeSpan && - lhs.sizeMin == rhs.sizeMin && - lhs.unitSizeMin == rhs.unitSizeMin && - lhs.sizeMax == rhs.sizeMax && - lhs.unitSizeMax == rhs.unitSizeMax; -} - -void resolveUnits(size_t timeSpan, UnitTime unitTimeSpan, - size_t sizeMin, UnitSize unitSizeMin, - size_t sizeMax, UnitSize unitSizeMax, - zen::Int64& timeFrom, //unit: UTC time, seconds - zen::UInt64& sizeMinBy, //unit: bytes - zen::UInt64& sizeMaxBy); //unit: bytes - - -struct FolderPairEnh //enhanced folder pairs with (optional) alternate configuration -{ - FolderPairEnh() {} - - FolderPairEnh(const Zstring& leftDir, - const Zstring& rightDir, - const std::shared_ptr<const CompConfig>& cmpConfig, - const std::shared_ptr<const SyncConfig>& syncConfig, - const FilterConfig& filter) : - leftDirectory(leftDir), - rightDirectory(rightDir) , - altCmpConfig(cmpConfig), - altSyncConfig(syncConfig), - localFilter(filter) {} - - Zstring leftDirectory; - Zstring rightDirectory; - - std::shared_ptr<const CompConfig> altCmpConfig; //optional - std::shared_ptr<const SyncConfig> altSyncConfig; // - FilterConfig localFilter; -}; - - -inline -bool operator==(const FolderPairEnh& lhs, const FolderPairEnh& rhs) -{ - return lhs.leftDirectory == rhs.leftDirectory && - lhs.rightDirectory == rhs.rightDirectory && - - (lhs.altCmpConfig.get() && rhs.altCmpConfig.get() ? - *lhs.altCmpConfig == *rhs.altCmpConfig : - lhs.altCmpConfig.get() == rhs.altCmpConfig.get()) && - - (lhs.altSyncConfig.get() && rhs.altSyncConfig.get() ? - *lhs.altSyncConfig == *rhs.altSyncConfig : - lhs.altSyncConfig.get() == rhs.altSyncConfig.get()) && - - lhs.localFilter == rhs.localFilter; -} - - -struct MainConfiguration -{ - CompConfig cmpConfig; //global compare settings: may be overwritten by folder pair settings - SyncConfig syncCfg; //global synchronisation settings: may be overwritten by folder pair settings - FilterConfig globalFilter; //global filter settings: combined with folder pair settings - - FolderPairEnh firstPair; //there needs to be at least one pair! - std::vector<FolderPairEnh> additionalPairs; - - std::wstring onCompletion; //user-defined command line - - std::wstring getCompVariantName() const; - std::wstring getSyncVariantName() const; -}; - - -inline -bool operator==(const MainConfiguration& lhs, const MainConfiguration& rhs) -{ - return lhs.cmpConfig == rhs.cmpConfig && - lhs.syncCfg == rhs.syncCfg && - lhs.globalFilter == rhs.globalFilter && - lhs.firstPair == rhs.firstPair && - lhs.additionalPairs == rhs.additionalPairs && - lhs.onCompletion == rhs.onCompletion; -} - - -//facilitate drag & drop config merge: -MainConfiguration merge(const std::vector<MainConfiguration>& mainCfgs); -} - -#endif // FREEFILESYNC_H_INCLUDED |