Ignore:
Timestamp:
Jan 9, 2017, 11:09:38 AM (3 years ago)
Author:
jrpelegrina
Message:

Update new version: 3.15.02

File:
1 edited

Legend:

Unmodified
Added
Removed
  • filezilla/trunk/fuentes/src/interface/recursive_operation.h

    r130 r3185  
    55#include <set>
    66#include "filter.h"
     7#include <optional.h>
    78
    89class CChmodDialog;
    910class CQueueView;
     11
     12class recursion_root final
     13{
     14public:
     15        recursion_root() = default;
     16        recursion_root(CServerPath const& start_dir, bool allow_parent);
     17
     18        void add_dir_to_visit(CServerPath const& path, wxString const& subdir, CLocalPath const& localDir = CLocalPath(), bool is_link = false);
     19        void add_dir_to_visit_restricted(CServerPath const& path, wxString const& restrict, bool recurse);
     20
     21        bool empty() const { return m_dirsToVisit.empty(); }
     22
     23private:
     24        friend class CRecursiveOperation;
     25
     26        class new_dir final
     27        {
     28        public:
     29                CServerPath parent;
     30                wxString subdir;
     31                CLocalPath localDir;
     32                CSparseOptional<wxString> restrict;
     33
     34                // Symlink target might be outside actual start dir. Yet
     35                // sometimes user wants to download symlink target contents
     36                CServerPath start_dir;
     37
     38                // 0 = not a link
     39                // 1 = link, added by class during the operation
     40                // 2 = link, added by user of class
     41                int link{};
     42
     43                bool doVisit{ true };
     44                bool recurse{ true };
     45                bool second_try{};
     46        };
     47
     48        CServerPath m_startDir;
     49        std::set<CServerPath> m_visitedDirs;
     50        std::deque<new_dir> m_dirsToVisit;
     51        bool m_allowParent{};
     52};
    1053
    1154class CRecursiveOperation final : public CStateEventHandler
     
    2770        };
    2871
    29         void StartRecursiveOperation(OperationMode mode, const CServerPath& startDir, std::vector<CFilter> const& filters, bool allowParent = false, const CServerPath& finalDir = CServerPath());
     72        void AddRecursionRoot(recursion_root && root);
     73        void StartRecursiveOperation(OperationMode mode, std::vector<CFilter> const& filters, CServerPath const& finalDir);
     74
    3075        void StopRecursiveOperation();
    31 
    32         void AddDirectoryToVisit(const CServerPath& path, const wxString& subdir, const CLocalPath& localDir = CLocalPath(), bool is_link = false);
    33         void AddDirectoryToVisitRestricted(const CServerPath& path, const wxString& restrict, bool recurse);
    3476
    3577        bool IsActive() const { return GetOperationMode() != recursive_none; }
     
    4183        void SetChmodDialog(CChmodDialog* pChmodDialog);
    4284
    43         void ListingFailed(int error);
    44         void LinkIsNotDir();
    45 
    4685        void SetQueue(CQueueView* pQueue);
    4786
     
    4988
    5089protected:
     90        void LinkIsNotDir();
     91        void ListingFailed(int error);
     92
    5193        // Processes the directory listing in case of a recursive operation
    5294        void ProcessDirectoryListing(const CDirectoryListing* pDirectoryListing);
     
    58100        OperationMode m_operationMode;
    59101
    60         class CNewDir final
    61         {
    62         public:
    63                 CServerPath parent;
    64                 wxString subdir;
    65                 CLocalPath localDir;
    66                 bool doVisit{true};
     102        bool BelowRecursionRoot(const CServerPath& path, recursion_root::new_dir &dir);
    67103
    68                 bool recurse{true};
    69                 wxString restrict;
     104        std::deque<recursion_root> recursion_roots_;
    70105
    71                 bool second_try{};
    72 
    73                 // 0 = not a link
    74                 // 1 = link, added by class during the operation
    75                 // 2 = link, added by user of class
    76                 int link{};
    77 
    78                 // Symlink target might be outside actual start dir. Yet
    79                 // sometimes user wants to download symlink target contents
    80                 CServerPath start_dir;
    81         };
    82 
    83         bool BelowRecursionRoot(const CServerPath& path, CNewDir &dir);
    84 
    85         CServerPath m_startDir;
    86106        CServerPath m_finalDir;
    87         std::set<CServerPath> m_visitedDirs;
    88         std::deque<CNewDir> m_dirsToVisit;
    89 
    90         bool m_allowParent{};
    91107
    92108        // Needed for recursive_chmod
Note: See TracChangeset for help on using the changeset viewer.