diff --git a/legendary/downloader/__init__.py b/legendary/downloader/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/legendary/downloader/log_dlm.py b/legendary/downloader/log_dlm.py index 4ebb0bc..701c73f 100644 --- a/legendary/downloader/log_dlm.py +++ b/legendary/downloader/log_dlm.py @@ -8,14 +8,15 @@ class log_dlm: print(main_window) return "cli" else: - bar = Gtk.ProgressBar() - main_window.login_vbox.pack_end(bar, False, False, 10) print(main_window) - return bar + return main_window.progress_bar - def update(self, perc, processed_chunks, num_chunk_tasks, rt_hours, rt_minutes, rt_seconds, hours, minutes, seconds, total_dl, total_write, total_used, dl_speed, dl_unc_speed, w_speed, r_speed, obj_out): + def update(self_log_dlm, self, perc, processed_chunks, num_chunk_tasks, rt_hours, rt_minutes, rt_seconds, hours, minutes, seconds, total_dl, total_write, total_used, dl_speed, dl_unc_speed, w_speed, r_speed, obj_out): + print("update_choose") if obj_out == "cli": - update_cli( self, + print("update_cli") + self_log_dlm.update_cli( + self, perc, processed_chunks, num_chunk_tasks, @@ -33,7 +34,9 @@ class log_dlm: w_speed, r_speed) else: - update_gui( self, + print("update_gui") + self_log_dlm.update_gui( + self, perc, processed_chunks, num_chunk_tasks, @@ -53,13 +56,14 @@ class log_dlm: obj_out) - def update_gui(self, perc, processed_chunks, num_chunk_tasks, rt_hours, rt_minutes, rt_seconds, hours, minutes, seconds, total_dl, total_write, total_used, dl_speed, dl_unc_speed, w_speed, r_speed, bar): + def update_gui(self_log_dlm, self, perc, processed_chunks, num_chunk_tasks, rt_hours, rt_minutes, rt_seconds, hours, minutes, seconds, total_dl, total_write, total_used, dl_speed, dl_unc_speed, w_speed, r_speed, bar): bar.set_fraction(perc) bar.set_text(f"{dl_speed / 1024 / 1024:.02f} MiB/s - {(perc*100):.02f}% - ETA: {hours:02d}:{minutes:02d}:{seconds:02d}") print(bar.get_text()) - def update_cli(self, perc, processed_chunks, num_chunk_tasks, rt_hours, rt_minutes, rt_seconds, hours, minutes, seconds, total_dl, total_write, total_used, dl_speed, dl_unc_speed, w_speed, r_speed): + def update_cli(self_log_dlm, self, perc, processed_chunks, num_chunk_tasks, rt_hours, rt_minutes, rt_seconds, hours, minutes, seconds, total_dl, total_write, total_used, dl_speed, dl_unc_speed, w_speed, r_speed): perc *= 100 + print(f"perc: {perc}") self.log.info(f'= Progress: {perc:.02f}% ({processed_chunks}/{num_chunk_tasks}), ' f'Running for {rt_hours:02d}:{rt_minutes:02d}:{rt_seconds:02d}, ' f'ETA: {hours:02d}:{minutes:02d}:{seconds:02d}') diff --git a/legendary/downloader/workers.py b/legendary/downloader/workers.py index 2e8ac49..8f34e83 100644 --- a/legendary/downloader/workers.py +++ b/legendary/downloader/workers.py @@ -138,7 +138,6 @@ class FileWorker(Process): logger = logging.getLogger(self.name) logger.setLevel(self.log_level) logger.debug(f'Download worker reporting for duty!') - print(f'Download worker reporting for duty! {self.name}') last_filename = '' current_file = None @@ -146,9 +145,7 @@ class FileWorker(Process): while True: try: try: - print(f'j = self.q.get - {self.name}') - #j = self.q.get(timeout=10.0) - j = self.q.get(timeout=0.5) + j = self.q.get(timeout=10.0) except Empty: logger.warning('Writer queue empty!') continue diff --git a/legendary/gui/gui.py b/legendary/gui/gui.py index 21dda48..b69f1b9 100755 --- a/legendary/gui/gui.py +++ b/legendary/gui/gui.py @@ -1,5 +1,7 @@ #!/usr/bin/env python3 +# TODO: fix progress bar + import sys # insert at 1, 0 is the script path (or '' in REPL) sys.path.insert(1, '../..') @@ -85,7 +87,7 @@ def update_avail(app_name): else: return "" -# TODO: actual install +# TODO: finish actual install def install_gtk(app_name, app_title, parent): install_dialog = Gtk.MessageDialog( parent=parent, destroy_with_parent=True, @@ -592,7 +594,8 @@ def install_gtk(app_name, app_title, parent): repair_file = os.path.join(core.lgd.get_tmp_path(), f'{app_name}.repair') if not core.login(): - log_gtk('Login failed! Cannot continue with download process.') + #log_gtk('Login failed! Cannot continue with download process.') + print('Login failed! Cannot continue with download process.') exit(1) if args.file_prefix or args.file_exclude_prefix or args.install_tag: @@ -600,7 +603,8 @@ def install_gtk(app_name, app_title, parent): if args.update_only: if not core.is_installed(app_name): - log_gtk(f'Update requested for "{app_name}", but app not installed!') + #log_gtk(f'Update requested for "{app_name}", but app not installed!') + print(f'Update requested for "{app_name}", but app not installed!') exit(1) if args.platform_override: @@ -609,19 +613,23 @@ def install_gtk(app_name, app_title, parent): game = core.get_game(app_name, update_meta=True) if not game: - log_gtk(f'Could not find "{app_name}" in list of available games,' + #log_gtk(f'Could not find "{app_name}" in list of available games,' + # f'did you type the name correctly?') + print(f'Could not find "{app_name}" in list of available games,' f'did you type the name correctly?') exit(1) if game.is_dlc: - log_gtk('Install candidate is DLC') + #log_gtk('Install candidate is DLC') + print('Install candidate is DLC') app_name = game.metadata['mainGameItem']['releaseInfo'][0]['appId'] base_game = core.get_game(app_name) # check if base_game is actually installed if not core.is_installed(app_name): # download mode doesn't care about whether or not something's installed if not args.no_install: - log_gtk(f'Base game "{app_name}" is not installed!') + #log_gtk(f'Base game "{app_name}" is not installed!') + print(f'Base game "{app_name}" is not installed!') exit(1) else: base_game = None @@ -678,19 +686,22 @@ def install_gtk(app_name, app_title, parent): # game is either up to date or hasn't changed, so we have nothing to do if not analysis.dl_size: old_igame = core.get_installed_game(game.app_name) - log_gtk('Download size is 0, the game is either already up to date or has not changed. Exiting...') + #log_gtk('Download size is 0, the game is either already up to date or has not changed. Exiting...') + print('Download size is 0, the game is either already up to date or has not changed. Exiting...') if old_igame and args.repair_mode and os.path.exists(repair_file): if old_igame.needs_verification: old_igame.needs_verification = False core.install_game(old_igame) - log_gtk('Removing repair file.') + #log_gtk('Removing repair file.') + print('Removing repair file.') os.remove(repair_file) # check if install tags have changed, if they did; try deleting files that are no longer required. if old_igame and old_igame.install_tags != igame.install_tags: old_igame.install_tags = igame.install_tags - log_gtk('Deleting now untagged files.') + #log_gtk('Deleting now untagged files.') + print('Deleting now untagged files.') core.uninstall_tag(old_igame) core.install_game(old_igame) @@ -708,15 +719,18 @@ def install_gtk(app_name, app_title, parent): ignore_space_req=args.ignore_space) if res.warnings or res.failures: - log_gtk('Installation requirements check returned the following results:') + #log_gtk('Installation requirements check returned the following results:') + print('Installation requirements check returned the following results:') if res.warnings: for warn in sorted(res.warnings): - log_gtk(warn) + #log_gtk(warn) + print(warn) if res.failures: for msg in sorted(res.failures): - log_gtk(msg) + #log_gtk(msg) + print(msg) log_gtk('Installation cannot proceed, exiting.') exit(1) @@ -735,7 +749,11 @@ def install_gtk(app_name, app_title, parent): dlm.join() except Exception as e: end_t = time.time() - log_gtk(f'Installation failed after {end_t - start_t:.02f} seconds.' + #log_gtk(f'Installation failed after {end_t - start_t:.02f} seconds.' + # f'The following exception occurred while waiting for the downloader to finish: {e!r}. ' + # f'Try restarting the process, the resume file will be used to start where it failed. ' + # f'If it continues to fail please open an issue on GitHub.') + print(f'Installation failed after {end_t - start_t:.02f} seconds.' f'The following exception occurred while waiting for the downloader to finish: {e!r}. ' f'Try restarting the process, the resume file will be used to start where it failed. ' f'If it continues to fail please open an issue on GitHub.') @@ -827,6 +845,10 @@ class main_window(Gtk.Window): self.login_vbox.pack_end(self.button_logout, False, False, 10) self.login_vbox.pack_end(self.username_label, False, False, 0) + # Proress Bar for downloads + self.progress_bar = Gtk.ProgressBar() + self.login_vbox.pack_end(self.progress_bar, False, False, 10) + self.box.pack_start(self.login_vbox, False, False, 20) # Games diff --git a/legendary/gui/manager2.py b/legendary/gui/manager2.py index a994027..c5b3419 100644 --- a/legendary/gui/manager2.py +++ b/legendary/gui/manager2.py @@ -620,7 +620,7 @@ class DLManager(Process): self.log.debug(f'Created {len(self.sms)} shared memory segments.') - obj_out = log_dlm.create(main_window) + obj_out = log_dlm.create("cli") print("created obj_out") # Create queues @@ -716,6 +716,7 @@ class DLManager(Process): hours = minutes = seconds = 0 rt_hours = rt_minutes = rt_seconds = 0 + print("loop") log_dlm.update( self, perc, processed_chunks,