Path utility class implementation (#9)

* Paths utility class implementation
* Updated buildozer requirements list
* lbry repository in buildozer.spec requirements changed to https://github.com/lbryio/lbry
This commit is contained in:
akinwale 2017-08-22 22:03:05 +01:00 committed by GitHub
parent 0317f0c079
commit 3c5f90bf14
5 changed files with 87 additions and 22 deletions

View file

@ -36,7 +36,7 @@ version = 0.1
# (list) Application requirements # (list) Application requirements
# comma seperated e.g. requirements = sqlite3,kivy # comma seperated e.g. requirements = sqlite3,kivy
requirements = openssl, sqlite3, hostpython2, pycrypto==2.6.1, android, pyjnius, constantly, incremental, functools32, miniupnpc==1.9, gmpy==1.17, twisted==16.6.0, appdirs==1.4.3, argparse==1.2.1, docopt==0.6.2, base58==0.2.2, colorama==0.3.7, dnspython==1.12.0, ecdsa==0.13, envparse==0.2.0, jsonrpc==1.2, jsonrpclib==0.1.7, jsonschema==2.5.1, pbkdf2==1.3, pycrypto==2.6.1, pyyaml==3.12, qrcode==5.2.2, requests==2.9.1, txrequests==0.9.5, seccure==0.3.1.3, service_identity==16.0.0, six==1.9.0, slowaes==0.1a1, txJSON-RPC==0.5, wsgiref==0.1.2, zope.interface==4.3.3, protobuf==3.2.0, git+https://github.com/lbryio/lbryschema.git#egg=lbryschema, git+https://github.com/lbryio/lbryum.git#egg=lbryum, git+https://github.com/akinwale/lbry.git#egg=lbry requirements = openssl, sqlite3, hostpython2, pycrypto==2.6.1, android, pyjnius, constantly, incremental, functools32, miniupnpc==1.9, gmpy==1.17, twisted==16.6.0, appdirs==1.4.3, argparse==1.2.1, docopt==0.6.2, base58==0.2.2, colorama==0.3.7, dnspython==1.12.0, ecdsa==0.13, envparse==0.2.0, jsonrpc==1.2, jsonrpclib==0.1.7, jsonschema==2.5.1, pbkdf2==1.3, pycrypto==2.6.1, pyyaml==3.12, qrcode==5.2.2, requests==2.9.1, txrequests==0.9.5, seccure==0.3.1.3, service_identity==16.0.0, six==1.9.0, slowaes==0.1a1, txJSON-RPC==0.5, wsgiref==0.1.2, zope.interface==4.3.3, protobuf==3.2.0, git+https://github.com/lbryio/lbryschema.git#egg=lbryschema, git+https://github.com/lbryio/lbryum.git#egg=lbryum, git+https://github.com/lbryio/lbry.git#egg=lbry
# (str) Custom source folders for requirements # (str) Custom source folders for requirements
# Sets custom source for any requirements with recipes # Sets custom source for any requirements with recipes

View file

@ -36,7 +36,7 @@ version = 0.1
# (list) Application requirements # (list) Application requirements
# comma seperated e.g. requirements = sqlite3,kivy # comma seperated e.g. requirements = sqlite3,kivy
requirements = openssl, sqlite3, hostpython2, pycrypto==2.6.1, android, pyjnius, constantly, incremental, functools32, miniupnpc==1.9, gmpy==1.17, twisted==16.6.0, appdirs==1.4.3, argparse==1.2.1, docopt==0.6.2, base58==0.2.2, colorama==0.3.7, dnspython==1.12.0, ecdsa==0.13, envparse==0.2.0, jsonrpc==1.2, jsonrpclib==0.1.7, jsonschema==2.5.1, pbkdf2==1.3, pycrypto==2.6.1, pyyaml==3.12, qrcode==5.2.2, requests==2.9.1, txrequests==0.9.5, seccure==0.3.1.3, service_identity==16.0.0, six==1.9.0, slowaes==0.1a1, txJSON-RPC==0.5, wsgiref==0.1.2, zope.interface==4.3.3, protobuf==3.2.0, git+https://github.com/lbryio/lbryschema.git#egg=lbryschema, git+https://github.com/lbryio/lbryum.git#egg=lbryum, git+https://github.com/akinwale/lbry.git#egg=lbry requirements = openssl, sqlite3, hostpython2, pycrypto==2.6.1, android, pyjnius, constantly, incremental, functools32, miniupnpc==1.9, gmpy==1.17, twisted==16.6.0, appdirs==1.4.3, argparse==1.2.1, docopt==0.6.2, base58==0.2.2, colorama==0.3.7, dnspython==1.12.0, ecdsa==0.13, envparse==0.2.0, jsonrpc==1.2, jsonrpclib==0.1.7, jsonschema==2.5.1, pbkdf2==1.3, pycrypto==2.6.1, pyyaml==3.12, qrcode==5.2.2, requests==2.9.1, txrequests==0.9.5, seccure==0.3.1.3, service_identity==16.0.0, six==1.9.0, slowaes==0.1a1, txJSON-RPC==0.5, wsgiref==0.1.2, zope.interface==4.3.3, protobuf==3.2.0, git+https://github.com/lbryio/lbryschema.git#egg=lbryschema, git+https://github.com/lbryio/lbryum.git#egg=lbryum, git+https://github.com/lbryio/lbry.git#egg=lbry
# (str) Custom source folders for requirements # (str) Custom source folders for requirements
# Sets custom source for any requirements with recipes # Sets custom source for any requirements with recipes

View file

@ -29,8 +29,23 @@ public class LbrynetService extends PythonService {
public static String TAG = "LbrynetService"; public static String TAG = "LbrynetService";
public static LbrynetService serviceInstance;
@Override
public int startType() {
return START_STICKY;
}
@Override
public boolean canDisplayNotification() {
return false;
}
@Override @Override
public int onStartCommand(Intent intent, int flags, int startId) { public int onStartCommand(Intent intent, int flags, int startId) {
// Assign service instance
serviceInstance = this;
// Extract files // Extract files
File app_root_file = new File(getAppRoot()); File app_root_file = new File(getAppRoot());
unpackData("private", app_root_file); unpackData("private", app_root_file);
@ -43,21 +58,17 @@ public class LbrynetService extends PythonService {
} }
@Override @Override
public boolean canDisplayNotification() { public void onDestroy() {
return false; super.onDestroy();
serviceInstance = null;
} }
@Override public String getAppRoot() {
public int startType() {
return START_STICKY;
}
private String getAppRoot() {
String app_root = getApplicationContext().getFilesDir().getAbsolutePath() + "/app"; String app_root = getApplicationContext().getFilesDir().getAbsolutePath() + "/app";
return app_root; return app_root;
} }
private void recursiveDelete(File f) { public void recursiveDelete(File f) {
if (f.isDirectory()) { if (f.isDirectory()) {
for (File r : f.listFiles()) { for (File r : f.listFiles()) {
recursiveDelete(r); recursiveDelete(r);
@ -66,7 +77,7 @@ public class LbrynetService extends PythonService {
f.delete(); f.delete();
} }
private void unpackData(final String resource, File target) { public void unpackData(final String resource, File target) {
Log.v(TAG, "UNPACKING!!! " + resource + " " + target.getName()); Log.v(TAG, "UNPACKING!!! " + resource + " " + target.getName());
// The version of data in memory and on disk. // The version of data in memory and on disk.

View file

@ -1,5 +1,8 @@
package io.lbry.lbrynet; package io.lbry.lbrynet;
import android.content.Context;
import java.io.File;
public final class Utils { public final class Utils {
public static String getAndroidRelease() { public static String getAndroidRelease() {
return android.os.Build.VERSION.RELEASE; return android.os.Build.VERSION.RELEASE;
@ -8,4 +11,48 @@ public final class Utils {
public static int getAndroidSdk() { public static int getAndroidSdk() {
return android.os.Build.VERSION.SDK_INT; return android.os.Build.VERSION.SDK_INT;
} }
public static String getFilesDir(Context context) {
return context.getFilesDir().getAbsolutePath();
}
public static String getAppInternalStorageDir(Context context) {
File[] dirs = context.getExternalFilesDirs(null);
return dirs[0].getAbsolutePath();
}
public static String getAppExternalStorageDir(Context context) {
File[] dirs = context.getExternalFilesDirs(null);
if (dirs.length > 1) {
return dirs[1].getAbsolutePath();
}
return null;
}
public static String getInternalStorageDir(Context context) {
String appInternal = getAppInternalStorageDir(context);
return writableRootForPath(appInternal);
}
public static String getExternalStorageDir(Context context) {
String appExternal = getAppInternalStorageDir(context);
if (appExternal == null) {
return null;
}
return writableRootForPath(appExternal);
}
public static String writableRootForPath(String path) {
File file = new File(path);
while (file != null && file.canWrite()) {
File parent = file.getParentFile();
if (parent != null && !parent.canWrite()) {
break;
}
file = parent;
}
return file.getAbsolutePath();
}
} }

View file

@ -1,8 +1,23 @@
import platform import platform
import ssl
# Fixes / patches / overrides
# platform.platform() in libc_ver: IOError: [Errno 21] Is a directory
from jnius import autoclass
lbrynet_utils = autoclass('io.lbry.lbrynet.Utils')
service = autoclass('io.lbry.lbrynet.LbrynetService').serviceInstance
platform.platform = lambda: 'Android %s (API %s)' % (lbrynet_utils.getAndroidRelease(), lbrynet_utils.getAndroidSdk())
import lbrynet.androidhelpers
lbrynet.androidhelpers.paths.android_files_dir = lambda: lbrynet_utils.getFilesDir(service.getApplicationContext())
lbrynet.androidhelpers.paths.android_internal_storage_dir = lambda: lbrynet_utils.getInternalStorageDir(service.getApplicationContext())
lbrynet.androidhelpers.paths.android_external_storage_dir = lambda: lbrynet_utils.getExternalStorageDir(service.getApplicationContext())
lbrynet.androidhelpers.paths.android_app_internal_storage_dir = lambda: lbrynet_utils.getAppInternalStorageDir(service.getApplicationContext())
lbrynet.androidhelpers.paths.android_app_external_storage_dir = lambda: lbrynet_utils.getAppExternalStorageDir(service.getApplicationContext())
import logging.handlers import logging.handlers
from lbrynet.core import log_support
from lbrynet.core import log_support
from twisted.internet import defer, reactor from twisted.internet import defer, reactor
from jsonrpc.proxy import JSONRPCProxy from jsonrpc.proxy import JSONRPCProxy
@ -12,14 +27,6 @@ from lbrynet.core import utils, system_info
from lbrynet.daemon.auth.client import LBRYAPIClient from lbrynet.daemon.auth.client import LBRYAPIClient
from lbrynet.daemon.DaemonServer import DaemonServer from lbrynet.daemon.DaemonServer import DaemonServer
import ssl
# Fixes / patches / overrides
# platform.platform() in libc_ver: IOError: [Errno 21] Is a directory
from jnius import autoclass
util = autoclass('io.lbry.lbrynet.Utils')
platform.platform = lambda: 'Android %s (API %s)' % (util.getAndroidRelease(), util.getAndroidSdk())
# https certificate verification # https certificate verification
# TODO: this is bad. Need to find a way to properly verify https requests # TODO: this is bad. Need to find a way to properly verify https requests
def https_context(): def https_context():
@ -47,7 +54,6 @@ def https_context():
requests.Session.request = partialmethod(default_request, verify=False) requests.Session.request = partialmethod(default_request, verify=False)
''' '''
# LBRY Daemon # LBRY Daemon
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -89,5 +95,6 @@ def start_server_and_listen(use_auth, analytics_manager, max_tries=5):
analytics_manager.send_server_startup_error(str(e)) analytics_manager.send_server_startup_error(str(e))
reactor.fireSystemEvent("shutdown") reactor.fireSystemEvent("shutdown")
if __name__ == '__main__': if __name__ == '__main__':
start() start()