From 98ecf620f7de377dc8ae9ad7fbd1e3b24477e138 Mon Sep 17 00:00:00 2001 From: Daniel Wilhelm Date: Fri, 18 Apr 2014 17:11:56 +0200 Subject: 3.17 --- Application.cpp | 62 +- BUILD/Changelog.txt | 26 + BUILD/FreeFileSync.chm | Bin 504394 -> 503768 bytes BUILD/Help/html/Features.html | 4 +- BUILD/Help/html/advanced/ExternalApp.html | 16 +- BUILD/Languages/chinese_simple.lng | 1951 ++++++++++--------- BUILD/Languages/chinese_traditional.lng | 1940 ++++++++++--------- BUILD/Languages/czech.lng | 1976 ++++++++++--------- BUILD/Languages/dutch.lng | 1937 ++++++++++--------- BUILD/Languages/english_uk.lng | 1963 ++++++++++--------- BUILD/Languages/finnish.lng | 1963 ++++++++++--------- BUILD/Languages/french.lng | 1963 ++++++++++--------- BUILD/Languages/german.lng | 1959 ++++++++++--------- BUILD/Languages/greek.lng | 1965 ++++++++++--------- BUILD/Languages/hebrew.lng | 910 --------- BUILD/Languages/hungarian.lng | 1940 ++++++++++--------- BUILD/Languages/italian.lng | 1936 ++++++++++--------- BUILD/Languages/japanese.lng | 1958 ++++++++++--------- BUILD/Languages/korean.lng | 1952 ++++++++++--------- BUILD/Languages/polish.lng | 1968 ++++++++++--------- BUILD/Languages/portuguese.lng | 1933 ++++++++++--------- BUILD/Languages/portuguese_br.lng | 1959 ++++++++++--------- BUILD/Languages/romanian.lng | 1976 ++++++++++--------- BUILD/Languages/russian.lng | 1975 ++++++++++--------- BUILD/Languages/slovenian.lng | 1981 +++++++++++--------- BUILD/Languages/spanish.lng | 1959 ++++++++++--------- BUILD/Languages/swedish.lng | 1965 ++++++++++--------- BUILD/Languages/turkish.lng | 1961 ++++++++++--------- BUILD/Languages/ukrainian.lng | 1062 +++++++++++ BUILD/Resources.dat | Bin 316461 -> 324694 bytes FreeFileSync - wxWidgets v2.9.1 Beta.vcxproj | 37 +- FreeFileSync.cbp | 26 +- FreeFileSync.vcxproj | 39 +- Makefile | 15 +- RealtimeSync/RealtimeSync.cbp | 11 +- RealtimeSync/RealtimeSync.vcxproj | 36 +- RealtimeSync/application.cpp | 8 +- RealtimeSync/main_dlg.cpp | 35 +- RealtimeSync/main_dlg.h | 15 +- RealtimeSync/makefile | 9 +- RealtimeSync/notify.cpp | 18 +- RealtimeSync/resources.cpp | 4 +- RealtimeSync/tray_menu.cpp | 19 +- RealtimeSync/watcher.cpp | 58 +- RealtimeSync/xml_ffs.cpp | 15 +- RealtimeSync/xml_proc.cpp | 114 +- algorithm.cpp | 350 ++-- algorithm.h | 13 +- comparison.cpp | 324 ++-- comparison.h | 29 +- file_hierarchy.cpp | 4 +- file_hierarchy.h | 92 +- library/binary.cpp | 6 +- library/binary.h | 6 +- library/cmp_filetime.h | 16 +- library/custom_grid.cpp | 35 +- library/custom_grid.h | 26 +- library/db_file.cpp | 259 ++- library/db_file.h | 11 +- library/detect_renaming.h | 4 +- library/dir_lock.cpp | 69 +- library/dir_lock.h | 3 +- library/error_log.cpp | 4 +- library/error_log.h | 2 +- library/filter.cpp | 371 ---- library/filter.h | 280 --- library/hard_filter.cpp | 365 ++++ library/hard_filter.h | 279 +++ library/icon_buffer.cpp | 364 ++-- library/icon_buffer.h | 41 +- library/lock_holder.h | 52 + library/norm_filter.h | 98 + library/process_xml.cpp | 820 +++++--- library/process_xml.h | 44 +- library/resources.cpp | 4 +- library/soft_filter.cpp | 10 - library/soft_filter.h | 104 +- library/statistics.cpp | 67 +- library/status_handler.cpp | 4 +- library/status_handler.h | 69 +- shared/IFileOperation/file_op.h | 6 +- shared/ShadowCopy/shadow.h | 4 +- shared/Taskbar_Seven/taskbar.h | 6 +- shared/app_main.cpp | 4 +- shared/app_main.h | 2 +- shared/assert_static.h | 2 +- shared/check_exist.cpp | 6 +- shared/dir_name.cpp | 115 +- shared/dir_name.h | 16 +- shared/disable_standby.h | 7 +- shared/dll_loader.cpp | 2 - shared/dll_loader.h | 7 + shared/dst_hack.cpp | 158 +- shared/file_drop.h | 113 ++ shared/file_error.h | 2 +- shared/file_handling.cpp | 304 +-- shared/file_handling.h | 9 +- shared/file_id.cpp | 15 +- shared/file_io.cpp | 93 +- shared/file_io.h | 40 +- shared/file_traverser.cpp | 91 +- shared/file_traverser.h | 11 +- shared/global_func.cpp | 10 +- shared/global_func.h | 107 +- shared/guid.cpp | 5 - shared/help_provider.cpp | 4 +- shared/help_provider.h | 2 +- shared/i18n.cpp | 1070 +---------- shared/i18n.h | 62 +- shared/i18n_no_BOM.cpp | 1076 ----------- shared/int64.h | 227 +++ shared/last_error.cpp | 63 + shared/last_error.h | 24 + shared/localization.cpp | 431 +++++ shared/localization.h | 41 + shared/loki/Factory.h | 40 +- shared/loki/Register.h | 4 +- shared/loki/ScopeGuard.h | 2 +- shared/loki/Singleton.h | 6 +- shared/loki/TypeTraits.h | 4 +- shared/long_path_prefix.cpp | 59 - shared/long_path_prefix.h | 84 +- shared/mouse_move_dlg.cpp | 49 +- shared/mouse_move_dlg.h | 23 +- shared/parse_lng.h | 618 ++++++ shared/parse_plural.h | 412 ++++ shared/parse_txt.cpp | 93 + shared/parse_txt.h | 32 + shared/pch.h | 55 +- shared/perf.h | 2 +- shared/privilege.cpp | 32 +- shared/privilege.h | 2 +- shared/recycler.cpp | 35 +- shared/recycler.h | 4 +- shared/resolve_path.cpp | 64 +- shared/resolve_path.h | 2 +- shared/serialize.cpp | 10 +- shared/serialize.h | 123 +- shared/shadow.cpp | 4 +- shared/shell_execute.h | 97 + shared/standard_paths.cpp | 97 +- shared/standard_paths.h | 8 +- shared/string_conv.h | 4 +- shared/string_tools.h | 444 +++++ shared/symlink_target.h | 32 +- shared/system_func.cpp | 58 - shared/system_func.h | 24 - shared/tinyxml/changes.txt | 11 +- shared/tinyxml/docs/classTiXmlDocument.html | 6 +- shared/tinyxml/docs/classTiXmlElement-members.html | 2 + shared/tinyxml/docs/classTiXmlElement.html | 35 + shared/tinyxml/docs/classTiXmlHandle.html | 16 +- shared/tinyxml/docs/classTiXmlNode.html | 4 +- shared/tinyxml/docs/classTiXmlPrinter.html | 2 +- shared/tinyxml/docs/classTiXmlVisitor.html | 2 +- shared/tinyxml/docs/functions_0x71.html | 6 + shared/tinyxml/docs/functions_func_0x71.html | 6 + shared/tinyxml/docs/index.html | 2 +- shared/tinyxml/docs/tinystr_8h_source.html | 594 +++--- shared/tinyxml/docs/tinyxml_8h_source.html | 917 ++++----- shared/tinyxml/echo.dsp | 113 -- shared/tinyxml/tinyXmlTest.dsp | 92 - shared/tinyxml/tinyXmlTest.vcproj | 226 --- shared/tinyxml/tinyXmlTest.vcxproj | 134 ++ shared/tinyxml/tinyXmlTestSTL.dsp | 92 - shared/tinyxml/tinyXmlTestSTL.vcproj | 225 --- shared/tinyxml/tinyXmlTestSTL.vcxproj | 135 ++ shared/tinyxml/tinystr.cpp | 5 - shared/tinyxml/tinystr.h | 14 - shared/tinyxml/tinyxml.cpp | 100 +- shared/tinyxml/tinyxml.dsw | 71 - shared/tinyxml/tinyxml.h | 40 +- shared/tinyxml/tinyxml.sln | 18 +- shared/tinyxml/tinyxmlSTL.dsp | 126 -- shared/tinyxml/tinyxmlSTL.vcproj | 279 --- shared/tinyxml/tinyxmlSTL.vcxproj | 125 ++ shared/tinyxml/tinyxml_lib.dsp | 130 -- shared/tinyxml/tinyxml_lib.vcproj | 284 --- shared/tinyxml/tinyxml_lib.vcxproj | 126 ++ shared/tinyxml/tinyxmlerror.cpp | 2 +- shared/tinyxml/tinyxmlparser.cpp | 54 +- shared/tinyxml/xmltest.cpp | 35 +- shared/util.cpp | 105 +- shared/util.h | 90 +- shared/xml_base.cpp | 190 +- shared/xml_base.h | 67 +- shared/zbase.h | 369 +--- shared/zstring.cpp | 11 +- shared/zstring.h | 3 + structures.cpp | 325 ++-- structures.h | 242 ++- synchronization.cpp | 472 ++--- synchronization.h | 13 +- ui/batch_config.cpp | 359 ++-- ui/batch_config.h | 84 +- ui/batch_status_handler.cpp | 64 +- ui/batch_status_handler.h | 10 +- ui/check_version.cpp | 22 +- ui/check_version.h | 2 +- ui/folder_pair.h | 22 +- ui/grid_view.cpp | 12 +- ui/grid_view.h | 14 +- ui/gui_generated.cpp | 337 +++- ui/gui_generated.h | 41 +- ui/gui_status_handler.cpp | 190 +- ui/gui_status_handler.h | 24 +- ui/is_null_filter.h | 24 - ui/main_dlg.cpp | 741 ++++---- ui/main_dlg.h | 20 +- ui/msg_popup.cpp | 151 +- ui/msg_popup.h | 52 +- ui/progress_indicator.cpp | 120 +- ui/progress_indicator.h | 17 +- ui/search.cpp | 7 +- ui/search.h | 2 +- ui/small_dlgs.cpp | 462 ++--- ui/small_dlgs.h | 29 +- ui/sorting.h | 10 +- ui/switch_to_gui.cpp | 2 +- ui/switch_to_gui.h | 2 +- ui/sync_cfg.cpp | 650 ++++--- ui/sync_cfg.h | 95 +- ui/tray_icon.cpp | 132 +- ui/tray_icon.h | 2 +- version/version.h | 4 +- version/version.rc | 4 +- 226 files changed, 34545 insertions(+), 31580 deletions(-) delete mode 100644 BUILD/Languages/hebrew.lng create mode 100644 BUILD/Languages/ukrainian.lng delete mode 100644 library/filter.cpp delete mode 100644 library/filter.h create mode 100644 library/hard_filter.cpp create mode 100644 library/hard_filter.h create mode 100644 library/lock_holder.h create mode 100644 library/norm_filter.h delete mode 100644 library/soft_filter.cpp create mode 100644 shared/file_drop.h delete mode 100644 shared/i18n_no_BOM.cpp create mode 100644 shared/int64.h create mode 100644 shared/last_error.cpp create mode 100644 shared/last_error.h create mode 100644 shared/localization.cpp create mode 100644 shared/localization.h delete mode 100644 shared/long_path_prefix.cpp create mode 100644 shared/parse_lng.h create mode 100644 shared/parse_plural.h create mode 100644 shared/parse_txt.cpp create mode 100644 shared/parse_txt.h create mode 100644 shared/shell_execute.h create mode 100644 shared/string_tools.h delete mode 100644 shared/system_func.cpp delete mode 100644 shared/system_func.h delete mode 100644 shared/tinyxml/echo.dsp delete mode 100644 shared/tinyxml/tinyXmlTest.dsp delete mode 100644 shared/tinyxml/tinyXmlTest.vcproj create mode 100644 shared/tinyxml/tinyXmlTest.vcxproj delete mode 100644 shared/tinyxml/tinyXmlTestSTL.dsp delete mode 100644 shared/tinyxml/tinyXmlTestSTL.vcproj create mode 100644 shared/tinyxml/tinyXmlTestSTL.vcxproj delete mode 100644 shared/tinyxml/tinyxml.dsw delete mode 100644 shared/tinyxml/tinyxmlSTL.dsp delete mode 100644 shared/tinyxml/tinyxmlSTL.vcproj create mode 100644 shared/tinyxml/tinyxmlSTL.vcxproj delete mode 100644 shared/tinyxml/tinyxml_lib.dsp delete mode 100644 shared/tinyxml/tinyxml_lib.vcproj create mode 100644 shared/tinyxml/tinyxml_lib.vcxproj delete mode 100644 ui/is_null_filter.h diff --git a/Application.cpp b/Application.cpp index e87b4294..7e217c50 100644 --- a/Application.cpp +++ b/Application.cpp @@ -13,7 +13,6 @@ #include #include "ui/batch_status_handler.h" #include "ui/check_version.h" -#include "library/filter.h" #include #include "shared/xml_base.h" #include "library/resources.h" @@ -26,6 +25,7 @@ #include "shared/string_conv.h" #include "shared/util.h" #include +#include "library/lock_holder.h" #ifdef FFS_LINUX #include @@ -33,8 +33,7 @@ #endif -using ffs3::CustomLocale; -using ffs3::SwitchToGui; +using namespace zen; IMPLEMENT_APP(Application) @@ -55,7 +54,7 @@ bool Application::OnInit() void Application::OnStartApplication(wxIdleEvent&) { - using namespace ffs3; + using namespace zen; Disconnect(wxEVT_IDLE, wxIdleEventHandler(Application::OnStartApplication), NULL, this); @@ -68,7 +67,7 @@ void Application::OnStartApplication(wxIdleEvent&) ~HandleAppExit() { - if (!ffs3::AppMainWindow::mainWindowWasSet()) + if (!zen::AppMainWindow::mainWindowWasSet()) wxTheApp->ExitMainLoop(); //quit application, if no main window was set (batch silent mode) } @@ -81,7 +80,7 @@ void Application::OnStartApplication(wxIdleEvent&) #ifdef FFS_LINUX Gtk::Main::init_gtkmm_internals(); - ::gtk_rc_parse(ffs3::wxToZ(ffs3::getResourceDir()) + "styles.rc"); //remove inner border from bitmap buttons + ::gtk_rc_parse(zen::wxToZ(zen::getResourceDir()) + "styles.rc"); //remove inner border from bitmap buttons #endif @@ -128,7 +127,7 @@ void Application::OnStartApplication(wxIdleEvent&) } //set program language - ffs3::setLanguage(globalSettings.programLanguage); + zen::setLanguage(globalSettings.programLanguage); if (!cfgFilename.empty()) @@ -137,17 +136,16 @@ void Application::OnStartApplication(wxIdleEvent&) const xmlAccess::XmlType xmlConfigType = xmlAccess::getXmlType(cfgFilename); switch (xmlConfigType) { - case xmlAccess::XML_GUI_CONFIG: //start in GUI mode (configuration file specified) + case xmlAccess::XML_TYPE_GUI: //start in GUI mode (configuration file specified) runGuiMode(cfgFilename, globalSettings); break; - case xmlAccess::XML_BATCH_CONFIG: //start in commandline mode + case xmlAccess::XML_TYPE_BATCH: //start in commandline mode runBatchMode(cfgFilename, globalSettings); break; - case xmlAccess::XML_GLOBAL_SETTINGS: - case xmlAccess::XML_REAL_CONFIG: - case xmlAccess::XML_OTHER: + case xmlAccess::XML_TYPE_GLOBAL: + case xmlAccess::XML_TYPE_OTHER: wxMessageBox(wxString(_("The file does not contain a valid configuration:")) + wxT(" \"") + cfgFilename + wxT("\""), _("Error"), wxOK | wxICON_ERROR); break; } @@ -172,7 +170,7 @@ int Application::OnRun() catch (const std::exception& e) //catch all STL exceptions { //unfortunately it's not always possible to display a message box in this erroneous situation, however (non-stream) file output always works! - wxFile safeOutput(ffs3::getConfigDir() + wxT("LastError.txt"), wxFile::write); + wxFile safeOutput(zen::getConfigDir() + wxT("LastError.txt"), wxFile::write); safeOutput.Write(wxString::FromAscii(e.what())); wxSafeShowMessage(_("An exception occurred!"), wxString::FromAscii(e.what())); @@ -187,7 +185,7 @@ int Application::OnRun() int Application::OnExit() { //get program language - globalSettings.programLanguage = ffs3::getLanguage(); + globalSettings.programLanguage = zen::getLanguage(); try //save global settings to XML { @@ -228,7 +226,7 @@ void Application::runBatchMode(const wxString& filename, xmlAccess::XmlGlobalSet //regular check for program updates -> disabled for batch //if (!batchCfg.silent) - // ffs3::checkForUpdatePeriodically(globSettings.lastUpdateCheck); + // zen::checkForUpdatePeriodically(globSettings.lastUpdateCheck); try //begin of synchronization process (all in one try-catch block) { @@ -236,33 +234,43 @@ void Application::runBatchMode(const wxString& filename, xmlAccess::XmlGlobalSet //class handling status updates and error messages BatchStatusHandler statusHandler(batchCfg.silent, - ffs3::extractJobName(filename), + zen::extractJobName(filename), batchCfg.silent ? &batchCfg.logFileDirectory : NULL, batchCfg.logFileCountMax, batchCfg.handleError, switchBatchToGui, returnValue); + const std::vector cmpConfig = zen::extractCompareCfg(batchCfg.mainCfg); + + //batch mode: place directory locks on directories during both comparison AND synchronization + LockHolder dummy; + for (std::vector::const_iterator i = cmpConfig.begin(); i != cmpConfig.end(); ++i) + { + dummy.addDir(i->leftDirectoryFmt, statusHandler); + dummy.addDir(i->rightDirectoryFmt, statusHandler); + } + //COMPARE DIRECTORIES - ffs3::CompareProcess comparison(batchCfg.mainCfg.handleSymlinks, - globSettings.fileTimeTolerance, - globSettings.optDialogs, - &statusHandler); + zen::CompareProcess comparison(batchCfg.mainCfg.handleSymlinks, + globSettings.fileTimeTolerance, + globSettings.optDialogs, + statusHandler); - ffs3::FolderComparison folderCmp; - comparison.startCompareProcess(ffs3::extractCompareCfg(batchCfg.mainCfg), + zen::FolderComparison folderCmp; + comparison.startCompareProcess(cmpConfig, batchCfg.mainCfg.compareVar, folderCmp); //START SYNCHRONIZATION - ffs3::SyncProcess synchronization( + zen::SyncProcess synchronization( globSettings.optDialogs, globSettings.verifyFileCopy, globSettings.copyLockedFiles, globSettings.copyFilePermissions, statusHandler); - const std::vector syncProcessCfg = ffs3::extractSyncCfg(batchCfg.mainCfg); + const std::vector syncProcessCfg = zen::extractSyncCfg(batchCfg.mainCfg); assert(syncProcessCfg.size() == folderCmp.size()); synchronization.startSynchronizationProcess(syncProcessCfg, folderCmp); @@ -270,12 +278,12 @@ void Application::runBatchMode(const wxString& filename, xmlAccess::XmlGlobalSet //play (optional) sound notification after sync has completed if (!batchCfg.silent) { - const wxString soundFile = ffs3::getResourceDir() + wxT("Sync_Complete.wav"); - if (ffs3::fileExists(ffs3::wxToZ(soundFile))) + const wxString soundFile = zen::getResourceDir() + wxT("Sync_Complete.wav"); + if (zen::fileExists(zen::wxToZ(soundFile))) wxSound::Play(soundFile, wxSOUND_ASYNC); //warning: this may fail and show a wxWidgets error message! } } - catch (ffs3::AbortThisProcess&) //exit used by statusHandler + catch (zen::AbortThisProcess&) //exit used by statusHandler { if (returnValue >= 0) returnValue = -12; diff --git a/BUILD/Changelog.txt b/BUILD/Changelog.txt index 48e4ccf2..e12fa657 100644 --- a/BUILD/Changelog.txt +++ b/BUILD/Changelog.txt @@ -2,6 +2,32 @@ |FreeFileSync| -------------- +Changelog v3.17 +--------------- +Filter files by size +Filter latest files by time span +Launcher automatically selecting 32/64 bit executable on startup +More detailed systray progress indicator +New database format for mode: a full sync is suggested before upgrading +Update database at individual file level (support for partial and aborted syncs) +New translation file format +Dynamically load existing translation files +Correct translation plural forms +Improved directory locking strategy +Restructured installation package +One button-click synchronization +Fixed CSV character encoding +Put CSV values in quotes if they contain semicolons +Explicit button and settings for "Custom" sync variant -> old configurations need to be migrated +Keyboard shortcuts also on middle grid +Minimize progress dialog by clicking on taskbar +Render invalid file dates correctly on GUI +Process user-defined commands via shell execution (FFS and RTS) +Allow base directory names having trailing whitespace +Addded Ukrainian language +Updated translation files + + Changelog v3.16 --------------- Fixed file copy issues on SAMBA shares diff --git a/BUILD/FreeFileSync.chm b/BUILD/FreeFileSync.chm index c62dc046..66e3a195 100644 Binary files a/BUILD/FreeFileSync.chm and b/BUILD/FreeFileSync.chm differ diff --git a/BUILD/Help/html/Features.html b/BUILD/Help/html/Features.html index ac65cfc8..6f33780a 100644 --- a/BUILD/Help/html/Features.html +++ b/BUILD/Help/html/Features.html @@ -5,7 +5,7 @@ - +