From 820190d9e6e7d354ee2a6859fa87a149f32af965 Mon Sep 17 00:00:00 2001 From: j Date: Sun, 20 Jan 2019 15:53:42 +0530 Subject: [PATCH 1/8] allow adding to user or user:Public --- oml/user/api.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/oml/user/api.py b/oml/user/api.py index d4bf89a..d8fecfa 100644 --- a/oml/user/api.py +++ b/oml/user/api.py @@ -309,10 +309,12 @@ def addListItems(data): i = Item.get(item_id) i.queue_download() i.update() - elif data['list'] and (data['list'].startswith(':') or data['list'].endswith(':Public')): + elif data['list'] and (data['list'].startswith(':') or + data['list'].endswith(':Public') or + data['list'].enswtih(':')): l = models.List.get_or_create(data['list']) if l: - if l.name == 'Public' and l.user_id != settings.USER_ID: + if l.name in ('Public', '') and l.user_id != settings.USER_ID: state.tasks.queue('upload', { 'user': l.user_id, 'items': data['items'] From cffffbde1cbabb07433f0d3b1369842a755b3235 Mon Sep 17 00:00:00 2001 From: j Date: Sun, 20 Jan 2019 16:46:46 +0530 Subject: [PATCH 2/8] also check for 3.7 --- ctl | 1 + oml/__main__.py | 1 + 2 files changed, 2 insertions(+) diff --git a/ctl b/ctl index 0099064..805595c 100755 --- a/ctl +++ b/ctl @@ -78,6 +78,7 @@ if [ $SYSTEM == "Darwin" ]; then fi PYTHONPATH="${PLATFORM_ENV}/lib/python${PLATFORM_PYTHON}/site-packages" +PYTHONPATH="${PYTHONPATH}:${SHARED_ENV}/lib/python${PLATFORM_PYTHON}/site-packages" PYTHONPATH="${PYTHONPATH}:${SHARED_ENV}/lib/python${SHARED_PYTHON}/site-packages" PYTHONPATH="${PYTHONPATH}:${BASE}/${NAME}" export PYTHONPATH diff --git a/oml/__main__.py b/oml/__main__.py index f7112f3..f888dd5 100644 --- a/oml/__main__.py +++ b/oml/__main__.py @@ -12,6 +12,7 @@ if sys.platform == 'win32': for site_packages in ( join(base, 'openmedialibrary'), join(base, 'platform', 'Shared', 'lib', 'python3.4', 'site-packages'), + join(base, 'platform', 'Shared', 'lib', 'python3.7', 'site-packages'), join(base, 'platform_win32', 'Lib', 'site-packages'), ): site.addsitedir(site_packages) From 54492489b9fc7336e0e27d913b4b3f66f028c9a2 Mon Sep 17 00:00:00 2001 From: j Date: Sun, 20 Jan 2019 16:46:58 +0530 Subject: [PATCH 3/8] use https --- README.md | 2 +- install | 2 +- oml/settings.py | 2 +- oml/update.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0bab8f2..2adc390 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Install on Mac OS X download this: - http://downloads.openmedialibrary.com/Open%20Media%20Library.dmg + https://downloads.openmedialibrary.com/Open%20Media%20Library.dmg Networking ---------- diff --git a/install b/install index b476552..056a11a 100755 --- a/install +++ b/install @@ -33,7 +33,7 @@ def get_platform(): class Install(Thread): - base_url = 'http://downloads.openmedialibrary.com/' + base_url = 'https://downloads.openmedialibrary.com/' status = {} failed = False diff --git a/oml/settings.py b/oml/settings.py index 8b11142..631b398 100644 --- a/oml/settings.py +++ b/oml/settings.py @@ -48,7 +48,7 @@ server_defaults = { 'node_address': '', 'extract_text': True, 'localnode_discovery': True, - 'release_url': 'http://downloads.openmedialibrary.com/release.json', + 'release_url': 'https://downloads.openmedialibrary.com/release.json', 'pull_interval': 60000 } diff --git a/oml/update.py b/oml/update.py index 6a0c834..8ab472c 100644 --- a/oml/update.py +++ b/oml/update.py @@ -82,7 +82,7 @@ def get(url, filename=None): def check(): if settings.release: release_data = get(settings.server.get('release_url', - 'http://downloads.openmedialibrary.com/release.json')) + 'https://downloads.openmedialibrary.com/release.json')) release = json.loads(release_data.decode('utf-8')) old = current_version('openmedialibrary') new = release['modules']['openmedialibrary']['version'] From 8fcaca28621d397745ae72f06890d7d519c1e6b8 Mon Sep 17 00:00:00 2001 From: j Date: Sun, 20 Jan 2019 16:59:12 +0530 Subject: [PATCH 4/8] longer timeout --- static/html/load.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/html/load.html b/static/html/load.html index 69b7b3a..40bba9f 100644 --- a/static/html/load.html +++ b/static/html/load.html @@ -97,7 +97,7 @@ stopAnimation(); document.getElementById('loadingIcon').style.display = 'none'; document.getElementById('error').style.display = 'block'; - }, 20000); + }, 60000); }()); From ff671141f588b687a77dd1215b6df04dc201a326 Mon Sep 17 00:00:00 2001 From: j Date: Sun, 20 Jan 2019 18:37:21 +0530 Subject: [PATCH 5/8] fix win32 tor launcher --- oml/tor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/oml/tor.py b/oml/tor.py index f902b87..f7aa595 100644 --- a/oml/tor.py +++ b/oml/tor.py @@ -25,6 +25,7 @@ logger = logging.getLogger(__name__) class TorDaemon(Thread): installing = False running = True + p = None def __init__(self): self._status = [] @@ -48,7 +49,7 @@ CookieAuthentication 1 '''.strip()) tor_data = os.path.join(settings.data_path, 'TorData') if sys.platform == 'win32': - tor_data = os.path.normpath(tor_data).replace(os.SEP, '/') + tor_data = os.path.normpath(tor_data).replace('\\', '/') if not os.path.exists(torrc): with open(torrc, 'w') as fd: fd.write(''' From c602aab91532c9f6c0e6c5a1b977ccee8c710b32 Mon Sep 17 00:00:00 2001 From: j Date: Sun, 20 Jan 2019 18:40:04 +0530 Subject: [PATCH 6/8] win32 select folder/file --- oml/api.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/oml/api.py b/oml/api.py index f2f5448..3253645 100644 --- a/oml/api.py +++ b/oml/api.py @@ -2,9 +2,11 @@ # vi:si:et:sw=4:sts=4:ts=4 -import subprocess +from os.path import normpath, dirname, abspath, join import json import os +import subprocess +import sys import ox from oxtornado import actions @@ -16,6 +18,14 @@ import update import logging logger = logging.getLogger(__name__) +def win32_ui(type): + base = normpath(dirname(dirname(dirname(abspath(__file__))))) + cmd = [ + join(base, 'platform_win32', 'python.exe'), + join(base, 'openmediablirary', 'oml', 'ui.py'), type + ] + return cmd + def selectFolder(data): ''' returns { @@ -23,6 +33,8 @@ def selectFolder(data): } ''' cmd = ['./ctl', 'ui', 'folder'] + if sys.platform == 'win32': + cmd = win32_ui('folder') p = subprocess.Popen(cmd, stdout=subprocess.PIPE, close_fds=True) stdout, stderr = p.communicate() path = stdout.decode('utf-8').strip() @@ -39,6 +51,8 @@ def selectFile(data): } ''' cmd = ['./ctl', 'ui', 'file'] + if sys.platform == 'win32': + cmd = win32_ui('file') p = subprocess.Popen(cmd, stdout=subprocess.PIPE) stdout, stderr = p.communicate() path = stdout.decode('utf-8').strip() From 8da17a33d3e328a98bc8efb02b4141d4f63a9aa8 Mon Sep 17 00:00:00 2001 From: j Date: Mon, 21 Jan 2019 10:28:08 +0530 Subject: [PATCH 7/8] ui sockets --- oml/server.py | 2 ++ oml/state.py | 1 + oml/ui_websocket.py | 67 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 oml/ui_websocket.py diff --git a/oml/server.py b/oml/server.py index 7a3f08d..f98ed7b 100644 --- a/oml/server.py +++ b/oml/server.py @@ -22,6 +22,7 @@ import setup import state import tasks import websocket +import ui_websocket import update import logging @@ -130,6 +131,7 @@ def run(): handlers = common_handlers + [ (r'/api/upload/', UploadHandler, dict(context=db.session)), (r'/api/', oxtornado.ApiHandler, dict(context=db.session)), + (r'/ui_socket', ui_websocket.Handler), (r'/ws', websocket.Handler), (r"(.*)", MainHandler), ] diff --git a/oml/state.py b/oml/state.py index 4768e7b..606a22b 100644 --- a/oml/state.py +++ b/oml/state.py @@ -13,6 +13,7 @@ tor = False update = False shutdown = False websockets = [] +uisockets = [] peers = {} changelog_size = None diff --git a/oml/ui_websocket.py b/oml/ui_websocket.py new file mode 100644 index 0000000..7efdddd --- /dev/null +++ b/oml/ui_websocket.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +# vi:si:et:sw=4:sts=4:ts=4 +import json + + +from tornado.websocket import WebSocketHandler +from tornado.ioloop import IOLoop + +from oxtornado import json_dumps + +import state +import settings +from websocket import trigger_event + +import logging +logger = logging.getLogger(__name__) + + +class Handler(WebSocketHandler): + + queue = [] + + def initialize(self, public=False): + self._public = public + + def check_origin(self, origin): + # allow access to websocket from site, installer and loader (local file) + return self.request.host in origin or \ + origin in ( + 'http://127.0.0.1:9841', + 'http://127.0.0.1:9842', + 'file://', + 'null' + ) + + def open(self): + if self.request.headers['origin'] not in ('null', 'file://', 'http://127.0.0.1:9842') \ + and self.request.host not in self.request.headers['origin']: + logger.debug('reject cross site attempt to open websocket %s', self.request) + self.close() + if self not in state.uisockets: + state.uisockets.append(self) + + #websocket calls + def on_message(self, message): + if self.queue: + action = self.queue.pop(0) + trigger_event(action, {'path': message}) + else: + print('no queue got:', message) + + def on_close(self): + if self in state.uisockets: + state.uisockets.remove(self) + + def post(self, message): + if self.ws_connection is None: + self.on_close() + else: + state.main.add_callback(lambda: self.write_message(message)) + +def trigger_ui(message): + for ws in state.uisockets: + try: + ws.post(message) + except: + logger.debug('failed to send to UI ws %s %s', ws, message, exc_info=True) From 7220fb4cdd6b9a67a9e4cdd9ce9ee7c0f7d350b8 Mon Sep 17 00:00:00 2001 From: j Date: Mon, 21 Jan 2019 10:39:08 +0530 Subject: [PATCH 8/8] bring to front --- oml/ui.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/oml/ui.py b/oml/ui.py index e7982e9..5c516c5 100644 --- a/oml/ui.py +++ b/oml/ui.py @@ -1,6 +1,6 @@ # encoding: utf-8 # vi:si:et:sw=4:sts=4:ts=4 -DEBUG = False +import sys try: from gi.repository import Gtk, GObject GObject.threads_init() @@ -10,6 +10,8 @@ except: import tkinter.filedialog use_Gtk = False +DEBUG = False + class GtkUI: def selectFolder(self, data): dialog = Gtk.FileChooserDialog(data.get("title", "Select Folder"), @@ -62,6 +64,11 @@ class GtkUI: class TkUI: def __init__(self): self.root = Tk() + if sys.platform == 'darwin': + self.root.lift() + self.root.call('wm', 'attributes', '.', '-topmost', True) + self.root.update() + self.root.after_idle(self.root.call, 'wm', 'attributes', '.', '-topmost', False) self.root.withdraw() # hiding tkinter window def selectFolder(self, data):