diff --git a/server/Pipfile b/server/Pipfile index 31f2eab..ca205cf 100644 --- a/server/Pipfile +++ b/server/Pipfile @@ -4,17 +4,19 @@ verify_ssl = true name = "pypi" [packages] -flask = "*" +Flask = "*" tk = "*" -flask-cors = "*" +Flask-Cors = "*" mutagen = "*" pymongo = "*" click = "*" requests = "*" watchdog = "*" progress = "*" -pillow = "*" +Pillow = "*" gunicorn = "*" +Flask-Cache = "*" +flask-caching = "*" [dev-packages] autopep8 = "*" diff --git a/server/Pipfile.lock b/server/Pipfile.lock index c4bc818..417b3ed 100644 --- a/server/Pipfile.lock +++ b/server/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "ac6887caf42c4ea723d7e1e9fc8a94cb42b2cd815c447eb2afd0f35a73f314e1" + "sha256": "0d44ec274b82567f0a7ec1f7c5011187bf9e5afe84fa58a17539da72a5c70996" }, "pipfile-spec": 6, "requires": { @@ -47,6 +47,23 @@ "index": "pypi", "version": "==2.0.2" }, + "flask-cache": { + "hashes": [ + "sha256:33187b3ddceeee233fe3db68ffcc118b5498e8ad28edde711bcbdcbf4924ce35", + "sha256:90126ca9bc063854ef8ee276e95d38b2b4ec8e45fd77d5751d37971ee27c7ef4", + "sha256:ae9d1ac4549517dfbc1f178ccc5429f61f836be3cc109a0b2481c98b3711c329" + ], + "index": "pypi", + "version": "==0.13.1" + }, + "flask-caching": { + "hashes": [ + "sha256:bcda8acbc7508e31e50f63e9b1ab83185b446f6b6318bd9dd1d45626fba2e903", + "sha256:cf19b722fcebc2ba03e4ae7c55b532ed53f0cbf683ce36fafe5e881789a01c00" + ], + "index": "pypi", + "version": "==1.10.1" + }, "flask-cors": { "hashes": [ "sha256:74efc975af1194fc7891ff5cd85b0f7478be4f7f59fe158102e91abb72bb4438", @@ -308,7 +325,7 @@ "sha256:f785375ca2b4e2192786f1e0d2a94c66900d12e780ebae1eccbbab85eb9a7054" ], "index": "pypi", - "version": "== 4.0.1" + "version": "==4.0.1" }, "requests": { "hashes": [ diff --git a/server/app/__init__.py b/server/app/__init__.py index 0a7d2bd..5cbdcf7 100644 --- a/server/app/__init__.py +++ b/server/app/__init__.py @@ -1,11 +1,22 @@ from flask import Flask from flask_cors import CORS +from flask_caching import Cache + +config = { + "CACHE_TYPE": "SimpleCache", + "CACHE_DEFAULT_TIMEOUT": 300 +} + +cache = Cache(config = config) def create_app(): app = Flask(__name__) CORS(app) + app.config.from_mapping(config) + cache.init_app(app) + from . import api app.register_blueprint(api.bp, url_prefix='/') diff --git a/server/app/api.py b/server/app/api.py index 0b7eb68..46ef3b9 100644 --- a/server/app/api.py +++ b/server/app/api.py @@ -1,17 +1,4 @@ -import os -from re import sub -import requests -import urllib -import time - - -from progress.bar import Bar -from mutagen.flac import MutagenError -from flask import Blueprint, request, send_from_directory - -from app.models import AllSongs, Folders, Artists -from app.configs import default_configs - +from app.models import Folders, Artists from app.helpers import ( all_songs_instance, convert_one_to_json, @@ -26,6 +13,19 @@ from app.helpers import ( run_fast_scandir ) +from app import cache + +import os +import requests +import urllib +import time + +from progress.bar import Bar +from mutagen.flac import MutagenError + +from flask import Blueprint, request, send_from_directory + + bp = Blueprint('api', __name__, url_prefix='') artist_instance = Artists() @@ -240,19 +240,28 @@ def getArtistData(): return {'artist': artist_obj_json, 'songs': songs, 'albums': getArtistAlbums()} -@bp.route("/") -def getFolderTree(): - start = time.time() - - req_dir = request.args.get('f') - last_id = request.args.get('last_id') - - if req_dir is not None: - requested_dir = os.path.join(home_dir, req_dir) - print(requested_dir) - else: +@bp.route("/f/") +@cache.cached() +def getFolderTree(folder: str = None): + if folder == "$home": requested_dir = home_dir + else: + try: + req_dir, last_id = folder.split('::') + print(req_dir) + except (ValueError): + req_dir = folder + last_id = None + + req_dir = req_dir.replace('|', '/') + + if req_dir: + dir_list = req_dir.split('/') + requested_dir = os.path.join(home_dir, *dir_list) + + print(requested_dir) + dir_content = os.scandir(requested_dir) folders = [] @@ -284,10 +293,7 @@ def getFolderTree(): for file in files: file['filepath'] = file['filepath'].replace(home_dir, '') - dir_content.close() - end = time.time() - print(end - start) - return {"requested": req_dir, "files": files[:25], "folders": folders} + return {"files": files, "folders": folders} @bp.route('/image//') diff --git a/src/components/FolderView/FolderList.vue b/src/components/FolderView/FolderList.vue index 8a6f245..9317ac4 100644 --- a/src/components/FolderView/FolderList.vue +++ b/src/components/FolderView/FolderList.vue @@ -21,10 +21,7 @@ diff --git a/src/components/LeftSidebar/Navigation.vue b/src/components/LeftSidebar/Navigation.vue index ce0f37c..f5f89e9 100644 --- a/src/components/LeftSidebar/Navigation.vue +++ b/src/components/LeftSidebar/Navigation.vue @@ -45,7 +45,7 @@
- +