reopen addrepowindow prefilled on failure

This commit is contained in:
shivansh02 2024-03-13 19:28:20 +05:30
parent b2cf5b1fc9
commit 02a2930069
3 changed files with 54 additions and 1 deletions

View File

@ -15,6 +15,7 @@ from .models import (
BackupProfileModel,
EventLogModel,
ExclusionModel,
FailedRepoModel,
RepoModel,
RepoPassword,
SchemaVersion,
@ -56,6 +57,7 @@ def init_db(con=None):
EventLogModel,
SchemaVersion,
ExclusionModel,
FailedRepoModel,
]
)

View File

@ -268,3 +268,15 @@ class BackupProfileMixin:
def profile(self):
return BackupProfileModel.get(id=self.window().current_profile.id)
class FailedRepoModel(BaseModel):
"""A single failed repo with unique URL."""
url = pw.CharField(unique=True)
name = pw.CharField(default='')
extra_borg_arguments = pw.CharField(default='')
ssh_key = pw.CharField(default='')
class Meta:
database = DB

View File

@ -13,7 +13,7 @@ from PyQt6.QtWidgets import (
from vorta.borg.info_repo import BorgInfoRepoJob
from vorta.borg.init import BorgInitJob
from vorta.keyring.abc import VortaKeyring
from vorta.store.models import RepoModel
from vorta.store.models import FailedRepoModel, RepoModel
from vorta.utils import borg_compat, choose_file_dialog, get_asset, get_private_keys
from vorta.views.partials.password_input import PasswordInput, PasswordLineEdit
from vorta.views.utils import get_colored_icon
@ -37,6 +37,8 @@ class RepoWindow(AddRepoBase, AddRepoUI):
self.saveButton = self.buttonBox.button(QDialogButtonBox.StandardButton.Ok)
self.saveButton.setText(self.tr("Add"))
self.populate_from_failed_repo()
self.buttonBox.rejected.connect(self.close)
self.buttonBox.accepted.connect(self.run)
self.chooseLocalFolderButton.clicked.connect(self.choose_local_backup_folder)
@ -93,8 +95,45 @@ class RepoWindow(AddRepoBase, AddRepoUI):
self.added_repo.emit(result)
self.accept()
else:
self.save_failed_repo(
self.repoURL.text(),
self.repoName.text(),
self.extraBorgArgumentsLineEdit.text(),
self.sshComboBox.currentText(),
)
self._set_status(self.tr('Unable to add your repository.'))
def save_failed_repo(self, url, name, extraBorgArguments, sshKey):
# Check if there's already a failed repository entry in the database
failed_repo = FailedRepoModel.get_or_none()
if failed_repo is not None:
# Update details of the existing failed repository with the new information
failed_repo.url = url
failed_repo.name = name
failed_repo.extra_borg_arguments = extraBorgArguments
failed_repo.ssh_key = sshKey
failed_repo.save()
else:
# Create a new entry for the failed repository
failed_repo = FailedRepoModel.create(
url=url,
name=name,
extra_borg_arguments=extraBorgArguments,
ssh_key=sshKey,
)
return failed_repo
def populate_from_failed_repo(self):
failed_repo = FailedRepoModel.get_or_none()
if failed_repo is not None:
self.repoName.setText(failed_repo.name)
self.repoURL.setText(failed_repo.url)
self.extraBorgArgumentsLineEdit.setText(failed_repo.extra_borg_arguments)
ssh_index = self.sshComboBox.findData(failed_repo.ssh_key)
if ssh_index != -1:
self.sshComboBox.setCurrentIndex(ssh_index)
def init_ssh_key(self):
keys = get_private_keys()
for key in keys: