Added import btn, Catalog overide, started server backend

This commit is contained in:
Raelon Masters
2020-08-07 12:25:33 -04:00
parent 30f60e4ec3
commit 5d97c066a9
9 changed files with 659 additions and 69 deletions

View File

@@ -51,6 +51,7 @@ class Catalogue:
self.file_list.append(self.scan_folder(_path))
else:
self.file_list.append(_path)
print(_path+"\n")
def filter_books(self):
"""
@@ -264,18 +265,24 @@ class Catalogue:
c = set.difference(a, b)
return c
def import_books(self, list=None):
def import_books(self, list=None, **kwargs):
"""
Main entry point for import operations.
Gets a list of new files via compare_shelf_current.
Iterates over list and inserts new books into database.
"""
# TODO Refactor metadata extraction into process_book \
# call to more easily handle additional formats
try:
fsocket = kwargs['socket']
except KeyError:
fsocket = '/dev/null'
book_list = self.compare_shelf_current()
db = Storage(self.config)
for book in book_list:
book = self.process_by_filetype(book)
with open(fsocket, 'w') as _socket:
_socket.write(book[0])
_socket.close()
breakpoint()
db.insert_book(book)
inserted = db.commit()
if inserted is not True:

View File

@@ -0,0 +1,55 @@
from pathlib import Path
from .config import Config
from .storage import Storage
from .library import Catalogue
import asyncio
import os
import websockets
class ACatalogue(Catalogue):
"""
Aynchronous overide of library.Catalogue,
: TODO : Complete or discard this overide
"""
def __init__(self):
super().__init__(Config(Paths.cwd().parent))
async def scan_folder(self, _path=None):
"""
Scan folder by _path, allows recurisive scanning
"""
if _path is not None:
folder = _path
elif os.path.isdir(str(self.root_dir) + "/" + self.book_folder):
folder = str(self.root_dir) + "/" + self.book_folder
else:
folder = self.book_folder
for f in os.listdir(folder):
_path = os.path.abspath(folder + "/" + f)
if os.path.isdir(_path.strip() + "/"):
self.file_list.append(self.scan_folder(_path))
else:
self.file_list.append(_path)
await asyncio.sleep(0.001)
print(_path+"\n")
async def import_books(self, **kwargs):
"""
Async overide of import_books
"""
fsocket = kwargs['socket']
book_list = self.compare_shelf_current()
db = Storage(self.config)
for book in book_list:
book = self.process_by_filetype(book)
with open(fsocket, 'w') as _socket:
_socket.write(book[0])
_socket.close()
await db.insert_book(book)
inserted = db.commit()
if inserted is not True:
print(inserted)
if input("Continue ? y/n") == "y":
pass
db.close()

View File

@@ -1,13 +1,11 @@
#!/usr/bin/python
#!/usr/bin/env python3
import os
import time
import asyncio
import websockets
from .config import Config
from .storage import Storage
# config = Config()
# Storage = Storage()
class InitFiles:
"""First run file creation operations"""
@@ -34,51 +32,24 @@ class InitFiles:
f.close()
class BookDisplay:
"""All functions related to displaying book information in the HTML UI"""
class Server:
"""
Main Server Container
:TODO: Document this
"""
def __init__(self, **kwargs):
"""
Initialize class variables
:return: None
"""
self.books_per_page = None
self.current_page = 0
self.thumbnail_size = [200, 300]
self.thumbnail_scale = 1
self.total_pages = None
def __init__(self):
self.loop = asyncio.get_event_loop()
self.instance = None
async def entrypoint(self, websocket, path):
_str = await websocket.recv()
greeting = f"{_str}"
await websocket.send(greeting)
async def start(self):
try:
self.screen_size = kwargs["screen_size"]
self.instance = await websockets.serve(self.entrypoint, "localhost", 1337)
return True
except Exception:
self.screen_size = [900, 600]
def nextPage(self):
"""
## TODO Remove me
Goto next book page
:return: new current_page
"""
self.current_page += 1
return self.current_page
def previousPage(self):
"""
## TODO Remove me
Goto previous book page
:return: new current_page
"""
self.current_page -= 1
return self.current_page
def booksPerPage(self, screen_size):
"""
## TODO Remove me
Set books per page
:param screen_size: Array containing x,y pixel sizes
:return: self.books_per_page
"""
x = (self.thumbnail_size[0] * self.thumbnail_scale) + 10
y = (self.thumbnail_size[1] * self.thumbnail_scale) + 10
self.books_per_page = int(self.screen_size[0] // x) * int(
self.screen_size[1] // y
)
raise

3
src/backend/pyShelf.py Executable file
View File

@@ -0,0 +1,3 @@
#!/usr/bin/env python3
import websockets