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;

Reply via email to