mirror of
https://github.com/borgbase/vorta
synced 2025-02-21 22:06:57 +00:00
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
2 changed files with 14 additions and 4 deletions
|
@ -5,6 +5,7 @@
|
|||
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 @@ def validate(self):
|
|||
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 @@ def __init__(self, parent=None):
|
|||
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 @@ def set_icons(self):
|
|||
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 @@ def process_new_repo(self, result):
|
|||
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 a new issue