mirror of
https://github.com/borgbase/vorta
synced 2025-01-03 13:45:49 +00:00
multiselection of folders in sources
This commit is contained in:
parent
0cecc56c8d
commit
13dc613255
2 changed files with 34 additions and 4 deletions
|
@ -15,7 +15,13 @@
|
|||
import psutil
|
||||
from PyQt6 import QtCore
|
||||
from PyQt6.QtCore import QFileInfo, QThread, pyqtSignal
|
||||
from PyQt6.QtWidgets import QApplication, QFileDialog, QSystemTrayIcon
|
||||
from PyQt6.QtWidgets import (
|
||||
QAbstractItemView,
|
||||
QApplication,
|
||||
QFileDialog,
|
||||
QSystemTrayIcon,
|
||||
QTreeView,
|
||||
)
|
||||
|
||||
from vorta.borg._compatibility import BorgCompatibility
|
||||
from vorta.log import logger
|
||||
|
@ -50,6 +56,22 @@ def run(self):
|
|||
self.signal.emit(self.path, str(self.size), str(self.files_count))
|
||||
|
||||
|
||||
class MultiSelectionFileDialog(QFileDialog):
|
||||
def __init__(self, parent, title, initial_dir=os.path.expanduser('~')):
|
||||
super().__init__(parent, title, initial_dir)
|
||||
|
||||
def selectedFiles(self, tree_view=None):
|
||||
selected_files = super().selectedFiles()
|
||||
|
||||
if self.fileMode() == QFileDialog.FileMode.Directory:
|
||||
if tree_view:
|
||||
selected_indexes = tree_view.selectionModel().selectedIndexes()
|
||||
selected_dirs = [tree_view.model().filePath(index) for index in selected_indexes]
|
||||
selected_files += selected_dirs
|
||||
|
||||
return selected_files
|
||||
|
||||
|
||||
def normalize_path(path):
|
||||
"""normalize paths for MacOS (but do nothing on other platforms)"""
|
||||
# HFS+ converts paths to a canonical form, so users shouldn't be required to enter an exact match.
|
||||
|
@ -167,11 +189,16 @@ def get_dict_from_list(dataDict, mapList):
|
|||
|
||||
|
||||
def choose_file_dialog(parent, title, want_folder=True):
|
||||
dialog = QFileDialog(parent, title, os.path.expanduser('~'))
|
||||
dialog = MultiSelectionFileDialog(parent, title, os.path.expanduser('~'))
|
||||
dialog.setFileMode(QFileDialog.FileMode.Directory if want_folder else QFileDialog.FileMode.ExistingFiles)
|
||||
dialog.setParent(parent, QtCore.Qt.WindowType.Sheet)
|
||||
if want_folder:
|
||||
dialog.setOption(QFileDialog.Option.ShowDirsOnly)
|
||||
dialog.setOption(QFileDialog.Option.DontUseNativeDialog)
|
||||
dir_dialog = dialog.findChild(QTreeView)
|
||||
dir_dialog.setSelectionMode(QAbstractItemView.SelectionMode.MultiSelection)
|
||||
return dialog, dir_dialog
|
||||
|
||||
return dialog
|
||||
|
||||
|
||||
|
|
|
@ -287,7 +287,7 @@ def sources_update(self):
|
|||
|
||||
def source_add(self, want_folder):
|
||||
def receive():
|
||||
dirs = dialog.selectedFiles()
|
||||
dirs = dialog.selectedFiles(dir_dialog) if want_folder else dialog.selectedFiles()
|
||||
for dir in dirs:
|
||||
if not os.access(dir, os.R_OK):
|
||||
msg = QMessageBox()
|
||||
|
@ -301,7 +301,10 @@ def receive():
|
|||
new_source.save()
|
||||
|
||||
msg = self.tr("Choose directory to back up") if want_folder else self.tr("Choose file(s) to back up")
|
||||
dialog = choose_file_dialog(self, msg, want_folder=want_folder)
|
||||
if want_folder:
|
||||
dialog, dir_dialog = choose_file_dialog(self, msg, want_folder=want_folder)
|
||||
else:
|
||||
dialog = choose_file_dialog(self, msg, want_folder=want_folder)
|
||||
dialog.open(receive)
|
||||
|
||||
def source_copy(self, index=None):
|
||||
|
|
Loading…
Reference in a new issue