mirror of https://github.com/borgbase/vorta
Prevent duplicate repos from being added. Fixes #473
The change to repo_add_dialog.py adds a check in the database to see if the repo already exists, and blocks the ui with an error message if so. The change to repo_tab.py refactors the selector population logic so that the selector stays in sync with the database and doesn't leave the entry in the UI that triggers the crash.
This commit is contained in:
parent
79ef4717d7
commit
eedd1184a5
|
@ -5,6 +5,7 @@ from vorta.utils import get_private_keys, get_asset, choose_file_dialog, borg_co
|
|||
from vorta.borg.init import BorgInitThread
|
||||
from vorta.borg.info import BorgInfoThread
|
||||
from vorta.views.utils import get_colored_icon
|
||||
from vorta.models import RepoModel
|
||||
|
||||
uifile = get_asset('UI/repoadd.ui')
|
||||
AddRepoUI, AddRepoBase = uic.loadUiType(uifile)
|
||||
|
@ -117,6 +118,10 @@ class AddRepoWindow(AddRepoBase, AddRepoUI):
|
|||
self._set_status(self.tr('Please enter a valid repo URL or select a local path.'))
|
||||
return False
|
||||
|
||||
if RepoModel.get_or_none(RepoModel.url == self.values['repo_url']) is not None:
|
||||
self._set_status(self.tr('This repo has already been added.'))
|
||||
return False
|
||||
|
||||
if self.__class__ == AddRepoWindow:
|
||||
if self.values['encryption'] != 'none':
|
||||
if len(self.values['password']) < 8:
|
||||
|
|
|
@ -25,9 +25,7 @@ class RepoTab(RepoBase, RepoUI, BackupProfileMixin):
|
|||
self.repoSelector.addItem(self.tr('+ Initialize New Repository'), 'new')
|
||||
self.repoSelector.addItem(self.tr('+ Add Existing Repository'), 'existing')
|
||||
self.repoSelector.insertSeparator(3)
|
||||
for repo in RepoModel.select():
|
||||
self.repoSelector.addItem(repo.url, repo.id)
|
||||
|
||||
self.set_repos()
|
||||
self.repoSelector.currentIndexChanged.connect(self.repo_select_action)
|
||||
self.repoRemoveToolbutton.clicked.connect(self.repo_unlink_action)
|
||||
|
||||
|
@ -64,6 +62,13 @@ class RepoTab(RepoBase, RepoUI, BackupProfileMixin):
|
|||
self.repoRemoveToolbutton.setIcon(get_colored_icon('unlink'))
|
||||
self.sshKeyToClipboardButton.setIcon(get_colored_icon('copy'))
|
||||
|
||||
def set_repos(self):
|
||||
count = self.repoSelector.count()
|
||||
for x in range(4, count): # Repositories are listed after 4th entry in repoSelector
|
||||
self.repoSelector.removeItem(4)
|
||||
for repo in RepoModel.select():
|
||||
self.repoSelector.addItem(repo.url, repo.id)
|
||||
|
||||
def populate_from_profile(self):
|
||||
profile = self.profile()
|
||||
if profile.repo:
|
||||
|
@ -175,7 +180,7 @@ class RepoTab(RepoBase, RepoUI, BackupProfileMixin):
|
|||
profile.repo = new_repo.id
|
||||
profile.save()
|
||||
|
||||
self.repoSelector.addItem(new_repo.url, new_repo.id)
|
||||
self.set_repos()
|
||||
self.repoSelector.setCurrentIndex(self.repoSelector.count() - 1)
|
||||
self.repo_added.emit()
|
||||
self.init_repo_stats()
|
||||
|
|
Loading…
Reference in New Issue