diff --git a/lbrynet/file_manager/EncryptedFileDownloader.py b/lbrynet/file_manager/EncryptedFileDownloader.py index 5378a541f..c5decff50 100644 --- a/lbrynet/file_manager/EncryptedFileDownloader.py +++ b/lbrynet/file_manager/EncryptedFileDownloader.py @@ -6,7 +6,7 @@ import binascii from zope.interface import implements from twisted.internet import defer - +from lbrynet import conf from lbrynet.core.client.StreamProgressManager import FullStreamProgressManager from lbrynet.core.HTTPBlobDownloader import HTTPBlobDownloader from lbrynet.core.utils import short_hash @@ -56,7 +56,11 @@ class ManagedEncryptedFileDownloader(EncryptedFileSaver): self.channel_claim_id = None self.channel_name = None self.metadata = None - self.mirror = HTTPBlobDownloader(self.blob_manager, servers=download_mirrors) if download_mirrors else None + self.mirror = None + if download_mirrors: + self.mirror = HTTPBlobDownloader( + self.blob_manager, servers=download_mirrors or conf.settings['download_mirrors'] + ) def set_claim_info(self, claim_info): self.claim_id = claim_info['claim_id'] @@ -102,7 +106,7 @@ class ManagedEncryptedFileDownloader(EncryptedFileSaver): yield EncryptedFileDownloader.stop(self, err=err) if change_status is True: status = yield self._save_status() - defer.returnValue(status) + defer.returnValue(status) @defer.inlineCallbacks def status(self): @@ -163,23 +167,25 @@ class ManagedEncryptedFileDownloader(EncryptedFileSaver): class ManagedEncryptedFileDownloaderFactory(object): implements(IStreamDownloaderFactory) - def __init__(self, lbry_file_manager): + def __init__(self, lbry_file_manager, blob_manager): self.lbry_file_manager = lbry_file_manager + self.blob_manager = blob_manager def can_download(self, sd_validator): # TODO: add a sd_validator for non live streams, use it return True @defer.inlineCallbacks - def make_downloader(self, metadata, data_rate, payment_rate_manager, download_directory, file_name=None): - stream_hash = yield save_sd_info(self.lbry_file_manager.session.blob_manager, + def make_downloader(self, metadata, data_rate, payment_rate_manager, download_directory, file_name=None, + download_mirrors=None): + stream_hash = yield save_sd_info(self.blob_manager, metadata.source_blob_hash, metadata.validator.raw_info) if file_name: file_name = binascii.hexlify(file_name) lbry_file = yield self.lbry_file_manager.add_downloaded_file( stream_hash, metadata.source_blob_hash, binascii.hexlify(download_directory), payment_rate_manager, - data_rate, file_name=file_name + data_rate, file_name=file_name, download_mirrors=download_mirrors ) defer.returnValue(lbry_file) diff --git a/lbrynet/file_manager/EncryptedFileManager.py b/lbrynet/file_manager/EncryptedFileManager.py index 437b474f3..79fbda9f4 100644 --- a/lbrynet/file_manager/EncryptedFileManager.py +++ b/lbrynet/file_manager/EncryptedFileManager.py @@ -31,7 +31,6 @@ class EncryptedFileManager(object): def __init__(self, peer_finder, rate_limiter, blob_manager, wallet, payment_rate_manager, storage, sd_identifier): self.auto_re_reflect = conf.settings['reflect_uploads'] and conf.settings['auto_re_reflect_interval'] > 0 self.auto_re_reflect_interval = conf.settings['auto_re_reflect_interval'] - self.download_mirrors = conf.settings['download_mirrors'] self.peer_finder = peer_finder self.rate_limiter = rate_limiter self.blob_manager = blob_manager @@ -74,12 +73,12 @@ class EncryptedFileManager(object): return dl def _add_to_sd_identifier(self): - downloader_factory = ManagedEncryptedFileDownloaderFactory(self) + downloader_factory = ManagedEncryptedFileDownloaderFactory(self, self.blob_manager) self.sd_identifier.add_stream_downloader_factory( EncryptedFileStreamType, downloader_factory) def _get_lbry_file(self, rowid, stream_hash, payment_rate_manager, sd_hash, key, - stream_name, file_name, download_directory, suggested_file_name): + stream_name, file_name, download_directory, suggested_file_name, download_mirrors=None): return ManagedEncryptedFileDownloader( rowid, stream_hash, @@ -96,14 +95,14 @@ class EncryptedFileManager(object): sd_hash=sd_hash, key=key, suggested_file_name=suggested_file_name, - download_mirrors=self.download_mirrors + download_mirrors=download_mirrors ) - def _start_lbry_file(self, file_info, payment_rate_manager, claim_info): + def _start_lbry_file(self, file_info, payment_rate_manager, claim_info, download_mirrors=None): lbry_file = self._get_lbry_file( file_info['row_id'], file_info['stream_hash'], payment_rate_manager, file_info['sd_hash'], file_info['key'], file_info['stream_name'], file_info['file_name'], file_info['download_directory'], - file_info['suggested_file_name'] + file_info['suggested_file_name'], download_mirrors ) if claim_info: lbry_file.set_claim_info(claim_info) @@ -166,7 +165,7 @@ class EncryptedFileManager(object): ) lbry_file = self._get_lbry_file( rowid, stream_hash, payment_rate_manager, sd_hash, key, stream_name, file_name, download_directory, - stream_metadata['suggested_file_name'] + stream_metadata['suggested_file_name'], download_mirrors=None ) lbry_file.restore(status) yield lbry_file.get_claim_info() @@ -176,7 +175,7 @@ class EncryptedFileManager(object): @defer.inlineCallbacks def add_downloaded_file(self, stream_hash, sd_hash, download_directory, payment_rate_manager=None, - blob_data_rate=None, status=None, file_name=None): + blob_data_rate=None, status=None, file_name=None, download_mirrors=None): status = status or ManagedEncryptedFileDownloader.STATUS_STOPPED payment_rate_manager = payment_rate_manager or self.payment_rate_manager blob_data_rate = blob_data_rate or payment_rate_manager.min_blob_data_payment_rate @@ -193,7 +192,7 @@ class EncryptedFileManager(object): file_name = yield self.storage.get_filename_for_rowid(rowid) lbry_file = self._get_lbry_file( rowid, stream_hash, payment_rate_manager, sd_hash, key, stream_name, file_name, download_directory, - stream_metadata['suggested_file_name'] + stream_metadata['suggested_file_name'], download_mirrors ) lbry_file.restore(status) yield lbry_file.get_claim_info(include_supports=False)