deemix-gui-pyweb/server.py
2020-04-09 16:06:33 +02:00

97 lines
2.6 KiB
Python

import json
import os
import webbrowser
from functools import wraps
from flask import Flask, url_for, render_template, jsonify, request, make_response
import webview
import deemix.app.main as app
class CustomFlask(Flask):
jinja_options = Flask.jinja_options.copy()
jinja_options.update(dict(
block_start_string='$$',
block_end_string='$$',
variable_start_string='$',
variable_end_string='$',
comment_start_string='$#',
comment_end_string='#$',
))
gui_dir = os.path.join(os.path.dirname(__file__), 'public') # development path
if not os.path.exists(gui_dir): # frozen executable path
gui_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'public')
server = CustomFlask(__name__, static_folder=gui_dir, template_folder=gui_dir)
server.config['SEND_FILE_MAX_AGE_DEFAULT'] = 1 # disable caching
@server.route('/')
def landing():
return render_template('index.html', token=webview.token)
@server.route('/init', methods=['POST'])
def initialize():
can_start = app.initialize()
if can_start:
response = {'status': 'ok'}
else:
response = {'status': 'error'}
return jsonify(response)
@server.route('/mainsearch', methods=['POST'])
def mainsearch():
data = json.loads(request.data)
return jsonify(app.mainSearch(data['term']))
@server.route('/search', methods=['POST'])
def search():
data = json.loads(request.data)
result = app.search(data['term'], data['type'], data['start'], data['nb'])
result['type'] = data['type']
return jsonify(result)
@server.route('/download', methods=['POST'])
def download():
data = json.loads(request.data)
app.downloadLink(data['url'])
return jsonify({})
# Example code leftover, could be usefull later on
@server.route('/choose/path', methods=['POST'])
def choose_path():
dirs = webview.windows[0].create_file_dialog(webview.FOLDER_DIALOG)
if dirs and len(dirs) > 0:
directory = dirs[0]
if isinstance(directory, bytes):
directory = directory.decode('utf-8')
response = {'status': 'ok', 'directory': directory}
else:
response = {'status': 'cancel'}
return jsonify(response)
@server.route('/fullscreen', methods=['POST'])
def fullscreen():
webview.windows[0].toggle_fullscreen()
return jsonify({})
@server.route('/open-url', methods=['POST'])
def open_url():
url = request.json['url']
webbrowser.open_new_tab(url)
return jsonify({})
@server.route('/do/stuff', methods=['POST'])
def do_stuff():
result = app.do_stuff()
if result:
response = {'status': 'ok', 'result': result}
else:
response = {'status': 'error'}
return jsonify(response)
def run_server():
server.run(host='127.0.0.1', port=33333, threaded=True)
if __name__ == '__main__':
run_server()