mirror of
https://github.com/th3r00t/pyShelf.git
synced 2026-04-28 01:59:35 -04:00
On demand import functionality, held together with ductape and bubblegum.
This commit is contained in:
@@ -1,3 +1,13 @@
|
||||
|
||||
async function WebSocketInterface(host) {
|
||||
let socket = new WebSocket(host)
|
||||
socket.onopen = function(e) { console.log('Connected') }
|
||||
socket.onmessage = function (rcvd){
|
||||
rx_msg(rcvd.data)
|
||||
}}
|
||||
async function rx_msg(rcvd) { console.log('msg :: '+rcvd) }
|
||||
async function tx_msg(socket, msg) { socket.send(msg) }
|
||||
|
||||
$(document).ready(function(){
|
||||
function customlog(outstream) {
|
||||
/* Gather my variables and output them */
|
||||
@@ -171,16 +181,9 @@ $(document).ready(function(){
|
||||
$('#pop_over_0').dialog("open");
|
||||
});
|
||||
$(document).on('click', '.logout-btn', function(){window.location.href = '/logout'});
|
||||
|
||||
//Web Socket Call
|
||||
$(document).on('click', '.import-btn', async function(){
|
||||
$.ajax({
|
||||
type: "GET", url: "/live", data: {hook: 'import_books'},
|
||||
success: function (response) {
|
||||
},
|
||||
error: function (response) {
|
||||
customlog(["Failure", response]);
|
||||
}
|
||||
});
|
||||
let connection = await ImportBooks(server);
|
||||
popover.html('<div id="psout" class="container">');
|
||||
let psout = $('#psout')
|
||||
psout.append('<div class="rox"><div class="col import_status">Importing Books</div></div>')
|
||||
@@ -192,6 +195,16 @@ $(document).ready(function(){
|
||||
value: false
|
||||
});
|
||||
$(".progressbar").append("</div>")
|
||||
$.ajax({
|
||||
type: "GET", url: "/live", data: {hook: 'import_books'},
|
||||
success: async function (response,sock) {
|
||||
customlog(["Backend Reports websocket server READY"])
|
||||
$('.progressbar').progressbar({ value: true })
|
||||
},
|
||||
error: function (response) {
|
||||
customlog(["Failure", response.data]);
|
||||
}
|
||||
});
|
||||
});
|
||||
$('#coll_button').on('click', function(){
|
||||
var isopen = $('#pop_over_0').dialog("isOpen");
|
||||
@@ -285,59 +298,3 @@ function resize_search(win_width){
|
||||
$('.search_string').val("Search");
|
||||
}
|
||||
}
|
||||
|
||||
function OpenSocket(address) {
|
||||
return new Promise(resolve => {
|
||||
const connection = new WebSocket(address);
|
||||
connection.onopen = function(e){
|
||||
console.log('--[ Connection Established ]')
|
||||
ping(connection)
|
||||
};
|
||||
connection.onmessage = function(rcvd){
|
||||
sock_rx(rcvd)
|
||||
};
|
||||
resolve(connection);
|
||||
});
|
||||
}
|
||||
|
||||
function ImportBooks(address) {
|
||||
return new Promise(resolve => {
|
||||
const connection = new WebSocket(address);
|
||||
connection.onopen = function(e){
|
||||
sock_tx(connection,'importBooks')
|
||||
};
|
||||
connection.onmessage = function(rcvd){
|
||||
sock_rx(rcvd)
|
||||
};
|
||||
resolve(connection);
|
||||
});
|
||||
}
|
||||
|
||||
async function PyshelfServer(address){
|
||||
console.log("--[ Starting Connection ]")
|
||||
return await OpenSocket(address)
|
||||
}
|
||||
function sock_rx(rcvd) {
|
||||
if (rcvd.data == 'pong') { pong(rcvd) }
|
||||
else if (rcvd.data == 'complete') {
|
||||
$('.progressbar').progressbar("option", "value", "True");
|
||||
$('.import_status').html('Import Complete')
|
||||
console.log(rcvd.data)
|
||||
}
|
||||
else { console.log("<<[rx] :"+rcvd.data) }
|
||||
}
|
||||
function sock_tx(connection, msg) {
|
||||
connection.send(msg);
|
||||
}
|
||||
function sock_status(connection) {
|
||||
let buffered = connection.bufferedAmmount;
|
||||
let ready = connection.readyState;
|
||||
return [buffered, ready];
|
||||
}
|
||||
function ping(connection) {
|
||||
connection.send('ping');
|
||||
console.log("[ping]>>");
|
||||
}
|
||||
function pong(rcvd) {
|
||||
console.log("<<["+rcvd+"]")
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import time
|
||||
from base64 import b64decode, b64encode
|
||||
from pathlib import Path
|
||||
|
||||
import websockets
|
||||
from backend.lib.config import Config
|
||||
from backend.lib.pyShelf import Server
|
||||
from django.conf import settings
|
||||
@@ -384,7 +385,7 @@ def collections_list():
|
||||
return list(set(collection_key))
|
||||
|
||||
|
||||
def live(request, **kwargs):
|
||||
async def live(request, **kwargs):
|
||||
"""
|
||||
Respond to live requests. Primarily used as a response object for Ajax calls
|
||||
:param GET['hook']: collection_listing, book_details, register
|
||||
@@ -411,33 +412,53 @@ def live(request, **kwargs):
|
||||
return JsonResponse({"data": html})
|
||||
|
||||
elif hook == "import_books":
|
||||
"""TODO: Spawn websocket server"""
|
||||
breakpoint()
|
||||
###################################################
|
||||
# async def responder(socket): #
|
||||
# await catalogue.import_books(socket=socket) #
|
||||
# return JsonResponse({"data": None}) #
|
||||
# pass #
|
||||
# asyncio.run(responder(None)) #
|
||||
###################################################
|
||||
def test_connection(host):
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
||||
s.connect(host)
|
||||
s.sendall(b"ping")
|
||||
data = s.recv(1024)
|
||||
return data
|
||||
_test_count = 0
|
||||
await Server(Path.absolute(Path.cwd().parent)).start()
|
||||
await asyncio.sleep(1)
|
||||
|
||||
async def test_connection(host, counter):
|
||||
async with websockets.connect(f'ws://{host[0]}:{host[1]}') as _s:
|
||||
await _s.send("ping")
|
||||
data = await _s.recv()
|
||||
counter = counter + 1
|
||||
if data == "pong":
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
async def runImport(host):
|
||||
async with websockets.connect(f'ws://{host[0]}:{host[1]}') as _s:
|
||||
await _s.send("importBooks")
|
||||
data = await _s.recv()
|
||||
if data == "complete":
|
||||
return JsonResponse({"data": data})
|
||||
else:
|
||||
return False
|
||||
|
||||
_host = ("127.0.0.1", 1337)
|
||||
_test_count = 0
|
||||
try:
|
||||
_server_response = test_connection(_host)
|
||||
if await test_connection(_host, _test_count):
|
||||
config.logger.info("Connection Successful")
|
||||
await runImport(_host)
|
||||
return JsonResponse({"data": "Response sent"}, status=200)
|
||||
except ConnectionRefusedError as e:
|
||||
config.logger.info(e)
|
||||
if e.errno == 111:
|
||||
request.server = Server(Path.absolute(Path.cwd().parent)).start()
|
||||
await Server(Path.absolute(Path.cwd().parent)).start()
|
||||
if await test_connection(_host, _test_count):
|
||||
return JsonResponse({"data": "Response sent"}, status=200)
|
||||
elif not await test_connection(_host, _test_count) & _test_count >=4:
|
||||
await Server(Path.absolute(Path.cwd().parent)).start()
|
||||
await test_connection(_host, _test_count)
|
||||
else:
|
||||
return JsonResponse({"data": "Websocket Failed Testing"}, status=401)
|
||||
|
||||
else: return JsonResponse(err_txt, status=404)
|
||||
|
||||
return JsonResponse({"data": "Response sent"}, status=200)
|
||||
|
||||
|
||||
def book_details(book):
|
||||
return {
|
||||
'title': book.title,
|
||||
|
||||
Reference in New Issue
Block a user