diff --git a/blender_cloud/flamenco/__init__.py b/blender_cloud/flamenco/__init__.py index ba5a23b..69a6d1b 100644 --- a/blender_cloud/flamenco/__init__.py +++ b/blender_cloud/flamenco/__init__.py @@ -69,6 +69,8 @@ VIDEO_CONTAINER_TO_EXTENSION = { 'FLASH': '.flv', } +SHAMAN_URL_SCHEMES = {'shaman://', 'shaman+http://', 'shaman+https://'} + def scene_sample_count(scene) -> int: """Determine nr of render samples for this scene.""" @@ -548,6 +550,34 @@ class FLAMENCO_OT_render(async_loop.AsyncModalOperatorMixin, relative_only = prefs.flamenco_relative_only self.log.debug('projdir: %s', projdir) + + if any(prefs.flamenco_job_file_path.startswith(scheme) for scheme in SHAMAN_URL_SCHEMES): + endpoint, _ = bat_interface.parse_shaman_endpoint(prefs.flamenco_job_file_path) + self.log.info('Sending BAT pack to Shaman at %s', endpoint) + try: + outfile, missing_sources = await bat_interface.copy( + bpy.context, filepath, projdir, '/', exclusion_filter, + packer_class=bat_interface.ShamanPacker, + relative_only=relative_only, + endpoint=endpoint, + checkout_id=job_id, + ) + except bat_interface.FileTransferError as ex: + self.log.error('Could not transfer %d files, starting with %s', + len(ex.files_remaining), ex.files_remaining[0]) + self.report({'ERROR'}, 'Unable to transfer %d files' % len(ex.files_remaining)) + self.quit() + return None, None, [] + except bat_interface.Aborted: + self.log.warning('BAT Pack was aborted') + self.report({'WARNING'}, 'Aborted Flamenco file packing/transferring') + self.quit() + return None, None, [] + + bpy.context.window_manager.flamenco_status = 'DONE' + outfile = PurePath('{shaman}') / outfile + return None, outfile, missing_sources + # Create a unique directory that is still more or less identifyable. # This should work better than a random ID. unique_dir = '%s-%s-%s' % (datetime.now().isoformat('-').replace(':', ''), diff --git a/blender_cloud/flamenco/bat_interface.py b/blender_cloud/flamenco/bat_interface.py index 3407efe..a7b3f13 100644 --- a/blender_cloud/flamenco/bat_interface.py +++ b/blender_cloud/flamenco/bat_interface.py @@ -9,7 +9,7 @@ import typing import bpy from blender_asset_tracer import pack -from blender_asset_tracer.pack import progress, transfer +from blender_asset_tracer.pack import progress, transfer, shaman log = logging.getLogger(__name__) @@ -19,6 +19,8 @@ _packer_lock = threading.RLock() # For using in other parts of the add-on, so only this file imports BAT. Aborted = pack.Aborted FileTransferError = transfer.FileTransferError +ShamanPacker = shaman.ShamanPacker +parse_shaman_endpoint = shaman.parse_endpoint class BatProgress(progress.Callback): @@ -63,8 +65,8 @@ class BatProgress(progress.Callback): else: self._txt('Pack of %s done' % output_blendfile.name) - def pack_aborted(self): - self._txt('Aborted') + def pack_aborted(self, reason: str): + self._txt('Aborted: %s' % reason) self._status('ABORTED') def trace_blendfile(self, filename: pathlib.Path) -> None: