Merge branch 'development'

This commit is contained in:
Jimmy Kiselak 2016-02-23 15:48:00 -05:00
commit af276a24ed
3 changed files with 41 additions and 78 deletions

View file

@ -835,6 +835,7 @@ class LBRYumWallet(LBRYWallet):
self.wallet = None self.wallet = None
self.cmd_runner = None self.cmd_runner = None
self.first_run = False self.first_run = False
self.printed_retrieving_headers = False
def _start(self): def _start(self):
@ -843,15 +844,20 @@ class LBRYumWallet(LBRYWallet):
def setup_network(): def setup_network():
self.config = SimpleConfig() self.config = SimpleConfig()
self.network = Network(self.config) self.network = Network(self.config)
alert.info("Starting the wallet...")
return defer.succeed(self.network.start()) return defer.succeed(self.network.start())
d = setup_network() d = setup_network()
def check_started(): def check_started():
if self.network.is_connecting(): if self.network.is_connecting():
if not self.printed_retrieving_headers and self.network.blockchain.retrieving_headers:
alert.info("Running the wallet for the first time...this may take a moment.")
self.printed_retrieving_headers = True
return False return False
start_check.stop() start_check.stop()
if self.network.is_connected(): if self.network.is_connected():
alert.info("Wallet started.")
network_start_d.callback(True) network_start_d.callback(True)
else: else:
network_start_d.errback(ValueError("Failed to connect to network.")) network_start_d.errback(ValueError("Failed to connect to network."))
@ -917,7 +923,9 @@ class LBRYumWallet(LBRYWallet):
return d return d
def get_block(self, blockhash): def get_block(self, blockhash):
return defer.fail(NotImplementedError()) cmd = known_commands['getblock']
func = getattr(self.cmd_runner, cmd.name)
return threads.deferToThread(func, blockhash)
def get_most_recent_blocktime(self): def get_most_recent_blocktime(self):
header = self.network.get_header(self.network.get_local_height()) header = self.network.get_header(self.network.get_local_height())
@ -970,6 +978,11 @@ class LBRYumWallet(LBRYWallet):
def _get_balance_for_address(self, address): def _get_balance_for_address(self, address):
return defer.succeed(Decimal(self.wallet.get_addr_received(address))/COIN) return defer.succeed(Decimal(self.wallet.get_addr_received(address))/COIN)
def get_nametrie(self):
cmd = known_commands['getnametrie']
func = getattr(self.cmd_runner, cmd.name)
return threads.deferToThread(func)
def _save_wallet(self, val): def _save_wallet(self, val):
d = threads.deferToThread(self.wallet.storage.write) d = threads.deferToThread(self.wallet.storage.write)
d.addCallback(lambda _: val) d.addCallback(lambda _: val)

View file

@ -96,8 +96,9 @@ class CryptStreamDownloader(object):
self.starting = True self.starting = True
self.completed = False self.completed = False
self.finished_deferred = defer.Deferred() self.finished_deferred = defer.Deferred()
fd = self.finished_deferred
d = self._start() d = self._start()
d.addCallback(lambda _: self.finished_deferred) d.addCallback(lambda _: fd)
return d return d
def stop(self, err=None): def stop(self, err=None):

View file

@ -7,8 +7,6 @@ import locale
import sys import sys
from yapsy.PluginManager import PluginManager from yapsy.PluginManager import PluginManager
from twisted.internet import defer, threads, stdio, task, error from twisted.internet import defer, threads, stdio, task, error
from twisted.python.failure import Failure
# from lbrynet.core.client.AutoDownloader import AutoFetcher
from lbrynet.lbrynet_console.ConsoleControl import ConsoleControl from lbrynet.lbrynet_console.ConsoleControl import ConsoleControl
from lbrynet.lbrynet_console.LBRYSettings import LBRYSettings from lbrynet.lbrynet_console.LBRYSettings import LBRYSettings
from lbrynet.lbryfilemanager.LBRYFileManager import LBRYFileManager from lbrynet.lbryfilemanager.LBRYFileManager import LBRYFileManager
@ -24,10 +22,8 @@ from lbrynet.lbryfile.client.LBRYFileOptions import add_lbry_file_to_sd_identifi
from lbrynet.lbryfile.client.LBRYFileDownloader import LBRYFileOpenerFactory from lbrynet.lbryfile.client.LBRYFileDownloader import LBRYFileOpenerFactory
from lbrynet.lbryfile.StreamDescriptor import LBRYFileStreamType from lbrynet.lbryfile.StreamDescriptor import LBRYFileStreamType
from lbrynet.lbryfile.LBRYFileMetadataManager import DBLBRYFileMetadataManager, TempLBRYFileMetadataManager from lbrynet.lbryfile.LBRYFileMetadataManager import DBLBRYFileMetadataManager, TempLBRYFileMetadataManager
#from lbrynet.lbrylive.PaymentRateManager import LiveStreamPaymentRateManager
from lbrynet.lbrynet_console.ControlHandlers import ApplicationStatusFactory, GetWalletBalancesFactory, ShutDownFactory from lbrynet.lbrynet_console.ControlHandlers import ApplicationStatusFactory, GetWalletBalancesFactory, ShutDownFactory
#from lbrynet.lbrynet_console.ControlHandlers import AutoFetcherStartFactory, AutoFetcherStopFactory from lbrynet.lbrynet_console.ControlHandlers import ImmediateAnnounceAllBlobsFactory
from lbrynet.lbrynet_console.ControlHandlers import ImmediateAnnounceAllBlobsFactory #, AutoFetcherStatusFactory
from lbrynet.lbrynet_console.ControlHandlers import LBRYFileStatusFactory, DeleteLBRYFileChooserFactory from lbrynet.lbrynet_console.ControlHandlers import LBRYFileStatusFactory, DeleteLBRYFileChooserFactory
from lbrynet.lbrynet_console.ControlHandlers import ToggleLBRYFileRunningChooserFactory from lbrynet.lbrynet_console.ControlHandlers import ToggleLBRYFileRunningChooserFactory
from lbrynet.lbrynet_console.ControlHandlers import ModifyApplicationDefaultsFactory from lbrynet.lbrynet_console.ControlHandlers import ModifyApplicationDefaultsFactory
@ -50,9 +46,9 @@ alert = logging.getLogger("lbryalert." + __name__)
class LBRYConsole(): class LBRYConsole():
"""A class which can upload and download file streams to and from the network""" """A class which can upload and download file streams to and from the network"""
def __init__(self, peer_port, dht_node_port, known_dht_nodes, wallet_type, def __init__(self, peer_port, dht_node_port, known_dht_nodes, fake_wallet,
lbrycrd_conf, lbrycrd_dir, use_upnp, data_dir, created_data_dir, lbrycrd_conf, lbrycrd_dir, use_upnp, data_dir, created_data_dir,
lbrycrdd_path, start_lbrycrdd): lbrycrdd_path):
""" """
@param peer_port: the network port on which to listen for peers @param peer_port: the network port on which to listen for peers
@ -63,7 +59,7 @@ class LBRYConsole():
self.peer_port = peer_port self.peer_port = peer_port
self.dht_node_port = dht_node_port self.dht_node_port = dht_node_port
self.known_dht_nodes = known_dht_nodes self.known_dht_nodes = known_dht_nodes
self.wallet_type = wallet_type self.fake_wallet = fake_wallet
self.lbrycrd_conf = lbrycrd_conf self.lbrycrd_conf = lbrycrd_conf
self.lbrycrd_dir = lbrycrd_dir self.lbrycrd_dir = lbrycrd_dir
if not self.lbrycrd_dir: if not self.lbrycrd_dir:
@ -73,10 +69,7 @@ class LBRYConsole():
self.lbrycrd_dir = os.path.join(os.path.expanduser("~"), ".lbrycrd") self.lbrycrd_dir = os.path.join(os.path.expanduser("~"), ".lbrycrd")
if not self.lbrycrd_conf: if not self.lbrycrd_conf:
self.lbrycrd_conf = os.path.join(self.lbrycrd_dir, "lbrycrd.conf") self.lbrycrd_conf = os.path.join(self.lbrycrd_dir, "lbrycrd.conf")
# self.autofetcher_conf = os.path.join(self.lbrycrd_dir, "autofetcher.conf")
self.lbrycrdd_path = lbrycrdd_path self.lbrycrdd_path = lbrycrdd_path
self.default_lbrycrdd_path = "./lbrycrdd"
self.start_lbrycrdd = start_lbrycrdd
self.use_upnp = use_upnp self.use_upnp = use_upnp
self.lbry_server_port = None self.lbry_server_port = None
self.session = None self.session = None
@ -100,7 +93,6 @@ class LBRYConsole():
self.sd_identifier = StreamDescriptorIdentifier() self.sd_identifier = StreamDescriptorIdentifier()
self.plugin_objects = [] self.plugin_objects = []
self.db_migration_revisions = None self.db_migration_revisions = None
# self.autofetcher = None
def start(self): def start(self):
"""Initialize the session and restore everything to its saved state""" """Initialize the session and restore everything to its saved state"""
@ -112,7 +104,6 @@ class LBRYConsole():
d.addCallback(lambda _: add_lbry_file_to_sd_identifier(self.sd_identifier)) d.addCallback(lambda _: add_lbry_file_to_sd_identifier(self.sd_identifier))
d.addCallback(lambda _: self._setup_lbry_file_manager()) d.addCallback(lambda _: self._setup_lbry_file_manager())
d.addCallback(lambda _: self._setup_lbry_file_opener()) d.addCallback(lambda _: self._setup_lbry_file_opener())
#d.addCallback(lambda _: self._get_autofetcher())
d.addCallback(lambda _: self._setup_control_handlers()) d.addCallback(lambda _: self._setup_control_handlers())
d.addCallback(lambda _: self._setup_query_handlers()) d.addCallback(lambda _: self._setup_query_handlers())
d.addCallback(lambda _: self._load_plugins()) d.addCallback(lambda _: self._load_plugins())
@ -121,10 +112,6 @@ class LBRYConsole():
d.addErrback(self._show_start_error) d.addErrback(self._show_start_error)
return d return d
# def _get_autofetcher(self):
# self.autofetcher = AutoFetcher(self.session, self.lbry_file_manager, self.lbry_file_metadata_manager,
# self.session.wallet, self.sd_identifier, self.autofetcher_conf)
def _show_start_error(self, error): def _show_start_error(self, error):
print error.getTraceback() print error.getTraceback()
log.error("An error occurred during start up: %s", error.getTraceback()) log.error("An error occurred during start up: %s", error.getTraceback())
@ -201,30 +188,6 @@ class LBRYConsole():
d = self.settings.start() d = self.settings.start()
d.addCallback(lambda _: self.settings.get_lbryid()) d.addCallback(lambda _: self.settings.get_lbryid())
d.addCallback(self.set_lbryid) d.addCallback(self.set_lbryid)
d.addCallback(lambda _: self.get_lbrycrdd_path())
return d
def get_lbrycrdd_path(self):
if not self.start_lbrycrdd:
return defer.succeed(None)
def get_lbrycrdd_path_conf_file():
lbrycrdd_path_conf_path = os.path.join(os.path.expanduser("~"), ".lbrycrddpath.conf")
if not os.path.exists(lbrycrdd_path_conf_path):
return ""
lbrycrdd_path_conf = open(lbrycrdd_path_conf_path)
lines = lbrycrdd_path_conf.readlines()
return lines
d = threads.deferToThread(get_lbrycrdd_path_conf_file)
def load_lbrycrdd_path(conf):
for line in conf:
if len(line.strip()) and line.strip()[0] != "#":
self.lbrycrdd_path = line.strip()
d.addCallback(load_lbrycrdd_path)
return d return d
def set_lbryid(self, lbryid): def set_lbryid(self, lbryid):
@ -245,21 +208,14 @@ class LBRYConsole():
return d return d
def get_wallet(): def get_wallet():
if self.wallet_type == "lbrycrd": if self.fake_wallet:
lbrycrdd_path = None d = defer.succeed(PTCWallet(self.db_dir))
if self.start_lbrycrdd is True: elif self.lbrycrdd_path is not None:
lbrycrdd_path = self.lbrycrdd_path
if not lbrycrdd_path:
lbrycrdd_path = self.default_lbrycrdd_path
d = defer.succeed(LBRYcrdWallet(self.db_dir, wallet_dir=self.lbrycrd_dir, d = defer.succeed(LBRYcrdWallet(self.db_dir, wallet_dir=self.lbrycrd_dir,
wallet_conf=self.lbrycrd_conf, wallet_conf=self.lbrycrd_conf,
lbrycrdd_path=lbrycrdd_path)) lbrycrdd_path=self.lbrycrdd_path))
elif self.wallet_type == 'ptc':
d = defer.succeed(PTCWallet(self.db_dir))
elif self.wallet_type == 'lbryum':
d = defer.succeed(LBRYumWallet(self.db_dir))
else: else:
d = defer.fail(Failure(ValueError("Invalid wallet type"))) d = defer.succeed(LBRYumWallet(self.db_dir))
d.addCallback(lambda wallet: {"wallet": wallet}) d.addCallback(lambda wallet: {"wallet": wallet})
return d return d
@ -377,14 +333,11 @@ class LBRYConsole():
ModifyLBRYFileOptionsChooserFactory(self.lbry_file_manager), ModifyLBRYFileOptionsChooserFactory(self.lbry_file_manager),
AddStreamFromHashFactory(self.sd_identifier, self.session, self.session.wallet), AddStreamFromHashFactory(self.sd_identifier, self.session, self.session.wallet),
StatusFactory(self, self.session.rate_limiter, self.lbry_file_manager, StatusFactory(self, self.session.rate_limiter, self.lbry_file_manager,
self.session.blob_manager, self.session.wallet if self.wallet_type in ['lbrycrd', 'lbryum'] else None), self.session.blob_manager, self.session.wallet if not self.fake_wallet else None),
# AutoFetcherStartFactory(self.autofetcher),
# AutoFetcherStopFactory(self.autofetcher),
# AutoFetcherStatusFactory(self.autofetcher),
ImmediateAnnounceAllBlobsFactory(self.session.blob_manager) ImmediateAnnounceAllBlobsFactory(self.session.blob_manager)
] ]
self.add_control_handlers(handlers) self.add_control_handlers(handlers)
if self.wallet_type in ['lbrycrd', 'lbryum']: if not self.fake_wallet:
lbrycrd_handlers = [ lbrycrd_handlers = [
AddStreamFromLBRYcrdNameFactory(self.sd_identifier, self.session, AddStreamFromLBRYcrdNameFactory(self.sd_identifier, self.session,
self.session.wallet), self.session.wallet),
@ -524,15 +477,9 @@ def launch_lbry_console():
parser.add_argument("--dht_node_port", parser.add_argument("--dht_node_port",
help="The port on which the console will listen for DHT connections.", help="The port on which the console will listen for DHT connections.",
type=int, default=4444) type=int, default=4444)
parser.add_argument("--wallet_type", parser.add_argument("--fake_wallet",
help="Either 'lbrycrd' or 'ptc' or 'lbryum'.", help="Testing purposes only. Use a non-blockchain wallet.",
type=str, default="lbrycrd") action="store_true")
parser.add_argument("--lbrycrd_wallet_dir",
help="The directory in which lbrycrd data will stored. Used if lbrycrdd is "
"launched by this application.")
parser.add_argument("--lbrycrd_wallet_conf",
help="The configuration file for the LBRYcrd wallet. Default: ~/.lbrycrd/lbrycrd.conf",
type=str)
parser.add_argument("--no_dht_bootstrap", parser.add_argument("--no_dht_bootstrap",
help="Don't try to connect to the DHT", help="Don't try to connect to the DHT",
action="store_true") action="store_true")
@ -552,12 +499,15 @@ def launch_lbry_console():
"Default: ~/.lbrynet on linux, ~/Library/Application Support/lbrynet on OS X"), "Default: ~/.lbrynet on linux, ~/Library/Application Support/lbrynet on OS X"),
type=str) type=str)
parser.add_argument("--lbrycrdd_path", parser.add_argument("--lbrycrdd_path",
help="The path to lbrycrdd, which will be launched if it isn't running, unless " help="The path to lbrycrdd, which will be launched if it isn't running. If"
"launching lbrycrdd is disabled by --disable_launch_lbrycrdd. By default, " "this option is chosen, lbrycrdd will be used as the interface to the"
"the file ~/.lbrycrddpath.conf will be checked, and if no path is found " "blockchain. By default, a lightweight interface is used.")
"there, it will be ./lbrycrdd") parser.add_argument("--lbrycrd_wallet_dir",
parser.add_argument("--disable_launch_lbrycrdd", help="The directory in which lbrycrd data will stored. Used if lbrycrdd is "
help="Don't launch lbrycrdd even if it's not running.") "launched by this application.")
parser.add_argument("--lbrycrd_wallet_conf",
help="The configuration file for the LBRYcrd wallet. Default: ~/.lbrycrd/lbrycrd.conf",
type=str)
args = parser.parse_args() args = parser.parse_args()
@ -599,11 +549,10 @@ def launch_lbry_console():
file_handler.addFilter(logging.Filter("lbrynet")) file_handler.addFilter(logging.Filter("lbrynet"))
logger.addHandler(file_handler) logger.addHandler(file_handler)
console = LBRYConsole(peer_port, dht_node_port, bootstrap_nodes, wallet_type=args.wallet_type, console = LBRYConsole(peer_port, dht_node_port, bootstrap_nodes, fake_wallet=args.fake_wallet,
lbrycrd_conf=args.lbrycrd_wallet_conf, lbrycrd_dir=args.lbrycrd_wallet_dir, lbrycrd_conf=args.lbrycrd_wallet_conf, lbrycrd_dir=args.lbrycrd_wallet_dir,
use_upnp=not args.disable_upnp, data_dir=data_dir, use_upnp=not args.disable_upnp, data_dir=data_dir,
created_data_dir=created_data_dir, lbrycrdd_path=args.lbrycrdd_path, created_data_dir=created_data_dir, lbrycrdd_path=args.lbrycrdd_path)
start_lbrycrdd=not args.disable_launch_lbrycrdd)
d = task.deferLater(reactor, 0, console.start) d = task.deferLater(reactor, 0, console.start)