From 7d691c8ea3ced80202007f3e18a92531d366e70e Mon Sep 17 00:00:00 2001 From: "B. Stack" Date: Mon, 10 May 2021 10:13:05 -0400 Subject: WIP: ffs dpkg all patches work --- freefilesync/debian/changelog | 20 +++++ freefilesync/debian/control | 3 +- freefilesync/debian/freefilesync+devuan.dsc | 6 +- .../debian/patches/ffs_desktop_notifications.patch | 53 ++++++++++++ .../debian/patches/ffs_no_check_updates.patch | 8 +- .../revert_zenju_aggressive_upstreamisms.patch | 95 +++++++++++++++++----- freefilesync/debian/patches/series | 1 + 7 files changed, 158 insertions(+), 28 deletions(-) create mode 100644 freefilesync/debian/patches/ffs_desktop_notifications.patch (limited to 'freefilesync') diff --git a/freefilesync/debian/changelog b/freefilesync/debian/changelog index bb65c17..47308de 100644 --- a/freefilesync/debian/changelog +++ b/freefilesync/debian/changelog @@ -1,3 +1,23 @@ +freefilesync (11.10-1+devuan) obs; urgency=medium + + * Upstream updates + - Fixed comparison results cleared after mouse-scrolling the first folder pair + - Stricter base folder existence checks before synchronization + - Disable all file pairs when base folder status cannot be determined + - Fixed sync statistics if base folder existence test failed + - Work around glitch in grid scrollbar size calculation + - Fixed folder drag and drop failing after locale conflict (macOS) + - Fixed incorrect mime permissions after installation (Linux) + - Stricter server response validation during update check + - Fixed incomplete item path in log if source item is missing + - Fixed installation error when running ConEmu + - Support starting FreeFileSync as root login user (Linux) + * [bgstack15] + - improve ffs_no_check_updates.patch + - add ffs_desktop_notifications.patch + + -- B. Stack Mon, 10 May 2021 08:16:31 -0400 + freefilesync (11.9-1+devuan) obs; urgency=medium * Upstream updates diff --git a/freefilesync/debian/control b/freefilesync/debian/control index 17ed18d..3911ad5 100644 --- a/freefilesync/debian/control +++ b/freefilesync/debian/control @@ -1,12 +1,13 @@ Source: freefilesync Section: utils Priority: optional -Maintainer: B Stack +Maintainer: B. Stack Build-Depends: debhelper (>=12~), imagemagick, g++-10, libbrotli-dev, libcurl4-openssl-dev (>=7.68.0), + libglibmm-2.4-dev, libssh2-1-dev, libssl-dev, wx3.0-headers, diff --git a/freefilesync/debian/freefilesync+devuan.dsc b/freefilesync/debian/freefilesync+devuan.dsc index 9fb345a..2a21568 100644 --- a/freefilesync/debian/freefilesync+devuan.dsc +++ b/freefilesync/debian/freefilesync+devuan.dsc @@ -2,11 +2,11 @@ Format: 3.0 (quilt) Source: freefilesync Binary: freefilesync Architecture: any -Version: 11.9-1+devuan -Maintainer: B Stack +Version: 11.10-1+devuan +Maintainer: B. Stack Homepage: https://freefilesync.org/ Standards-Version: 4.1.4 -Build-Depends: debhelper (>= 12~), g++-10, imagemagick, libbrotli-dev, libcurl4-openssl-dev, libssh2-1-dev, libssl-dev, wx3.0-headers, unzip, libgtk-3-dev, libwxgtk3.0-gtk3-dev, libfontconfig-dev +Build-Depends: debhelper (>= 12~), g++-10, imagemagick, libbrotli-dev, libcurl4-openssl-dev, libglibmm-2.4-dev, libssh2-1-dev, libssl-dev, wx3.0-headers, unzip, libgtk-3-dev, libwxgtk3.0-gtk3-dev, libfontconfig-dev Package-List: freefilesync deb utils optional arch=any Files: diff --git a/freefilesync/debian/patches/ffs_desktop_notifications.patch b/freefilesync/debian/patches/ffs_desktop_notifications.patch new file mode 100644 index 0000000..5610fd1 --- /dev/null +++ b/freefilesync/debian/patches/ffs_desktop_notifications.patch @@ -0,0 +1,53 @@ +diff -aur 11.9-1/FreeFileSync/Source/Makefile 11.9-2/FreeFileSync/Source/Makefile +--- 11.9-1/FreeFileSync/Source/Makefile 2021-05-06 16:24:53.987902373 -0400 ++++ 11.9-2/FreeFileSync/Source/Makefile 2021-05-06 17:09:31.512474440 -0400 +@@ -21,6 +22,13 @@ + #treat as system headers so that warnings are hidden: + cxxFlags += -isystem/usr/include/gtk-3.0 + ++with_notifications ?= NO ++ifeq ($(with_notifications),YES) ++# package libglibmm-2.4-dev or glibmm24-devel ++cxxFlags += `pkg-config --cflags giomm-2.4` -Dwith_notifications ++linkFlags += `pkg-config --libs giomm-2.4` ++endif ++ + #support for SELinux (optional) + SELINUX_EXISTING=$(shell pkg-config --exists libselinux && echo YES) + ifeq ($(SELINUX_EXISTING),YES) +diff -aur 11.9-1/FreeFileSync/Source/ui/progress_indicator.cpp 11.9-2/FreeFileSync/Source/ui/progress_indicator.cpp +--- 11.9-1/FreeFileSync/Source/ui/progress_indicator.cpp 2021-05-06 15:20:34.286831934 -0400 ++++ 11.9-2/FreeFileSync/Source/ui/progress_indicator.cpp 2021-05-06 17:11:45.486004158 -0400 +@@ -32,6 +32,9 @@ + #include "../perf_check.h" + #include "../icon_buffer.h" + ++#ifdef with_notifications ++#include ++#endif + + using namespace zen; + using namespace fff; +@@ -1359,6 +1362,22 @@ + pnl_.m_staticTextPhase->SetLabel(getSyncResultLabel(syncResult)); + //pnl_.m_bitmapStatus->SetToolTip(); -> redundant + ++#ifdef with_notifications ++ // Desktop notification for Linux ++ char title[] = "FreeFileSync"; ++ // from https://stackoverflow.com/a/12097772 ++ std::wstring ssR {getSyncResultLabel(syncResult)}; ++ std::string body; ++ std::transform(ssR.begin(), ssR.end(), std::back_inserter(body), [] (wchar_t c){ return (char)c;}); ++ char icon[] = "freefilesync"; ++ auto Application = Gio::Application::create("org.zenju.freefilesync", Gio::APPLICATION_FLAGS_NONE); ++ Application->register_application(); ++ auto Notification = Gio::Notification::create(title); ++ Notification->set_body(body); ++ auto Icon = Gio::ThemedIcon::create(icon); ++ Notification->set_icon (Icon); ++ Application->send_notification(Notification); ++#endif + //show status on Windows 7 taskbar + if (taskbar_.get()) + switch (syncResult) diff --git a/freefilesync/debian/patches/ffs_no_check_updates.patch b/freefilesync/debian/patches/ffs_no_check_updates.patch index d90bf7d..00cfb2b 100644 --- a/freefilesync/debian/patches/ffs_no_check_updates.patch +++ b/freefilesync/debian/patches/ffs_no_check_updates.patch @@ -1,3 +1,4 @@ +Version: 11.10 diff -Naur -x '*.orig' -x '*.rej' -x '*.git*' 11.4-0/FreeFileSync/Source/ui/main_dlg.cpp 11.4-1/FreeFileSync/Source/ui/main_dlg.cpp --- 11.4-0/FreeFileSync/Source/ui/main_dlg.cpp 2020-12-08 08:15:29.432156507 -0500 +++ 11.4-1/FreeFileSync/Source/ui/main_dlg.cpp 2020-12-08 18:29:47.210277596 -0500 @@ -57,16 +58,17 @@ diff -aur 11.7-0/FreeFileSync/Source/ui/version_check.cpp 11.7-1/FreeFileSync/So } catch (const SysError& e) { updateDetailsMsg = _("Failed to retrieve update information.") + + L"\n\n" + e.toString(); } -@@ -178,8 +179,7 @@ +@@ -182,8 +183,8 @@ std::string getOnlineVersion(const std::vector>& postParams) //throw SysError { - const std::string response = sendHttpPost(Zstr("https://api.freefilesync.org/latest_version"), postParams, - ffsUpdateCheckUserAgent, nullptr /*caCertFilePath*/, nullptr /*notifyUnbufferedIO*/).readAll(); //throw SysError + const std::string response = ""; - return trimCpy(response); - } ++ return trimCpy(response); + if (response.empty() || + !std::all_of(response.begin(), response.end(), [](char c) { return isDigit(c) || c == FFS_VERSION_SEPARATOR; }) || @@ -226,13 +226,13 @@ const std::string onlineVersion = getOnlineVersion(geHttpPostParameters(parent)); //throw SysError lastOnlineVersion = onlineVersion; diff --git a/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch b/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch index 6cae409..de8d5e9 100644 --- a/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch +++ b/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch @@ -1,3 +1,6 @@ +Message: Some of these can be traced back to version 10.23 which was the last to not use +Date: 2021-05-10 +Version: 11.10 diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/wx+/choice_enum.h --- 10.24-0/wx+/choice_enum.h 2020-05-17 18:30:59.441499418 -0400 +++ 10.24-1/wx+/choice_enum.h 2020-05-17 18:53:59.893685507 -0400 @@ -9,37 +12,32 @@ diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/ #include #include -@@ -44,11 +43,8 @@ - descrList.push_back({value, {text, tooltip}}); - return *this; - } -- +@@ -47,8 +46,6 @@ + using DescrList = std::vector>>; DescrList descrList; - -- std::unordered_map> itemsSetLast; +- std::unordered_map> labelsSetLast; }; template void setEnumVal(const EnumDescrList& mapping, wxChoice& ctrl, Enum value); template Enum getEnumVal(const EnumDescrList& mapping, const wxChoice& ctrl); -@@ -69,34 +65,26 @@ - - //--------------- impelementation ------------------------------------------- +@@ -71,32 +68,24 @@ template --void setEnumVal(EnumDescrList& mapping, wxChoice& ctrl, Enum value) -+void setEnumVal(const EnumDescrList& mapping, wxChoice& ctrl, Enum value) + void setEnumVal(EnumDescrList& mapping, wxChoice& ctrl, Enum value) { -- auto& itemsSetLast = mapping.itemsSetLast[&ctrl]; +- auto& labelsSetLast = mapping.labelsSetLast[&ctrl]; +- +- std::vector labels; +- for (const auto& [val, texts] : mapping.descrList) +- labels.push_back(texts.first); + ctrl.Clear(); -- std::vector items; +- if (labels != labelsSetLast) + int selectedPos = 0; - for (auto it = mapping.descrList.begin(); it != mapping.descrList.end(); ++it) -- items.push_back(it->second.first); -- -- if (items != itemsSetLast) ++ for (auto it = mapping.descrList.begin(); it != mapping.descrList.end(); ++it) { -- ctrl.Set(items); //expensive as fuck! => only call when absolutely needed! -- itemsSetLast = std::move(items); +- ctrl.Set(labels); //expensive as fuck! => only call when absolutely needed! +- labelsSetLast = std::move(labels); + ctrl.Append(it->second.first); + if (it->first == value) + { @@ -52,7 +50,7 @@ diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/ + } } - //----------------------------------------------------------------- -- + - const auto it = std::find_if(mapping.descrList.begin(), mapping.descrList.end(), [&](const auto& mapItem) { return mapItem.first == value; }); - if (it != mapping.descrList.end()) - { @@ -61,7 +59,7 @@ diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/ - ctrl.SetToolTip(tooltip); - else - ctrl.UnsetToolTip(); - +- - const int selectedPos = it - mapping.descrList.begin(); - ctrl.SetSelection(selectedPos); - } @@ -305,3 +303,58 @@ diff -Naur -x '*.orig' -x '*.rej' -x '*.git*' 11.4-1/wx+/no_flicker.h 11.4-2/wx+ //get rid of margins and space between text blocks/"paragraphs" richCtrl.SetMargins({0, 0}); +Message: Revert __cpp_lib_atomic_wait which is not yet implemented in g++-10 or clang++-11 on Debian +How does Zenju compile this?! +Date: 2021-05-10 +--- 11.9-0/zen/globals.h 2021-05-10 08:10:14.755776667 -0400 ++++ 11.9-1/zen/globals.h 2021-05-10 09:17:25.122241641 -0400 +@@ -223,7 +223,11 @@ + void PodSpinMutex::lock() + { + while (!tryLock()) ++#ifdef __cpp_lib_atomic_wait + flag_.wait(true, std::memory_order_relaxed); ++#else ++ ; ++#endif + } + + +@@ -231,7 +235,9 @@ + void PodSpinMutex::unlock() + { + flag_.clear(std::memory_order_release); ++#ifdef __cpp_lib_atomic_wait + flag_.notify_one(); ++#endif + } + + +Message: This one should work; it's a c++17 specification, but it doesn't work. +Date: 2021-05-10 +diff -aur 11.10-0/zen/legacy_compiler.cpp 11.10-1/zen/legacy_compiler.cpp +--- 11.10-0/zen/legacy_compiler.cpp 2021-05-10 08:10:14.755776667 -0400 ++++ 11.10-1/zen/legacy_compiler.cpp 2021-05-10 10:06:01.998079701 -0400 +@@ -14,15 +14,17 @@ + + double zen::fromChars(const char* first, const char* last) + { +- double num = 0; +- [[maybe_unused]] const std::from_chars_result rv = std::from_chars(first, last, num); +- return num; ++ return std::strtod(std::string(first, last).c_str(), nullptr); + } + + + const char* zen::toChars(char* first, char* last, double num) + { +- const std::to_chars_result rv = std::to_chars(first, last, num); +- return rv.ec == std::errc{} ? rv.ptr : first; ++ const size_t bufSize = last - first; ++ const int charsWritten = std::snprintf(first, bufSize, "%g", num); ++ //C99: returns number of chars written if successful, < 0 or >= bufferSize on failure ++ ++ return 0 <= charsWritten && charsWritten < static_cast(bufSize) ? ++ first + charsWritten : first; + } + diff --git a/freefilesync/debian/patches/series b/freefilesync/debian/patches/series index 7896b6e..7a709ef 100644 --- a/freefilesync/debian/patches/series +++ b/freefilesync/debian/patches/series @@ -9,3 +9,4 @@ ffs_curl.patch revert_zenju_aggressive_upstreamisms.patch ffs_gcc.patch ffs_traditional_view.patch +ffs_desktop_notifications.patch -- cgit From fde0161f64df561a7ad391191852e1c48cf81e8e Mon Sep 17 00:00:00 2001 From: "B. Stack" Date: Mon, 10 May 2021 11:04:21 -0400 Subject: dpkg rc1 --- .../debian/patches/ffs_no_check_updates.patch | 278 +++++++++++++++++---- 1 file changed, 232 insertions(+), 46 deletions(-) (limited to 'freefilesync') diff --git a/freefilesync/debian/patches/ffs_no_check_updates.patch b/freefilesync/debian/patches/ffs_no_check_updates.patch index 00cfb2b..c0c4fc2 100644 --- a/freefilesync/debian/patches/ffs_no_check_updates.patch +++ b/freefilesync/debian/patches/ffs_no_check_updates.patch @@ -1,45 +1,177 @@ Version: 11.10 -diff -Naur -x '*.orig' -x '*.rej' -x '*.git*' 11.4-0/FreeFileSync/Source/ui/main_dlg.cpp 11.4-1/FreeFileSync/Source/ui/main_dlg.cpp ---- 11.4-0/FreeFileSync/Source/ui/main_dlg.cpp 2020-12-08 08:15:29.432156507 -0500 -+++ 11.4-1/FreeFileSync/Source/ui/main_dlg.cpp 2020-12-08 18:29:47.210277596 -0500 -@@ -5552,7 +5552,7 @@ - globalCfg_.lastUpdateCheck = 0; //reset to GlobalSettings.xml default value! +Message: This is a major rewrite of the ffs_no_check_updates patch from before 11.10 which disabled only a few technical www interactions. This current version completely deletes all logic associated with checking the version of the program. +Date: 2021-05-10 +Author: bgstack15 +diff -aur 11.10-1/FreeFileSync/Source/ui/gui_generated.cpp 11.10-2/FreeFileSync/Source/ui/gui_generated.cpp +--- 11.10-1/FreeFileSync/Source/ui/gui_generated.cpp 2021-05-10 08:10:14.747776591 -0400 ++++ 11.10-2/FreeFileSync/Source/ui/gui_generated.cpp 2021-05-10 10:41:28.446374196 -0400 +@@ -109,17 +109,6 @@ + m_menuItemHelp = new wxMenuItem( m_menuHelp, wxID_HELP, wxString( _("&View help") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL ); + m_menuHelp->Append( m_menuItemHelp ); - m_menuItemCheckVersionAuto->Check(updateCheckActive(globalCfg_.lastUpdateCheck)); +- m_menuHelp->AppendSeparator(); - -+ /* - if (shouldRunAutomaticUpdateCheck(globalCfg_.lastUpdateCheck)) +- m_menuItemCheckVersionNow = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("&Check for updates now") ), wxEmptyString, wxITEM_NORMAL ); +- m_menuHelp->Append( m_menuItemCheckVersionNow ); +- +- m_menuItemCheckVersionAuto = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("Check &automatically once a week") ), wxEmptyString, wxITEM_CHECK ); +- m_menuHelp->Append( m_menuItemCheckVersionAuto ); +- m_menuItemCheckVersionAuto->Check( true ); +- +- m_menuHelp->AppendSeparator(); +- + m_menuItemAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About") ) + wxT('\t') + wxT("Shift+F1"), wxEmptyString, wxITEM_NORMAL ); + m_menuHelp->Append( m_menuItemAbout ); + +@@ -1140,8 +1129,6 @@ + m_menuTools->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuExportFileList ), this, m_menuItemExportList->GetId()); + m_menuTools->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuResetLayout ), this, m_menuItem51->GetId()); + m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onShowHelp ), this, m_menuItemHelp->GetId()); +- m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuCheckVersion ), this, m_menuItemCheckVersionNow->GetId()); +- m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuCheckVersionAutomatically ), this, m_menuItemCheckVersionAuto->GetId()); + m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuAbout ), this, m_menuItemAbout->GetId()); + m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onCmpSettings ), NULL, this ); + m_bpButtonCmpConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onCompSettingsContextMouse ), NULL, this ); +diff -aur 11.10-1/FreeFileSync/Source/ui/gui_generated.h 11.10-2/FreeFileSync/Source/ui/gui_generated.h +--- 11.10-1/FreeFileSync/Source/ui/gui_generated.h 2021-05-10 08:10:14.747776591 -0400 ++++ 11.10-2/FreeFileSync/Source/ui/gui_generated.h 2021-05-10 10:52:32.132708289 -0400 +@@ -92,8 +92,6 @@ + wxMenuItem* m_menuItemShowOverview; + wxMenu* m_menuHelp; + wxMenuItem* m_menuItemHelp; +- wxMenuItem* m_menuItemCheckVersionNow; +- wxMenuItem* m_menuItemCheckVersionAuto; + wxMenuItem* m_menuItemAbout; + wxBoxSizer* bSizerPanelHolder; + wxPanel* m_panelTopButtons; +@@ -228,8 +226,6 @@ + virtual void onMenuExportFileList( wxCommandEvent& event ) { event.Skip(); } + virtual void onMenuResetLayout( wxCommandEvent& event ) { event.Skip(); } + virtual void onShowHelp( wxCommandEvent& event ) { event.Skip(); } +- virtual void onMenuCheckVersion( wxCommandEvent& event ) { event.Skip(); } +- virtual void onMenuCheckVersionAutomatically( wxCommandEvent& event ) { event.Skip(); } + virtual void onMenuAbout( wxCommandEvent& event ) { event.Skip(); } + virtual void onCompSettingsContextMouse( wxMouseEvent& event ) { event.Skip(); } + virtual void onCompSettingsContext( wxCommandEvent& event ) { event.Skip(); } +diff -aur 11.10-1/FreeFileSync/Source/ui/main_dlg.cpp 11.10-2/FreeFileSync/Source/ui/main_dlg.cpp +--- 11.10-1/FreeFileSync/Source/ui/main_dlg.cpp 2021-05-10 10:43:26.103497095 -0400 ++++ 11.10-2/FreeFileSync/Source/ui/main_dlg.cpp 2021-05-10 10:52:37.904763378 -0400 +@@ -706,7 +706,6 @@ + + m_menuItemHelp ->SetBitmap(loadImage("help_sicon")); + m_menuItemAbout->SetBitmap(loadImage("about_sicon")); +- m_menuItemCheckVersionNow->SetBitmap(loadImage("update_check_sicon")); + + auto fixMenuIcons = [](wxMenu& menu) //GTK: image must be set *before* adding wxMenuItem to menu or it won't show { - flashStatusInformation(_("Searching for program updates...")); -@@ -5560,6 +5560,7 @@ - automaticUpdateCheckEval(this, globalCfg_.lastUpdateCheck, globalCfg_.lastOnlineVersion, - automaticUpdateCheckRunAsync(automaticUpdateCheckPrepare(*this).get()).get()); - } -+ */ - } +@@ -825,9 +824,6 @@ + //mainly to update row label sizes... + updateGui(); +- //register regular check for update on next idle event +- Bind(wxEVT_IDLE, &MainDialog::onStartupUpdateCheck, this); +- + //asynchronous call to wxWindow::Layout(): fix superfluous frame on right and bottom when FFS is started in fullscreen mode + Bind(wxEVT_IDLE, &MainDialog::onLayoutWindowAsync, this); + wxCommandEvent evtDummy; //call once before onLayoutWindowAsync() +@@ -1078,8 +1074,6 @@ + auiMgr_.GetPane(m_panelSearch).Hide(); //no need to show it on startup + auiMgr_.GetPane(m_panelLog ).Hide(); // -@@ -5583,7 +5584,7 @@ - m_menubar->Append(menu, blackStar + L' ' + replaceCpy(_("FreeFileSync %x is available!"), L"%x", utfTo(globalCfg_.lastOnlineVersion)) + L' ' + blackStar); - } - }; +- m_menuItemCheckVersionAuto->Check(updateCheckActive(globalCfg_.lastUpdateCheck)); - -+ /* - if (shouldRunAutomaticUpdateCheck(globalCfg_.lastUpdateCheck)) - { - flashStatusInformation(_("Searching for program updates...")); -@@ -5600,6 +5601,7 @@ + auiMgr_.Update(); + } + +@@ -5601,72 +5595,6 @@ } - else - showNewVersionReminder(); -+ */ } - -diff -aur 11.7-0/FreeFileSync/Source/ui/version_check.cpp 11.7-1/FreeFileSync/Source/ui/version_check.cpp ---- 11.7-0/FreeFileSync/Source/ui/version_check.cpp 2021-03-02 17:21:26.820360086 -0500 -+++ 11.7-1/FreeFileSync/Source/ui/version_check.cpp 2021-03-02 17:49:29.535590111 -0500 -@@ -70,6 +70,8 @@ +- +-void MainDialog::onMenuCheckVersion(wxCommandEvent& event) +-{ +- checkForUpdateNow(*this, globalCfg_.lastOnlineVersion); +-} +- +- +-void MainDialog::onMenuCheckVersionAutomatically(wxCommandEvent& event) +-{ +- if (updateCheckActive(globalCfg_.lastUpdateCheck)) +- disableUpdateCheck(globalCfg_.lastUpdateCheck); +- else +- globalCfg_.lastUpdateCheck = 0; //reset to GlobalSettings.xml default value! +- +- m_menuItemCheckVersionAuto->Check(updateCheckActive(globalCfg_.lastUpdateCheck)); +- +- if (shouldRunAutomaticUpdateCheck(globalCfg_.lastUpdateCheck)) +- { +- flashStatusInformation(_("Searching for program updates...")); +- //synchronous update check is sufficient here: +- automaticUpdateCheckEval(this, globalCfg_.lastUpdateCheck, globalCfg_.lastOnlineVersion, +- automaticUpdateCheckRunAsync(automaticUpdateCheckPrepare(*this).get()).get()); +- } +-} +- +- +-void MainDialog::onStartupUpdateCheck(wxIdleEvent& event) +-{ +- //execute just once per startup! +- [[maybe_unused]] bool ubOk = Unbind(wxEVT_IDLE, &MainDialog::onStartupUpdateCheck, this); +- assert(ubOk); +- +- auto showNewVersionReminder = [this] +- { +- if (!globalCfg_.lastOnlineVersion.empty() && haveNewerVersionOnline(globalCfg_.lastOnlineVersion)) +- { +- auto menu = new wxMenu(); +- wxMenuItem* newItem = new wxMenuItem(menu, wxID_ANY, _("&Show details")); +- Bind(wxEVT_COMMAND_MENU_SELECTED, [this](wxCommandEvent&) { checkForUpdateNow(*this, globalCfg_.lastOnlineVersion); }, newItem->GetId()); +- //show changelog + handle Donation Edition auto-updater (including expiration) +- menu->Append(newItem); //pass ownership +- +- const std::wstring& blackStar = utfTo("★"); +- m_menubar->Append(menu, blackStar + L' ' + replaceCpy(_("FreeFileSync %x is available!"), L"%x", utfTo(globalCfg_.lastOnlineVersion)) + L' ' + blackStar); +- } +- }; +- +- if (shouldRunAutomaticUpdateCheck(globalCfg_.lastUpdateCheck)) +- { +- flashStatusInformation(_("Searching for program updates...")); +- +- std::shared_ptr resultPrep = automaticUpdateCheckPrepare(*this); //run on main thread: +- +- guiQueue_.processAsync([resultPrep] { return automaticUpdateCheckRunAsync(resultPrep.get()); }, //run on worker thread: (long-running part of the check) +- [this, showNewVersionReminder] (std::shared_ptr&& resultAsync) +- { +- automaticUpdateCheckEval(this, globalCfg_.lastUpdateCheck, globalCfg_.lastOnlineVersion, +- resultAsync.get()); //run on main thread: +- showNewVersionReminder(); +- }); +- } +- else +- showNewVersionReminder(); +-} +- +- + void MainDialog::onLayoutWindowAsync(wxIdleEvent& event) + { + //execute just once per startup! +diff -aur 11.10-1/FreeFileSync/Source/ui/main_dlg.h 11.10-2/FreeFileSync/Source/ui/main_dlg.h +--- 11.10-1/FreeFileSync/Source/ui/main_dlg.h 2021-05-10 08:02:46.059494398 -0400 ++++ 11.10-2/FreeFileSync/Source/ui/main_dlg.h 2021-05-10 10:52:28.108669884 -0400 +@@ -266,8 +266,6 @@ + void onMenuExportFileList (wxCommandEvent& event) override; + void onMenuResetLayout (wxCommandEvent& event) override { resetLayout(); } + void onMenuFindItem (wxCommandEvent& event) override { showFindPanel(true /*show*/); } //CTRL + F +- void onMenuCheckVersion (wxCommandEvent& event) override; +- void onMenuCheckVersionAutomatically(wxCommandEvent& event) override; + void onMenuAbout (wxCommandEvent& event) override; + void onShowHelp (wxCommandEvent& event) override { wxLaunchDefaultBrowser(L"https://freefilesync.org/manual.php?topic=freefilesync"); } + void onMenuQuit (wxCommandEvent& event) override { Close(); } +diff -aur 11.10-1/FreeFileSync/Source/ui/version_check.cpp 11.10-2/FreeFileSync/Source/ui/version_check.cpp +--- 11.10-1/FreeFileSync/Source/ui/version_check.cpp 2021-05-10 08:10:14.751776629 -0400 ++++ 11.10-2/FreeFileSync/Source/ui/version_check.cpp 2021-05-10 10:50:08.595338399 -0400 +@@ -73,6 +73,8 @@ bool fff::shouldRunAutomaticUpdateCheck(time_t lastUpdateCheck) { @@ -48,7 +180,7 @@ diff -aur 11.7-0/FreeFileSync/Source/ui/version_check.cpp 11.7-1/FreeFileSync/So if (lastUpdateCheck == getVersionCheckInactiveId()) return false; -@@ -159,8 +161,7 @@ +@@ -158,8 +160,7 @@ std::wstring updateDetailsMsg; try { @@ -69,21 +201,75 @@ diff -aur 11.7-0/FreeFileSync/Source/ui/version_check.cpp 11.7-1/FreeFileSync/So if (response.empty() || !std::all_of(response.begin(), response.end(), [](char c) { return isDigit(c) || c == FFS_VERSION_SEPARATOR; }) || -@@ -226,13 +226,13 @@ - const std::string onlineVersion = getOnlineVersion(geHttpPostParameters(parent)); //throw SysError - lastOnlineVersion = onlineVersion; +@@ -226,58 +227,6 @@ + } + +-void fff::checkForUpdateNow(wxWindow& parent, std::string& lastOnlineVersion) +-{ +- try +- { +- const std::string onlineVersion = getOnlineVersion(geHttpPostParameters(parent)); //throw SysError +- lastOnlineVersion = onlineVersion; +- - if (haveNewerVersionOnline(onlineVersion)) - showUpdateAvailableDialog(&parent, onlineVersion); - else -+ //if (haveNewerVersionOnline(onlineVersion)) -+ // showUpdateAvailableDialog(&parent, onlineVersion); -+ //else - showNotificationDialog(&parent, DialogInfoType::info, PopupDialogCfg(). - setIcon(loadImage("update_check")). - setTitle(_("Check for Program Updates")). +- showNotificationDialog(&parent, DialogInfoType::info, PopupDialogCfg(). +- setIcon(loadImage("update_check")). +- setTitle(_("Check for Program Updates")). - setMainInstructions(_("FreeFileSync is up to date."))); -+ setMainInstructions(_("Use your package manager for any updates to FreeFileSync."))); - } - catch (const SysError& e) - { +- } +- catch (const SysError& e) +- { +- if (internetIsAlive()) +- { +- lastOnlineVersion = "Unknown"; +- +- switch (showConfirmationDialog(&parent, DialogInfoType::error, PopupDialogCfg(). +- setTitle(_("Check for Program Updates")). +- setMainInstructions(_("Cannot find current FreeFileSync version number online. A newer version is likely available. Check manually now?")). +- setDetailInstructions(e.toString()), _("&Check"), _("&Retry"))) +- { +- case ConfirmationButton2::accept: +- wxLaunchDefaultBrowser(L"https://freefilesync.org/get_latest.php"); +- break; +- case ConfirmationButton2::accept2: //retry +- checkForUpdateNow(parent, lastOnlineVersion); //note: retry via recursion!!! +- break; +- case ConfirmationButton2::cancel: +- break; +- } +- } +- else +- switch (showConfirmationDialog(&parent, DialogInfoType::error, PopupDialogCfg(). +- setTitle(_("Check for Program Updates")). +- setMainInstructions(replaceCpy(_("Unable to connect to %x."), L"%x", L"freefilesync.org")). +- setDetailInstructions(e.toString()), _("&Retry"))) +- { +- case ConfirmationButton::accept: //retry +- checkForUpdateNow(parent, lastOnlineVersion); //note: retry via recursion!!! +- break; +- case ConfirmationButton::cancel: +- break; +- } +- } +-} +- +- + struct fff::UpdateCheckResultPrep + { + std::vector> postParameters; +diff -aur 11.10-1/FreeFileSync/Source/ui/version_check.h 11.10-2/FreeFileSync/Source/ui/version_check.h +--- 11.10-1/FreeFileSync/Source/ui/version_check.h 2021-05-10 08:02:46.067494474 -0400 ++++ 11.10-2/FreeFileSync/Source/ui/version_check.h 2021-05-10 10:50:22.035466671 -0400 +@@ -32,9 +32,6 @@ + void automaticUpdateCheckEval(wxWindow* parent, time_t& lastUpdateCheck, std::string& lastOnlineVersion, + const UpdateCheckResult* asyncResult); + //---------------------------------------------------------------------------- +-//call from main thread: +-void checkForUpdateNow(wxWindow& parent, std::string& lastOnlineVersion); +-//---------------------------------------------------------------------------- + } + + #endif //VERSION_CHECK_H_324872374893274983275 -- cgit From 95ff57a97e933bbabb663e03a13da6dbb23d635c Mon Sep 17 00:00:00 2001 From: "B. Stack" Date: Mon, 10 May 2021 16:23:50 -0400 Subject: ffs 11.10 rpm rc1 --- freefilesync/debian/freefilesync.sharedmimeinfo | 154 ++++++++++- freefilesync/ffs_desktop_notifications.patch | 53 ++++ freefilesync/ffs_no_check_updates.patch | 284 +++++++++++++++++---- freefilesync/freefilesync.spec | 10 +- freefilesync/freefilesync.xml | 154 ++++++++++- .../revert_zenju_aggressive_upstreamisms.patch | 95 +++++-- 6 files changed, 657 insertions(+), 93 deletions(-) create mode 100644 freefilesync/ffs_desktop_notifications.patch (limited to 'freefilesync') diff --git a/freefilesync/debian/freefilesync.sharedmimeinfo b/freefilesync/debian/freefilesync.sharedmimeinfo index d54523f..99f459d 100644 --- a/freefilesync/debian/freefilesync.sharedmimeinfo +++ b/freefilesync/debian/freefilesync.sharedmimeinfo @@ -1,18 +1,150 @@ - + - - FreeFileSync configuration file - Fichier de configuration FreeFileSync + + FreeFileSync Configuration + إعداد FreeFileSync + Конфигурация на FreeFileSync + Nastavení FreeFileSync + FreeFileSync indstillinger + FreeFileSync Konfiguration + Ρυθμίσεις του FreeFileSync + FreeFileSync Configuration + Configuración de FreeFileSync + FreeFileSync määrittelyt + Configuration de FreeFileSync + תצורת FreeFileSync + FreeFileSync कॉन्फ़िगरेशन + FreeFileSync Postavke + FreeFileSync konfigurálása + Configurazione FreeFileSync + FreeFileSync 構成設定 + FreeFileSync 환경설정 + FreeFileSync Konfigūracijos + FreeFileSync configuratie + FreeFileSync konfigurering + Konfiguracja FreeFileSync + Configuração do FreeFileSync + Configuração do FreeFileSync + Configurație FreeFileSync + Конфигурация FreeFileSync + FreeFileSync konfigurácia + Nastavitve FreeFileSync + FreeFileSync Konfiguration + FreeFileSync Yapılandırması + Cấu hình FreeFileSync + FreeFileSync 配置 + FreeFileSync配置 - - RealTimeSync configuration file - Fichier de configuration RealTimeSync - - + - FreeFileSync batch file - Fichier de batch FreeFileSync + FreeFileSync Batch File + الملف الدفعي الخاص بـ FreeFileSync + Пакетен Файл на FreeFileSync + Dávka FreeFileSync + FreeFileSync batchfil + FreeFileSync Batchdatei + Δέσμη Ενεργειών του FreeFileSync + FreeFileSync Batch File + Archivo por lotes de FreeFileSync + FreeFileSync eräajo + Fichiers batch de FreeFileSync + קובץ אצווה של FreeFileSync + FreeFileSync बॅच फ़ाइल + FreeFileSync slijedna datoteka + FreeFileSync kötegelt állomány + File Batch FreeFileSync + FreeFileSync 一括ファイル + FreeFileSync 배치(일괄) 파일 + FreeFileSync Failų Paketas + FreeFileSync batch bestand + FreeFileSync batchfil + Plik wsadowy FreeFileSync + Ficheiro Batch FreeFileSync + Arquivo em Lotes do FreeFileSync + Fișier Set [Batch] FreeFileSync + Файл пакетного задания FreeFileSync + Dávkový súbor FreeFileSync + FreeFileSync paketna datoteka + FreeFileSync Batch-fil + FreeFileSync Toplu İşlem Dosyası + Tập tin thực thi FreeFileSync + FreeFileSync 批处理文件 + FreeFileSync批次檔 + + + + + FreeFileSync Synchronization Database + قاعدة بيانات مزامنة FreeFileSync + Синхронизираща База Данни на FreeFileSync + Synchronizační databáze FreeFileSync + FreeFileSync synkroniseringsdatabase + FreeFileSync Synchronisationsdatenbank + Βάση Δεδομένων Συγχρονισμού του FreeFileSync + FreeFileSync Synchronisation Database + Base de datos de sincronización de FreeFileSync + FreeFileSync Synkronoinnin tietokanta + Base de données de synchronisation de FreeFileSync + בסיס נתוני סנכרון של FreeFileSync + FreeFileSync सिंक्रनाइज़ेशन डेटाबेस + FreeFileSync sinkronizacijska baza podataka + FreeFileSync szinkronizációs adatbázis + Database sincronizzazione FreeFileSync + FreeFileSync 同期データベース + FreeFileSync 동기화 데이터베이스 + FreeFileSync Suvienodinimo duomenų bazė + FreeFileSync synchronisatie database + FreeFileSync synkronisering database + Baza danych FreeFileSync + Base de Dados de Sincronização FreeFileSync + Banco de Dados de Sincronização do FreeFileSync + Bază de Date pentru Sincronizare FreeFileSync + База данных синхронизации FreeFileSync + Synchronizačná databáza FreeFileSync + FreeFileSync sinhronizacijska baza podatkov + FreeFileSync Synkroniseringsdatabas + FreeFileSync Eşitleme Veritabanı + FreeFileSync đồng bộ cơ sở dữ liệu + FreeFileSync 同步数据库 + FreeFileSync同步資料庫 + + + + + RealTimeSync Configuration + إعداد RealTimeSync + Конфигурация на RealTimeSync + Nastavení RealTimeSync + RealTimeSync indstillinger + RealTimeSync Konfiguration + Ρυθμίσεις του RealTimeSync + RealTimeSync Configuration + Configuración de RealTimeSync + RealTimeSync määrittelyt + Configuration de RealTimeSync + תצורת RealTimeSync + RealTimeSync कॉन्फ़िगरेशन + RealTimeSync postavke + RealTimeSync konfigurálása + Configurazione RealTimeSync + RealTimeSync 構成設定 + RealTimeSync 환경설정 + RealTimeSync Nustatymai + RealTimeSync configuratie + RealTimeSync konfigurering + Konfiguracja RealTimeSync + Configuração do RealTimeSync + Configuração do RealTimeSync + Configurație RealTimeSync + Конфигурация RealTimeSync + Konfigurácia RealTimeSync + RealTimeSync nastavitve + RealTimeSync Konfiguration + RealTimeSync Yapılandırması + RealTimeSync Cấu hình đồng bộ thời gian thực + RealTimeSync 配置 + RealTimeSync配置 diff --git a/freefilesync/ffs_desktop_notifications.patch b/freefilesync/ffs_desktop_notifications.patch new file mode 100644 index 0000000..5610fd1 --- /dev/null +++ b/freefilesync/ffs_desktop_notifications.patch @@ -0,0 +1,53 @@ +diff -aur 11.9-1/FreeFileSync/Source/Makefile 11.9-2/FreeFileSync/Source/Makefile +--- 11.9-1/FreeFileSync/Source/Makefile 2021-05-06 16:24:53.987902373 -0400 ++++ 11.9-2/FreeFileSync/Source/Makefile 2021-05-06 17:09:31.512474440 -0400 +@@ -21,6 +22,13 @@ + #treat as system headers so that warnings are hidden: + cxxFlags += -isystem/usr/include/gtk-3.0 + ++with_notifications ?= NO ++ifeq ($(with_notifications),YES) ++# package libglibmm-2.4-dev or glibmm24-devel ++cxxFlags += `pkg-config --cflags giomm-2.4` -Dwith_notifications ++linkFlags += `pkg-config --libs giomm-2.4` ++endif ++ + #support for SELinux (optional) + SELINUX_EXISTING=$(shell pkg-config --exists libselinux && echo YES) + ifeq ($(SELINUX_EXISTING),YES) +diff -aur 11.9-1/FreeFileSync/Source/ui/progress_indicator.cpp 11.9-2/FreeFileSync/Source/ui/progress_indicator.cpp +--- 11.9-1/FreeFileSync/Source/ui/progress_indicator.cpp 2021-05-06 15:20:34.286831934 -0400 ++++ 11.9-2/FreeFileSync/Source/ui/progress_indicator.cpp 2021-05-06 17:11:45.486004158 -0400 +@@ -32,6 +32,9 @@ + #include "../perf_check.h" + #include "../icon_buffer.h" + ++#ifdef with_notifications ++#include ++#endif + + using namespace zen; + using namespace fff; +@@ -1359,6 +1362,22 @@ + pnl_.m_staticTextPhase->SetLabel(getSyncResultLabel(syncResult)); + //pnl_.m_bitmapStatus->SetToolTip(); -> redundant + ++#ifdef with_notifications ++ // Desktop notification for Linux ++ char title[] = "FreeFileSync"; ++ // from https://stackoverflow.com/a/12097772 ++ std::wstring ssR {getSyncResultLabel(syncResult)}; ++ std::string body; ++ std::transform(ssR.begin(), ssR.end(), std::back_inserter(body), [] (wchar_t c){ return (char)c;}); ++ char icon[] = "freefilesync"; ++ auto Application = Gio::Application::create("org.zenju.freefilesync", Gio::APPLICATION_FLAGS_NONE); ++ Application->register_application(); ++ auto Notification = Gio::Notification::create(title); ++ Notification->set_body(body); ++ auto Icon = Gio::ThemedIcon::create(icon); ++ Notification->set_icon (Icon); ++ Application->send_notification(Notification); ++#endif + //show status on Windows 7 taskbar + if (taskbar_.get()) + switch (syncResult) diff --git a/freefilesync/ffs_no_check_updates.patch b/freefilesync/ffs_no_check_updates.patch index d90bf7d..c0c4fc2 100644 --- a/freefilesync/ffs_no_check_updates.patch +++ b/freefilesync/ffs_no_check_updates.patch @@ -1,44 +1,177 @@ -diff -Naur -x '*.orig' -x '*.rej' -x '*.git*' 11.4-0/FreeFileSync/Source/ui/main_dlg.cpp 11.4-1/FreeFileSync/Source/ui/main_dlg.cpp ---- 11.4-0/FreeFileSync/Source/ui/main_dlg.cpp 2020-12-08 08:15:29.432156507 -0500 -+++ 11.4-1/FreeFileSync/Source/ui/main_dlg.cpp 2020-12-08 18:29:47.210277596 -0500 -@@ -5552,7 +5552,7 @@ - globalCfg_.lastUpdateCheck = 0; //reset to GlobalSettings.xml default value! +Version: 11.10 +Message: This is a major rewrite of the ffs_no_check_updates patch from before 11.10 which disabled only a few technical www interactions. This current version completely deletes all logic associated with checking the version of the program. +Date: 2021-05-10 +Author: bgstack15 +diff -aur 11.10-1/FreeFileSync/Source/ui/gui_generated.cpp 11.10-2/FreeFileSync/Source/ui/gui_generated.cpp +--- 11.10-1/FreeFileSync/Source/ui/gui_generated.cpp 2021-05-10 08:10:14.747776591 -0400 ++++ 11.10-2/FreeFileSync/Source/ui/gui_generated.cpp 2021-05-10 10:41:28.446374196 -0400 +@@ -109,17 +109,6 @@ + m_menuItemHelp = new wxMenuItem( m_menuHelp, wxID_HELP, wxString( _("&View help") ) + wxT('\t') + wxT("F1"), wxEmptyString, wxITEM_NORMAL ); + m_menuHelp->Append( m_menuItemHelp ); - m_menuItemCheckVersionAuto->Check(updateCheckActive(globalCfg_.lastUpdateCheck)); +- m_menuHelp->AppendSeparator(); - -+ /* - if (shouldRunAutomaticUpdateCheck(globalCfg_.lastUpdateCheck)) +- m_menuItemCheckVersionNow = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("&Check for updates now") ), wxEmptyString, wxITEM_NORMAL ); +- m_menuHelp->Append( m_menuItemCheckVersionNow ); +- +- m_menuItemCheckVersionAuto = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("Check &automatically once a week") ), wxEmptyString, wxITEM_CHECK ); +- m_menuHelp->Append( m_menuItemCheckVersionAuto ); +- m_menuItemCheckVersionAuto->Check( true ); +- +- m_menuHelp->AppendSeparator(); +- + m_menuItemAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About") ) + wxT('\t') + wxT("Shift+F1"), wxEmptyString, wxITEM_NORMAL ); + m_menuHelp->Append( m_menuItemAbout ); + +@@ -1140,8 +1129,6 @@ + m_menuTools->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuExportFileList ), this, m_menuItemExportList->GetId()); + m_menuTools->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuResetLayout ), this, m_menuItem51->GetId()); + m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onShowHelp ), this, m_menuItemHelp->GetId()); +- m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuCheckVersion ), this, m_menuItemCheckVersionNow->GetId()); +- m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuCheckVersionAutomatically ), this, m_menuItemCheckVersionAuto->GetId()); + m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuAbout ), this, m_menuItemAbout->GetId()); + m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onCmpSettings ), NULL, this ); + m_bpButtonCmpConfig->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( MainDialogGenerated::onCompSettingsContextMouse ), NULL, this ); +diff -aur 11.10-1/FreeFileSync/Source/ui/gui_generated.h 11.10-2/FreeFileSync/Source/ui/gui_generated.h +--- 11.10-1/FreeFileSync/Source/ui/gui_generated.h 2021-05-10 08:10:14.747776591 -0400 ++++ 11.10-2/FreeFileSync/Source/ui/gui_generated.h 2021-05-10 10:52:32.132708289 -0400 +@@ -92,8 +92,6 @@ + wxMenuItem* m_menuItemShowOverview; + wxMenu* m_menuHelp; + wxMenuItem* m_menuItemHelp; +- wxMenuItem* m_menuItemCheckVersionNow; +- wxMenuItem* m_menuItemCheckVersionAuto; + wxMenuItem* m_menuItemAbout; + wxBoxSizer* bSizerPanelHolder; + wxPanel* m_panelTopButtons; +@@ -228,8 +226,6 @@ + virtual void onMenuExportFileList( wxCommandEvent& event ) { event.Skip(); } + virtual void onMenuResetLayout( wxCommandEvent& event ) { event.Skip(); } + virtual void onShowHelp( wxCommandEvent& event ) { event.Skip(); } +- virtual void onMenuCheckVersion( wxCommandEvent& event ) { event.Skip(); } +- virtual void onMenuCheckVersionAutomatically( wxCommandEvent& event ) { event.Skip(); } + virtual void onMenuAbout( wxCommandEvent& event ) { event.Skip(); } + virtual void onCompSettingsContextMouse( wxMouseEvent& event ) { event.Skip(); } + virtual void onCompSettingsContext( wxCommandEvent& event ) { event.Skip(); } +diff -aur 11.10-1/FreeFileSync/Source/ui/main_dlg.cpp 11.10-2/FreeFileSync/Source/ui/main_dlg.cpp +--- 11.10-1/FreeFileSync/Source/ui/main_dlg.cpp 2021-05-10 10:43:26.103497095 -0400 ++++ 11.10-2/FreeFileSync/Source/ui/main_dlg.cpp 2021-05-10 10:52:37.904763378 -0400 +@@ -706,7 +706,6 @@ + + m_menuItemHelp ->SetBitmap(loadImage("help_sicon")); + m_menuItemAbout->SetBitmap(loadImage("about_sicon")); +- m_menuItemCheckVersionNow->SetBitmap(loadImage("update_check_sicon")); + + auto fixMenuIcons = [](wxMenu& menu) //GTK: image must be set *before* adding wxMenuItem to menu or it won't show { - flashStatusInformation(_("Searching for program updates...")); -@@ -5560,6 +5560,7 @@ - automaticUpdateCheckEval(this, globalCfg_.lastUpdateCheck, globalCfg_.lastOnlineVersion, - automaticUpdateCheckRunAsync(automaticUpdateCheckPrepare(*this).get()).get()); - } -+ */ - } +@@ -825,9 +824,6 @@ + //mainly to update row label sizes... + updateGui(); +- //register regular check for update on next idle event +- Bind(wxEVT_IDLE, &MainDialog::onStartupUpdateCheck, this); +- + //asynchronous call to wxWindow::Layout(): fix superfluous frame on right and bottom when FFS is started in fullscreen mode + Bind(wxEVT_IDLE, &MainDialog::onLayoutWindowAsync, this); + wxCommandEvent evtDummy; //call once before onLayoutWindowAsync() +@@ -1078,8 +1074,6 @@ + auiMgr_.GetPane(m_panelSearch).Hide(); //no need to show it on startup + auiMgr_.GetPane(m_panelLog ).Hide(); // -@@ -5583,7 +5584,7 @@ - m_menubar->Append(menu, blackStar + L' ' + replaceCpy(_("FreeFileSync %x is available!"), L"%x", utfTo(globalCfg_.lastOnlineVersion)) + L' ' + blackStar); - } - }; +- m_menuItemCheckVersionAuto->Check(updateCheckActive(globalCfg_.lastUpdateCheck)); - -+ /* - if (shouldRunAutomaticUpdateCheck(globalCfg_.lastUpdateCheck)) - { - flashStatusInformation(_("Searching for program updates...")); -@@ -5600,6 +5601,7 @@ + auiMgr_.Update(); + } + +@@ -5601,72 +5595,6 @@ } - else - showNewVersionReminder(); -+ */ } - -diff -aur 11.7-0/FreeFileSync/Source/ui/version_check.cpp 11.7-1/FreeFileSync/Source/ui/version_check.cpp ---- 11.7-0/FreeFileSync/Source/ui/version_check.cpp 2021-03-02 17:21:26.820360086 -0500 -+++ 11.7-1/FreeFileSync/Source/ui/version_check.cpp 2021-03-02 17:49:29.535590111 -0500 -@@ -70,6 +70,8 @@ +- +-void MainDialog::onMenuCheckVersion(wxCommandEvent& event) +-{ +- checkForUpdateNow(*this, globalCfg_.lastOnlineVersion); +-} +- +- +-void MainDialog::onMenuCheckVersionAutomatically(wxCommandEvent& event) +-{ +- if (updateCheckActive(globalCfg_.lastUpdateCheck)) +- disableUpdateCheck(globalCfg_.lastUpdateCheck); +- else +- globalCfg_.lastUpdateCheck = 0; //reset to GlobalSettings.xml default value! +- +- m_menuItemCheckVersionAuto->Check(updateCheckActive(globalCfg_.lastUpdateCheck)); +- +- if (shouldRunAutomaticUpdateCheck(globalCfg_.lastUpdateCheck)) +- { +- flashStatusInformation(_("Searching for program updates...")); +- //synchronous update check is sufficient here: +- automaticUpdateCheckEval(this, globalCfg_.lastUpdateCheck, globalCfg_.lastOnlineVersion, +- automaticUpdateCheckRunAsync(automaticUpdateCheckPrepare(*this).get()).get()); +- } +-} +- +- +-void MainDialog::onStartupUpdateCheck(wxIdleEvent& event) +-{ +- //execute just once per startup! +- [[maybe_unused]] bool ubOk = Unbind(wxEVT_IDLE, &MainDialog::onStartupUpdateCheck, this); +- assert(ubOk); +- +- auto showNewVersionReminder = [this] +- { +- if (!globalCfg_.lastOnlineVersion.empty() && haveNewerVersionOnline(globalCfg_.lastOnlineVersion)) +- { +- auto menu = new wxMenu(); +- wxMenuItem* newItem = new wxMenuItem(menu, wxID_ANY, _("&Show details")); +- Bind(wxEVT_COMMAND_MENU_SELECTED, [this](wxCommandEvent&) { checkForUpdateNow(*this, globalCfg_.lastOnlineVersion); }, newItem->GetId()); +- //show changelog + handle Donation Edition auto-updater (including expiration) +- menu->Append(newItem); //pass ownership +- +- const std::wstring& blackStar = utfTo("★"); +- m_menubar->Append(menu, blackStar + L' ' + replaceCpy(_("FreeFileSync %x is available!"), L"%x", utfTo(globalCfg_.lastOnlineVersion)) + L' ' + blackStar); +- } +- }; +- +- if (shouldRunAutomaticUpdateCheck(globalCfg_.lastUpdateCheck)) +- { +- flashStatusInformation(_("Searching for program updates...")); +- +- std::shared_ptr resultPrep = automaticUpdateCheckPrepare(*this); //run on main thread: +- +- guiQueue_.processAsync([resultPrep] { return automaticUpdateCheckRunAsync(resultPrep.get()); }, //run on worker thread: (long-running part of the check) +- [this, showNewVersionReminder] (std::shared_ptr&& resultAsync) +- { +- automaticUpdateCheckEval(this, globalCfg_.lastUpdateCheck, globalCfg_.lastOnlineVersion, +- resultAsync.get()); //run on main thread: +- showNewVersionReminder(); +- }); +- } +- else +- showNewVersionReminder(); +-} +- +- + void MainDialog::onLayoutWindowAsync(wxIdleEvent& event) + { + //execute just once per startup! +diff -aur 11.10-1/FreeFileSync/Source/ui/main_dlg.h 11.10-2/FreeFileSync/Source/ui/main_dlg.h +--- 11.10-1/FreeFileSync/Source/ui/main_dlg.h 2021-05-10 08:02:46.059494398 -0400 ++++ 11.10-2/FreeFileSync/Source/ui/main_dlg.h 2021-05-10 10:52:28.108669884 -0400 +@@ -266,8 +266,6 @@ + void onMenuExportFileList (wxCommandEvent& event) override; + void onMenuResetLayout (wxCommandEvent& event) override { resetLayout(); } + void onMenuFindItem (wxCommandEvent& event) override { showFindPanel(true /*show*/); } //CTRL + F +- void onMenuCheckVersion (wxCommandEvent& event) override; +- void onMenuCheckVersionAutomatically(wxCommandEvent& event) override; + void onMenuAbout (wxCommandEvent& event) override; + void onShowHelp (wxCommandEvent& event) override { wxLaunchDefaultBrowser(L"https://freefilesync.org/manual.php?topic=freefilesync"); } + void onMenuQuit (wxCommandEvent& event) override { Close(); } +diff -aur 11.10-1/FreeFileSync/Source/ui/version_check.cpp 11.10-2/FreeFileSync/Source/ui/version_check.cpp +--- 11.10-1/FreeFileSync/Source/ui/version_check.cpp 2021-05-10 08:10:14.751776629 -0400 ++++ 11.10-2/FreeFileSync/Source/ui/version_check.cpp 2021-05-10 10:50:08.595338399 -0400 +@@ -73,6 +73,8 @@ bool fff::shouldRunAutomaticUpdateCheck(time_t lastUpdateCheck) { @@ -47,7 +180,7 @@ diff -aur 11.7-0/FreeFileSync/Source/ui/version_check.cpp 11.7-1/FreeFileSync/So if (lastUpdateCheck == getVersionCheckInactiveId()) return false; -@@ -159,8 +161,7 @@ +@@ -158,8 +160,7 @@ std::wstring updateDetailsMsg; try { @@ -57,31 +190,86 @@ diff -aur 11.7-0/FreeFileSync/Source/ui/version_check.cpp 11.7-1/FreeFileSync/So } catch (const SysError& e) { updateDetailsMsg = _("Failed to retrieve update information.") + + L"\n\n" + e.toString(); } -@@ -178,8 +179,7 @@ +@@ -182,8 +183,8 @@ std::string getOnlineVersion(const std::vector>& postParams) //throw SysError { - const std::string response = sendHttpPost(Zstr("https://api.freefilesync.org/latest_version"), postParams, - ffsUpdateCheckUserAgent, nullptr /*caCertFilePath*/, nullptr /*notifyUnbufferedIO*/).readAll(); //throw SysError + const std::string response = ""; - return trimCpy(response); ++ return trimCpy(response); + + if (response.empty() || + !std::all_of(response.begin(), response.end(), [](char c) { return isDigit(c) || c == FFS_VERSION_SEPARATOR; }) || +@@ -226,58 +227,6 @@ } -@@ -226,13 +226,13 @@ - const std::string onlineVersion = getOnlineVersion(geHttpPostParameters(parent)); //throw SysError - lastOnlineVersion = onlineVersion; +-void fff::checkForUpdateNow(wxWindow& parent, std::string& lastOnlineVersion) +-{ +- try +- { +- const std::string onlineVersion = getOnlineVersion(geHttpPostParameters(parent)); //throw SysError +- lastOnlineVersion = onlineVersion; +- - if (haveNewerVersionOnline(onlineVersion)) - showUpdateAvailableDialog(&parent, onlineVersion); - else -+ //if (haveNewerVersionOnline(onlineVersion)) -+ // showUpdateAvailableDialog(&parent, onlineVersion); -+ //else - showNotificationDialog(&parent, DialogInfoType::info, PopupDialogCfg(). - setIcon(loadImage("update_check")). - setTitle(_("Check for Program Updates")). +- showNotificationDialog(&parent, DialogInfoType::info, PopupDialogCfg(). +- setIcon(loadImage("update_check")). +- setTitle(_("Check for Program Updates")). - setMainInstructions(_("FreeFileSync is up to date."))); -+ setMainInstructions(_("Use your package manager for any updates to FreeFileSync."))); - } - catch (const SysError& e) - { +- } +- catch (const SysError& e) +- { +- if (internetIsAlive()) +- { +- lastOnlineVersion = "Unknown"; +- +- switch (showConfirmationDialog(&parent, DialogInfoType::error, PopupDialogCfg(). +- setTitle(_("Check for Program Updates")). +- setMainInstructions(_("Cannot find current FreeFileSync version number online. A newer version is likely available. Check manually now?")). +- setDetailInstructions(e.toString()), _("&Check"), _("&Retry"))) +- { +- case ConfirmationButton2::accept: +- wxLaunchDefaultBrowser(L"https://freefilesync.org/get_latest.php"); +- break; +- case ConfirmationButton2::accept2: //retry +- checkForUpdateNow(parent, lastOnlineVersion); //note: retry via recursion!!! +- break; +- case ConfirmationButton2::cancel: +- break; +- } +- } +- else +- switch (showConfirmationDialog(&parent, DialogInfoType::error, PopupDialogCfg(). +- setTitle(_("Check for Program Updates")). +- setMainInstructions(replaceCpy(_("Unable to connect to %x."), L"%x", L"freefilesync.org")). +- setDetailInstructions(e.toString()), _("&Retry"))) +- { +- case ConfirmationButton::accept: //retry +- checkForUpdateNow(parent, lastOnlineVersion); //note: retry via recursion!!! +- break; +- case ConfirmationButton::cancel: +- break; +- } +- } +-} +- +- + struct fff::UpdateCheckResultPrep + { + std::vector> postParameters; +diff -aur 11.10-1/FreeFileSync/Source/ui/version_check.h 11.10-2/FreeFileSync/Source/ui/version_check.h +--- 11.10-1/FreeFileSync/Source/ui/version_check.h 2021-05-10 08:02:46.067494474 -0400 ++++ 11.10-2/FreeFileSync/Source/ui/version_check.h 2021-05-10 10:50:22.035466671 -0400 +@@ -32,9 +32,6 @@ + void automaticUpdateCheckEval(wxWindow* parent, time_t& lastUpdateCheck, std::string& lastOnlineVersion, + const UpdateCheckResult* asyncResult); + //---------------------------------------------------------------------------- +-//call from main thread: +-void checkForUpdateNow(wxWindow& parent, std::string& lastOnlineVersion); +-//---------------------------------------------------------------------------- + } + + #endif //VERSION_CHECK_H_324872374893274983275 diff --git a/freefilesync/freefilesync.spec b/freefilesync/freefilesync.spec index 7b8dbec..6ef2bb3 100644 --- a/freefilesync/freefilesync.spec +++ b/freefilesync/freefilesync.spec @@ -19,7 +19,7 @@ %define libssh2_name libssh2-%{name} %endif Name: freefilesync -Version: 11.9 +Version: 11.10 Release: 1%{?dist} Summary: A file synchronization utility @@ -44,8 +44,9 @@ Patch8: ffs_bit.patch Patch9: ffs_no_eraseif.patch Patch10: revert_zenju_aggressive_upstreamisms.patch Patch11: ffs_traditional_view.patch +Patch12: ffs_desktop_notifications.patch -Packager: B Stack +Packager: B. Stack BuildRequires: brotli-devel BuildRequires: wxGTK3-devel BuildRequires: desktop-file-utils @@ -54,6 +55,7 @@ BuildRequires: ImageMagick BuildRequires: libcurl-devel %{min_libcurl} BuildRequires: %{libssh2_name}-devel %{min_libssh2} BuildRequires: patch +BuildRequires: pkgconfig(giomm-2.4) BuildRequires: pkgconfig(gtk+-2.0) BuildRequires: pkgconfig(libselinux) BuildRequires: pkgconfig(zlib) @@ -104,6 +106,7 @@ find . ! -type d \( -name '*.c' -o -name '*.cpp' -o -name '*.h' \) \ %endif %patch10 -p1 %patch11 -p1 +%patch12 -p1 # custom build parameters for packaging application in rpm # fedora provides build_cxxflags, which is really just optflags @@ -207,6 +210,9 @@ update-mime-database -n ${_datadir}/mime 1>/dev/null 2>&1 & : %ghost %config %attr(666, -, -) %{_datadir}/%{name}/GlobalSettings.xml %changelog +* Mon May 10 2021 B. Stack - 11.10-1 +- version bump + * Mon Apr 05 2021 B. Stack - 11.9-1 - version bump diff --git a/freefilesync/freefilesync.xml b/freefilesync/freefilesync.xml index d54523f..99f459d 100644 --- a/freefilesync/freefilesync.xml +++ b/freefilesync/freefilesync.xml @@ -1,18 +1,150 @@ - + - - FreeFileSync configuration file - Fichier de configuration FreeFileSync + + FreeFileSync Configuration + إعداد FreeFileSync + Конфигурация на FreeFileSync + Nastavení FreeFileSync + FreeFileSync indstillinger + FreeFileSync Konfiguration + Ρυθμίσεις του FreeFileSync + FreeFileSync Configuration + Configuración de FreeFileSync + FreeFileSync määrittelyt + Configuration de FreeFileSync + תצורת FreeFileSync + FreeFileSync कॉन्फ़िगरेशन + FreeFileSync Postavke + FreeFileSync konfigurálása + Configurazione FreeFileSync + FreeFileSync 構成設定 + FreeFileSync 환경설정 + FreeFileSync Konfigūracijos + FreeFileSync configuratie + FreeFileSync konfigurering + Konfiguracja FreeFileSync + Configuração do FreeFileSync + Configuração do FreeFileSync + Configurație FreeFileSync + Конфигурация FreeFileSync + FreeFileSync konfigurácia + Nastavitve FreeFileSync + FreeFileSync Konfiguration + FreeFileSync Yapılandırması + Cấu hình FreeFileSync + FreeFileSync 配置 + FreeFileSync配置 - - RealTimeSync configuration file - Fichier de configuration RealTimeSync - - + - FreeFileSync batch file - Fichier de batch FreeFileSync + FreeFileSync Batch File + الملف الدفعي الخاص بـ FreeFileSync + Пакетен Файл на FreeFileSync + Dávka FreeFileSync + FreeFileSync batchfil + FreeFileSync Batchdatei + Δέσμη Ενεργειών του FreeFileSync + FreeFileSync Batch File + Archivo por lotes de FreeFileSync + FreeFileSync eräajo + Fichiers batch de FreeFileSync + קובץ אצווה של FreeFileSync + FreeFileSync बॅच फ़ाइल + FreeFileSync slijedna datoteka + FreeFileSync kötegelt állomány + File Batch FreeFileSync + FreeFileSync 一括ファイル + FreeFileSync 배치(일괄) 파일 + FreeFileSync Failų Paketas + FreeFileSync batch bestand + FreeFileSync batchfil + Plik wsadowy FreeFileSync + Ficheiro Batch FreeFileSync + Arquivo em Lotes do FreeFileSync + Fișier Set [Batch] FreeFileSync + Файл пакетного задания FreeFileSync + Dávkový súbor FreeFileSync + FreeFileSync paketna datoteka + FreeFileSync Batch-fil + FreeFileSync Toplu İşlem Dosyası + Tập tin thực thi FreeFileSync + FreeFileSync 批处理文件 + FreeFileSync批次檔 + + + + + FreeFileSync Synchronization Database + قاعدة بيانات مزامنة FreeFileSync + Синхронизираща База Данни на FreeFileSync + Synchronizační databáze FreeFileSync + FreeFileSync synkroniseringsdatabase + FreeFileSync Synchronisationsdatenbank + Βάση Δεδομένων Συγχρονισμού του FreeFileSync + FreeFileSync Synchronisation Database + Base de datos de sincronización de FreeFileSync + FreeFileSync Synkronoinnin tietokanta + Base de données de synchronisation de FreeFileSync + בסיס נתוני סנכרון של FreeFileSync + FreeFileSync सिंक्रनाइज़ेशन डेटाबेस + FreeFileSync sinkronizacijska baza podataka + FreeFileSync szinkronizációs adatbázis + Database sincronizzazione FreeFileSync + FreeFileSync 同期データベース + FreeFileSync 동기화 데이터베이스 + FreeFileSync Suvienodinimo duomenų bazė + FreeFileSync synchronisatie database + FreeFileSync synkronisering database + Baza danych FreeFileSync + Base de Dados de Sincronização FreeFileSync + Banco de Dados de Sincronização do FreeFileSync + Bază de Date pentru Sincronizare FreeFileSync + База данных синхронизации FreeFileSync + Synchronizačná databáza FreeFileSync + FreeFileSync sinhronizacijska baza podatkov + FreeFileSync Synkroniseringsdatabas + FreeFileSync Eşitleme Veritabanı + FreeFileSync đồng bộ cơ sở dữ liệu + FreeFileSync 同步数据库 + FreeFileSync同步資料庫 + + + + + RealTimeSync Configuration + إعداد RealTimeSync + Конфигурация на RealTimeSync + Nastavení RealTimeSync + RealTimeSync indstillinger + RealTimeSync Konfiguration + Ρυθμίσεις του RealTimeSync + RealTimeSync Configuration + Configuración de RealTimeSync + RealTimeSync määrittelyt + Configuration de RealTimeSync + תצורת RealTimeSync + RealTimeSync कॉन्फ़िगरेशन + RealTimeSync postavke + RealTimeSync konfigurálása + Configurazione RealTimeSync + RealTimeSync 構成設定 + RealTimeSync 환경설정 + RealTimeSync Nustatymai + RealTimeSync configuratie + RealTimeSync konfigurering + Konfiguracja RealTimeSync + Configuração do RealTimeSync + Configuração do RealTimeSync + Configurație RealTimeSync + Конфигурация RealTimeSync + Konfigurácia RealTimeSync + RealTimeSync nastavitve + RealTimeSync Konfiguration + RealTimeSync Yapılandırması + RealTimeSync Cấu hình đồng bộ thời gian thực + RealTimeSync 配置 + RealTimeSync配置 diff --git a/freefilesync/revert_zenju_aggressive_upstreamisms.patch b/freefilesync/revert_zenju_aggressive_upstreamisms.patch index 6cae409..de8d5e9 100644 --- a/freefilesync/revert_zenju_aggressive_upstreamisms.patch +++ b/freefilesync/revert_zenju_aggressive_upstreamisms.patch @@ -1,3 +1,6 @@ +Message: Some of these can be traced back to version 10.23 which was the last to not use +Date: 2021-05-10 +Version: 11.10 diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/wx+/choice_enum.h --- 10.24-0/wx+/choice_enum.h 2020-05-17 18:30:59.441499418 -0400 +++ 10.24-1/wx+/choice_enum.h 2020-05-17 18:53:59.893685507 -0400 @@ -9,37 +12,32 @@ diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/ #include #include -@@ -44,11 +43,8 @@ - descrList.push_back({value, {text, tooltip}}); - return *this; - } -- +@@ -47,8 +46,6 @@ + using DescrList = std::vector>>; DescrList descrList; - -- std::unordered_map> itemsSetLast; +- std::unordered_map> labelsSetLast; }; template void setEnumVal(const EnumDescrList& mapping, wxChoice& ctrl, Enum value); template Enum getEnumVal(const EnumDescrList& mapping, const wxChoice& ctrl); -@@ -69,34 +65,26 @@ - - //--------------- impelementation ------------------------------------------- +@@ -71,32 +68,24 @@ template --void setEnumVal(EnumDescrList& mapping, wxChoice& ctrl, Enum value) -+void setEnumVal(const EnumDescrList& mapping, wxChoice& ctrl, Enum value) + void setEnumVal(EnumDescrList& mapping, wxChoice& ctrl, Enum value) { -- auto& itemsSetLast = mapping.itemsSetLast[&ctrl]; +- auto& labelsSetLast = mapping.labelsSetLast[&ctrl]; +- +- std::vector labels; +- for (const auto& [val, texts] : mapping.descrList) +- labels.push_back(texts.first); + ctrl.Clear(); -- std::vector items; +- if (labels != labelsSetLast) + int selectedPos = 0; - for (auto it = mapping.descrList.begin(); it != mapping.descrList.end(); ++it) -- items.push_back(it->second.first); -- -- if (items != itemsSetLast) ++ for (auto it = mapping.descrList.begin(); it != mapping.descrList.end(); ++it) { -- ctrl.Set(items); //expensive as fuck! => only call when absolutely needed! -- itemsSetLast = std::move(items); +- ctrl.Set(labels); //expensive as fuck! => only call when absolutely needed! +- labelsSetLast = std::move(labels); + ctrl.Append(it->second.first); + if (it->first == value) + { @@ -52,7 +50,7 @@ diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/ + } } - //----------------------------------------------------------------- -- + - const auto it = std::find_if(mapping.descrList.begin(), mapping.descrList.end(), [&](const auto& mapItem) { return mapItem.first == value; }); - if (it != mapping.descrList.end()) - { @@ -61,7 +59,7 @@ diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/ - ctrl.SetToolTip(tooltip); - else - ctrl.UnsetToolTip(); - +- - const int selectedPos = it - mapping.descrList.begin(); - ctrl.SetSelection(selectedPos); - } @@ -305,3 +303,58 @@ diff -Naur -x '*.orig' -x '*.rej' -x '*.git*' 11.4-1/wx+/no_flicker.h 11.4-2/wx+ //get rid of margins and space between text blocks/"paragraphs" richCtrl.SetMargins({0, 0}); +Message: Revert __cpp_lib_atomic_wait which is not yet implemented in g++-10 or clang++-11 on Debian +How does Zenju compile this?! +Date: 2021-05-10 +--- 11.9-0/zen/globals.h 2021-05-10 08:10:14.755776667 -0400 ++++ 11.9-1/zen/globals.h 2021-05-10 09:17:25.122241641 -0400 +@@ -223,7 +223,11 @@ + void PodSpinMutex::lock() + { + while (!tryLock()) ++#ifdef __cpp_lib_atomic_wait + flag_.wait(true, std::memory_order_relaxed); ++#else ++ ; ++#endif + } + + +@@ -231,7 +235,9 @@ + void PodSpinMutex::unlock() + { + flag_.clear(std::memory_order_release); ++#ifdef __cpp_lib_atomic_wait + flag_.notify_one(); ++#endif + } + + +Message: This one should work; it's a c++17 specification, but it doesn't work. +Date: 2021-05-10 +diff -aur 11.10-0/zen/legacy_compiler.cpp 11.10-1/zen/legacy_compiler.cpp +--- 11.10-0/zen/legacy_compiler.cpp 2021-05-10 08:10:14.755776667 -0400 ++++ 11.10-1/zen/legacy_compiler.cpp 2021-05-10 10:06:01.998079701 -0400 +@@ -14,15 +14,17 @@ + + double zen::fromChars(const char* first, const char* last) + { +- double num = 0; +- [[maybe_unused]] const std::from_chars_result rv = std::from_chars(first, last, num); +- return num; ++ return std::strtod(std::string(first, last).c_str(), nullptr); + } + + + const char* zen::toChars(char* first, char* last, double num) + { +- const std::to_chars_result rv = std::to_chars(first, last, num); +- return rv.ec == std::errc{} ? rv.ptr : first; ++ const size_t bufSize = last - first; ++ const int charsWritten = std::snprintf(first, bufSize, "%g", num); ++ //C99: returns number of chars written if successful, < 0 or >= bufferSize on failure ++ ++ return 0 <= charsWritten && charsWritten < static_cast(bufSize) ? ++ first + charsWritten : first; + } + -- cgit