2018-11-22 00:43:37 +00:00
|
|
|
from PyQt5 import uic
|
2018-12-05 09:05:47 +00:00
|
|
|
from ..models import SourceFileModel, BackupProfileMixin
|
|
|
|
from ..utils import get_asset, choose_file_dialog
|
2020-06-22 07:59:28 +00:00
|
|
|
from PyQt5.QtWidgets import QApplication, QMessageBox
|
|
|
|
import os
|
2018-10-27 17:24:34 +00:00
|
|
|
|
2018-10-29 05:49:25 +00:00
|
|
|
uifile = get_asset('UI/sourcetab.ui')
|
2018-10-27 17:24:34 +00:00
|
|
|
SourceUI, SourceBase = uic.loadUiType(uifile)
|
|
|
|
|
|
|
|
|
2018-10-31 16:09:01 +00:00
|
|
|
class SourceTab(SourceBase, SourceUI, BackupProfileMixin):
|
2018-10-27 17:24:34 +00:00
|
|
|
def __init__(self, parent=None):
|
|
|
|
super().__init__(parent)
|
|
|
|
self.setupUi(parent)
|
|
|
|
|
2018-11-24 04:12:12 +00:00
|
|
|
self.sourceAddFolder.clicked.connect(lambda: self.source_add(want_folder=True))
|
|
|
|
self.sourceAddFile.clicked.connect(lambda: self.source_add(want_folder=False))
|
2018-10-27 17:24:34 +00:00
|
|
|
self.sourceRemove.clicked.connect(self.source_remove)
|
2020-06-22 07:59:28 +00:00
|
|
|
self.paste.clicked.connect(self.paste_text)
|
2018-11-17 08:51:53 +00:00
|
|
|
self.excludePatternsField.textChanged.connect(self.save_exclude_patterns)
|
|
|
|
self.excludeIfPresentField.textChanged.connect(self.save_exclude_if_present)
|
|
|
|
self.populate_from_profile()
|
2018-10-27 17:24:34 +00:00
|
|
|
|
2018-11-17 08:51:53 +00:00
|
|
|
def populate_from_profile(self):
|
|
|
|
profile = self.profile()
|
|
|
|
self.excludePatternsField.textChanged.disconnect()
|
|
|
|
self.excludeIfPresentField.textChanged.disconnect()
|
2018-12-05 09:05:47 +00:00
|
|
|
self.sourceFilesWidget.clear()
|
2018-11-17 08:51:53 +00:00
|
|
|
self.excludePatternsField.clear()
|
|
|
|
self.excludeIfPresentField.clear()
|
|
|
|
|
2018-12-05 09:05:47 +00:00
|
|
|
for source in SourceFileModel.select().where(SourceFileModel.profile == profile):
|
|
|
|
self.sourceFilesWidget.addItem(source.dir)
|
2018-10-28 09:35:25 +00:00
|
|
|
|
2018-11-17 08:51:53 +00:00
|
|
|
self.excludePatternsField.appendPlainText(profile.exclude_patterns)
|
|
|
|
self.excludeIfPresentField.appendPlainText(profile.exclude_if_present)
|
2018-10-28 09:35:25 +00:00
|
|
|
self.excludePatternsField.textChanged.connect(self.save_exclude_patterns)
|
|
|
|
self.excludeIfPresentField.textChanged.connect(self.save_exclude_if_present)
|
|
|
|
|
2018-11-24 04:12:12 +00:00
|
|
|
def source_add(self, want_folder):
|
2018-11-20 00:50:52 +00:00
|
|
|
def receive():
|
|
|
|
dir = dialog.selectedFiles()
|
|
|
|
if dir:
|
2018-12-05 09:05:47 +00:00
|
|
|
new_source, created = SourceFileModel.get_or_create(dir=dir[0], profile=self.profile())
|
2018-11-20 00:50:52 +00:00
|
|
|
if created:
|
2018-12-05 09:05:47 +00:00
|
|
|
self.sourceFilesWidget.addItem(dir[0])
|
2018-11-20 00:50:52 +00:00
|
|
|
new_source.save()
|
|
|
|
|
2019-01-20 03:50:10 +00:00
|
|
|
msg = self.tr("Choose directory to back up") if want_folder else self.tr("Choose file to back up")
|
|
|
|
dialog = choose_file_dialog(self, msg, want_folder=want_folder)
|
2018-11-20 00:50:52 +00:00
|
|
|
dialog.open(receive)
|
|
|
|
|
2018-10-27 17:24:34 +00:00
|
|
|
def source_remove(self):
|
2018-12-05 09:05:47 +00:00
|
|
|
item = self.sourceFilesWidget.takeItem(self.sourceFilesWidget.currentRow())
|
2019-04-16 01:51:25 +00:00
|
|
|
if item:
|
|
|
|
db_item = SourceFileModel.get(dir=item.text())
|
|
|
|
db_item.delete_instance()
|
2018-10-28 09:35:25 +00:00
|
|
|
|
|
|
|
def save_exclude_patterns(self):
|
2018-11-04 08:23:17 +00:00
|
|
|
profile = self.profile()
|
2018-10-31 16:09:01 +00:00
|
|
|
profile.exclude_patterns = self.excludePatternsField.toPlainText()
|
|
|
|
profile.save()
|
2018-10-28 09:35:25 +00:00
|
|
|
|
|
|
|
def save_exclude_if_present(self):
|
2018-11-04 08:23:17 +00:00
|
|
|
profile = self.profile()
|
2018-10-31 16:09:01 +00:00
|
|
|
profile.exclude_if_present = self.excludeIfPresentField.toPlainText()
|
|
|
|
profile.save()
|
2020-06-22 07:59:28 +00:00
|
|
|
|
|
|
|
def paste_text(self):
|
|
|
|
sources = QApplication.clipboard().text().splitlines()
|
|
|
|
invalidSources = ""
|
|
|
|
for source in sources:
|
|
|
|
if len(source) > 0: # Ignore empty newlines
|
|
|
|
if not os.path.exists(source):
|
|
|
|
invalidSources = invalidSources + "\n" + source
|
|
|
|
else:
|
|
|
|
new_source, created = SourceFileModel.get_or_create(dir=source, profile=self.profile())
|
|
|
|
if created:
|
|
|
|
self.sourceFilesWidget.addItem(source)
|
|
|
|
new_source.save()
|
|
|
|
|
|
|
|
if len(invalidSources) != 0: # Check if any invalid paths
|
|
|
|
msg = QMessageBox()
|
|
|
|
msg.setText("Some of your sources are invalid:" + invalidSources)
|
|
|
|
msg.exec()
|