From cfb0337c69af8cacb5d64ae78e3c87d9794ed190 Mon Sep 17 00:00:00 2001 From: Zhao Zuohong Date: Sun, 5 Mar 2023 00:06:04 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Download=20path=20dialog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/__init__.py | 14 ++++++----- frontend/src/views/InputVideoNumber.vue | 2 +- main.py | 32 ++++++++++++++++++++++--- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/backend/__init__.py b/backend/__init__.py index 56d77f8..b6d0c83 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -1,11 +1,12 @@ from bottle import request, response, Bottle, static_file from manager import Manager from json import dumps -from pathlib import Path -from tkinter import filedialog as fd +from queue import SimpleQueue manager = Manager() app = Bottle() +action_queue = SimpleQueue() +path_queue = SimpleQueue() @app.get("/") @@ -37,8 +38,9 @@ def download(): return "OK" -@app.get("/path") +@app.post("/path") def get_path(): - path = fd.askdirectory() - manager.path = path - return path + path = request.json["path"] + action_queue.put(path) + manager.path = path_queue.get() + return manager.path diff --git a/frontend/src/views/InputVideoNumber.vue b/frontend/src/views/InputVideoNumber.vue index 5a8bf90..aaba165 100644 --- a/frontend/src/views/InputVideoNumber.vue +++ b/frontend/src/views/InputVideoNumber.vue @@ -20,7 +20,7 @@ function sendNVList() { } function get_path() { - axios.get("/path").then(({ data }) => { + axios.post("/path", { path: path.value }).then(({ data }) => { path.value = data; input.value.focus(); }); diff --git a/main.py b/main.py index dedc4f1..2c0bd9b 100755 --- a/main.py +++ b/main.py @@ -1,10 +1,36 @@ #!/usr/bin/env python3 + import webview -from backend import app +import platform +from os import _exit +from time import sleep +from backend import app, action_queue, path_queue + + +def select_download_path(window): + while True: + path = action_queue.get() + result = window.create_file_dialog(webview.FOLDER_DIALOG) + if result: + path_queue.put(result[0]) + else: + path_queue.put(path) + + +def on_closed(): + sleep(1) + _exit(0) + if __name__ == "__main__": - # Create a standard webview window window = webview.create_window( "badl - BiliBili Audio Downloader", app, width=500, height=700 ) - webview.start() + window.events.closed += on_closed + if os := platform.system() == "Linux": + gui = "gtk" + elif os == "Windows": + gui = "edgehtml" + else: + gui = "" + webview.start(gui=gui, func=select_download_path, args=(window,))