Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package filezilla for openSUSE:Factory checked in at 2023-03-04 22:43:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/filezilla (Old) and /work/SRC/openSUSE:Factory/.filezilla.new.31432 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "filezilla" Sat Mar 4 22:43:58 2023 rev:106 rq:1069411 version:3.63.2.1 Changes: -------- --- /work/SRC/openSUSE:Factory/filezilla/filezilla.changes 2023-02-24 18:08:45.821639937 +0100 +++ /work/SRC/openSUSE:Factory/.filezilla.new.31432/filezilla.changes 2023-03-04 22:44:33.340138592 +0100 @@ -1,0 +2,15 @@ +Sat Mar 4 14:33:18 UTC 2023 - ecsos <ec...@opensuse.org> + +- Update to 3.63.2.1 + * Bugfixes and minor changes: + - macOS: Several rendering fixes in dark mode + - macOS: Disable automatic quote/dash substitution in text + input fields + - MSW: Fixed an issue with Drag&Drop to Explorer on systems + that use shortened 8.3 pathnames in environment variables + - MSW: If FileZilla was installed for current user only, + updating with the installer now skips the UAC prompt + - Updated to libfilezilla 0.41.1 to fix a rare crash + - Official binaries are now built againt GnuTLS 3.8.0 + +------------------------------------------------------------------- Old: ---- FileZilla_3.63.2_src.tar.bz2 New: ---- FileZilla_3.63.2.1_src.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ filezilla.spec ++++++ --- /var/tmp/diff_new_pack.I09JYS/_old 2023-03-04 22:44:34.088142187 +0100 +++ /var/tmp/diff_new_pack.I09JYS/_new 2023-03-04 22:44:34.092142207 +0100 @@ -16,8 +16,10 @@ # +%define libversion 3.63.2 + Name: filezilla -Version: 3.63.2 +Version: 3.63.2.1 Release: 0 Summary: A GUI FTP and SFTP Client License: GPL-2.0-or-later @@ -164,8 +166,8 @@ %{_datadir}/pixmaps/%{name}.png %dir %{_datadir}/appdata/ %{_datadir}/appdata/%{name}.appdata.xml -%{_libdir}/libfzclient-commonui-private-%{version}.so -%{_libdir}/libfzclient-private-%{version}.so +%{_libdir}/libfzclient-commonui-private-%{libversion}.so +%{_libdir}/libfzclient-private-%{libversion}.so %{_mandir}/man1/filezilla.1%{?ext_man} %{_mandir}/man1/fzputtygen.1%{?ext_man} %{_mandir}/man1/fzsftp.1%{?ext_man} ++++++ FileZilla_3.63.2_src.tar.bz2 -> FileZilla_3.63.2.1_src.tar.bz2 ++++++ ++++ 2745 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/filezilla-3.63.2/configure.ac new/filezilla-3.63.2.1/configure.ac --- old/filezilla-3.63.2/configure.ac 2023-02-23 10:16:12.000000000 +0100 +++ new/filezilla-3.63.2.1/configure.ac 2023-03-03 15:44:53.000000000 +0100 @@ -1,4 +1,4 @@ -AC_INIT([FileZilla],[3.63.2], [tim.ko...@filezilla-project.org],[],[https://filezilla-project.org/]) +AC_INIT([FileZilla],[3.63.2.1], [tim.ko...@filezilla-project.org],[],[https://filezilla-project.org/]) AC_CONFIG_HEADERS([config/config.h]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR(config) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/filezilla-3.63.2/data/install.nsi.in new/filezilla-3.63.2.1/data/install.nsi.in --- old/filezilla-3.63.2/data/install.nsi.in 2023-02-13 11:27:00.000000000 +0100 +++ new/filezilla-3.63.2.1/data/install.nsi.in 2023-03-03 15:06:00.000000000 +0100 @@ -349,6 +349,9 @@ Function ReadSkipUAC + Push $R0 + Push $R1 + ${GetOptions} $CommandLine "/skipuac" $R1 ${If} ${Errors} @@ -358,12 +361,36 @@ ${EndIf} ${If} $ALL_USERS == 0 + ${AndIf} $SKIPUAC != 1 ${If} ${Silent} ${OrIf} $PERFORM_UPDATE == 1 - StrCpy $SKIPUAC 1 + + StrCpy $R0 $PREVIOUS_INSTALLDIR + ${If} $R0 == '' + StrCpy $R0 $INSTDIR + ${EndIf} + + ClearErrors + ${GetFileAttributes} $R0 "DIRECTORY" $R1 + ${If} ${Errors} + StrCpy $SKIPUAC 1 + ${Else} + ; If the previous installation dir exists, only skip UAC if it is writable. + StrCpy $R1 $R0\5h662xgwgxr5k.tmp + + System::Call "kernel32::CreateFileW(w R1, i 0x40000000, i 2, p 0, i 2, i 0x4000002, p 0) p.R1" + + ${If} $R1 != -1 + StrCpy $SKIPUAC 1 + System::Call "kernel32::CloseHandle(p R1)" + ${EndIf} + ${EndIf} ${EndIf} ${EndIf} + Pop $R1 + Pop $R0 + FunctionEnd Function ReadQuiet @@ -416,6 +443,8 @@ Call ReadAllUsersCommandline + Call GetUserInfo + ; Initialize $ALL_USERS with default value ${If} $ALL_USERS == '' ${If} $PREVIOUS_ALL_USERS != '' @@ -452,7 +481,7 @@ SetErrorLevel -1 ${EndIf} - ; Must call after UAC + ; Must call again after UAC Call GetUserInfo ${If} $PREVIOUS_VERSION != "" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/filezilla-3.63.2/src/engine/commands.cpp new/filezilla-3.63.2.1/src/engine/commands.cpp --- old/filezilla-3.63.2/src/engine/commands.cpp 2022-08-24 11:41:24.000000000 +0200 +++ new/filezilla-3.63.2.1/src/engine/commands.cpp 2023-03-03 15:06:10.000000000 +0100 @@ -56,14 +56,14 @@ } CFileTransferCommand::CFileTransferCommand(fz::reader_factory_holder const& reader, - CServerPath const& remotePath, std::wstring const& remoteFile, transfer_flags const& flags, std::wstring const& extraFlags) - : reader_(reader), m_remotePath(remotePath), m_remoteFile(remoteFile), flags_(flags), extraFlags_(extraFlags) + CServerPath const& remotePath, std::wstring const& remoteFile, transfer_flags const& flags, std::wstring const& extraFlags, std::string const& persistentState) + : reader_(reader), m_remotePath(remotePath), m_remoteFile(remoteFile), extraFlags_(extraFlags), persistentState_(persistentState), flags_(flags) { } CFileTransferCommand::CFileTransferCommand(fz::writer_factory_holder const& writer, - CServerPath const& remotePath, std::wstring const& remoteFile, transfer_flags const& flags, std::wstring const& extraFlags) - : writer_(writer), m_remotePath(remotePath), m_remoteFile(remoteFile), flags_(flags), extraFlags_(extraFlags) + CServerPath const& remotePath, std::wstring const& remoteFile, transfer_flags const& flags, std::wstring const& extraFlags, std::string const& persistentState) + : writer_(writer), m_remotePath(remotePath), m_remoteFile(remoteFile), extraFlags_(extraFlags), persistentState_(persistentState), flags_(flags) { } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/filezilla-3.63.2/src/include/commands.h new/filezilla-3.63.2.1/src/include/commands.h --- old/filezilla-3.63.2/src/include/commands.h 2022-08-24 11:41:24.000000000 +0200 +++ new/filezilla-3.63.2.1/src/include/commands.h 2023-03-03 15:06:10.000000000 +0100 @@ -224,8 +224,8 @@ class FZC_PUBLIC_SYMBOL CFileTransferCommand final : public CCommandHelper<CFileTransferCommand, Command::transfer> { public: - CFileTransferCommand(fz::reader_factory_holder const& reader, CServerPath const& remotePath, std::wstring const& remoteFile, transfer_flags const& flags, std::wstring const& extraflags = {}); - CFileTransferCommand(fz::writer_factory_holder const& writer, CServerPath const& remotePath, std::wstring const& remoteFile, transfer_flags const& flags, std::wstring const& extraFlags = {}); + CFileTransferCommand(fz::reader_factory_holder const& reader, CServerPath const& remotePath, std::wstring const& remoteFile, transfer_flags const& flags, std::wstring const& extraflags = {}, std::string const& persistentState = {}); + CFileTransferCommand(fz::writer_factory_holder const& writer, CServerPath const& remotePath, std::wstring const& remoteFile, transfer_flags const& flags, std::wstring const& extraFlags = {}, std::string const& persistentState = {}); CServerPath GetRemotePath() const; std::wstring GetRemoteFile() const; @@ -243,8 +243,9 @@ fz::writer_factory_holder const writer_; CServerPath const m_remotePath; std::wstring const m_remoteFile; - transfer_flags const flags_; std::wstring const extraFlags_; + std::string const persistentState_; + transfer_flags const flags_; }; class FZC_PUBLIC_SYMBOL CHttpRequestCommand final : public CCommandHelper<CHttpRequestCommand, Command::httprequest> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/filezilla-3.63.2/src/include/notification.h new/filezilla-3.63.2.1/src/include/notification.h --- old/filezilla-3.63.2/src/include/notification.h 2022-09-02 05:30:02.000000000 +0200 +++ new/filezilla-3.63.2.1/src/include/notification.h 2023-03-03 15:06:10.000000000 +0100 @@ -28,14 +28,15 @@ enum NotificationId : unsigned int { - nId_logmsg, // notification about new messages for the message log - nId_operation, // operation reply codes - nId_transferstatus, // transfer information: bytes transferred, transfer speed and such - nId_listing, // directory listings - nId_asyncrequest, // asynchronous request - nId_sftp_encryption, // information about key exchange, encryption algorithms and so on for SFTP - nId_local_dir_created, // local directory has been created - nId_serverchange, // With some protocols, actual server identity isn't known until after logon + nId_logmsg, // notification about new messages for the message log + nId_operation, // operation reply codes + nId_transferstatus, // transfer information: bytes transferred, transfer speed and such + nId_listing, // directory listings + nId_asyncrequest, // asynchronous request + nId_sftp_encryption, // information about key exchange, encryption algorithms and so on for SFTP + nId_local_dir_created, // local directory has been created + nId_serverchange, // With some protocols, actual server identity isn't known until after logon + nId_persistent_state, // See PersistentStateNotification nId_ftp_tls_resumption }; @@ -379,4 +380,23 @@ bool allow_{}; }; +// Can be sent by the engine while processing a CFileTransferCommand. +// Should the transfer fail, the persistent state can be passed in a subsequent +// transfer command as the "state" member. +class FZC_PUBLIC_SYMBOL PersistentStateNotification final : public CNotificationHelper<nId_persistent_state> +{ +public: + PersistentStateNotification() = default; + + explicit PersistentStateNotification(std::string && state) + : persistent_state_(std::move(state)) + {} + + explicit PersistentStateNotification(std::string_view const& state) + : persistent_state_(state) + {} + + std::string persistent_state_; +}; + #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/filezilla-3.63.2/src/interface/FileZilla.cpp new/filezilla-3.63.2.1/src/interface/FileZilla.cpp --- old/filezilla-3.63.2/src/interface/FileZilla.cpp 2022-09-02 05:30:02.000000000 +0200 +++ new/filezilla-3.63.2.1/src/interface/FileZilla.cpp 2023-03-03 15:06:10.000000000 +0100 @@ -35,6 +35,8 @@ #include "osx_sandbox_userdirs.h" #endif +using namespace std::literals; + #if !defined(__WXGTK__) && !defined(__MINGW32__) IMPLEMENT_APP(CFileZillaApp) #else @@ -48,7 +50,7 @@ CFileZillaApp::CFileZillaApp() { m_profile_start = fz::monotonic_clock::now(); - AddStartupProfileRecord("CFileZillaApp::CFileZillaApp()"); + AddStartupProfileRecord("CFileZillaApp::CFileZillaApp()"sv); } CFileZillaApp::~CFileZillaApp() @@ -58,6 +60,7 @@ void CFileZillaApp::InitLocale() { + AddStartupProfileRecord("CFileZillaApp::InitLocale()"sv); wxString language = options_->get_string(OPTION_LANGUAGE); const wxLanguageInfo* pInfo = wxLocale::FindLanguageInfo(language); if (!language.empty()) { @@ -137,7 +140,7 @@ bool CFileZillaApp::OnInit() { - AddStartupProfileRecord("CFileZillaApp::OnInit()"); + AddStartupProfileRecord("CFileZillaApp::OnInit()"sv); SetAppDisplayName("FileZilla"); @@ -184,6 +187,7 @@ return false; } + AddStartupProfileRecord("CFileZillaApp::OnInit(): Loading options"sv); options_ = std::make_unique<COptions>(); #if USE_MAC_SANDBOX @@ -293,7 +297,7 @@ bool CFileZillaApp::LoadResourceFiles() { - AddStartupProfileRecord("CFileZillaApp::LoadResourceFiles"); + AddStartupProfileRecord("CFileZillaApp::LoadResourceFiles"sv); m_resourceDir = GetFZDataDir({L"resources/defaultfilters.xml"}, L"share/filezilla"); wxImage::AddHandler(new wxPNGHandler()); @@ -315,7 +319,7 @@ bool CFileZillaApp::LoadLocales() { - AddStartupProfileRecord("CFileZillaApp::LoadLocales"); + AddStartupProfileRecord("CFileZillaApp::LoadLocales"sv); m_localesDir = GetFZDataDir({L"locales/de/filezilla.mo"}, std::wstring()); if (!m_localesDir.empty()) { m_localesDir.AddSegment(_T("locales")); @@ -415,14 +419,14 @@ void CFileZillaApp::CheckExistsFzsftp() { - AddStartupProfileRecord("FileZillaApp::CheckExistsFzsftp"); + AddStartupProfileRecord("FileZillaApp::CheckExistsFzsftp"sv); CheckExistsTool(L"fzsftp", L"../putty/", "FZ_FZSFTP", OPTION_FZSFTP_EXECUTABLE, fztranslate("SFTP support")); } #if ENABLE_STORJ void CFileZillaApp::CheckExistsFzstorj() { - AddStartupProfileRecord("FileZillaApp::CheckExistsFzstorj"); + AddStartupProfileRecord("FileZillaApp::CheckExistsFzstorj"sv); CheckExistsTool(L"fzstorj", L"../storj/", "FZ_FZSTORJ", OPTION_FZSTORJ_EXECUTABLE, fztranslate("Storj support")); } #endif @@ -456,7 +460,7 @@ int CFileZillaApp::ProcessCommandLine() { - AddStartupProfileRecord("CFileZillaApp::ProcessCommandLine"); + AddStartupProfileRecord("CFileZillaApp::ProcessCommandLine"sv); m_pCommandLine = std::make_unique<CCommandLine>(argc, argv); int res = m_pCommandLine->Parse() ? 1 : -1; @@ -483,7 +487,7 @@ return res; } -void CFileZillaApp::AddStartupProfileRecord(std::string const& msg) +void CFileZillaApp::AddStartupProfileRecord(std::string_view const& msg) { if (!m_profile_start) { return; @@ -495,7 +499,7 @@ void CFileZillaApp::ShowStartupProfile() { if (m_profile_start && m_pCommandLine && m_pCommandLine->HasSwitch(CCommandLine::debug_startup)) { - AddStartupProfileRecord("CFileZillaApp::ShowStartupProfile"); + AddStartupProfileRecord("CFileZillaApp::ShowStartupProfile"sv); wxString msg = _T("Profile:\n"); size_t const max_digits = fz::to_string((m_startupProfile.back().first - m_profile_start).get_milliseconds()).size(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/filezilla-3.63.2/src/interface/LocalListView.cpp new/filezilla-3.63.2.1/src/interface/LocalListView.cpp --- old/filezilla-3.63.2/src/interface/LocalListView.cpp 2023-01-26 13:31:00.000000000 +0100 +++ new/filezilla-3.63.2.1/src/interface/LocalListView.cpp 2023-03-03 15:06:10.000000000 +0100 @@ -32,6 +32,8 @@ #include <wx/menu.h> +using namespace std::literals; + class CLocalListViewDropTarget final : public CFileDropTarget<wxListCtrlEx> { public: @@ -277,7 +279,7 @@ CStateEventHandler(state), m_parentView(pParent) { - wxGetApp().AddStartupProfileRecord("CLocalListView::CLocalListView"); + wxGetApp().AddStartupProfileRecord("CLocalListView::CLocalListView"sv); m_state.RegisterHandler(this, STATECHANGE_LOCAL_DIR); m_state.RegisterHandler(this, STATECHANGE_APPLYFILTER); m_state.RegisterHandler(this, STATECHANGE_LOCAL_REFRESH_FILE); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/filezilla-3.63.2/src/interface/LocalTreeView.cpp new/filezilla-3.63.2.1/src/interface/LocalTreeView.cpp --- old/filezilla-3.63.2/src/interface/LocalTreeView.cpp 2023-01-26 13:31:00.000000000 +0100 +++ new/filezilla-3.63.2.1/src/interface/LocalTreeView.cpp 2023-03-03 15:06:10.000000000 +0100 @@ -29,6 +29,8 @@ #include <algorithm> +using namespace std::literals; + class CTreeItemData : public wxTreeItemData { public: @@ -242,7 +244,7 @@ , COptionChangeEventHandler(this) , m_pQueueView(pQueueView) { - wxGetApp().AddStartupProfileRecord("CLocalTreeView::CLocalTreeView"); + wxGetApp().AddStartupProfileRecord("CLocalTreeView::CLocalTreeView"sv); #ifdef __WXMAC__ SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); #endif @@ -414,7 +416,7 @@ bool CLocalTreeView::DisplayDrives(wxTreeItemId parent) { - wxGetApp().AddStartupProfileRecord("CLocalTreeView::DisplayDrives"); + wxGetApp().AddStartupProfileRecord("CLocalTreeView::DisplayDrives"sv); std::vector<std::wstring> drives = CVolumeDescriptionEnumeratorThread::GetDrives(); @@ -436,7 +438,7 @@ } SortChildren(parent); - wxGetApp().AddStartupProfileRecord("CLocalTreeView::DisplayDrives adding drives done"); + wxGetApp().AddStartupProfileRecord("CLocalTreeView::DisplayDrives adding drives done"sv); return true; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/filezilla-3.63.2/src/interface/Mainfrm.cpp new/filezilla-3.63.2.1/src/interface/Mainfrm.cpp --- old/filezilla-3.63.2/src/interface/Mainfrm.cpp 2023-01-14 05:30:02.000000000 +0100 +++ new/filezilla-3.63.2.1/src/interface/Mainfrm.cpp 2023-03-03 15:06:10.000000000 +0100 @@ -71,6 +71,8 @@ #include <limits> #include <map> +using namespace std::literals; + #ifdef __WXGTK__ wxDECLARE_EVENT(fzEVT_TASKBAR_CLICK_DELAYED, wxCommandEvent); wxDEFINE_EVENT(fzEVT_TASKBAR_CLICK_DELAYED, wxCommandEvent); @@ -342,7 +344,7 @@ , m_engineContext(options, CustomEncodingConverter::Get()) , m_comparisonToggleAcceleratorId(wxNewId()) { - wxGetApp().AddStartupProfileRecord("CMainFrame::CMainFrame"); + wxGetApp().AddStartupProfileRecord("CMainFrame::CMainFrame"sv); wxRect screen_size = CWindowStateManager::GetScreenDimensions(); wxSize initial_size; @@ -499,7 +501,7 @@ EnableFullScreenView(true, wxFULLSCREEN_NOMENUBAR); #endif - wxGetApp().AddStartupProfileRecord("CMainFrame::CMainFrame pre layout"); + wxGetApp().AddStartupProfileRecord("CMainFrame::CMainFrame pre layout"sv); m_pWindowStateManager = new CWindowStateManager(this); m_pWindowStateManager->Restore(OPTION_MAINWINDOW_POSITION); @@ -604,7 +606,7 @@ void CMainFrame::CreateMenus() { - wxGetApp().AddStartupProfileRecord("CMainFrame::CreateMenus"); + wxGetApp().AddStartupProfileRecord("CMainFrame::CreateMenus"sv); CMenuBar* old = m_pMenuBar; m_pMenuBar = new CMenuBar(*this, options_); @@ -615,7 +617,7 @@ void CMainFrame::CreateQuickconnectBar() { - wxGetApp().AddStartupProfileRecord("CMainFrame::CreateQuickconnectBar"); + wxGetApp().AddStartupProfileRecord("CMainFrame::CreateQuickconnectBar"sv); delete m_pQuickconnectBar; m_pQuickconnectBar = new CQuickconnectBar(*this); @@ -1133,7 +1135,7 @@ bool CMainFrame::CreateMainToolBar() { - wxGetApp().AddStartupProfileRecord("CMainFrame::CreateMainToolBar"); + wxGetApp().AddStartupProfileRecord("CMainFrame::CreateMainToolBar"sv); if (m_pToolBar) { #ifdef __WXMAC__ if (m_pToolBar) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/filezilla-3.63.2/src/interface/QueueView.cpp new/filezilla-3.63.2.1/src/interface/QueueView.cpp --- old/filezilla-3.63.2/src/interface/QueueView.cpp 2022-08-24 11:41:24.000000000 +0200 +++ new/filezilla-3.63.2.1/src/interface/QueueView.cpp 2023-03-03 15:06:10.000000000 +0100 @@ -45,6 +45,8 @@ #include <powrprof.h> #endif +using namespace std::literals; + class CQueueViewDropTarget final : public CFileDropTarget<wxListCtrlEx> { public: @@ -217,7 +219,7 @@ , m_pAsyncRequestQueue(pAsyncRequestQueue) , cert_store_(certStore) { - wxGetApp().AddStartupProfileRecord("CQueueView::CQueueView"); + wxGetApp().AddStartupProfileRecord("CQueueView::CQueueView"sv); if (m_pAsyncRequestQueue) { m_pAsyncRequestQueue->SetQueue(this); @@ -524,6 +526,14 @@ cert_store_.SetSessionResumptionSupport(fz::to_utf8(notification.server_.GetHost()), notification.server_.GetPort(), true, true); break; } + case nId_persistent_state: { + if (pEngineData->pItem && pEngineData->active) { + PersistentStateNotification& notification = static_cast<PersistentStateNotification&>(*pNotification); + CFileItem & fileItem = *pEngineData->pItem; + fileItem.set_persistent_state(std::move(notification.persistent_state_)); + } + break; + } default: break; } @@ -1249,20 +1259,22 @@ RefreshItem(engineData.pItem); std::wstring extraFlags; + std::string persistentState; auto extraData = fileItem->GetExtraData(); if (extraData) { extraFlags = extraData->extraFlags_; + persistentState = extraData->persistentState_; } int res; if (!fileItem->Download()) { auto cmd = CFileTransferCommand(fz::file_reader_factory(fileItem->GetLocalPath().GetPath() + fileItem->GetLocalFile(), m_pMainFrame->GetEngineContext().GetThreadPool()), - fileItem->GetRemotePath(), fileItem->GetRemoteFile(), fileItem->flags(), extraFlags); + fileItem->GetRemotePath(), fileItem->GetRemoteFile(), fileItem->flags(), extraFlags, persistentState); res = engineData.pEngine->Execute(cmd); } else { auto cmd = CFileTransferCommand(fz::file_writer_factory(fileItem->GetLocalPath().GetPath() + fileItem->GetLocalFile(), m_pMainFrame->GetEngineContext().GetThreadPool()), - fileItem->GetRemotePath(), fileItem->GetRemoteFile(), fileItem->flags(), extraFlags); + fileItem->GetRemotePath(), fileItem->GetRemoteFile(), fileItem->flags(), extraFlags, persistentState); res = engineData.pEngine->Execute(cmd); } @@ -1563,7 +1575,7 @@ void CQueueView::LoadQueue() { - wxGetApp().AddStartupProfileRecord("CQueueView::LoadQueue"); + wxGetApp().AddStartupProfileRecord("CQueueView::LoadQueue"sv); // We have to synchronize access to queue.xml so that multiple processed don't write // to the same file or one is reading while the other one writes. CInterProcessMutex mutex(MUTEX_QUEUE); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/filezilla-3.63.2/src/interface/RemoteListView.cpp new/filezilla-3.63.2.1/src/interface/RemoteListView.cpp --- old/filezilla-3.63.2/src/interface/RemoteListView.cpp 2023-01-26 13:31:00.000000000 +0100 +++ new/filezilla-3.63.2.1/src/interface/RemoteListView.cpp 2023-03-03 15:06:10.000000000 +0100 @@ -2620,6 +2620,9 @@ bool CRemoteListView::ItemIsDir(int index) const { + if (!m_pDirectoryListing || index < 0 || index >= m_pDirectoryListing->size()) { + return false; + } return (*m_pDirectoryListing)[index].is_dir(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/filezilla-3.63.2/src/interface/context_control.cpp new/filezilla-3.63.2.1/src/interface/context_control.cpp --- old/filezilla-3.63.2/src/interface/context_control.cpp 2022-09-27 05:30:03.000000000 +0200 +++ new/filezilla-3.63.2.1/src/interface/context_control.cpp 2023-03-03 15:06:10.000000000 +0100 @@ -31,6 +31,8 @@ #include <array> +using namespace std::literals; + wxDECLARE_EVENT(fzEVT_TAB_CLOSING_DEFERRED, wxCommandEvent); wxDEFINE_EVENT(fzEVT_TAB_CLOSING_DEFERRED, wxCommandEvent); @@ -77,7 +79,7 @@ bool CContextControl::CreateTab(CLocalPath const& localPath, Site const& site, CServerPath const& remotePath) { - wxGetApp().AddStartupProfileRecord("CContextControl::CreateTab"); + wxGetApp().AddStartupProfileRecord("CContextControl::CreateTab"sv); if (GetTabCount() >= 200) { wxBell(); @@ -153,7 +155,7 @@ void CContextControl::CreateContextControls(CState& state) { - wxGetApp().AddStartupProfileRecord("CContextControl::CreateContextControls"); + wxGetApp().AddStartupProfileRecord("CContextControl::CreateContextControls"sv); wxWindow* parent = this; #ifdef __WXGTK__ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/filezilla-3.63.2/src/interface/filezillaapp.h new/filezilla-3.63.2.1/src/interface/filezillaapp.h --- old/filezilla-3.63.2/src/interface/filezillaapp.h 2021-10-07 05:30:04.000000000 +0200 +++ new/filezilla-3.63.2.1/src/interface/filezillaapp.h 2023-03-03 15:06:10.000000000 +0100 @@ -43,7 +43,7 @@ const CCommandLine* GetCommandLine() const { return m_pCommandLine.get(); } void ShowStartupProfile(); - void AddStartupProfileRecord(std::string const& msg); + void AddStartupProfileRecord(std::string_view const& msg); protected: void CheckExistsTool(std::wstring const& tool, std::wstring const& buildRelPath, char const* env, engineOptions setting, std::wstring const& description); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/filezilla-3.63.2/src/interface/queue.cpp new/filezilla-3.63.2.1/src/interface/queue.cpp --- old/filezilla-3.63.2/src/interface/queue.cpp 2022-04-08 16:07:38.000000000 +0200 +++ new/filezilla-3.63.2.1/src/interface/queue.cpp 2023-03-03 15:06:10.000000000 +0100 @@ -237,11 +237,11 @@ CFileItem::CFileItem(CServerItem* parent, transfer_flags const& flags, std::wstring const& sourceFile, std::wstring const& targetFile, CLocalPath const& localPath, CServerPath const& remotePath, int64_t size, - std::wstring const& extraFlags) + std::wstring const& extraFlags, std::string const& persistentState) : CQueueItem(parent) , flags_(flags) , m_sourceFile(sourceFile) - , extra_data_(targetFile.empty() && extraFlags.empty() ? fz::sparse_optional<extra_data>() : fz::sparse_optional<extra_data>({ targetFile, extraFlags })) + , extra_data_((targetFile.empty() && extraFlags.empty() && persistentState.empty()) ? fz::sparse_optional<extra_data>() : fz::sparse_optional<extra_data>({ targetFile, extraFlags, persistentState })) , m_localPath(localPath) , m_remotePath(remotePath) , m_size(size) @@ -316,6 +316,7 @@ if (extra_data_ && !extra_data_->extraFlags_.empty()) { AddTextElement(file, "ExtraFlags", extra_data_->extraFlags_); } + // Intentionally not exporting persistent state. } bool CFileItem::TryRemoveAll() @@ -330,20 +331,46 @@ void CFileItem::SetTargetFile(std::wstring const& file) { - std::wstring extraFlags; - if (extra_data_) { - extraFlags = extra_data_->extraFlags_; + if (file.empty()) { + if (!extra_data_) { + return; + } + if (extra_data_->extraFlags_.empty() && extra_data_->persistentState_.empty()) { + extra_data_.clear(); + } + else { + extra_data_->targetFile_.clear(); + } + } + else { + if (!extra_data_) { + extra_data_ = std::move(fz::sparse_optional<extra_data>({file, {}, {}})); + } + else { + extra_data_->targetFile_ = file; + } } +} - if (!file.empty() && file != m_sourceFile) { - extra_data_ = fz::sparse_optional<extra_data>({file, extraFlags}); +void CFileItem::set_persistent_state(std::string && state) +{ + if (state.empty()) { + if (!extra_data_) { + return; + } + if (extra_data_->extraFlags_.empty() && extra_data_->targetFile_.empty()) { + extra_data_.clear(); + } + else { + extra_data_->persistentState_.clear(); + } } else { - if (extraFlags.empty()) { - extra_data_.clear(); + if (!extra_data_) { + extra_data_ = std::move(fz::sparse_optional<extra_data>({{}, {}, std::move(state)})); } else { - extra_data_ = fz::sparse_optional<extra_data>({{}, extraFlags}); + extra_data_->persistentState_ = std::move(state); } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/filezilla-3.63.2/src/interface/queue.h new/filezilla-3.63.2.1/src/interface/queue.h --- old/filezilla-3.63.2/src/interface/queue.h 2022-04-08 16:07:38.000000000 +0200 +++ new/filezilla-3.63.2.1/src/interface/queue.h 2023-03-03 15:06:10.000000000 +0100 @@ -161,7 +161,7 @@ CFileItem(CServerItem* parent, transfer_flags const& flags, std::wstring const& sourceFile, std::wstring const& targetFile, CLocalPath const& localPath, CServerPath const& remotePath, int64_t size, - std::wstring const& extraFlags); + std::wstring const& extraFlags, std::string const& persistentState = {}); virtual ~CFileItem(); @@ -172,6 +172,7 @@ struct extra_data { std::wstring targetFile_; std::wstring extraFlags_; + std::string persistentState_; }; std::wstring const& GetLocalFile() const { return !Download() ? GetSourceFile() : (extra_data_ && !extra_data_->targetFile_.empty() ? extra_data_->targetFile_ : m_sourceFile); } @@ -221,6 +222,8 @@ void SetTargetFile(std::wstring const& file); + void set_persistent_state(std::string && state); + enum class Status : unsigned char { none, incorrect_password, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/filezilla-3.63.2/src/interface/queue_storage.cpp new/filezilla-3.63.2.1/src/interface/queue_storage.cpp --- old/filezilla-3.63.2/src/interface/queue_storage.cpp 2022-04-08 16:07:38.000000000 +0200 +++ new/filezilla-3.63.2.1/src/interface/queue_storage.cpp 2023-03-03 15:06:10.000000000 +0100 @@ -14,7 +14,8 @@ enum class Column_type { text, - integer + integer, + blob }; enum _column_flags @@ -95,6 +96,7 @@ flags, default_exists_action, extra_flags, + persistent_state }; } @@ -110,7 +112,8 @@ { "priority", Column_type::integer, 0 }, { "flags", Column_type::integer, 0 }, { "default_exists_action", Column_type::integer, 0 }, - { "extra_flags", Column_type::text, 0 } + { "extra_flags", Column_type::text, 0 }, + { "persistent_state", Column_type::blob, 0 } }; namespace path_table_column_names @@ -156,10 +159,12 @@ bool Bind(sqlite3_stmt* statement, int index, std::wstring const& value); bool Bind(sqlite3_stmt* statement, int index, std::string const& value); bool Bind(sqlite3_stmt* statement, int index, const char* const value); + bool BindBlob(sqlite3_stmt* statement, int index, std::string const& value); bool BindNull(sqlite3_stmt* statement, int index); std::wstring GetColumnText(sqlite3_stmt* statement, int index); std::string GetColumnTextUtf8(sqlite3_stmt* statement, int index); + std::string GetColumnBlob(sqlite3_stmt* statement, int index); int64_t GetColumnInt64(sqlite3_stmt* statement, int index, int64_t def = 0); int GetColumnInt(sqlite3_stmt* statement, int index, int def = 0); @@ -295,7 +300,7 @@ bool ret = sqlite3_exec(db_, "PRAGMA user_version", int_callback, &version, 0) == SQLITE_OK; if (ret) { - if (version > 7) { + if (version > 8) { ret = false; } else if (version > 0) { @@ -334,9 +339,12 @@ ret &= sqlite3_exec(db_, "DROP TABLE files", 0, 0, 0) == SQLITE_OK; ret &= sqlite3_exec(db_, "ALTER TABLE files2 RENAME TO files", 0, 0, 0) == SQLITE_OK; } + if (ret && version < 8) { + ret = sqlite3_exec(db_, "ALTER TABLE files ADD COLUMN persistent_state BLOB DEFAULT NULL", 0, 0, 0) == SQLITE_OK; + } } - if (ret && version != 7) { - ret = sqlite3_exec(db_, "PRAGMA user_version = 7", 0, 0, 0) == SQLITE_OK; + if (ret && version != 8) { + ret = sqlite3_exec(db_, "PRAGMA user_version = 8", 0, 0, 0) == SQLITE_OK; } } @@ -422,6 +430,9 @@ if (columns[i].type == Column_type::integer) { query += " INTEGER"; } + else if (columns[i].type == Column_type::blob) { + query += " BLOB"; + } else { query += " TEXT"; } @@ -636,6 +647,11 @@ return sqlite3_bind_null(statement, index) == SQLITE_OK; } +bool CQueueStorage::Impl::BindBlob(sqlite3_stmt* statement, int index, std::string const& value) +{ + return sqlite3_bind_blob(statement, index, value.c_str(), value.size(), SQLITE_TRANSIENT) == SQLITE_OK; +} + bool CQueueStorage::Impl::SaveServer(CServerItem const& item) { @@ -830,6 +846,13 @@ else { BindNull(insertFileQuery_, file_table_column_names::extra_flags); } + + if (!extra_data->persistentState_.empty()) { + Bind(insertFileQuery_, file_table_column_names::persistent_state, extra_data->persistentState_); + } + else { + BindNull(insertFileQuery_, file_table_column_names::persistent_state); + } } else { BindNull(insertFileQuery_, file_table_column_names::target_file); @@ -953,6 +976,19 @@ return std::string(); } +std::string CQueueStorage::Impl::GetColumnBlob(sqlite3_stmt* statement, int index) +{ + int len = sqlite3_column_bytes(statement, index); + if (len) { + char const* text = reinterpret_cast<char const*>(sqlite3_column_blob(statement, index)); + if (text) { + return std::string(text, len); + } + } + + return std::string(); +} + int64_t CQueueStorage::Impl::GetColumnInt64(sqlite3_stmt* statement, int index, int64_t def) { if (sqlite3_column_type(statement, index) == SQLITE_NULL) { @@ -1137,6 +1173,7 @@ int priority = GetColumnInt(selectFilesQuery_, file_table_column_names::priority, static_cast<int>(QueuePriority::normal)); std::wstring extraFlags = GetColumnText(selectFilesQuery_, file_table_column_names::extra_flags); + std::string persistentState = GetColumnTextUtf8(selectFilesQuery_, file_table_column_names::persistent_state); int overwrite_action = GetColumnInt(selectFilesQuery_, file_table_column_names::default_exists_action, CFileExistsNotification::unknown); @@ -1148,7 +1185,7 @@ return INVALID_DATA; } - CFileItem* fileItem = new CFileItem(0, flags | queue_flags::queued, sourceFile, targetFile, localPath, remotePath, size, extraFlags); + CFileItem* fileItem = new CFileItem(0, flags | queue_flags::queued, std::move(sourceFile), std::move(targetFile), std::move(localPath), std::move(remotePath), size, std::move(extraFlags), std::move(persistentState)); *pItem = fileItem; fileItem->SetPriorityRaw(QueuePriority(priority)); fileItem->m_errorCount = errorCount;