update daemon

-notify user when connected to lbrynet
-check for updates from status bar app
This commit is contained in:
Jack 2016-03-02 18:32:48 -05:00
parent 2fc3ec7224
commit 02d8dc22e9
2 changed files with 128 additions and 49 deletions

View file

@ -1,3 +1,4 @@
import locale
import os
import sys
import json
@ -8,10 +9,10 @@ import subprocess
import logging
import argparse
import pwd
import requests
from twisted.web import xmlrpc, server
from twisted.internet import defer, threads, reactor, error
from datetime import datetime
from decimal import Decimal
from StringIO import StringIO
@ -39,8 +40,9 @@ from lbrynet.core.LBRYcrdWallet import LBRYcrdWallet, LBRYumWallet
from lbrynet.lbryfilemanager.LBRYFileManager import LBRYFileManager
from lbrynet.lbryfile.LBRYFileMetadataManager import DBLBRYFileMetadataManager, TempLBRYFileMetadataManager
log = logging.getLogger(__name__)
# logging.basicConfig(level=logging.DEBUG)
@ -118,6 +120,8 @@ class LBRYDaemon(xmlrpc.XMLRPC):
self.max_key_fee = DEFAULT_MAX_KEY_FEE
self.max_search_results = DEFAULT_MAX_SEARCH_RESULTS
self.restart_message = ""
self.startup_message = ""
self.announced_startup = False
self.search_timeout = 3.0
self.query_handlers = {}
@ -229,7 +233,7 @@ class LBRYDaemon(xmlrpc.XMLRPC):
d.addCallback(lambda _: _update_lbrynet())
d.addCallback(lambda _: _update_lbrycrdd() if self.wallet_type == 'lbrycrd' else _update_lbryum())
d.addCallback(lambda _: os.system("open /Applications/LBRY\ Updater.app &>/dev/null") if self.restart_message
else defer.succeed(None))
else defer.succeed(None))
d.addCallbacks(lambda _: self._restart() if self.restart_message else defer.succeed(None))
return defer.succeed(None)
@ -323,8 +327,6 @@ 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):
@ -453,8 +455,45 @@ class LBRYDaemon(xmlrpc.XMLRPC):
dl.addCallback(combine_results)
dl.addCallback(create_session)
dl.addCallback(lambda _: self.session.setup())
dl.addCallback(lambda _: self._check_first_run())
dl.addCallback(self._show_first_run_result)
return dl
def _check_first_run(self):
d = self.session.wallet.check_first_run()
d.addCallback(lambda is_first_run: self._do_first_run() if is_first_run else 0.0)
return d
def _do_first_run(self):
d = self.session.wallet.get_new_address()
def send_request(url, data):
r = requests.post(url, json=data)
if r.status_code == 200:
return r.json()['credits_sent']
return 0.0
def log_error(err):
log.warning("unable to request free credits. %s", err.getErrorMessage())
return 0.0
def request_credits(address):
url = "http://credreq.lbry.io/requestcredits"
data = {"address": address}
d = threads.deferToThread(send_request, url, data)
d.addErrback(log_error)
return d
d.addCallback(request_credits)
return d
def _show_first_run_result(self, credits_received):
if credits_received != 0.0:
points_string = locale.format_string("%.2f LBC", (round(credits_received, 2),), grouping=True)
self.startup_message = "Thank you for testing the alpha version of LBRY! You have been given %s for free because we love you. Please give them a few minutes to show up while you catch up with our blockchain." % points_string
else:
self.startup_message = "Connected to LBRYnet"
def _get_lbrycrdd_path(self):
def get_lbrycrdd_path_conf_file():
lbrycrdd_path_conf_path = os.path.join(os.path.expanduser("~"), ".lbrycrddpath.conf")
@ -629,7 +668,14 @@ class LBRYDaemon(xmlrpc.XMLRPC):
return d
def xmlrpc_is_running(self):
return True
if self.startup_message != "" and self.announced_startup == False:
print "Startup message:", self.startup_message
self.announced_startup = True
return self.startup_message
elif self.announced_startup:
return True
else:
return False
def xmlrpc_get_settings(self):
"""
@ -973,7 +1019,7 @@ class LBRYDaemon(xmlrpc.XMLRPC):
content_license = None
log.info('[' + str(datetime.now()) + '] Publish: ', name, file_path, bid, title, description, thumbnail,
key_fee, key_fee_address, content_license)
key_fee, key_fee_address, content_license)
p = Publisher(self.session, self.lbry_file_manager, self.session.wallet)
d = p.start(name, file_path, bid, title, description, thumbnail, key_fee, key_fee_address, content_license)
@ -1050,40 +1096,52 @@ class LBRYDaemon(xmlrpc.XMLRPC):
return self.fetcher.verbose
def xmlrpc_check_for_new_version(self):
message = ""
def _check_for_updates(package):
git_version = subprocess.check_output("git ls-remote " + package['git'] + " | grep HEAD | cut -f 1", shell=True)
up_to_date = False
if os.path.isfile(package['version_file']):
f = open(package['version_file'], 'r')
current_version = f.read()
f.close()
git_version = subprocess.check_output("git ls-remote https://github.com/lbryio/lbry.git | grep HEAD | cut -f 1", shell=True)
if os.path.isfile(os.path.join(self.db_dir, "lbrynet_version.txt")):
f = open(os.path.join(self.db_dir, "lbrynet_version.txt"), 'r')
current_version = f.read()
f.close()
if git_version == current_version:
message += "LBRYnet is up to date\n"
if git_version == current_version:
r = package['name'] + " is up to date"
up_to_date = True
else:
r = package['name'] + " version is out of date"
else:
message += "LBRYnet version is out of date, restart the daemon to update\n"
else:
message += "Unknown version of LBRYnet, try running installer again\n"
r = "Unknown version of " + package['name']
git_version = subprocess.check_output("git ls-remote https://github.com/jackrobison/lbrynet-app.git | grep HEAD | cut -f 1", shell=True)
if os.path.isfile(os.path.join(self.wallet_dir, "lbry_app_version.txt")):
f = open(os.path.join(self.wallet_dir, "lbry_app_version.txt"), 'r')
current_version = f.read()
f.close()
return (up_to_date, r)
if git_version == current_version:
message += "LBRY is up to date"
else:
message += "LBRY version is out of date, restart the daemon to update"
else:
message += "Unknown version of LBRYnet, try running installer again\n"
package_infos = {
"lbrynet": {"name": "LBRYnet",
"git": "https://github.com/lbryio/lbry.git",
"version_file": os.path.join(self.db_dir, ".lbrynet_version"),
"clone": ".lbrygit",
},
"lbryum": {"name": "lbryum",
"git": "https://github.com/lbryio/lbryum.git",
"version_file": os.path.join(self.db_dir, ".lbryum_version"),
"clone": ".lbryumgit",
},
"lbry": {"name": "LBRY",
"git": "https://github.com/jackrobison/lbrynet-app.git",
"version_file": os.path.join(self.db_dir, ".lbry_app_version"),
"clone": None,
},
}
return message
return [_check_for_updates(package_infos[p]) for p in package_infos.keys()]
def xmlrpc_start_status_bar_app(self):
if sys.platform == 'darwin':
subprocess.Popen("screen -dmS lbry-status bash -c 'lbrynet-daemon-status --startdaemon=False'", shell=True)
return "Started"
if os.path.isdir("/Applications/LBRY.app"):
# subprocess.Popen("screen -dmS lbry-status bash -c 'lbrynet-daemon-status --startdaemon=False'", shell=True)
subprocess.Popen("screen -dmS lbry-status bash -c 'open /Applications/LBRY.app'")
return "Started"
else:
return "Couldn't find LBRY.app, try running the installer"
else:
return "Status bar not implemented on non OS X"

View file

@ -9,7 +9,6 @@ import argparse
class DaemonStatusBarApp(rumps.App):
def __init__(self):
icon_path = 'app.icns'
if os.path.isfile(icon_path):
rumps.App.__init__(self, name="LBRY", icon=icon_path, quit_button=None,
menu=["Open", "Preferences", "View balance", "Quit"])
@ -17,51 +16,69 @@ class DaemonStatusBarApp(rumps.App):
rumps.App.__init__(self, name="LBRY", title="LBRY", quit_button=None,
menu=["Open", "Preferences", "View balance", "Quit"])
@rumps.timer(1)
def alert_daemon_start(self):
daemon = xmlrpclib.ServerProxy("http://localhost:7080/")
try:
start_msg = daemon.is_running()
if isinstance(start_msg, str):
rumps.notification(title='LBRY', subtitle='', message=str(start_msg), sound=True)
update_info = daemon.check_for_new_version()
update_msg = ""
for p in update_info:
if not p[0]:
update_msg += p[1] + "\n"
if update_msg:
update_msg += "\n Try running the installer again to fix this"
rumps.notification(title='LBRY', subtitle='', message=update_msg, sound=True)
except:
pass
@rumps.clicked('Open')
def get_ui(self):
daemon = xmlrpclib.ServerProxy("http://localhost:7080/")
try:
daemon = xmlrpclib.ServerProxy('http://localhost:7080')
daemon.is_running()
webbrowser.open("lbry://lbry")
except:
try:
rumps.notification(title='LBRY', subtitle='status', message="Couldn't connect to lbrynet daemon", sound=True)
rumps.notification(title='LBRY', subtitle='', message="Couldn't connect to lbrynet daemon", sound=True)
except:
rumps.alert(title='LBRY', message="Couldn't connect to lbrynet daemon")
@rumps.clicked("Preferences")
def prefs(self, _):
def prefs(self):
daemon = xmlrpclib.ServerProxy("http://localhost:7080/")
try:
daemon = xmlrpclib.ServerProxy('http://localhost:7080')
daemon.is_running()
webbrowser.open("lbry://settings")
except:
rumps.notification(title='LBRY', subtitle='status', message="Couldn't connect to lbrynet daemon", sound=True)
rumps.notification(title='LBRY', subtitle='', message="Couldn't connect to lbrynet daemon", sound=True)
@rumps.clicked("View balance")
def disp_balance(self):
daemon = xmlrpclib.ServerProxy('http://localhost:7080')
daemon = xmlrpclib.ServerProxy("http://localhost:7080/")
try:
balance = daemon.get_balance()
r = round(float(balance), 2)
try:
rumps.notification(title='LBRY', subtitle='status', message="Your balance is " + str(balance), sound=False)
rumps.notification(title='LBRY', subtitle='', message=str("Your balance is %.2f LBC" % r), sound=False)
except:
rumps.alert(title='LBRY', message="Your balance is " + str(balance))
rumps.alert(title='LBRY', message=str("Your balance is %.2f LBC" % r))
except:
try:
rumps.notification(title='LBRY', subtitle='status', message="Couldn't connect to lbrynet daemon", sound=True)
rumps.notification(title='LBRY', subtitle='', message="Couldn't connect to lbrynet daemon", sound=True)
except:
rumps.alert(title='LBRY', message="Couldn't connect to lbrynet daemon")
@rumps.clicked('Quit')
def clean_quit(self):
daemon = xmlrpclib.ServerProxy('http://localhost:7080')
daemon = xmlrpclib.ServerProxy("http://localhost:7080/")
try:
daemon.stop()
except:
pass
rumps.quit_application()
@ -74,10 +91,14 @@ def main():
args = parser.parse_args()
if str(args.startdaemon).lower() == "true":
subprocess.Popen("screen -dmS lbrynet bash -c "
"'PYTHONPATH=$PYTHONPATH:`cat /Users/${USER}/Library/Application\ Support/lbrynet/.python_path`; "
"PATH=$PATH:`cat /Users/${USER}/Library/Application\ Support/lbrynet/.lbry_bin_path`; "
"lbrynet-daemon --update=False'", shell=True)
daemon = xmlrpclib.ServerProxy('http://localhost:7080')
try:
daemon.is_running()
except:
subprocess.Popen("screen -dmS lbrynet bash -c "
"'PYTHONPATH=$PYTHONPATH:`cat /Users/${USER}/Library/Application\ Support/lbrynet/.python_path`; "
"PATH=$PATH:`cat /Users/${USER}/Library/Application\ Support/lbrynet/.lbry_bin_path`; "
"lbrynet-daemon --update=False'", shell=True)
status_app = DaemonStatusBarApp()
status_app.run()