From 15b45cc235a6570867032484ea606862c5860436 Mon Sep 17 00:00:00 2001 From: Boris Pozdena Date: Wed, 11 Jun 2025 09:09:37 +0200 Subject: [PATCH] Update version to 1.2.0 and add new settings for inotify delay and session upload --- AppImageBuilder.yml | 2 +- src/profile_settings_window.py | 6 ++ src/resources/default_config | 4 +- src/ui/profile_settings_page.ui | 160 +++++++++++++++++------------ src/ui/ui_profile_settings_page.py | 155 ++++++++++++++++------------ 5 files changed, 191 insertions(+), 136 deletions(-) diff --git a/AppImageBuilder.yml b/AppImageBuilder.yml index 74bd52b..4185bee 100644 --- a/AppImageBuilder.yml +++ b/AppImageBuilder.yml @@ -23,7 +23,7 @@ AppDir: id: io.github.bpozdena.OneDriveGUI name: OneDriveGUI icon: OneDriveGUI - version: 1.1.1 + version: 1.2.0 exec: usr/bin/python3 exec_args: "$APPDIR/usr/src/OneDriveGUI.py $@" diff --git a/src/profile_settings_window.py b/src/profile_settings_window.py index 9a3edb9..087df47 100644 --- a/src/profile_settings_window.py +++ b/src/profile_settings_window.py @@ -381,6 +381,7 @@ class ProfileSettingsPage(QWidget, Ui_profile_settings): self.spinBox_data_timeout.valueChanged.connect(self.set_spin_box_value) self.spinBox_ip_protocol_version.valueChanged.connect(self.set_spin_box_value) self.spinBox_threads.valueChanged.connect(self.set_spin_box_value) + self.spinBox_inotify_delay.valueChanged.connect(self.set_spin_box_value) self.checkBox_download_only.stateChanged.connect(self.set_check_box_state) self.checkBox_download_only.stateChanged.connect(self.validate_checkbox_input) self.checkBox_upload_only.stateChanged.connect(self.set_check_box_state) @@ -396,6 +397,8 @@ class ProfileSettingsPage(QWidget, Ui_profile_settings): self.checkBox_remove_source_files.stateChanged.connect(self.set_check_box_state) self.checkBox_resync.stateChanged.connect(self.set_check_box_state) self.checkBox_bypass_data_preservation.stateChanged.connect(self.set_check_box_state) + self.checkBox_delay_inotify_processing.stateChanged.connect(self.set_check_box_state) + self.checkBox_force_session_upload.stateChanged.connect(self.set_check_box_state) self.lineEdit_user_agent.textChanged.connect(self.set_line_edit_value) self.lineEdit_azure_ad_endpoint.textChanged.connect(self.set_line_edit_value) self.lineEdit_azure_tenant_id.textChanged.connect(self.set_line_edit_value) @@ -475,6 +478,7 @@ class ProfileSettingsPage(QWidget, Ui_profile_settings): self.spinBox_data_timeout.setValue(int(self.temp_profile_config["onedrive"]["data_timeout"].strip('"'))) self.spinBox_ip_protocol_version.setValue(int(self.temp_profile_config["onedrive"]["ip_protocol_version"].strip('"'))) self.spinBox_threads.setValue(int(self.temp_profile_config["onedrive"]["threads"].strip('"'))) + self.spinBox_inotify_delay.setValue(int(self.temp_profile_config["onedrive"]["inotify_delay"].strip('"'))) self.checkBox_download_only.setChecked(self.get_check_box_state("download_only")) self.checkBox_download_only.setDisabled(self.get_check_box_state("upload_only")) self.checkBox_upload_only.setChecked(self.get_check_box_state("upload_only")) @@ -490,6 +494,8 @@ class ProfileSettingsPage(QWidget, Ui_profile_settings): self.checkBox_remove_source_files.setChecked(self.get_check_box_state("remove_source_files")) self.checkBox_resync.setChecked(self.get_check_box_state("resync")) self.checkBox_bypass_data_preservation.setChecked(self.get_check_box_state("bypass_data_preservation")) + self.checkBox_delay_inotify_processing.setChecked(self.get_check_box_state("delay_inotify_processing")) + self.checkBox_force_session_upload.setChecked(self.get_check_box_state("force_session_upload")) self.lineEdit_user_agent.setText(self.temp_profile_config["onedrive"]["user_agent"].strip('"')) self.lineEdit_azure_ad_endpoint.setText(self.temp_profile_config["onedrive"]["azure_ad_endpoint"].strip('"')) self.lineEdit_azure_tenant_id.setText(self.temp_profile_config["onedrive"]["azure_tenant_id"].strip('"')) diff --git a/src/resources/default_config b/src/resources/default_config index e1c45bd..f312719 100644 --- a/src/resources/default_config +++ b/src/resources/default_config @@ -50,4 +50,6 @@ ip_protocol_version = "1" threads = "8" use_recycle_bin = "false" recycle_bin_path = "" - +force_session_upload = "false" +delay_inotify_processing = "false" +inotify_delay = "5" diff --git a/src/ui/profile_settings_page.ui b/src/ui/profile_settings_page.ui index 1a44201..458a1d1 100644 --- a/src/ui/profile_settings_page.ui +++ b/src/ui/profile_settings_page.ui @@ -50,7 +50,7 @@ - 0 + 1 @@ -214,7 +214,7 @@ 0 0 1312 - 812 + 837 @@ -414,6 +414,16 @@ locally will occur every 2 hours (assuming 'monitor_interval' is set to 300 seco + + + + + + + Inotify delay + + + @@ -438,6 +448,23 @@ locally will occur every 2 hours (assuming 'monitor_interval' is set to 300 seco + + + + Threads + + + + + + + 1 + + + 16 + + + @@ -545,23 +572,6 @@ locally will occur every 2 hours (assuming 'monitor_interval' is set to 300 seco - - - - Threads - - - - - - - 1 - - - 16 - - - @@ -576,25 +586,13 @@ locally will occur every 2 hours (assuming 'monitor_interval' is set to 300 seco Advanced options - - + + - Replicate the locally configured sync_dir state to OneDrive, by only uploading local changes to OneDrive. - -Do not download changes from OneDrive. + Forces the use of HTTP/1.1 instead of the default HTTP/2 . - Upload only - - - - - - - Do not delete local file 'deletes' from OneDrive when using --upload-only - - - No remote delete + Force HTTP 1.1 @@ -610,23 +608,13 @@ Do not upload local changes to OneDrive. - - + + - Synchronize from the local directory source first, before downloading changes from OneDrive. + Forget the last saved state, perform a full sync. - Local first - - - - - - - <html><head/><body><pre style=" margin-top:0px; margin-bottom:16px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:145%;"><span style=" font-family:'ui-monospace','SFMono-Regular','SF Mono','Menlo','Consolas','Liberation Mono','monospace'; color:#c9d1d9; background-color:transparent;">Check for the presence of </span><span style=" font-family:'ui-monospace','SFMono-Regular','SF Mono','Menlo','Consolas','Liberation Mono','monospace'; font-weight:700; color:#c9d1d9; background-color:transparent;">.nosync</span><span style=" font-family:'ui-monospace','SFMono-Regular','SF Mono','Menlo','Consolas','Liberation Mono','monospace'; color:#c9d1d9; background-color:transparent;"> in the syncdir root. If found, do not perform sync.</span></pre></body></html> - - - Check for .nomount + Full re-sync @@ -640,20 +628,20 @@ Do not upload local changes to OneDrive. - - - - Forget the last saved state, perform a full sync. - + + - Full re-sync + Force Session Upload - - + + + + Do not delete local file 'deletes' from OneDrive when using --upload-only + - Bypass data preservation + No remote delete @@ -667,13 +655,13 @@ Do not upload local changes to OneDrive. - - + + - Disable download validation when downloading from OneDrive. + Synchronize from the local directory source first, before downloading changes from OneDrive. - Disable upload validation + Local first @@ -687,6 +675,45 @@ Do not upload local changes to OneDrive. + + + + <html><head/><body><pre style=" margin-top:0px; margin-bottom:16px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:145%;"><span style=" font-family:'ui-monospace','SFMono-Regular','SF Mono','Menlo','Consolas','Liberation Mono','monospace'; color:#c9d1d9; background-color:transparent;">Check for the presence of </span><span style=" font-family:'ui-monospace','SFMono-Regular','SF Mono','Menlo','Consolas','Liberation Mono','monospace'; font-weight:700; color:#c9d1d9; background-color:transparent;">.nosync</span><span style=" font-family:'ui-monospace','SFMono-Regular','SF Mono','Menlo','Consolas','Liberation Mono','monospace'; color:#c9d1d9; background-color:transparent;"> in the syncdir root. If found, do not perform sync.</span></pre></body></html> + + + Check for .nomount + + + + + + + Replicate the locally configured sync_dir state to OneDrive, by only uploading local changes to OneDrive. + +Do not download changes from OneDrive. + + + Upload only + + + + + + + Disable download validation when downloading from OneDrive. + + + Disable upload validation + + + + + + + Bypass data preservation + + + @@ -694,13 +721,10 @@ Do not upload local changes to OneDrive. - - - - Forces the use of HTTP/1.1 instead of the default HTTP/2 . - + + - Force HTTP 1.1 + Delay inotify processing diff --git a/src/ui/ui_profile_settings_page.py b/src/ui/ui_profile_settings_page.py index b4c8549..0b28d4b 100644 --- a/src/ui/ui_profile_settings_page.py +++ b/src/ui/ui_profile_settings_page.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- ################################################################################ -## Form generated from reading UI file 'profile_settings_pageNqWFgH.ui' +## Form generated from reading UI file 'profile_settings_pageBHoRDo.ui' ## ## Created by: Qt User Interface Compiler version 6.9.1 ## @@ -147,7 +147,7 @@ class Ui_profile_settings(object): self.scrollArea.setWidgetResizable(True) self.scrollAreaWidgetContents_5 = QWidget() self.scrollAreaWidgetContents_5.setObjectName(u"scrollAreaWidgetContents_5") - self.scrollAreaWidgetContents_5.setGeometry(QRect(0, 0, 1312, 812)) + self.scrollAreaWidgetContents_5.setGeometry(QRect(0, 0, 1312, 837)) self.verticalLayout_15 = QVBoxLayout(self.scrollAreaWidgetContents_5) self.verticalLayout_15.setObjectName(u"verticalLayout_15") self.groupBox_10 = QGroupBox(self.scrollAreaWidgetContents_5) @@ -270,6 +270,16 @@ class Ui_profile_settings(object): self.formLayout_4.setWidget(6, QFormLayout.ItemRole.FieldRole, self.spinBox_ip_protocol_version) + self.spinBox_inotify_delay = QSpinBox(self.groupBox_4) + self.spinBox_inotify_delay.setObjectName(u"spinBox_inotify_delay") + + self.formLayout_4.setWidget(7, QFormLayout.ItemRole.FieldRole, self.spinBox_inotify_delay) + + self.label = QLabel(self.groupBox_4) + self.label.setObjectName(u"label") + + self.formLayout_4.setWidget(7, QFormLayout.ItemRole.LabelRole, self.label) + self.horizontalLayout.addLayout(self.formLayout_4) @@ -284,6 +294,18 @@ class Ui_profile_settings(object): self.formLayout_5 = QFormLayout() self.formLayout_5.setObjectName(u"formLayout_5") + self.label_threads = QLabel(self.groupBox_4) + self.label_threads.setObjectName(u"label_threads") + + self.formLayout_5.setWidget(0, QFormLayout.ItemRole.LabelRole, self.label_threads) + + self.spinBox_threads = QSpinBox(self.groupBox_4) + self.spinBox_threads.setObjectName(u"spinBox_threads") + self.spinBox_threads.setMinimum(1) + self.spinBox_threads.setMaximum(16) + + self.formLayout_5.setWidget(0, QFormLayout.ItemRole.FieldRole, self.spinBox_threads) + self.label_sync_file_permissions = QLabel(self.groupBox_4) self.label_sync_file_permissions.setObjectName(u"label_sync_file_permissions") @@ -350,18 +372,6 @@ class Ui_profile_settings(object): self.formLayout_5.setWidget(6, QFormLayout.ItemRole.FieldRole, self.lineEdit_drive_id) - self.label_threads = QLabel(self.groupBox_4) - self.label_threads.setObjectName(u"label_threads") - - self.formLayout_5.setWidget(0, QFormLayout.ItemRole.LabelRole, self.label_threads) - - self.spinBox_threads = QSpinBox(self.groupBox_4) - self.spinBox_threads.setObjectName(u"spinBox_threads") - self.spinBox_threads.setMinimum(1) - self.spinBox_threads.setMaximum(16) - - self.formLayout_5.setWidget(0, QFormLayout.ItemRole.FieldRole, self.spinBox_threads) - self.horizontalLayout.addLayout(self.formLayout_5) @@ -372,70 +382,80 @@ class Ui_profile_settings(object): self.groupBox_5.setObjectName(u"groupBox_5") self.gridLayout_4 = QGridLayout(self.groupBox_5) self.gridLayout_4.setObjectName(u"gridLayout_4") - self.checkBox_upload_only = QCheckBox(self.groupBox_5) - self.checkBox_upload_only.setObjectName(u"checkBox_upload_only") + self.checkBox_force_http_11 = QCheckBox(self.groupBox_5) + self.checkBox_force_http_11.setObjectName(u"checkBox_force_http_11") - self.gridLayout_4.addWidget(self.checkBox_upload_only, 2, 1, 1, 1) - - self.checkBox_no_remote_delete = QCheckBox(self.groupBox_5) - self.checkBox_no_remote_delete.setObjectName(u"checkBox_no_remote_delete") - - self.gridLayout_4.addWidget(self.checkBox_no_remote_delete, 4, 1, 1, 1) + self.gridLayout_4.addWidget(self.checkBox_force_http_11, 3, 3, 1, 1) self.checkBox_download_only = QCheckBox(self.groupBox_5) self.checkBox_download_only.setObjectName(u"checkBox_download_only") self.gridLayout_4.addWidget(self.checkBox_download_only, 1, 1, 1, 1) - self.checkBox_local_first = QCheckBox(self.groupBox_5) - self.checkBox_local_first.setObjectName(u"checkBox_local_first") + self.checkBox_resync = QCheckBox(self.groupBox_5) + self.checkBox_resync.setObjectName(u"checkBox_resync") - self.gridLayout_4.addWidget(self.checkBox_local_first, 0, 1, 1, 1) - - self.checkBox_check_nomount = QCheckBox(self.groupBox_5) - self.checkBox_check_nomount.setObjectName(u"checkBox_check_nomount") - - self.gridLayout_4.addWidget(self.checkBox_check_nomount, 3, 1, 1, 1) + self.gridLayout_4.addWidget(self.checkBox_resync, 1, 3, 1, 1) self.checkBox_dry_run = QCheckBox(self.groupBox_5) self.checkBox_dry_run.setObjectName(u"checkBox_dry_run") self.gridLayout_4.addWidget(self.checkBox_dry_run, 0, 3, 1, 1) - self.checkBox_resync = QCheckBox(self.groupBox_5) - self.checkBox_resync.setObjectName(u"checkBox_resync") + self.checkBox_force_session_upload = QCheckBox(self.groupBox_5) + self.checkBox_force_session_upload.setObjectName(u"checkBox_force_session_upload") - self.gridLayout_4.addWidget(self.checkBox_resync, 1, 3, 1, 1) + self.gridLayout_4.addWidget(self.checkBox_force_session_upload, 4, 2, 1, 1) - self.checkBox_bypass_data_preservation = QCheckBox(self.groupBox_5) - self.checkBox_bypass_data_preservation.setObjectName(u"checkBox_bypass_data_preservation") + self.checkBox_no_remote_delete = QCheckBox(self.groupBox_5) + self.checkBox_no_remote_delete.setObjectName(u"checkBox_no_remote_delete") - self.gridLayout_4.addWidget(self.checkBox_bypass_data_preservation, 2, 3, 1, 1) + self.gridLayout_4.addWidget(self.checkBox_no_remote_delete, 4, 1, 1, 1) self.checkBox_remove_source_files = QCheckBox(self.groupBox_5) self.checkBox_remove_source_files.setObjectName(u"checkBox_remove_source_files") self.gridLayout_4.addWidget(self.checkBox_remove_source_files, 0, 2, 1, 1) - self.checkBox_disable_upload_validation = QCheckBox(self.groupBox_5) - self.checkBox_disable_upload_validation.setObjectName(u"checkBox_disable_upload_validation") + self.checkBox_local_first = QCheckBox(self.groupBox_5) + self.checkBox_local_first.setObjectName(u"checkBox_local_first") - self.gridLayout_4.addWidget(self.checkBox_disable_upload_validation, 1, 2, 1, 1) + self.gridLayout_4.addWidget(self.checkBox_local_first, 0, 1, 1, 1) self.checkBox_disable_download_validation = QCheckBox(self.groupBox_5) self.checkBox_disable_download_validation.setObjectName(u"checkBox_disable_download_validation") self.gridLayout_4.addWidget(self.checkBox_disable_download_validation, 2, 2, 1, 1) + self.checkBox_check_nomount = QCheckBox(self.groupBox_5) + self.checkBox_check_nomount.setObjectName(u"checkBox_check_nomount") + + self.gridLayout_4.addWidget(self.checkBox_check_nomount, 3, 1, 1, 1) + + self.checkBox_upload_only = QCheckBox(self.groupBox_5) + self.checkBox_upload_only.setObjectName(u"checkBox_upload_only") + + self.gridLayout_4.addWidget(self.checkBox_upload_only, 2, 1, 1, 1) + + self.checkBox_disable_upload_validation = QCheckBox(self.groupBox_5) + self.checkBox_disable_upload_validation.setObjectName(u"checkBox_disable_upload_validation") + + self.gridLayout_4.addWidget(self.checkBox_disable_upload_validation, 1, 2, 1, 1) + + self.checkBox_bypass_data_preservation = QCheckBox(self.groupBox_5) + self.checkBox_bypass_data_preservation.setObjectName(u"checkBox_bypass_data_preservation") + + self.gridLayout_4.addWidget(self.checkBox_bypass_data_preservation, 2, 3, 1, 1) + self.checkBox_display_running_config = QCheckBox(self.groupBox_5) self.checkBox_display_running_config.setObjectName(u"checkBox_display_running_config") self.gridLayout_4.addWidget(self.checkBox_display_running_config, 3, 2, 1, 1) - self.checkBox_force_http_11 = QCheckBox(self.groupBox_5) - self.checkBox_force_http_11.setObjectName(u"checkBox_force_http_11") + self.checkBox_delay_inotify_processing = QCheckBox(self.groupBox_5) + self.checkBox_delay_inotify_processing.setObjectName(u"checkBox_delay_inotify_processing") - self.gridLayout_4.addWidget(self.checkBox_force_http_11, 3, 3, 1, 1) + self.gridLayout_4.addWidget(self.checkBox_delay_inotify_processing, 4, 3, 1, 1) self.verticalLayout_15.addWidget(self.groupBox_5) @@ -754,7 +774,7 @@ class Ui_profile_settings(object): self.retranslateUi(profile_settings) - self.tabWidget.setCurrentIndex(0) + self.tabWidget.setCurrentIndex(1) QMetaObject.connectSlotsByName(profile_settings) @@ -838,6 +858,8 @@ class Ui_profile_settings(object): "", None)) #endif // QT_CONFIG(tooltip) self.label_ip_protocol_version.setText(QCoreApplication.translate("profile_settings", u"IP Protocol", None)) + self.label.setText(QCoreApplication.translate("profile_settings", u"Inotify delay", None)) + self.label_threads.setText(QCoreApplication.translate("profile_settings", u"Threads", None)) #if QT_CONFIG(tooltip) self.label_sync_file_permissions.setToolTip(QCoreApplication.translate("profile_settings", u"

Utilise the Unix Permissions Calculator to assist in determining the required permissions.


Important: Special permission bits (setuid, setgid, sticky bit) are not supported.

Valid permission values are from 000 to 777 only.

", None)) #endif // QT_CONFIG(tooltip) @@ -859,21 +881,14 @@ class Ui_profile_settings(object): #endif // QT_CONFIG(tooltip) self.label_azure_tenant_id.setText(QCoreApplication.translate("profile_settings", u"Azure tenant ID", None)) self.label_drive_id.setText(QCoreApplication.translate("profile_settings", u"SharePoint Library Drive ID", None)) - self.label_threads.setText(QCoreApplication.translate("profile_settings", u"Threads", None)) #if QT_CONFIG(tooltip) self.groupBox_5.setToolTip(QCoreApplication.translate("profile_settings", u"

Perform a 'one-way' upload sync.

Note: If a file or folder is present on OneDrive, that does not exist locally, it will be removed.

If the data on OneDrive should be kept, please enable 'No remote delete' option.

", None)) #endif // QT_CONFIG(tooltip) self.groupBox_5.setTitle(QCoreApplication.translate("profile_settings", u"Advanced options", None)) #if QT_CONFIG(tooltip) - self.checkBox_upload_only.setToolTip(QCoreApplication.translate("profile_settings", u"Replicate the locally configured sync_dir state to OneDrive, by only uploading local changes to OneDrive. \n" -"\n" -"Do not download changes from OneDrive.", None)) + self.checkBox_force_http_11.setToolTip(QCoreApplication.translate("profile_settings", u"Forces the use of HTTP/1.1 instead of the default HTTP/2 .", None)) #endif // QT_CONFIG(tooltip) - self.checkBox_upload_only.setText(QCoreApplication.translate("profile_settings", u"Upload only", None)) -#if QT_CONFIG(tooltip) - self.checkBox_no_remote_delete.setToolTip(QCoreApplication.translate("profile_settings", u"Do not delete local file 'deletes' from OneDrive when using --upload-only", None)) -#endif // QT_CONFIG(tooltip) - self.checkBox_no_remote_delete.setText(QCoreApplication.translate("profile_settings", u"No remote delete", None)) + self.checkBox_force_http_11.setText(QCoreApplication.translate("profile_settings", u"Force HTTP 1.1", None)) #if QT_CONFIG(tooltip) self.checkBox_download_only.setToolTip(QCoreApplication.translate("profile_settings", u"Replicate the OneDrive online state locally, by only downloading changes from OneDrive. \n" "\n" @@ -881,39 +896,47 @@ class Ui_profile_settings(object): #endif // QT_CONFIG(tooltip) self.checkBox_download_only.setText(QCoreApplication.translate("profile_settings", u"Download only", None)) #if QT_CONFIG(tooltip) - self.checkBox_local_first.setToolTip(QCoreApplication.translate("profile_settings", u"Synchronize from the local directory source first, before downloading changes from OneDrive.", None)) + self.checkBox_resync.setToolTip(QCoreApplication.translate("profile_settings", u"Forget the last saved state, perform a full sync.", None)) #endif // QT_CONFIG(tooltip) - self.checkBox_local_first.setText(QCoreApplication.translate("profile_settings", u"Local first", None)) -#if QT_CONFIG(tooltip) - self.checkBox_check_nomount.setToolTip(QCoreApplication.translate("profile_settings", u"
Check for the presence of .nosync in the syncdir root. If found, do not perform sync.
", None)) -#endif // QT_CONFIG(tooltip) - self.checkBox_check_nomount.setText(QCoreApplication.translate("profile_settings", u"Check for .nomount", None)) + self.checkBox_resync.setText(QCoreApplication.translate("profile_settings", u"Full re-sync", None)) #if QT_CONFIG(tooltip) self.checkBox_dry_run.setToolTip(QCoreApplication.translate("profile_settings", u"Perform a trial sync with no changes made.", None)) #endif // QT_CONFIG(tooltip) self.checkBox_dry_run.setText(QCoreApplication.translate("profile_settings", u"Dry run", None)) + self.checkBox_force_session_upload.setText(QCoreApplication.translate("profile_settings", u"Force Session Upload", None)) #if QT_CONFIG(tooltip) - self.checkBox_resync.setToolTip(QCoreApplication.translate("profile_settings", u"Forget the last saved state, perform a full sync.", None)) + self.checkBox_no_remote_delete.setToolTip(QCoreApplication.translate("profile_settings", u"Do not delete local file 'deletes' from OneDrive when using --upload-only", None)) #endif // QT_CONFIG(tooltip) - self.checkBox_resync.setText(QCoreApplication.translate("profile_settings", u"Full re-sync", None)) - self.checkBox_bypass_data_preservation.setText(QCoreApplication.translate("profile_settings", u"Bypass data preservation", None)) + self.checkBox_no_remote_delete.setText(QCoreApplication.translate("profile_settings", u"No remote delete", None)) #if QT_CONFIG(tooltip) self.checkBox_remove_source_files.setToolTip(QCoreApplication.translate("profile_settings", u"Remove source file after successful transfer to OneDrive when using --upload-only .", None)) #endif // QT_CONFIG(tooltip) self.checkBox_remove_source_files.setText(QCoreApplication.translate("profile_settings", u"Remove source files", None)) #if QT_CONFIG(tooltip) - self.checkBox_disable_upload_validation.setToolTip(QCoreApplication.translate("profile_settings", u"Disable download validation when downloading from OneDrive.", None)) + self.checkBox_local_first.setToolTip(QCoreApplication.translate("profile_settings", u"Synchronize from the local directory source first, before downloading changes from OneDrive.", None)) #endif // QT_CONFIG(tooltip) - self.checkBox_disable_upload_validation.setText(QCoreApplication.translate("profile_settings", u"Disable upload validation", None)) + self.checkBox_local_first.setText(QCoreApplication.translate("profile_settings", u"Local first", None)) #if QT_CONFIG(tooltip) self.checkBox_disable_download_validation.setToolTip(QCoreApplication.translate("profile_settings", u"This option determines whether the client will conduct integrity validation on files downloaded from Microsoft OneDrive.
Sometimes, when downloading files, particularly from SharePoint, there is a discrepancy between the file size reported by the OneDrive API and the byte count received from the SharePoint HTTP Server for the same file.
Enable this option to disable the integrity checks performed by this client.", None)) #endif // QT_CONFIG(tooltip) self.checkBox_disable_download_validation.setText(QCoreApplication.translate("profile_settings", u"Disable download validation", None)) - self.checkBox_display_running_config.setText(QCoreApplication.translate("profile_settings", u"Display running config", None)) #if QT_CONFIG(tooltip) - self.checkBox_force_http_11.setToolTip(QCoreApplication.translate("profile_settings", u"Forces the use of HTTP/1.1 instead of the default HTTP/2 .", None)) + self.checkBox_check_nomount.setToolTip(QCoreApplication.translate("profile_settings", u"
Check for the presence of .nosync in the syncdir root. If found, do not perform sync.
", None)) #endif // QT_CONFIG(tooltip) - self.checkBox_force_http_11.setText(QCoreApplication.translate("profile_settings", u"Force HTTP 1.1", None)) + self.checkBox_check_nomount.setText(QCoreApplication.translate("profile_settings", u"Check for .nomount", None)) +#if QT_CONFIG(tooltip) + self.checkBox_upload_only.setToolTip(QCoreApplication.translate("profile_settings", u"Replicate the locally configured sync_dir state to OneDrive, by only uploading local changes to OneDrive. \n" +"\n" +"Do not download changes from OneDrive.", None)) +#endif // QT_CONFIG(tooltip) + self.checkBox_upload_only.setText(QCoreApplication.translate("profile_settings", u"Upload only", None)) +#if QT_CONFIG(tooltip) + self.checkBox_disable_upload_validation.setToolTip(QCoreApplication.translate("profile_settings", u"Disable download validation when downloading from OneDrive.", None)) +#endif // QT_CONFIG(tooltip) + self.checkBox_disable_upload_validation.setText(QCoreApplication.translate("profile_settings", u"Disable upload validation", None)) + self.checkBox_bypass_data_preservation.setText(QCoreApplication.translate("profile_settings", u"Bypass data preservation", None)) + self.checkBox_display_running_config.setText(QCoreApplication.translate("profile_settings", u"Display running config", None)) + self.checkBox_delay_inotify_processing.setText(QCoreApplication.translate("profile_settings", u"Delay inotify processing", None)) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), QCoreApplication.translate("profile_settings", u"Sync Options", None)) #if QT_CONFIG(tooltip) self.groupBox.setToolTip(QCoreApplication.translate("profile_settings", u"

This option is used to 'skip' certain files and supports pattern matching.

Patterns are case insensitive. * and ? wildcards characters are supported.

Use | to separate multiple patterns.

Files can be skipped in the following fashion:

-Specify a wildcard, eg: '*.txt' (skip all txt files)

-Explicitly specify the filename and it's full path relative to your sync_dir, eg: 'path/to/file/filename.ext'

-Explicitly specify the filename only and skip every instance of this filename, eg: 'filename.ext'