From 2c51928b9d7e37eb92df48fb8b20a02362fb18f2 Mon Sep 17 00:00:00 2001 From: Jack Date: Thu, 18 Feb 2016 20:41:23 -0500 Subject: [PATCH 1/5] Status bar for lbrynet daemon --- lbrynet/lbrynet_daemon/LBRYDaemon.py | 85 +++++++++++-------- lbrynet/lbrynet_daemon/scripts/update_lbry.sh | 58 +++++++++++++ 2 files changed, 108 insertions(+), 35 deletions(-) diff --git a/lbrynet/lbrynet_daemon/LBRYDaemon.py b/lbrynet/lbrynet_daemon/LBRYDaemon.py index 0df0e99bc..8fd222ec9 100644 --- a/lbrynet/lbrynet_daemon/LBRYDaemon.py +++ b/lbrynet/lbrynet_daemon/LBRYDaemon.py @@ -1,3 +1,6 @@ +from threading import Thread +from time import sleep + from lbrynet.core.PaymentRateManager import PaymentRateManager from lbrynet.core.server.BlobAvailabilityHandler import BlobAvailabilityHandlerFactory from lbrynet.core.server.BlobRequestHandler import BlobRequestHandlerFactory @@ -21,18 +24,11 @@ from lbrynet.lbryfile.LBRYFileMetadataManager import DBLBRYFileMetadataManager, from twisted.web import xmlrpc, server from twisted.internet import defer, threads, reactor, error from datetime import datetime -import logging -import os -import sys -import json -import binascii -import webbrowser -import xmlrpclib from decimal import Decimal -import subprocess from StringIO import StringIO from zipfile import ZipFile from urllib import urlopen +import os, sys, json, binascii, webbrowser, xmlrpclib, subprocess, logging, rumps log = logging.getLogger(__name__) @@ -565,12 +561,6 @@ class LBRYDaemon(xmlrpc.XMLRPC): d.cancel() return defer.succeed(None) - def _to_dict(r): - t = {} - for i in r: - t[i[0]] = i[1] - return t - def _add_key_fee(data_cost): d = self.session.wallet.get_stream_info_for_name(name) d.addCallback(lambda info: data_cost + info['key_fee'] if 'key_fee' in info.keys() else data_cost) @@ -581,14 +571,16 @@ class LBRYDaemon(xmlrpc.XMLRPC): self.blob_request_payment_rate_manager)) d.addCallback(self.sd_identifier.get_metadata_for_sd_blob) d.addCallback(lambda metadata: metadata.validator.info_to_show()) - d.addCallback(_to_dict) - d.addCallback(lambda info: int(info['stream_size']) / 1000000 * self.data_rate) + d.addCallback(lambda info: int(dict(info)['stream_size']) / 1000000 * self.data_rate) d.addCallback(_add_key_fee) d.addErrback(lambda _: _add_key_fee(0.0)) reactor.callLater(self.search_timeout, _check_est, d, name) return d + def xmlrpc_is_running(self): + return True + def xmlrpc_get_settings(self): """ Get LBRY payment settings @@ -855,16 +847,6 @@ class LBRYDaemon(xmlrpc.XMLRPC): d.addCallback(lambda trie: [claim for claim in trie if claim['name'].startswith(search) and 'txid' in claim]) d.addCallback(lambda claims: claims[:self.max_search_results]) d.addCallback(resolve_claims) - - #filtered_results = [n for n in self.session.wallet.get_nametrie() if n['name'].startswith(search)] - #if len(filtered_results) > self.max_search_results: - # filtered_results = filtered_results[:self.max_search_results] - #filtered_results = [n for n in filtered_results if 'txid' in n.keys()] - #resolved_results = [defer.DeferredList([_return_d(n), self._resolve_name_wc(n['name']), - # self._get_est_cost(n['name'])], consumeErrors=True) - # for n in filtered_results] - - #d = defer.DeferredList(resolved_results) d.addCallback(_clean) d.addCallback(_parse) d.addCallback(_disp) @@ -1036,19 +1018,52 @@ class LBRYDaemon(xmlrpc.XMLRPC): return message -def main(): - # shut down existing instance of lbrynet-daemon if there is one - try: + +class DaemonStatusBarApp(rumps.App): + def __init__(self): + super(DaemonStatusBarApp, self).__init__("LBRYnet", icon=os.path.join(os.path.expanduser("~"), "Downloads/lbryio/lbry.io/web/img/fav/apple-touch-icon.png"), quit_button=None) + self.menu = ["Quit"] + # shut down existing instance of lbrynet-daemon if there is one + try: + d = xmlrpclib.ServerProxy('http://localhost:7080') + d.stop() + except: + pass + + daemon = LBRYDaemon() + daemon.setup() + reactor.listenTCP(7080, server.Site(daemon)) + Thread(target=reactor.run, args=(False,)).start() + + @rumps.clicked('Quit') + def clean_quit(self): d = xmlrpclib.ServerProxy('http://localhost:7080') d.stop() - except: - pass + while True: + try: + d.is_running() + except: + break - daemon = LBRYDaemon() - daemon.setup() - reactor.listenTCP(7080, server.Site(daemon)) - reactor.run() + sleep(1) + rumps.quit_application() +def main(): + if sys.platform == "darwin": + DaemonStatusBarApp().run() + else: + try: + d = xmlrpclib.ServerProxy('http://localhost:7080') + d.stop() + except: + pass + + daemon = LBRYDaemon() + daemon.setup() + reactor.listenTCP(7080, server.Site(daemon)) + reactor.run() + if __name__ == '__main__': main() + diff --git a/lbrynet/lbrynet_daemon/scripts/update_lbry.sh b/lbrynet/lbrynet_daemon/scripts/update_lbry.sh index 291dfb3ba..b7a0b2a14 100644 --- a/lbrynet/lbrynet_daemon/scripts/update_lbry.sh +++ b/lbrynet/lbrynet_daemon/scripts/update_lbry.sh @@ -1,5 +1,63 @@ #!/bin/sh +if ! which brew &>/dev/null; then + echo "Installing brew..." + sudo -u ${SUDO_USER} ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null &>/dev/null +else + echo "Updating brew..." + sudo -u ${SUDO_USER} brew update &>/dev/null +fi + +if ! brew list mpfr &>/dev/null; then + echo "Installing mpfr..." + sudo -u ${SUDO_USER} brew install mpfr &>/dev/null +else + echo "mpfr already installed..." +fi + +if ! brew list libmpc &>/dev/null; then + echo "Installing libmpc..." + sudo -u ${SUDO_USER} brew install libmpc &>/dev/null +else + echo "libmpc already installed..." +fi + +if ! brew list openssl &>/dev/null; then + echo "Installing openssl..." + sudo -u ${SUDO_USER} brew install openssl &>/dev/null + sudo -u ${SUDO_USER} brew link --force openssl &>/dev/null +else + echo "openssl already installed..." +fi + +if ! which pip &>/dev/null; then + echo "Installing pip..." + sudo easy_install pip &>/dev/null +else + echo "pip already installed" +fi + +if ! python -c 'import gmpy' &>/dev/null; then + echo "Installing gmpy..." + sudo pip install gmpy &>/dev/null +else + echo "gmpy already installed..." +fi + +if ! python -c 'import service_identity' &>/dev/null; then + echo "Installing service_identity..." + sudo pip install service_identity &>/dev/null +else + echo "gmpy already installed..." +fi + +if ! python -c 'import rumps' &>/dev/null; then + echo "Installing rumps..." + sudo pip install rumps &>/dev/null +else + echo "rumps already installed..." +fi + lbrycrd_directory="/Users/${SUDO_USER}/Library/Application Support/lbrycrd" current_version=$(git ls-remote https://github.com/jackrobison/lbrynet-app.git | grep HEAD | cut -f 1) From cc9fb3ff410acb894fa4b359f9ae38e77994cc19 Mon Sep 17 00:00:00 2001 From: Jack Date: Thu, 18 Feb 2016 20:45:16 -0500 Subject: [PATCH 2/5] fix icon path --- lbrynet/lbrynet_daemon/LBRYDaemon.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lbrynet/lbrynet_daemon/LBRYDaemon.py b/lbrynet/lbrynet_daemon/LBRYDaemon.py index 8fd222ec9..2e1264e15 100644 --- a/lbrynet/lbrynet_daemon/LBRYDaemon.py +++ b/lbrynet/lbrynet_daemon/LBRYDaemon.py @@ -1021,7 +1021,7 @@ class LBRYDaemon(xmlrpc.XMLRPC): class DaemonStatusBarApp(rumps.App): def __init__(self): - super(DaemonStatusBarApp, self).__init__("LBRYnet", icon=os.path.join(os.path.expanduser("~"), "Downloads/lbryio/lbry.io/web/img/fav/apple-touch-icon.png"), quit_button=None) + super(DaemonStatusBarApp, self).__init__("LBRYnet", icon=os.path.join(os.path.expanduser("~"), "Downloads/lbryio/web/img/fav/apple-touch-icon.png"), quit_button=None) self.menu = ["Quit"] # shut down existing instance of lbrynet-daemon if there is one try: @@ -1063,7 +1063,7 @@ def main(): daemon.setup() reactor.listenTCP(7080, server.Site(daemon)) reactor.run() - + if __name__ == '__main__': main() From 3ff0916f49091a87a18ce988904d28fb726875f8 Mon Sep 17 00:00:00 2001 From: Jack Date: Thu, 18 Feb 2016 20:48:43 -0500 Subject: [PATCH 3/5] remove icon --- lbrynet/lbrynet_daemon/LBRYDaemon.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lbrynet/lbrynet_daemon/LBRYDaemon.py b/lbrynet/lbrynet_daemon/LBRYDaemon.py index 2e1264e15..237909662 100644 --- a/lbrynet/lbrynet_daemon/LBRYDaemon.py +++ b/lbrynet/lbrynet_daemon/LBRYDaemon.py @@ -1021,7 +1021,7 @@ class LBRYDaemon(xmlrpc.XMLRPC): class DaemonStatusBarApp(rumps.App): def __init__(self): - super(DaemonStatusBarApp, self).__init__("LBRYnet", icon=os.path.join(os.path.expanduser("~"), "Downloads/lbryio/web/img/fav/apple-touch-icon.png"), quit_button=None) + super(DaemonStatusBarApp, self).__init__("LBRYnet", quit_button=None) self.menu = ["Quit"] # shut down existing instance of lbrynet-daemon if there is one try: From 58aa4887ad1c14030cf867e9850fd6b72b3c5ed4 Mon Sep 17 00:00:00 2001 From: Jack Date: Thu, 18 Feb 2016 20:55:59 -0500 Subject: [PATCH 4/5] update daemon Start status bar if possible --- lbrynet/lbrynet_daemon/LBRYDaemon.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lbrynet/lbrynet_daemon/LBRYDaemon.py b/lbrynet/lbrynet_daemon/LBRYDaemon.py index 237909662..d23b9f908 100644 --- a/lbrynet/lbrynet_daemon/LBRYDaemon.py +++ b/lbrynet/lbrynet_daemon/LBRYDaemon.py @@ -1051,7 +1051,20 @@ class DaemonStatusBarApp(rumps.App): def main(): if sys.platform == "darwin": - DaemonStatusBarApp().run() + try: + DaemonStatusBarApp().run() + except: + print "Couldn't start status bar app" + try: + d = xmlrpclib.ServerProxy('http://localhost:7080') + d.stop() + except: + pass + + daemon = LBRYDaemon() + daemon.setup() + reactor.listenTCP(7080, server.Site(daemon)) + reactor.run() else: try: d = xmlrpclib.ServerProxy('http://localhost:7080') From 0dbf810cfe5bea338137be32243d12b169341b73 Mon Sep 17 00:00:00 2001 From: Jack Date: Fri, 19 Feb 2016 00:07:19 -0500 Subject: [PATCH 5/5] move status bar stuff --- lbrynet/lbrynet_daemon/LBRYDaemon.py | 72 +++++----------------- lbrynet/lbrynet_daemon/LBRYOSXStatusBar.py | 15 +++++ 2 files changed, 29 insertions(+), 58 deletions(-) create mode 100644 lbrynet/lbrynet_daemon/LBRYOSXStatusBar.py diff --git a/lbrynet/lbrynet_daemon/LBRYDaemon.py b/lbrynet/lbrynet_daemon/LBRYDaemon.py index d23b9f908..22e55acca 100644 --- a/lbrynet/lbrynet_daemon/LBRYDaemon.py +++ b/lbrynet/lbrynet_daemon/LBRYDaemon.py @@ -1,6 +1,3 @@ -from threading import Thread -from time import sleep - from lbrynet.core.PaymentRateManager import PaymentRateManager from lbrynet.core.server.BlobAvailabilityHandler import BlobAvailabilityHandlerFactory from lbrynet.core.server.BlobRequestHandler import BlobRequestHandlerFactory @@ -11,6 +8,7 @@ from lbrynet.lbryfile.StreamDescriptor import LBRYFileStreamType from lbrynet.lbryfile.client.LBRYFileDownloader import LBRYFileSaverFactory, LBRYFileOpenerFactory from lbrynet.lbryfile.client.LBRYFileOptions import add_lbry_file_to_sd_identifier from lbrynet.lbrynet_daemon.LBRYDownloader import GetStream, FetcherDaemon +# from lbrynet.lbrynet_daemon.LBRYOSXStatusBar import DaemonStatusBarApp from lbrynet.lbrynet_daemon.LBRYPublisher import Publisher from lbrynet.core.utils import generate_id from lbrynet.lbrynet_console.LBRYSettings import LBRYSettings @@ -28,7 +26,7 @@ from decimal import Decimal from StringIO import StringIO from zipfile import ZipFile from urllib import urlopen -import os, sys, json, binascii, webbrowser, xmlrpclib, subprocess, logging, rumps +import os, sys, json, binascii, webbrowser, xmlrpclib, subprocess, logging log = logging.getLogger(__name__) @@ -59,6 +57,7 @@ class LBRYDaemon(xmlrpc.XMLRPC): self.db_dir = os.path.join(os.path.expanduser("~"), ".lbrynet") else: self.db_dir = os.path.join(os.path.expanduser("~"), "Library/Application Support/lbrynet") + # self.status_app = DaemonStatusBarApp() self.blobfile_dir = os.path.join(self.db_dir, "blobfiles") self.peer_port = 3333 self.dht_node_port = 4444 @@ -136,6 +135,7 @@ class LBRYDaemon(xmlrpc.XMLRPC): d.addCallback(lambda _: self._setup_server()) if sys.platform == "darwin": d.addCallback(lambda _: self._update()) + # d.addCallback(lambda _: self.status_app.run()) d.addCallback(lambda _: self._setup_fetcher()) d.addCallback(lambda _: _disp_startup()) d.callback(None) @@ -290,6 +290,8 @@ class LBRYDaemon(xmlrpc.XMLRPC): d = self._stop_server() if self.session is not None: d.addCallback(lambda _: self.session.shut_down()) + # if self.status_app: + # d.addCallback(lambda _: self.status_app.stop()) return d def _update_settings(self): @@ -1019,63 +1021,17 @@ class LBRYDaemon(xmlrpc.XMLRPC): return message -class DaemonStatusBarApp(rumps.App): - def __init__(self): - super(DaemonStatusBarApp, self).__init__("LBRYnet", quit_button=None) - self.menu = ["Quit"] - # shut down existing instance of lbrynet-daemon if there is one - try: - d = xmlrpclib.ServerProxy('http://localhost:7080') - d.stop() - except: - pass - - daemon = LBRYDaemon() - daemon.setup() - reactor.listenTCP(7080, server.Site(daemon)) - Thread(target=reactor.run, args=(False,)).start() - - @rumps.clicked('Quit') - def clean_quit(self): +def main(): + try: d = xmlrpclib.ServerProxy('http://localhost:7080') d.stop() - while True: - try: - d.is_running() - except: - break + except: + pass - sleep(1) - - rumps.quit_application() - -def main(): - if sys.platform == "darwin": - try: - DaemonStatusBarApp().run() - except: - print "Couldn't start status bar app" - try: - d = xmlrpclib.ServerProxy('http://localhost:7080') - d.stop() - except: - pass - - daemon = LBRYDaemon() - daemon.setup() - reactor.listenTCP(7080, server.Site(daemon)) - reactor.run() - else: - try: - d = xmlrpclib.ServerProxy('http://localhost:7080') - d.stop() - except: - pass - - daemon = LBRYDaemon() - daemon.setup() - reactor.listenTCP(7080, server.Site(daemon)) - reactor.run() + daemon = LBRYDaemon() + daemon.setup() + reactor.listenTCP(7080, server.Site(daemon)) + reactor.run() if __name__ == '__main__': main() diff --git a/lbrynet/lbrynet_daemon/LBRYOSXStatusBar.py b/lbrynet/lbrynet_daemon/LBRYOSXStatusBar.py new file mode 100644 index 000000000..f5c9c0e32 --- /dev/null +++ b/lbrynet/lbrynet_daemon/LBRYOSXStatusBar.py @@ -0,0 +1,15 @@ +import rumps +import xmlrpclib +import os + +class DaemonStatusBarApp(rumps.App): + def __init__(self): + super(DaemonStatusBarApp, self).__init__("LBRYnet", icon=os.path.join(os.path.expanduser("~"), "Downloads/lbryio//web/img/fav/apple-touch-icon.png"), quit_button=None) + self.menu = ["Quit"] + + @rumps.clicked('Quit') + def clean_quit(self): + d = xmlrpclib.ServerProxy('http://localhost:7080') + d.stop() + rumps.quit_application() +