From b651ff1c0a4dadaa4fbece73cb0dc45c4b5d9819 Mon Sep 17 00:00:00 2001 From: Boris Pozdena Date: Fri, 28 Jan 2022 13:55:02 +0100 Subject: [PATCH] added spinbox logic to profile settings --- OneDriveGUI/OneDriveGUI.py | 168 ++++++--- OneDriveGUI/ui/profile_settings_page.ui | 389 ++++++++++++--------- OneDriveGUI/ui/ui_profile_settings_page.py | 135 ++++--- 3 files changed, 414 insertions(+), 278 deletions(-) diff --git a/OneDriveGUI/OneDriveGUI.py b/OneDriveGUI/OneDriveGUI.py index eba5f84..7ad5e3b 100644 --- a/OneDriveGUI/OneDriveGUI.py +++ b/OneDriveGUI/OneDriveGUI.py @@ -95,6 +95,7 @@ class ProfileSettingsPage(QWidget, Ui_profile_settings): self.temp_profile_config = temp_global_config[self.profile]['onedrive'] self.label_profile_name.setText(self.profile) + self.tabWidget.setCurrentIndex(0) # # Monitored files tab @@ -102,8 +103,8 @@ class ProfileSettingsPage(QWidget, Ui_profile_settings): self.lineEdit_sync_dir.setText(self.temp_profile_config['sync_dir'].strip('"')) self.lineEdit_sync_dir.textChanged.connect(self.set_sync_dir) - self.checkBox_sync_root_files.setChecked(self.get_toggle_state('sync_root_files')) - self.checkBox_sync_root_files.stateChanged.connect(self.set_check_state) + self.checkBox_sync_root_files.setChecked(self.get_check_box_state('sync_root_files')) + self.checkBox_sync_root_files.stateChanged.connect(self.set_check_box_state) @@ -132,82 +133,135 @@ class ProfileSettingsPage(QWidget, Ui_profile_settings): self.pushButton_add_skip_dir.clicked.connect(self.lineEdit_skip_dir.clear) self.pushButton_rm_skip_dir.clicked.connect(self.remove_skip_dir) - self.checkBox_skip_dir_strict_match.setChecked(self.get_toggle_state('skip_dir_strict_match')) - self.checkBox_skip_dir_strict_match.stateChanged.connect(self.set_check_state) + self.checkBox_skip_dir_strict_match.setChecked(self.get_check_box_state('skip_dir_strict_match')) + self.checkBox_skip_dir_strict_match.stateChanged.connect(self.set_check_box_state) - self.checkBox_check_nosync.setChecked(self.get_toggle_state('check_nosync')) - self.checkBox_check_nosync.stateChanged.connect(self.set_check_state) + self.checkBox_check_nosync.setChecked(self.get_check_box_state('check_nosync')) + self.checkBox_check_nosync.stateChanged.connect(self.set_check_box_state) - self.checkBox_skip_symlinks.setChecked(self.get_toggle_state('skip_symlinks')) - self.checkBox_skip_symlinks.stateChanged.connect(self.set_check_state) + self.checkBox_skip_symlinks.setChecked(self.get_check_box_state('skip_symlinks')) + self.checkBox_skip_symlinks.stateChanged.connect(self.set_check_box_state) - self.checkBox_skip_dotfiles.setChecked(self.get_toggle_state('skip_dotfiles')) - self.checkBox_skip_dotfiles.stateChanged.connect(self.set_check_state) + self.checkBox_skip_dotfiles.setChecked(self.get_check_box_state('skip_dotfiles')) + self.checkBox_skip_dotfiles.stateChanged.connect(self.set_check_box_state) # # Sync Options tab # - self.checkBox_download_only.setChecked(self.get_toggle_state('download_only')) - self.checkBox_download_only.stateChanged.connect(self.set_check_state) + self.spinBox_monitor_interval.setValue(int(self.temp_profile_config['monitor_interval'].strip('"'))) + self.spinBox_monitor_interval.valueChanged.connect(self.set_spin_box_value) - self.checkBox_upload_only.setChecked(self.get_toggle_state('upload_only')) - self.checkBox_upload_only.stateChanged.connect(self.set_check_state) + self.spinBox_monitor_fullscan_frequency.setValue(int(self.temp_profile_config['monitor_fullscan_frequency'].strip('"'))) + self.spinBox_monitor_fullscan_frequency.valueChanged.connect(self.set_spin_box_value) - self.checkBox_force_http_2.setChecked(self.get_toggle_state('force_http_2')) - self.checkBox_force_http_2.stateChanged.connect(self.set_check_state) + self.spinBox_classify_as_big_delete.setValue(int(self.temp_profile_config['classify_as_big_delete'].strip('"'))) + self.spinBox_classify_as_big_delete.valueChanged.connect(self.set_spin_box_value) - self.checkBox_disable_upload_validation.setChecked(self.get_toggle_state('disable_upload_validation')) - self.checkBox_disable_upload_validation.stateChanged.connect(self.set_check_state) + self.spinBox_sync_dir_permissions.setValue(int(self.temp_profile_config['sync_dir_permissions'].strip('"'))) + self.spinBox_sync_dir_permissions.valueChanged.connect(self.set_spin_box_value) - self.checkBox_check_nomount.setChecked(self.get_toggle_state('check_nomount')) - self.checkBox_check_nomount.stateChanged.connect(self.set_check_state) + self.spinBox_sync_file_permissions.setValue(int(self.temp_profile_config['sync_file_permissions'].strip('"'))) + self.spinBox_sync_file_permissions.valueChanged.connect(self.set_spin_box_value) - self.checkBox_local_first.setChecked(self.get_toggle_state('local_first')) - self.checkBox_local_first.stateChanged.connect(self.set_check_state) + self.spinBox_operation_timeout.setValue(int(self.temp_profile_config['operation_timeout'].strip('"'))) + self.spinBox_operation_timeout.valueChanged.connect(self.set_spin_box_value) - self.checkBox_no_remote_delete.setChecked(self.get_toggle_state('no_remote_delete')) - self.checkBox_no_remote_delete.stateChanged.connect(self.set_check_state) + + - self.checkBox_sync_business_shared_folders.setChecked(self.get_toggle_state('sync_business_shared_folders')) - self.checkBox_sync_business_shared_folders.stateChanged.connect(self.set_check_state) + self.checkBox_download_only.setChecked(self.get_check_box_state('download_only')) + self.checkBox_download_only.stateChanged.connect(self.set_check_box_state) - self.checkBox_dry_run.setChecked(self.get_toggle_state('dry_run')) - self.checkBox_dry_run.stateChanged.connect(self.set_check_state) + self.checkBox_upload_only.setChecked(self.get_check_box_state('upload_only')) + self.checkBox_upload_only.stateChanged.connect(self.set_check_box_state) - self.checkBox_remove_source_files.setChecked(self.get_toggle_state('remove_source_files')) - self.checkBox_remove_source_files.stateChanged.connect(self.set_check_state) + self.checkBox_force_http_2.setChecked(self.get_check_box_state('force_http_2')) + self.checkBox_force_http_2.stateChanged.connect(self.set_check_box_state) + + self.checkBox_disable_upload_validation.setChecked(self.get_check_box_state('disable_upload_validation')) + self.checkBox_disable_upload_validation.stateChanged.connect(self.set_check_box_state) + + self.checkBox_check_nomount.setChecked(self.get_check_box_state('check_nomount')) + self.checkBox_check_nomount.stateChanged.connect(self.set_check_box_state) + + self.checkBox_local_first.setChecked(self.get_check_box_state('local_first')) + self.checkBox_local_first.stateChanged.connect(self.set_check_box_state) + + self.checkBox_no_remote_delete.setChecked(self.get_check_box_state('no_remote_delete')) + self.checkBox_no_remote_delete.stateChanged.connect(self.set_check_box_state) + + self.checkBox_sync_business_shared_folders.setChecked(self.get_check_box_state('sync_business_shared_folders')) + self.checkBox_sync_business_shared_folders.stateChanged.connect(self.set_check_box_state) + + self.checkBox_dry_run.setChecked(self.get_check_box_state('dry_run')) + self.checkBox_dry_run.stateChanged.connect(self.set_check_box_state) + + self.checkBox_remove_source_files.setChecked(self.get_check_box_state('remove_source_files')) + self.checkBox_remove_source_files.stateChanged.connect(self.set_check_box_state) - self.checkBox_resync.setChecked(self.get_toggle_state('resync')) - self.checkBox_resync.stateChanged.connect(self.set_check_state) + self.checkBox_resync.setChecked(self.get_check_box_state('resync')) + self.checkBox_resync.stateChanged.connect(self.set_check_box_state) - self.checkBox_bypass_data_preservation.setChecked(self.get_toggle_state('bypass_data_preservation')) - self.checkBox_bypass_data_preservation.stateChanged.connect(self.set_check_state) + self.checkBox_bypass_data_preservation.setChecked(self.get_check_box_state('bypass_data_preservation')) + self.checkBox_bypass_data_preservation.stateChanged.connect(self.set_check_box_state) + + + + # Rate limit tab + self.spinBox_rate_limit.setValue(int(self.temp_profile_config['rate_limit'].strip('"'))) + self.horizontalSlider_rate_limit.setValue(int(self.temp_profile_config['rate_limit'].strip('"'))) + self.label_rate_limit_mbps.setText(str(round(self.spinBox_rate_limit.value() * 8 / 1024 / 1024, 2)) + " Mbit/s") + self.spinBox_rate_limit.valueChanged.connect(self.set_spin_box_value) + self.spinBox_rate_limit.valueChanged.connect(self.horizontalSlider_rate_limit.setValue) + self.spinBox_rate_limit.valueChanged.connect(lambda:self.label_rate_limit_mbps.setText( + str(round(self.spinBox_rate_limit.value() * 8 / 1024 / 1024, 2)) + " Mbit/s")) + self.horizontalSlider_rate_limit.valueChanged.connect(self.spinBox_rate_limit.setValue) + + # + # Webhooks tab + # + self.checkBox_webhook_enabled.setChecked(self.get_check_box_state('webhook_enabled')) + self.checkBox_webhook_enabled.stateChanged.connect(self.set_check_box_state) + + self.spinBox_webhook_expiration_interval.setValue(int(self.temp_profile_config['webhook_expiration_interval'].strip('"'))) + self.spinBox_webhook_expiration_interval.valueChanged.connect(self.set_spin_box_value) + + self.spinBox_webhook_renewal_interval.setValue(int(self.temp_profile_config['webhook_renewal_interval'].strip('"'))) + self.spinBox_webhook_renewal_interval.valueChanged.connect(self.set_spin_box_value) + + self.spinBox_webhook_listening_port.setValue(int(self.temp_profile_config['webhook_listening_port'].strip('"'))) + self.spinBox_webhook_listening_port.valueChanged.connect(self.set_spin_box_value) - self.checkBox_webhook_enabled.setChecked(self.get_toggle_state('webhook_enabled')) - self.checkBox_webhook_enabled.stateChanged.connect(self.set_check_state) # # Logging tab # - self.checkBox_enable_logging.setChecked(self.get_toggle_state('enable_logging')) - self.checkBox_enable_logging.stateChanged.connect(self.set_check_state) + self.checkBox_enable_logging.setChecked(self.get_check_box_state('enable_logging')) + self.checkBox_enable_logging.stateChanged.connect(self.set_check_box_state) + + self.checkBox_debug_https.setChecked(self.get_check_box_state('debug_https')) + self.checkBox_debug_https.stateChanged.connect(self.set_check_box_state) + + self.checkBox_disable_notifications.setChecked(self.get_check_box_state('disable_notifications')) + self.checkBox_disable_notifications.stateChanged.connect(self.set_check_box_state) + + + self.spinBox_monitor_log_frequency.setValue(int(self.temp_profile_config['monitor_log_frequency'].strip('"'))) + self.spinBox_monitor_log_frequency.valueChanged.connect(self.set_spin_box_value) + + self.spinBox_min_notify_changes.setValue(int(self.temp_profile_config['min_notify_changes'].strip('"'))) + self.spinBox_min_notify_changes.valueChanged.connect(self.set_spin_box_value) + + + - self.checkBox_debug_https.setChecked(self.get_toggle_state('debug_https')) - self.checkBox_debug_https.stateChanged.connect(self.set_check_state) - self.checkBox_disable_notifications.setChecked(self.get_toggle_state('disable_notifications')) - self.checkBox_disable_notifications.stateChanged.connect(self.set_check_state) # - # Rate limit tab - # - self.lineEdit_rate_limit.setText(self.temp_profile_config['rate_limit'].strip('"')) - self.label_rate_limit_mbps.setText(str(round(int(self.lineEdit_rate_limit.text()) * 8 / 1000 / 1000, 2)) + " Mbit/s") - self.lineEdit_rate_limit.textChanged.connect(self.set_rate_limit) - # Buttons + # self.pushButton_discart.hide() # TODO: How to discart unsaved changes and refresh the widgets or close window? # self.pushButton_discart.clicked.connect(self.discart_changes) @@ -224,21 +278,27 @@ class ProfileSettingsPage(QWidget, Ui_profile_settings): # self.checkBox_sync_root_files.stateChanged.connect(lambda: ) - # self.checkBox_sync_root_files.toggled.connect(lambda: self.set_check_state(self.checkBox_sync_root_files)) + # self.checkBox_sync_root_files.toggled.connect(lambda: self.set_check_box_state(self.checkBox_sync_root_files)) - # self.checkBox_sync_root_files.setChecked(lambda: self.get_toggle_state()) + # self.checkBox_sync_root_files.setChecked(lambda: self.get_check_box_state()) # self.checkBox_sync_root_files.setChecked(self.str2bool(self.temp_profile_config['sync_root_files'].strip('"'))) - def str2bool(self, value): return value.lower() in "true" - def set_check_state(self, state): + + def set_spin_box_value(self, value): + _property = self.sender().objectName() + property = re.search(r"spinBox_(.+)", _property).group(1) + self.temp_profile_config[f'{property}'] = f'"{value}"' + + + def set_check_box_state(self, state): _property = self.sender().objectName() property = re.search(r"checkBox_(.+)", _property).group(1) print(property) @@ -249,7 +309,7 @@ class ProfileSettingsPage(QWidget, Ui_profile_settings): print("is unchecked") self.temp_profile_config[f'{property}'] = '"false"' - def get_toggle_state(self, property): + def get_check_box_state(self, property): return self.temp_profile_config[f'{property}'].strip('"') in 'true' @@ -494,7 +554,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Start OneDrive monitoring - self.actionStart_Monitor.triggered.connect(lambda: self.start_onedrive_monitor('boris@pozdena.eu')) + self.actionStart_Monitor.triggered.connect(lambda: self.start_onedrive_monitor('bpozdena@my-business')) # Stop OneDrive monitoring diff --git a/OneDriveGUI/ui/profile_settings_page.ui b/OneDriveGUI/ui/profile_settings_page.ui index 96fcf23..099d876 100644 --- a/OneDriveGUI/ui/profile_settings_page.ui +++ b/OneDriveGUI/ui/profile_settings_page.ui @@ -6,8 +6,8 @@ 0 0 - 751 - 718 + 614 + 723 @@ -42,7 +42,7 @@ - 0 + 1 @@ -241,10 +241,78 @@ Sync Options + + + + Account Rate Limit + + + + + + 131072 + + + 134217728 + + + 32768 + + + + + + + Rate Limit [B/s] + + + + + + + 131072 + + + 134217728 + + + 32768 + + + 32768 + + + Qt::Horizontal + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + (Mbit/s) + + + + + + - Advanced properties + Advanced Properties @@ -261,78 +329,106 @@ - + Clasify as big delete - + 1000000 - + User-agent - + - + Azure AD endpoint - + - + Azure tenant ID - + - + Sync dir permissions - + Sync file permissions - + 777 - + 777 + + + + Operation timeout + + + + + + + 1000000 + + + + + + + Monitor full-scan frequency + + + + + + + 1000000 + + + @@ -429,7 +525,114 @@ + + + + + Logging + + + + + Logging + + + + + + + + Enable Logging + + + + + + + Browse + + + + + + + Log location: + + + + + + + Debug HTTPS + + + + + + + + + + + + + Monitor log frequency + + + + + + + + + + + + Notifications + + + + + + Minimum notify changes + + + + + + + Disable notifications + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Webhooks + + + Webhook settings @@ -507,162 +710,10 @@ - - - - Operation timeout - - - - - - - 1000000 - - - - - - - - Logging - - - - - - Logging - - - - - - - - Enable Logging - - - - - - - Browse - - - - - - - Log location: - - - - - - - Debug HTTPS - - - - - - - - - - - - - Monitor log frequency - - - - - - - Monitor full-scan frequency - - - - - - - - - - - - - - - Notifications - - - - - - Minimum notify changes - - - - - - - Disable notifications - - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - Rate Limit - - - - - - Rate Limit [B/s] - - - - - - - Qt::ImhDigitsOnly - - - - - - - (Mbit/s) - - - - + Qt::Vertical diff --git a/OneDriveGUI/ui/ui_profile_settings_page.py b/OneDriveGUI/ui/ui_profile_settings_page.py index 74d7f01..d29cb74 100644 --- a/OneDriveGUI/ui/ui_profile_settings_page.py +++ b/OneDriveGUI/ui/ui_profile_settings_page.py @@ -18,8 +18,8 @@ from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, from PySide6.QtWidgets import (QApplication, QCheckBox, QFormLayout, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLineEdit, QListWidget, QListWidgetItem, QPushButton, QSizePolicy, - QSpacerItem, QSpinBox, QTabWidget, QVBoxLayout, - QWidget) + QSlider, QSpacerItem, QSpinBox, QTabWidget, + QVBoxLayout, QWidget) class Ui_profile_settings(object): def setupUi(self, profile_settings): @@ -222,65 +222,87 @@ class Ui_profile_settings(object): self.label_classify_as_big_delete = QLabel(self.groupBox_4) self.label_classify_as_big_delete.setObjectName(u"label_classify_as_big_delete") - self.formLayout.setWidget(1, QFormLayout.LabelRole, self.label_classify_as_big_delete) + self.formLayout.setWidget(2, QFormLayout.LabelRole, self.label_classify_as_big_delete) self.spinBox_classify_as_big_delete = QSpinBox(self.groupBox_4) self.spinBox_classify_as_big_delete.setObjectName(u"spinBox_classify_as_big_delete") self.spinBox_classify_as_big_delete.setMaximum(1000000) - self.formLayout.setWidget(1, QFormLayout.FieldRole, self.spinBox_classify_as_big_delete) + self.formLayout.setWidget(2, QFormLayout.FieldRole, self.spinBox_classify_as_big_delete) self.label_user_agent = QLabel(self.groupBox_4) self.label_user_agent.setObjectName(u"label_user_agent") - self.formLayout.setWidget(2, QFormLayout.LabelRole, self.label_user_agent) + self.formLayout.setWidget(3, QFormLayout.LabelRole, self.label_user_agent) self.lineEdit_user_agent = QLineEdit(self.groupBox_4) self.lineEdit_user_agent.setObjectName(u"lineEdit_user_agent") - self.formLayout.setWidget(2, QFormLayout.FieldRole, self.lineEdit_user_agent) + self.formLayout.setWidget(3, QFormLayout.FieldRole, self.lineEdit_user_agent) self.label_azure_ad_endpoint = QLabel(self.groupBox_4) self.label_azure_ad_endpoint.setObjectName(u"label_azure_ad_endpoint") - self.formLayout.setWidget(3, QFormLayout.LabelRole, self.label_azure_ad_endpoint) + self.formLayout.setWidget(4, QFormLayout.LabelRole, self.label_azure_ad_endpoint) self.lineEdit_azure_ad_endpoint = QLineEdit(self.groupBox_4) self.lineEdit_azure_ad_endpoint.setObjectName(u"lineEdit_azure_ad_endpoint") - self.formLayout.setWidget(3, QFormLayout.FieldRole, self.lineEdit_azure_ad_endpoint) + self.formLayout.setWidget(4, QFormLayout.FieldRole, self.lineEdit_azure_ad_endpoint) self.label_azure_tenant_id = QLabel(self.groupBox_4) self.label_azure_tenant_id.setObjectName(u"label_azure_tenant_id") - self.formLayout.setWidget(4, QFormLayout.LabelRole, self.label_azure_tenant_id) + self.formLayout.setWidget(5, QFormLayout.LabelRole, self.label_azure_tenant_id) self.lineEdit_azure_tenant_id = QLineEdit(self.groupBox_4) self.lineEdit_azure_tenant_id.setObjectName(u"lineEdit_azure_tenant_id") - self.formLayout.setWidget(4, QFormLayout.FieldRole, self.lineEdit_azure_tenant_id) + self.formLayout.setWidget(5, QFormLayout.FieldRole, self.lineEdit_azure_tenant_id) self.label_sync_dir_permissions = QLabel(self.groupBox_4) self.label_sync_dir_permissions.setObjectName(u"label_sync_dir_permissions") - self.formLayout.setWidget(5, QFormLayout.LabelRole, self.label_sync_dir_permissions) + self.formLayout.setWidget(6, QFormLayout.LabelRole, self.label_sync_dir_permissions) self.label_sync_file_permissions = QLabel(self.groupBox_4) self.label_sync_file_permissions.setObjectName(u"label_sync_file_permissions") - self.formLayout.setWidget(6, QFormLayout.LabelRole, self.label_sync_file_permissions) + self.formLayout.setWidget(7, QFormLayout.LabelRole, self.label_sync_file_permissions) self.spinBox_sync_dir_permissions = QSpinBox(self.groupBox_4) self.spinBox_sync_dir_permissions.setObjectName(u"spinBox_sync_dir_permissions") self.spinBox_sync_dir_permissions.setMaximum(777) - self.formLayout.setWidget(5, QFormLayout.FieldRole, self.spinBox_sync_dir_permissions) + self.formLayout.setWidget(6, QFormLayout.FieldRole, self.spinBox_sync_dir_permissions) self.spinBox_sync_file_permissions = QSpinBox(self.groupBox_4) self.spinBox_sync_file_permissions.setObjectName(u"spinBox_sync_file_permissions") self.spinBox_sync_file_permissions.setMaximum(777) - self.formLayout.setWidget(6, QFormLayout.FieldRole, self.spinBox_sync_file_permissions) + self.formLayout.setWidget(7, QFormLayout.FieldRole, self.spinBox_sync_file_permissions) + + self.label_operation_timeout = QLabel(self.groupBox_4) + self.label_operation_timeout.setObjectName(u"label_operation_timeout") + + self.formLayout.setWidget(8, QFormLayout.LabelRole, self.label_operation_timeout) + + self.spinBox_operation_timeout = QSpinBox(self.groupBox_4) + self.spinBox_operation_timeout.setObjectName(u"spinBox_operation_timeout") + self.spinBox_operation_timeout.setMaximum(1000000) + + self.formLayout.setWidget(8, QFormLayout.FieldRole, self.spinBox_operation_timeout) + + self.label_monitor_fullscan_frequency = QLabel(self.groupBox_4) + self.label_monitor_fullscan_frequency.setObjectName(u"label_monitor_fullscan_frequency") + + self.formLayout.setWidget(1, QFormLayout.LabelRole, self.label_monitor_fullscan_frequency) + + self.spinBox_monitor_fullscan_frequency = QSpinBox(self.groupBox_4) + self.spinBox_monitor_fullscan_frequency.setObjectName(u"spinBox_monitor_fullscan_frequency") + self.spinBox_monitor_fullscan_frequency.setMaximum(1000000) + + self.formLayout.setWidget(1, QFormLayout.FieldRole, self.spinBox_monitor_fullscan_frequency) self.verticalLayout_8.addWidget(self.groupBox_4) @@ -415,17 +437,6 @@ class Ui_profile_settings(object): self.gridLayout_10.addWidget(self.spinBox_webhook_renewal_interval, 2, 3, 1, 1) - self.label_operation_timeout = QLabel(self.groupBox_9) - self.label_operation_timeout.setObjectName(u"label_operation_timeout") - - self.gridLayout_10.addWidget(self.label_operation_timeout, 3, 2, 1, 1) - - self.spinBox_operation_timeout = QSpinBox(self.groupBox_9) - self.spinBox_operation_timeout.setObjectName(u"spinBox_operation_timeout") - self.spinBox_operation_timeout.setMaximum(1000000) - - self.gridLayout_10.addWidget(self.spinBox_operation_timeout, 3, 3, 1, 1) - self.verticalLayout_8.addWidget(self.groupBox_9) @@ -448,12 +459,12 @@ class Ui_profile_settings(object): self.pushButton_log_dir = QPushButton(self.groupBox_7) self.pushButton_log_dir.setObjectName(u"pushButton_log_dir") - self.gridLayout_8.addWidget(self.pushButton_log_dir, 4, 2, 1, 1) + self.gridLayout_8.addWidget(self.pushButton_log_dir, 3, 2, 1, 1) self.label_log_dir = QLabel(self.groupBox_7) self.label_log_dir.setObjectName(u"label_log_dir") - self.gridLayout_8.addWidget(self.label_log_dir, 4, 0, 1, 1) + self.gridLayout_8.addWidget(self.label_log_dir, 3, 0, 1, 1) self.checkBox_debug_https = QCheckBox(self.groupBox_7) self.checkBox_debug_https.setObjectName(u"checkBox_debug_https") @@ -468,23 +479,13 @@ class Ui_profile_settings(object): self.lineEdit_log_dir = QLineEdit(self.groupBox_7) self.lineEdit_log_dir.setObjectName(u"lineEdit_log_dir") - self.gridLayout_8.addWidget(self.lineEdit_log_dir, 4, 1, 1, 1) + self.gridLayout_8.addWidget(self.lineEdit_log_dir, 3, 1, 1, 1) self.label_monitor_log_frequency = QLabel(self.groupBox_7) self.label_monitor_log_frequency.setObjectName(u"label_monitor_log_frequency") self.gridLayout_8.addWidget(self.label_monitor_log_frequency, 2, 0, 1, 1) - self.label_monitor_fullscan_frequency = QLabel(self.groupBox_7) - self.label_monitor_fullscan_frequency.setObjectName(u"label_monitor_fullscan_frequency") - - self.gridLayout_8.addWidget(self.label_monitor_fullscan_frequency, 3, 0, 1, 1) - - self.spinBox_monitor_fullscan_frequency = QSpinBox(self.groupBox_7) - self.spinBox_monitor_fullscan_frequency.setObjectName(u"spinBox_monitor_fullscan_frequency") - - self.gridLayout_8.addWidget(self.spinBox_monitor_fullscan_frequency, 3, 1, 1, 1) - self.verticalLayout_9.addLayout(self.gridLayout_8) @@ -522,25 +523,48 @@ class Ui_profile_settings(object): self.tab_5.setObjectName(u"tab_5") self.gridLayout = QGridLayout(self.tab_5) self.gridLayout.setObjectName(u"gridLayout") - self.label_rate_limit = QLabel(self.tab_5) - self.label_rate_limit.setObjectName(u"label_rate_limit") - - self.gridLayout.addWidget(self.label_rate_limit, 0, 0, 1, 1) - - self.lineEdit_rate_limit = QLineEdit(self.tab_5) - self.lineEdit_rate_limit.setObjectName(u"lineEdit_rate_limit") - self.lineEdit_rate_limit.setInputMethodHints(Qt.ImhDigitsOnly) - - self.gridLayout.addWidget(self.lineEdit_rate_limit, 0, 1, 1, 1) - self.label_rate_limit_mbps = QLabel(self.tab_5) self.label_rate_limit_mbps.setObjectName(u"label_rate_limit_mbps") - self.gridLayout.addWidget(self.label_rate_limit_mbps, 0, 2, 1, 1) + self.gridLayout.addWidget(self.label_rate_limit_mbps, 1, 1, 1, 1) self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) - self.gridLayout.addItem(self.verticalSpacer, 1, 1, 1, 1) + self.gridLayout.addItem(self.verticalSpacer, 2, 1, 1, 1) + + self.groupBox_10 = QGroupBox(self.tab_5) + self.groupBox_10.setObjectName(u"groupBox_10") + self.gridLayout_11 = QGridLayout(self.groupBox_10) + self.gridLayout_11.setObjectName(u"gridLayout_11") + self.spinBox_rate_limit = QSpinBox(self.groupBox_10) + self.spinBox_rate_limit.setObjectName(u"spinBox_rate_limit") + self.spinBox_rate_limit.setMinimum(131072) + self.spinBox_rate_limit.setMaximum(134217728) + self.spinBox_rate_limit.setSingleStep(32768) + + self.gridLayout_11.addWidget(self.spinBox_rate_limit, 0, 1, 1, 1) + + self.label_rate_limit = QLabel(self.groupBox_10) + self.label_rate_limit.setObjectName(u"label_rate_limit") + + self.gridLayout_11.addWidget(self.label_rate_limit, 0, 0, 1, 1) + + self.horizontalSlider_rate_limit = QSlider(self.groupBox_10) + self.horizontalSlider_rate_limit.setObjectName(u"horizontalSlider_rate_limit") + self.horizontalSlider_rate_limit.setMinimum(131072) + self.horizontalSlider_rate_limit.setMaximum(134217728) + self.horizontalSlider_rate_limit.setSingleStep(32768) + self.horizontalSlider_rate_limit.setPageStep(32768) + self.horizontalSlider_rate_limit.setOrientation(Qt.Horizontal) + + self.gridLayout_11.addWidget(self.horizontalSlider_rate_limit, 1, 0, 1, 3) + + self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) + + self.gridLayout_11.addItem(self.horizontalSpacer, 0, 2, 1, 1) + + + self.gridLayout.addWidget(self.groupBox_10, 0, 0, 1, 2) self.tabWidget.addTab(self.tab_5, "") self.tab_6 = QWidget() @@ -565,7 +589,7 @@ class Ui_profile_settings(object): self.retranslateUi(profile_settings) - self.tabWidget.setCurrentIndex(0) + self.tabWidget.setCurrentIndex(4) QMetaObject.connectSlotsByName(profile_settings) @@ -599,6 +623,8 @@ class Ui_profile_settings(object): self.label_azure_tenant_id.setText(QCoreApplication.translate("profile_settings", u"Azure tenant ID", None)) self.label_sync_dir_permissions.setText(QCoreApplication.translate("profile_settings", u"Sync dir permissions", None)) self.label_sync_file_permissions.setText(QCoreApplication.translate("profile_settings", u"Sync file permissions", None)) + self.label_operation_timeout.setText(QCoreApplication.translate("profile_settings", u"Operation timeout", None)) + self.label_monitor_fullscan_frequency.setText(QCoreApplication.translate("profile_settings", u"Monitor full-scan frequency", None)) self.groupBox_5.setTitle(QCoreApplication.translate("profile_settings", u"Advanced options", None)) self.checkBox_force_http_2.setText(QCoreApplication.translate("profile_settings", u"Force HTTP2", None)) self.checkBox_check_nomount.setText(QCoreApplication.translate("profile_settings", u"Check for .nomount", None)) @@ -619,7 +645,6 @@ class Ui_profile_settings(object): self.label_webhook_expiration_interval.setText(QCoreApplication.translate("profile_settings", u"Expiration interval", None)) self.label_webhook_listening_host.setText(QCoreApplication.translate("profile_settings", u"Listening host", None)) self.label_webhook_renewal_interval.setText(QCoreApplication.translate("profile_settings", u"Renewal interval", None)) - self.label_operation_timeout.setText(QCoreApplication.translate("profile_settings", u"Operation timeout", None)) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), QCoreApplication.translate("profile_settings", u"Sync Options", None)) self.groupBox_7.setTitle(QCoreApplication.translate("profile_settings", u"Logging", None)) self.checkBox_enable_logging.setText(QCoreApplication.translate("profile_settings", u"Enable Logging", None)) @@ -627,13 +652,13 @@ class Ui_profile_settings(object): self.label_log_dir.setText(QCoreApplication.translate("profile_settings", u"Log location:", None)) self.checkBox_debug_https.setText(QCoreApplication.translate("profile_settings", u"Debug HTTPS", None)) self.label_monitor_log_frequency.setText(QCoreApplication.translate("profile_settings", u"Monitor log frequency", None)) - self.label_monitor_fullscan_frequency.setText(QCoreApplication.translate("profile_settings", u"Monitor full-scan frequency", None)) self.groupBox_6.setTitle(QCoreApplication.translate("profile_settings", u"Notifications", None)) self.label_min_notify_changes.setText(QCoreApplication.translate("profile_settings", u"Minimum notify changes", None)) self.checkBox_disable_notifications.setText(QCoreApplication.translate("profile_settings", u"Disable notifications", None)) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_logging), QCoreApplication.translate("profile_settings", u"Logging", None)) - self.label_rate_limit.setText(QCoreApplication.translate("profile_settings", u"Rate Limit [B/s]", None)) self.label_rate_limit_mbps.setText(QCoreApplication.translate("profile_settings", u"(Mbit/s)", None)) + self.groupBox_10.setTitle(QCoreApplication.translate("profile_settings", u"Rate limit", None)) + self.label_rate_limit.setText(QCoreApplication.translate("profile_settings", u"Rate Limit [B/s]", None)) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_5), QCoreApplication.translate("profile_settings", u"Rate Limit", None)) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_6), QCoreApplication.translate("profile_settings", u"GUI Behaviour", None)) self.pushButton_save.setText(QCoreApplication.translate("profile_settings", u"Save", None))