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

Update new version: 3.15.02

File:
1 edited

Legend:

Unmodified
Added
Removed
  • filezilla/trunk/fuentes/src/interface/state.cpp

    r130 r3185  
    88#include "filezillaapp.h"
    99#include "recursive_operation.h"
    10 #include "local_filesys.h"
    1110#include "listingcomparison.h"
    1211#include "xrc_helper.h"
     12
     13#include <libfilezilla/local_filesys.hpp>
    1314
    1415CContextManager CContextManager::m_the_context_manager;
     
    554555}
    555556
    556 void CState::RegisterHandler(CStateEventHandler* pHandler, enum t_statechange_notifications notification)
     557void CState::RegisterHandler(CStateEventHandler* pHandler, enum t_statechange_notifications notification, CStateEventHandler* insertBefore)
    557558{
    558559        wxASSERT(pHandler);
     
    561562                return;
    562563        wxASSERT(notification != STATECHANGE_MAX && notification != STATECHANGE_NONE);
    563 
     564        wxASSERT(pHandler != insertBefore);
     565
     566       
    564567        auto &handlers = m_handlers[notification];
    565         for (auto const& it : handlers) {
    566                 if (it.pHandler == pHandler) {
     568        auto insertionPoint = handlers.end();
     569
     570        for (auto it = handlers.begin(); it != handlers.end(); ++it) {
     571                if (it->pHandler == insertBefore) {
     572                        insertionPoint = it;
     573                }
     574                if (it->pHandler == pHandler) {
     575                        wxASSERT(insertionPoint == handlers.end());
    567576                        return;
    568577                }
     
    571580        t_handler handler;
    572581        handler.pHandler = pHandler;
    573         handlers.push_back(handler);
     582        handlers.insert(insertionPoint, handler);
    574583}
    575584
     
    648657        const wxArrayString& files = pFileDataObject->GetFilenames();
    649658
    650         for (unsigned int i = 0; i < files.Count(); i++)
    651         {
     659        for (unsigned int i = 0; i < files.Count(); ++i) {
    652660                int64_t size;
    653661                bool is_link;
    654                 CLocalFileSystem::local_fileType type = CLocalFileSystem::GetFileInfo(files[i], is_link, &size, 0, 0);
    655                 if (type == CLocalFileSystem::file)
    656                 {
     662                fz::local_filesys::type type = fz::local_filesys::get_file_info(fz::to_native(files[i]), is_link, &size, 0, 0);
     663                if (type == fz::local_filesys::file) {
    657664                        wxString localFile;
    658665                        const CLocalPath localPath(files[i], &localFile);
     
    660667                        m_mainFrame.GetQueue()->QueueFile_Finish(!queueOnly);
    661668                }
    662                 else if (type == CLocalFileSystem::dir)
    663                 {
     669                else if (type == fz::local_filesys::dir) {
    664670                        CLocalPath localPath(files[i]);
    665671                        if (localPath.HasParent())
     
    682688        int len = 1;
    683689
    684         for (unsigned int i = 0; i < files.Count(); i++)
     690        for (unsigned int i = 0; i < files.Count(); ++i) {
    685691                len += files[i].Len() + 1;
     692        }
    686693
    687694        // SHFILEOPSTRUCT's pTo and pFrom accept null-terminated lists
     
    689696        wxChar* from = new wxChar[len];
    690697        wxChar* p = from;
    691         for (unsigned int i = 0; i < files.Count(); i++)
    692         {
     698        for (unsigned int i = 0; i < files.Count(); ++i) {
    693699                wxStrcpy(p, files[i]);
    694700                p += files[i].Len() + 1;
     
    711717#else
    712718        wxString error;
    713         for (unsigned int i = 0; i < files.Count(); i++)
    714         {
    715                 const wxString& file(files[i]);
     719        for (unsigned int i = 0; i < files.Count(); ++i) {
     720                wxString const& file(files[i]);
    716721
    717722                int64_t size;
    718723                bool is_link;
    719                 CLocalFileSystem::local_fileType type = CLocalFileSystem::GetFileInfo(file, is_link, &size, 0, 0);
    720                 if (type == CLocalFileSystem::file)
    721                 {
     724                fz::local_filesys::type type = fz::local_filesys::get_file_info(fz::to_native(file), is_link, &size, 0, 0);
     725                if (type == fz::local_filesys::file) {
    722726                        wxString name;
    723727                        CLocalPath sourcePath(file, &name);
     
    733737                                wxRenameFile(file, target);
    734738                }
    735                 else if (type == CLocalFileSystem::dir)
    736                 {
     739                else if (type == fz::local_filesys::dir) {
    737740                        CLocalPath sourcePath(file);
    738741                        if (sourcePath == path || sourcePath.GetParent() == path)
    739742                                continue;
    740                         if (sourcePath.IsParentOf(path))
    741                         {
     743                        if (sourcePath.IsParentOf(path)) {
    742744                                error = _("A directory cannot be dragged into one of its subdirectories.");
    743745                                continue;
     
    746748                        if (copy)
    747749                                RecursiveCopy(sourcePath, path);
    748                         else
    749                         {
     750                        else {
    750751                                if (!sourcePath.HasParent())
    751752                                        continue;
     
    783784
    784785        // Process any subdirs which still have to be visited
    785         while (!dirsToVisit.empty())
    786         {
     786        while (!dirsToVisit.empty()) {
    787787                wxString dirname = dirsToVisit.front();
    788788                dirsToVisit.pop_front();
    789789                wxMkdir(target.GetPath() + dirname);
    790790
    791                 CLocalFileSystem fs;
    792                 if (!fs.BeginFindFiles(source.GetPath() + dirname, false))
     791                fz::local_filesys fs;
     792                if (!fs.begin_find_files(fz::to_native(source.GetPath() + dirname), false))
    793793                        continue;
    794794
    795795                bool is_dir, is_link;
    796                 wxString file;
    797                 while (fs.GetNextFile(file, is_link, is_dir, 0, 0, 0))
    798                 {
    799                         if (file.empty())
    800                         {
     796                fz::native_string file;
     797                while (fs.get_next_file(file, is_link, is_dir, 0, 0, 0)) {
     798                        if (file.empty()) {
    801799                                wxGetApp().DisplayEncodingWarning();
    802800                                continue;
    803801                        }
    804802
    805                         if (is_dir)
    806                         {
     803                        if (is_dir) {
    807804                                if (is_link)
    808805                                        continue;
     
    824821        bool hasFiles = false;
    825822        const std::list<CRemoteDataObject::t_fileInfo>& files = pRemoteDataObject->GetFiles();
    826         for (std::list<CRemoteDataObject::t_fileInfo>::const_iterator iter = files.begin(); iter != files.end(); ++iter)
    827         {
     823        for (std::list<CRemoteDataObject::t_fileInfo>::const_iterator iter = files.begin(); iter != files.end(); ++iter) {
    828824                if (iter->dir)
    829825                        hasDirs = true;
     
    843839                return true;
    844840
     841        recursion_root root(pRemoteDataObject->GetServerPath(), false);
    845842        for (std::list<CRemoteDataObject::t_fileInfo>::const_iterator iter = files.begin(); iter != files.end(); ++iter) {
    846843                if (!iter->dir)
     
    849846                CLocalPath newPath(path);
    850847                newPath.AddSegment(CQueueView::ReplaceInvalidCharacters(iter->name));
    851                 m_pRecursiveOperation->AddDirectoryToVisit(pRemoteDataObject->GetServerPath(), iter->name, newPath, iter->link);
    852         }
    853 
    854         if (m_pComparisonManager->IsComparing())
    855                 m_pComparisonManager->ExitComparisonMode();
    856 
    857         CFilterManager filter;
    858         m_pRecursiveOperation->StartRecursiveOperation(queueOnly ? CRecursiveOperation::recursive_addtoqueue : CRecursiveOperation::recursive_download, pRemoteDataObject->GetServerPath(), filter.GetActiveFilters(false));
     848                root.add_dir_to_visit(pRemoteDataObject->GetServerPath(), iter->name, newPath, iter->link);
     849        }
     850
     851        if (!root.empty()) {
     852                if (m_pComparisonManager->IsComparing())
     853                        m_pComparisonManager->ExitComparisonMode();
     854
     855                m_pRecursiveOperation->AddRecursionRoot(std::move(root));
     856
     857                CFilterManager filter;
     858                m_pRecursiveOperation->StartRecursiveOperation(queueOnly ? CRecursiveOperation::recursive_addtoqueue : CRecursiveOperation::recursive_download,
     859                        filter.GetActiveFilters(false), pRemoteDataObject->GetServerPath());
     860        }
    859861
    860862        return true;
     
    880882}
    881883
    882 void CState::ListingFailed(int error)
     884void CState::ListingFailed(int)
    883885{
    884886        if (m_sync_browse.is_changing && !m_sync_browse.target_path.empty()) {
Note: See TracChangeset for help on using the changeset viewer.