From 4ba2cf0bf4e8f1a02a7df538070ad805f516141b Mon Sep 17 00:00:00 2001 From: Divyansh Singh Date: Fri, 17 Mar 2023 00:05:05 +0530 Subject: [PATCH 1/6] feat: block after vorta create --- src/vorta/application.py | 4 +++- src/vorta/borg/create.py | 1 + src/vorta/qt_single_application.py | 13 +++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/vorta/application.py b/src/vorta/application.py index 3c9327db6..0230abf38 100644 --- a/src/vorta/application.py +++ b/src/vorta/application.py @@ -52,7 +52,6 @@ def __init__(self, args_raw, single_app=False): elif args.profile: self.sendMessage(f"create {args.profile}") logger.info('Creating backup using existing Vorta instance.') - sys.exit() elif args.profile: sys.exit('Vorta must already be running for --create to work') @@ -147,6 +146,9 @@ def backup_cancelled_event_response(self): def message_received_event_response(self, message): if message == "open main window": self.open_main_window_action() + elif message.startswith("created"): + logger.debug(f"Backup created: {message[8:]}") + sys.exit() elif message.startswith("create"): message = message[7:] # Remove create if self.jobs_manager.is_worker_running(): diff --git a/src/vorta/borg/create.py b/src/vorta/borg/create.py index 3f338d25a..b9b1ae0c6 100644 --- a/src/vorta/borg/create.py +++ b/src/vorta/borg/create.py @@ -45,6 +45,7 @@ def started_event(self): self.app.backup_progress_event.emit(self.tr('Backup started.')) def finished_event(self, result): + self.app.reply(f"created {result['data']['archive']['name']}") self.app.backup_finished_event.emit(result) self.result.emit(result) self.pre_post_backup_cmd(self.params, cmd='post_backup_cmd', returncode=result['returncode']) diff --git a/src/vorta/qt_single_application.py b/src/vorta/qt_single_application.py index 8e5be661f..5f4f69ab0 100644 --- a/src/vorta/qt_single_application.py +++ b/src/vorta/qt_single_application.py @@ -53,6 +53,7 @@ def __init__(self, id, *argv): # Yes, there is. self._outStream = QTextStream(self._outSocket) self._outStream.setCodec('UTF-8') + self._outSocket.readyRead.connect(self._onReadyReply) else: # No, there isn't. self._outSocket = None @@ -93,3 +94,15 @@ def _onReadyRead(self): if not msg: break self.message_received_event.emit(msg) + + def _onReadyReply(self): + while True: + msg = self._outStream.readLine() + if not msg: + break + self.message_received_event.emit(msg) + + def reply(self, msg): + self._inStream << msg << '\n' + self._inStream.flush() + self._inSocket.waitForBytesWritten() From 7f5218b4a65c11926b505f5063d1d1dda69be04d Mon Sep 17 00:00:00 2001 From: Divyansh Singh Date: Fri, 17 Mar 2023 01:57:08 +0530 Subject: [PATCH 2/6] fix tests --- src/vorta/application.py | 9 +++++++-- src/vorta/borg/create.py | 1 - 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/vorta/application.py b/src/vorta/application.py index 0230abf38..ec21ba46f 100644 --- a/src/vorta/application.py +++ b/src/vorta/application.py @@ -91,7 +91,7 @@ def create_backups_cmdline(self, profile_name): if profile is not None: if profile.repo is None: logger.warning(f"Add a repository to {profile_name}") - self.create_backup_action(profile_id=profile.id) + self.create_backup_action(profile_id=profile.id, cmd_line=True) else: logger.warning(f"Invalid profile name {profile_name}") @@ -102,7 +102,7 @@ def quit_app_action(self): del self.tray cleanup_db() - def create_backup_action(self, profile_id=None): + def create_backup_action(self, profile_id=None, cmd_line=False): if not profile_id: profile_id = self.main_window.current_profile.id @@ -110,6 +110,8 @@ def create_backup_action(self, profile_id=None): msg = BorgCreateJob.prepare(profile) if msg['ok']: job = BorgCreateJob(msg['cmd'], msg, profile.repo.id) + if cmd_line: + job.result.connect(self.create_backup_cmdline_response) self.jobs_manager.add_job(job) else: notifier = VortaNotifications.pick() @@ -121,6 +123,9 @@ def create_backup_action(self, profile_id=None): self.backup_progress_event.emit(translate('messages', msg['message'])) return None + def create_backup_cmdline_response(self, result): + self.reply(f"created {result['data']['archive']['name']}") + def open_main_window_action(self): self.main_window.show() self.main_window.raise_() diff --git a/src/vorta/borg/create.py b/src/vorta/borg/create.py index b9b1ae0c6..3f338d25a 100644 --- a/src/vorta/borg/create.py +++ b/src/vorta/borg/create.py @@ -45,7 +45,6 @@ def started_event(self): self.app.backup_progress_event.emit(self.tr('Backup started.')) def finished_event(self, result): - self.app.reply(f"created {result['data']['archive']['name']}") self.app.backup_finished_event.emit(result) self.result.emit(result) self.pre_post_backup_cmd(self.params, cmd='post_backup_cmd', returncode=result['returncode']) From dfc8a4e3decc27fdacb7b7ef20bf30a094958821 Mon Sep 17 00:00:00 2001 From: Divyansh Singh Date: Fri, 17 Mar 2023 21:01:37 +0530 Subject: [PATCH 3/6] dont open another window --- src/vorta/application.py | 59 ++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/src/vorta/application.py b/src/vorta/application.py index ec21ba46f..e77de5e99 100644 --- a/src/vorta/application.py +++ b/src/vorta/application.py @@ -55,36 +55,37 @@ def __init__(self, args_raw, single_app=False): elif args.profile: sys.exit('Vorta must already be running for --create to work') - init_translations(self) - - self.setQuitOnLastWindowClosed(False) - self.jobs_manager = JobsManager() - self.scheduler = VortaScheduler() - - self.setApplicationName("Vorta") - - # Import profile from ~/.vorta-init.json or add empty "Default" profile. - self.bootstrap_profile() - - # Prepare tray and main window - self.tray = TrayMenu(self) - self.main_window = MainWindow(self) - - if getattr(args, 'daemonize', False): - pass - elif SettingsModel.get(key='foreground').value: - self.open_main_window_action() - - self.backup_started_event.connect(self.backup_started_event_response) - self.backup_finished_event.connect(self.backup_finished_event_response) - self.backup_cancelled_event.connect(self.backup_cancelled_event_response) self.message_received_event.connect(self.message_received_event_response) - self.check_failed_event.connect(self.check_failed_response) - self.backup_log_event.connect(self.react_to_log) - self.aboutToQuit.connect(self.quit_app_action) - self.set_borg_details_action() - if sys.platform == 'darwin': - self.check_darwin_permissions() + if not (self.isRunning() and args.profile): + init_translations(self) + + self.setQuitOnLastWindowClosed(False) + self.jobs_manager = JobsManager() + self.scheduler = VortaScheduler() + + self.setApplicationName("Vorta") + + # Import profile from ~/.vorta-init.json or add empty "Default" profile. + self.bootstrap_profile() + + # Prepare tray and main window + self.tray = TrayMenu(self) + self.main_window = MainWindow(self) + + if getattr(args, 'daemonize', False): + pass + elif SettingsModel.get(key='foreground').value: + self.open_main_window_action() + + self.backup_started_event.connect(self.backup_started_event_response) + self.backup_finished_event.connect(self.backup_finished_event_response) + self.backup_cancelled_event.connect(self.backup_cancelled_event_response) + self.check_failed_event.connect(self.check_failed_response) + self.backup_log_event.connect(self.react_to_log) + self.aboutToQuit.connect(self.quit_app_action) + self.set_borg_details_action() + if sys.platform == 'darwin': + self.check_darwin_permissions() def create_backups_cmdline(self, profile_name): profile = BackupProfileModel.get_or_none(name=profile_name) From 36a7da5dbf2eb6c957a1d67db337998fd25a5c34 Mon Sep 17 00:00:00 2001 From: Divyansh Singh Date: Sat, 18 Mar 2023 00:13:24 +0530 Subject: [PATCH 4/6] refactor Co-authored-by: yfprojects <62463991+real-yfprojects@users.noreply.github.com> --- src/vorta/application.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vorta/application.py b/src/vorta/application.py index e77de5e99..3ae8d968f 100644 --- a/src/vorta/application.py +++ b/src/vorta/application.py @@ -56,7 +56,7 @@ def __init__(self, args_raw, single_app=False): sys.exit('Vorta must already be running for --create to work') self.message_received_event.connect(self.message_received_event_response) - if not (self.isRunning() and args.profile): + if not args.profile: init_translations(self) self.setQuitOnLastWindowClosed(False) From 599fdc39b25fed51c3beb28236c779fef853641a Mon Sep 17 00:00:00 2001 From: Divyansh Singh Date: Tue, 21 Mar 2023 18:40:25 +0530 Subject: [PATCH 5/6] handle borg errors --- src/vorta/application.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/vorta/application.py b/src/vorta/application.py index e77de5e99..8904a0349 100644 --- a/src/vorta/application.py +++ b/src/vorta/application.py @@ -95,6 +95,7 @@ def create_backups_cmdline(self, profile_name): self.create_backup_action(profile_id=profile.id, cmd_line=True) else: logger.warning(f"Invalid profile name {profile_name}") + self.reply("failed - invalid profile name") def quit_app_action(self): self.backup_cancelled_event.emit() @@ -125,7 +126,10 @@ def create_backup_action(self, profile_id=None, cmd_line=False): return None def create_backup_cmdline_response(self, result): - self.reply(f"created {result['data']['archive']['name']}") + if result['returncode'] == 0: + self.reply(f"created {result['data']['archive']['name']}") + else: + self.reply(f"failed {result['data']['archive']['name']}") def open_main_window_action(self): self.main_window.show() @@ -153,7 +157,10 @@ def message_received_event_response(self, message): if message == "open main window": self.open_main_window_action() elif message.startswith("created"): - logger.debug(f"Backup created: {message[8:]}") + logger.info(f"Backup created: {message[8:]}") + sys.exit() + elif message.startswith("failed"): + logger.info(f"Backup failed: {message[7:]}") sys.exit() elif message.startswith("create"): message = message[7:] # Remove create From 44c8ac3ed24654c8fc72612a4c5d83e897df47a0 Mon Sep 17 00:00:00 2001 From: Divyansh Singh Date: Tue, 21 Mar 2023 18:54:50 +0530 Subject: [PATCH 6/6] fix result indexing --- src/vorta/application.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vorta/application.py b/src/vorta/application.py index 4000755b9..5051d8d36 100644 --- a/src/vorta/application.py +++ b/src/vorta/application.py @@ -129,7 +129,7 @@ def create_backup_cmdline_response(self, result): if result['returncode'] == 0: self.reply(f"created {result['data']['archive']['name']}") else: - self.reply(f"failed {result['data']['archive']['name']}") + self.reply(f"failed {result['errors']}") def open_main_window_action(self): self.main_window.show()