dockerize and fix relative URLs for /slideshow path prefix
This commit is contained in:
8
Dockerfile
Normal file
8
Dockerfile
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
FROM python:3.12-slim
|
||||||
|
WORKDIR /app
|
||||||
|
COPY requirements.txt .
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
COPY . .
|
||||||
|
RUN mkdir -p Pictures
|
||||||
|
EXPOSE 5000
|
||||||
|
CMD ["python", "Slideshow.py"]
|
||||||
@@ -19,7 +19,7 @@ downloads = {}
|
|||||||
def slideshow():
|
def slideshow():
|
||||||
raw_query = request.args.get('tags', '').strip()
|
raw_query = request.args.get('tags', '').strip()
|
||||||
results = search_images(raw_query)
|
results = search_images(raw_query)
|
||||||
image_urls = [f'/pictures/{r["filename"]}' for r in results]
|
image_urls = [f'pictures/{r["filename"]}' for r in results]
|
||||||
post_urls = [r['post_url'] for r in results]
|
post_urls = [r['post_url'] for r in results]
|
||||||
tags_list = [r['tags'].split() for r in results]
|
tags_list = [r['tags'].split() for r in results]
|
||||||
active_tags = raw_query.split() if raw_query else []
|
active_tags = raw_query.split() if raw_query else []
|
||||||
@@ -90,4 +90,4 @@ def download_progress(job_id):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(debug=True)
|
app.run(host='0.0.0.0', debug=False)
|
||||||
|
|||||||
15
docker-compose.yml
Normal file
15
docker-compose.yml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
services:
|
||||||
|
diashow:
|
||||||
|
build: .
|
||||||
|
container_name: diashow
|
||||||
|
restart: unless-stopped
|
||||||
|
env_file: .env
|
||||||
|
volumes:
|
||||||
|
- ./Pictures:/app/Pictures
|
||||||
|
- ./booru.db:/app/booru.db
|
||||||
|
networks:
|
||||||
|
- caddy
|
||||||
|
|
||||||
|
networks:
|
||||||
|
caddy:
|
||||||
|
external: true
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
<body>
|
<body>
|
||||||
<h1>Booru Slideshow</h1>
|
<h1>Booru Slideshow</h1>
|
||||||
|
|
||||||
<form id="tag-form" method="get" action="/">
|
<form id="tag-form" method="get" action="">
|
||||||
<input type="text" name="tags" id="tag-input" placeholder="e.g. swimsuit blonde_hair" value="{{ tag_query }}" />
|
<input type="text" name="tags" id="tag-input" placeholder="e.g. swimsuit blonde_hair" value="{{ tag_query }}" />
|
||||||
<button type="submit">Search</button>
|
<button type="submit">Search</button>
|
||||||
<select name="_site" id="site-select">
|
<select name="_site" id="site-select">
|
||||||
@@ -94,7 +94,7 @@
|
|||||||
const site = document.getElementById('site-select').value;
|
const site = document.getElementById('site-select').value;
|
||||||
const form = document.createElement('form');
|
const form = document.createElement('form');
|
||||||
form.method = 'post';
|
form.method = 'post';
|
||||||
form.action = '/download';
|
form.action = 'download';
|
||||||
[['tags', tags], ['site', site]].forEach(([k, v]) => {
|
[['tags', tags], ['site', site]].forEach(([k, v]) => {
|
||||||
const inp = document.createElement('input');
|
const inp = document.createElement('input');
|
||||||
inp.type = 'hidden'; inp.name = k; inp.value = v;
|
inp.type = 'hidden'; inp.name = k; inp.value = v;
|
||||||
@@ -110,14 +110,14 @@
|
|||||||
const bar = document.getElementById('progress-bar');
|
const bar = document.getElementById('progress-bar');
|
||||||
const label = document.getElementById('progress-label');
|
const label = document.getElementById('progress-label');
|
||||||
box.style.display = 'block';
|
box.style.display = 'block';
|
||||||
const es = new EventSource(`/download/progress/${job_id}`);
|
const es = new EventSource(`download/progress/${job_id}`);
|
||||||
es.onmessage = (e) => {
|
es.onmessage = (e) => {
|
||||||
const d = JSON.parse(e.data);
|
const d = JSON.parse(e.data);
|
||||||
if (d.error) { label.textContent = 'Error: ' + d.error; es.close(); return; }
|
if (d.error) { label.textContent = 'Error: ' + d.error; es.close(); return; }
|
||||||
const pct = d.total > 0 ? Math.round(d.done / d.total * 100) : 0;
|
const pct = d.total > 0 ? Math.round(d.done / d.total * 100) : 0;
|
||||||
bar.style.width = pct + '%';
|
bar.style.width = pct + '%';
|
||||||
if (d.finished) {
|
if (d.finished) {
|
||||||
label.innerHTML = `Done! ${d.done} images. <a href="/?tags={{ tag_query }}" style="color:#8b8">Refresh</a>`;
|
label.innerHTML = `Done! ${d.done} images. <a href="?tags={{ tag_query }}" style="color:#8b8">Refresh</a>`;
|
||||||
es.close();
|
es.close();
|
||||||
} else {
|
} else {
|
||||||
label.textContent = d.total > 0 ? `${d.done} / ${d.total}` : 'Fetching post list...';
|
label.textContent = d.total > 0 ? `${d.done} / ${d.total}` : 'Fetching post list...';
|
||||||
|
|||||||
Reference in New Issue
Block a user